当前位置:文档之家› 员工信息管理系统(数据结构)

员工信息管理系统(数据结构)

员工信息管理系统课程设计报告系别:计算机与信息工程系班级: B080501*名:***学号: B********指导教师:***课设时间:2010-6-21到2010-6-25摘要员工信息管理系统属于信息管理系统。

员工信息管理是每个公司不可缺少的。

系统用C程序开发,主要在于建立好一个合适的数据结构,并要求程序简洁实用。

本系统利用C语言简洁、灵活,数据结构丰富等特点,编写适合公司使用的系统。

整个系统使用起来也比较方便,入手简单,操作方便。

论文主要介绍了程序设计过程、设计方案以及测试过程,重点讲解了设计过程中的思想,技术解决方案等等。

关键字:员工信息管理,C程序,数据结构前言 (3)第1章课设题目 (4)第2章开发运行环境及相关知识 (4)第3章程序总体设计 (5)3.1 主要功能模块 (5)3.2 数据结构 (6)第4章程序详细设计及实现 (7)4.1 输入函数 (7)4.2 排序函数 (7)4.3 显示函数 (7)4.4 查找函数 (7)4.5更改函数 (8)4.6 删除函数 (8)4.7 主函数 (8)4.8 其他函数 (9)第5章系统功能测试 (9)5.1 系统主界面 (9)5.2 输入数据 (9)5.3 显示数据 (10)5.4 信息排序 (10)5.5 更改信息 (11)5.6 删除信息 (11)第6章课设总结 (12)第7章程序清单 (13)参考文献 (31)前言本课程设计旨在理论学习和基础实验的基础上,开发规模较大的程序,掌握应用计算机编程解决实际问题的基本方法,熟悉C程序开发的全过程,掌握数据结构的使用方法,熟练应用各种数据结构。

本次任务是根据给定的数据和程序,应用单向链表处理一系列公司员工的信息。

通过整个程序开发的过程,提高综合应用C语言的能力、编程和调试能力,为进一步学习相关专业课程创建较扎实的理论基础和实践基础。

报告将分6个章节来详细讲述本次课设题目的开发过程。

第1章主要描述课设的题目及要求;第2章来介绍程序开发运行环境;第3章介绍程序主体设计,网络程序概要;第4章是对程序进行详细分析,对各个函数进行详细描述,并阐述程序实现技术等信息;第5章为测试过程,主要用测试过程中的图片来表述最终信息;第6章也是最后一章,为本次实践活动的心得体会。

第1章课设题目1.1课设题目每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。

系统能够完成员工信息的查询、更新、插入、删除、排序等功能。

1.2基本要求(1)每条记录内,包括员工的个人信息,有:编号、姓名、性别、出生年月、学历、职务、电话、住址等;(2)按不同关键字(如编号,姓名等),对所有员工的信息进行排序;(3)按照指定条件查找某员工所有信息;(4)按编号对某个员工的信息进行修改;(5)加入新员工的信息,并实现排序;(6)按编号删除已离职的员工的信息。

1.3 其他需求程序除需完成基本功能外,程序源代码还应具有良好的编程结构和适当的注释,运行界面清晰,提示内容明确,易于操作。

第2章开发运行环境及相关知识2.1 运行环境软件环境:Windows 2000,Windows XP和Windows NT4.0。

2.2开发工具微软公司的Microsoft Visual C++ 6.0。

2.3开发工具简介公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。

虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。

所以实际中,更多的是以Visual C++6.0为平台。

Visual C++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。

Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。

这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。

第3章程序总体设计3.1 主要功能模块依据程序的数据结构和功能,遵照“自顶向下”原则,描述该程序的层次结构,在总体上包括数据的录入、增加、删除、查找、更改和数据的排序等功能模块。

图3-1 程序主体3.2 数据结构依据给定的数据格式,个人信息由九个字段来组成,即编号、姓名、性别、生日、学历、职务、电话和住址,外加一个判断关键字。

本课程设计根据功能需求,使用线性结构来组织数据,因为数据占据空间比较大,要对表中某项数据进行操作,所以使用链表比较方便。

结构体定义:typedef struct Stuff{char number[10]; //编号char name[10]; //姓名char sex[8]; //性别char birthday[10]; //生日char degree[20]; //学历char business[20]; //职务char phone[15]; //电话char place[50]; //住址char con[50]; //判断关键字struct Stuff *next; //指针域} Stuff;信息存储:信息存储结构如图3-2图 3-2 链式存储结构第4章程序详细设计及实现4.1 输入函数函数原型:Stuff *App(Stuff *head);函数功能:通过输入各项数据给数据元素,来建立一个数据表。

算法要点:(1)用循环控制输入记录;(2)为每一结构体数据项输入数据;(3)返回输入记录数。

4.2 排序函数函数原型:void Sort(Stuff *head);void Scpy(char *p,char *q);int Sel(char ch,Stuff *p,Stuff *q);函数功能:按照指定关键字对员工信息进行排序。

算法要点:(1)比较法对信息进行排序;(2)使用交换函数,对每项信息进行交换。

4.3 显示函数函数原型:void Show(Stuff *head);函数功能:输出表中所有节点的信息。

算法要点:使用循环输出所有信息。

程序清单:4.4 查找函数函数原型:Stuff *Search(Stuff *head);函数功能:按照指定关键字,对相应员工信息进行查找。

算法要点:(1)输入字段和信息相应字段的比较;4.5更改函数函数原型:Stuff *Change(Stuff *head,char n[10]);函数功能:输入员工编号,查找到员工信息,对其信息进行更新。

算法要点:(1)信息查找;(2)信息重新录入及保存。

4.6 删除函数函数原型:Stuff *Del(Stuff *head,char n[10]);函数功能:查找到要删除员工的相应信息,并将其从表中永久的删除。

算法要点:(1)按关键字查找信息;(2)链表中删除节点信息,并释放节点空间。

4.7 主函数主函数主要是调用以上的子函数,用开关语句进行选择性的调用。

大致程序如下:switch(Menu()){case 1: 调用函数语句;break;case 2: 调用函数语句;break;……case 0:退出程序语句;default:printf("输入错误,请重新输入!\n");}4.8 其他函数其他函数主要起到辅助功能,如菜单函数,主要起到引导作用;释放空间函数,主要用于释放已经删除节点的信息,或者释放整个链表的节点信息。

菜单函数原型:char Menu();释放函数原型:void Fre(Stuff *head);第5章系统功能测试5.1 系统主界面图5-1 系统主界面5.2 输入数据(1)输入操作字符1;(2)输入员工信息;(3)输入“#”字符结束输入。

图5-2 输入操作5.3 显示数据图5-3 显示信息5.4 信息排序5.5 更改信息图5-5 更正信息5.6 删除信息图5-6删除信息第6章课设总结如何才能真正的去掌握编程的方法,如何才能真正的去理解书上的理论信息,理论知识用于实践才是最终的目的。

通过本次数据结构课程设计,我对数据结构的理论知识有了更为直接的认识,从实际中获得了很多宝贵的经验,这些对我以后做程序开发将是一笔很宝贵的财富。

我有以下两点感触:(1)没有解决不了的问题。

这个程序在课设前一周就开始着手编写,中间遇到了不少的问题,由于以前写过类似的程序,所以对其中的一些错误很是敏感,也通过不少的途径来解决了问题。

比如,通过和网上的一些程序代码的对比,解决了自己程序中输出乱码的问题。

(2)注重团队协作。

虽然此次课设是完全个人完成的,但是我还是要强调团队的重要性,因为我们以后走项的程序开发的道路上,没有单枪匹马的,都是一个团队协作完成的,所以今后的程序开发过程中,尽可能的和他人合作。

万事开头难,学好编程,我还有很长的路要走。

第7章程序清单#include "stdio.h"#include "stdlib.h"#include "windows.h " //清屏函数头文件#include "string.h"typedef struct Stuff{char number[10]; //编号char name[10]; //姓名char sex[8]; //性别char birthday[10]; //生日char degree[20]; //学历char phone[15]; //电话char place[50]; //住址char con[50]; //判断关键字struct Stuff *next;}Stuff;char Menu(); //菜单函数Stuff *App(Stuff *head); //添加函数void Sort(Stuff *head); //排序函数Stuff *Search(Stuff *head); //查找函数Stuff *Change(Stuff *head,char n[10]); //更改函数void Scpy(char *p,char *q); //排序中用于交换员工信息Stuff *Del(Stuff *head,char n[10]); //删除函数int Sel(char ch,Stuff *p,Stuff *q); //判断排序及关键字专用函数void Show(Stuff *head); //输出函数void Fre(Stuff *head); //释放函数int n=1; //定义全局变量,实现人数统计char Menu(void){int ch;printf("---------------------------菜单-------------------------\n");printf(" 1.添加员工信息\n");printf(" 2.员工信息排序\n");printf(" 3.查找员工信息\n");printf(" 4.输出员工信息\n");printf(" 5.更改员工信息\n");printf(" 6.删除员工信息\n");printf(" 0.退出\n");printf("--------------------------------------------------------\n");printf(“请选择你的操作:”);scanf(" %d",&ch);return ch;}//添加成员函数Stuff *App(Stuff *head){while(n){p=(Stuff *)malloc(sizeof(Stuff)); //申请结构体空间if(p==NULL){printf("空间不足,自动退出系统!\n");exit(0);}p->next =NULL; //指针域为空printf("请输入第%d名员工:\n",n);printf(" 编号| 姓名| 性别| 出生年月| 学历| 职务| 电话| 住址:\n");getchar();scanf("%s",p->number );if(strcmp(p->number,"#")){++n;scanf("%s%s%s%s%s%s%s",p->name ,p->sex ,p->birthday ,p->degree ,p->bu siness ,p->phone ,p->place );p->con[0]='\0'; //防止后面判断出现随机值head=p;else{while(q->next !=NULL)q=q->next ;q->next =p;}q=p; //尾插法}if(!strcmp(p->number ,"#")){free(p); //完成添加,释放多余空间break;}}return head;}//排序函数void Sort(Stuff *head)char ch;Stuff *p,*q,*r;while(1){printf("请选择排序条件:1.编号|2.姓名|0.退出\n");getchar();scanf("%c",&ch);if(ch=='0')break;if(ch<'1'||ch>'2'){printf("输入错误,请重新输入!\n");continue;}p=head;while(p->next!=NULL) //选择排序{q=p->next;r=p;while(q!=NULL)if(Sel(ch,r,q)) //调用判断函数r=q;q=q->next;}if(r!=p) //交换信息{Scpy(r->number,p->number);Scpy(r->name,p->name);Scpy(r->sex,p->sex);Scpy(r->birthday,p->birthday);Scpy(r->degree,p->degree);Scpy(r->business,p->business);Scpy(r->phone,p->phone);Scpy(r->place,p->place);}p=p->next;}Show(head); //输出}}//交换函数void Scpy(char *p,char *q){char c[50];strcpy(c,p);strcpy(p,q);strcpy(q,c);}//判断函数int Sel(char ch,Stuff *p,Stuff *q){switch(ch) //实现各个关键字查找{case '1':returnstrcmp(q->number ,p->number )<0||strcmp(q->con ,p->number )==0 ;case '2':return strcmp(q->name ,p->name )<0||strcmp(q->con ,p->name )==0 ;default :}}//查找函数Stuff *Search(Stuff *head){Stuff *p=NULL,*q;int flag; //查找判断char ch,sh; //两个控制变量q=&a;while(1){printf("请输入要查找的条件:1.编号2.姓名0.退出\n");scanf(" %c",&ch);if(ch=='0')break;if(ch<'1'||ch>'2'){printf("输入错误,请重新输入!\n");continue;getchar();printf("请输入:");gets(q->con);p=head; //指向表头flag=0;while(p!=NULL){if(strcmp(q->con,p->number)==0||strcmp(q->con,p->name)==0){printf("员工信息如下:\n");printf(" 编号| 姓名| 性别| 出生年月| 学历| 职务| 电话| 住址\n%s \t%s \t%s \t%s \t%s \t%s \t%s \t%s\n",p->number ,p->name ,p->sex ,p->birthday ,p->degree ,p->business ,p-> phone ,p->place );printf("是否需要:1.更改2.删除3.继续\n");scanf(" %c",&sh);if(sh=='1')Change(head,p->number); //调用更改函数else if(sh=='2')。

相关主题