《数据结构》课程设计报告设计题目职工信息管理系统专业班级姓名学号完成日期目录1. 问题描述 (3)2. 系统设计 (3)3. 数据结构与算法描述 (5)4. 测试结果与分析 (15)5. 总结 (20)6. 参考文献 (20)附录程序源代码 (20)职工信息管理系统1. 问题描述试设计一个职工信息管理系统。
要求可对职工信息进行插入、删除、查找、排序、输出等功能,职工对象包括编号、姓名、性别、出生年月、学历、工作年月、基本工资、电话、家庭住址等等。
2. 系统设计2.1 设计目标随着计算机产业的不断发展和信息时代的到来,各个企业和部门对员工的信息管理也已经走上了数字化的阶段,尤其是利用微机对工资的管理已经在各个企业单位起着越来越多的作用。
以前的财会人员完全是靠手写来完成员工的各种记录,每天都忙碌于各种繁多的票据之间,这种工作繁重复杂,容易出错,不易修改,所以使用一个好的管理系统对减轻管理人员的工作量是很有帮助的,也是一个企业发展不可缺少的基础,它的开发应用简单而不失一般性,操作方便,功能强大,系统化,规范化,自动化,而且经济使用的职工管理系统已经成为了各个企业和部门离不开的电脑软件。
本系统实现的操作和功能如下:1)职工信息表的建立:根据职工提供的信息,按单链表的方法建立职工信息表;2)职工信息的添加:根据公司的需要,增加新的职工,必须把职工的基本信息写入职工信息表,方便公司管理;3)职工信息的查询:根据公司需要,查找某一个职工的信息,可以按姓名或编号查找,将都显示职工的全部信息。
4)职工信息的修改:根据公司或职工需要,如果信息需要修改,可对职工的人一个信息进行更改。
5)职工信息的排序:根据公司需要,可对职工进行排序;6)职工信息的删除:根据公司需要,若职工不在公司工作,可对其信息删除,以及时更新职工信息表;7)职工信息的输出:根据公司需要,若要浏览职工信息,可对职工的全部信息输出,方便观看。
2.2 设计思想职工信息表用单链表作为存储结构,且为了查找方便,职工信息应有序。
为了查找方便,职工的线性表按职工编号有序,并且,为了插入和删除方便,应以链表作为存储结构。
通过c++,使系统实现建表、增加信息、删除信息、查找信息、排序、输出等功能,而且提供一个界面来调用各个功能,并使界面尽可能清晰美观。
2.3 系统模块划分3. 数据结构与算法描述3.2职工信息表的建立,将一个职工结点按其编号的次序插入有序职工链表的相应位置,以保持链表的有序性。
基本思想是使用尾插法建立新的结点。
建表算法如下描述://用尾插法建立职工链表函数void CreateList(NodePtr& head){//尾插法建立带头结点的职工链表算法NodePtr rear;rear=new ListNode;int flag=0;//结束标志置0rear=head;//尾指针初始指向头结点while(flag==0){NodePtr p;p=new ListNode;p->link=NULL;cout<<"请输入:";cout<<"编号姓名性别出生日期学历工作年月职务基本工资电话地址\n";cout<<"--------------------------------------------\n";cin>>p->num>>p->name>>p->sex>>p->birthday>>p->education>>p->working_d ay;cin>>p->post>>p->base_pay>>p->phone>>p->addr;rear->link=p;//新结点连接到尾结点之后rear=p;//尾结点指向新结点cout<<"结束建表吗?(0/1):";cin>>flag;}filesave(head);}3.2职工信息的输出void PrintList(NodePtr head){NodePtr p;p=new ListNode;p=head->link;//因为链表带头结点,使p指向链表开始接点cout<<"编号姓名性别出生年月学历工作年月职务基本工资电话地址\n";cout<<"--------------------------------------------\n";while(p!=NULL){cout<<p->num<<" "<<p->name<<" "<<p->sex<<" "<<p->birthday<<" ";cout<<p->education<<" "<<p->working_day<<" "<<p->post<<" ";cout<<p->base_pay<<" "<<p->phone<<" "<<p->addr<<endl;p=p->link;//后移一个结点}}3.2职工信息的查询,如果结点为空,输出:没有查到要查询的职工;若结点不为空,可按姓名和编号进行查询。
void ListFind(NodePtr& head){//有序职工链表上的查找NodePtr p;p=new ListNode;p=head->link;//假定职工表带头结点char num[10],name[20];int xz;cout<<"================\n";cout<<" 1.按编号查询 \n";cout<<" 2.按姓名查询 \n";cout<<"================\n";cout<<"请选择:";cin>>xz;if(xz==1){cout<<"请输入要查找者的编号:";cin>>num;do{if(strcmp(p->num,num)==0){cout<<"编号姓名性别出生年月学历工作年月职务基本工资电话地址\n";cout<<"------------------------------------\n";cout<<p->num<<" "<<p->name<<" "<<p->sex<<" "<<p->birthday<<" ";cout<<p->education<<" "<<p->working_day<<" "<<p->post<<" ";cout<<p->base_pay<<" "<<p->phone<<" "<<p->addr<<endl; cout<<"------------------------------------\n";break;}else p=p->link;if(p==NULL)cout<<"没有查到要查询的职工!\n";}while(p!=NULL);}if(xz==2){cout<<"请输入要查找者的姓名:";cin>>name;do{if(strcmp(p->name,name)==0){cout<<"编号姓名性别出生年月学历工作年月职务基本工资电话地址\n";cout<<"------------------------------------\n";cout<<p->num<<" "<<p->name<<" "<<p->sex<<" "<<p->birthday<<" ";cout<<p->education<<" "<<p->working_day<<" "<<p->post<<" ";cout<<p->base_pay<<" "<<p->phone<<" "<<p->addr<<endl; cout<<"------------------------------------\n";break;}else p=p->link;if(p==NULL)cout<<"没有查到要查询的职工!\n";}while(p!=NULL);}}3.2职工信息插入void InsertNode(NodePtr& head){NodePtr p;p=new ListNode;p->link=head->link;head->link=p;cin>>p->num>>p->name>>p->sex>>p->birthday>>p->education>>p->working_d ay;cin>>p->post>>p->base_pay>>p->phone>>p->addr;}3.2职工信息的修改,先输入职工的姓名,若没有该职工,输出:该系统没有该姓名的职工信息,无法修改..,若有该职工,则可以修改该职工的任何一个信息;具体算法如下:void Modify(NodePtr& head) //修改职工信息{NodePtr p;p=head->link;char name[15];//姓名cout<<"请输入你要修改职工信息的姓名:";cin>>name;while(p){if(strcmp(p->name,name)==0)break;p=p->link;}if(p==NULL){cout<<"该系统没有该姓名的职工信息,无法修改..."<<endl;cout<<"请按任意键继续..."<<endl;getch();ListFind(head);}else{cout<<"-------你现在可以修改此职工的信息了-------"<<endl;//数据域。