版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计报告设计题目 职工信息管理系统 专 业 班 级 姓 名 学 号 完成日期 目 录1. 问题描述(3)2. 系统设计(3)3. 数据结构与算法描述(5)4. 测试结果与分析(15)5. 总 结(20)6. 参考文献(20)附录 程序源代码(20) 职工信息管理系统1. 问题描述试设计一个职工信息管理系统。要求可对职工信息进行插入、删除、查找、排序、输出等功能,职工对象包括编号、姓名、性别、出生年月、学历、工作年月、基本工资、电话、家庭住址等等。2. 系统设计2.1 设计目标随着计算机产业的不断发展和信息时代的到来,各个企业和部门对员工的信息管理也已经走上了数字化的阶段,尤其是利用
2、微机对工资的管理已经在各个企业单位起着越来越多的作用。以前的财会人员完全是靠手写来完成员工的各种记录,每天都忙碌于各种繁多的票据之间,这种工作繁重复杂,容易出错,不易修改,所以使用一个好的管理系统对减轻管理人员的工作量是很有帮助的,也是一个企业发展不可缺少的基础,它的开发应用简单而不失一般性,操作方便,功能强大,系统化,规范化,自动化,而且经济使用的职工管理系统已经成为了各个企业和部门离不开的电脑软件。本系统实现的操作和功能如下:1)职工信息表的建立:根据职工提供的信息,按单链表的方法建立职工信息表;2)职工信息的添加:根据公司的需要,增加新的职工,必须把职工的基本信息写入职工信息表,方便公司
3、管理;3)职工信息的查询:根据公司需要,查找某一个职工的信息,可以按姓名或编号查找,将都显示职工的全部信息。4)职工信息的修改:根据公司或职工需要,如果信息需要修改,可对职工的人一个信息进行更改。5)职工信息的排序:根据公司需要,可对职工进行排序;6)职工信息的删除:根据公司需要,若职工不在公司工作,可对其信息删除,以及时更新职工信息表;7)职工信息的输出:根据公司需要,若要浏览职工信息,可对职工的全部信息输出,方便观看。2.2 设计思想职工信息表用单链表作为存储结构,且为了查找方便,职工信息应有序。为了查找方便,职工的线性表按职工编号有序,并且,为了插入和删除方便,应以链表作为存储结构。通过
4、c+,使系统实现建表、增加信息、删除信息、查找信息、排序、输出等功能,而且提供一个界面来调用各个功能,并使界面尽可能清晰美观。2.3 系统模块划分菜单界面建立职工信息表职工信息的添加职工信息的查询职工信息的排序职工信息的删除职工信息的输出退出职工管理系统职工信息的修改插入新的结点删除结点无记录按菜单选项结束程序运行输出记录冒泡排序法实现按编号查询按姓名查询尾插法建立职工信息表3. 数据结构与算法描述3.2 职工信息表的建立,将一个职工结点按其编号的次序插入有序职工链表的相应位置,以保持链表的有序性。基本思想是使用尾插法建立新的结点。建表算法如下描述:/用尾插法建立职工链表函数void Crea
5、teList(NodePtr& head)/尾插法建立带头结点的职工链表算法 NodePtr rear; rear=new ListNode; int flag=0;/结束标志置0 rear=head;/尾指针初始指向头结点 while(flag=0) NodePtr p; p=new ListNode; p->link=NULL; cout<<"请输入:" cout<<"编号 姓名 性别 出生日期 学历 工作年月 职务 基本工资 电话 地址n" cout<<"-n" cin>&
6、gt;p->num>>p->name>>p->sex>>p->birthday>>p->education>>p->working_day; cin>>p->post>>p->base_pay>>p->phone>>p->addr; rear->link=p;/新结点连接到尾结点之后 rear=p;/尾结点指向新结点 cout<<"结束建表吗?(0/1):" cin>>flag;
7、 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<<" &q
8、uot;<<p->sex<<" "<<p->birthday<<" " cout<<p->education<<" "<<p->working_day<<" "<<p->post<<" " cout<<p->base_pay<<" "<<p->phone<<"
9、 "<<p->addr<<endl; p=p->link;/后移一个结点 3.2 职工信息的查询,如果结点为空,输出:没有查到要查询的职工;若结点不为空,可按姓名和编号进行查询。void ListFind(NodePtr& head)/有序职工链表上的查找 NodePtr p; p=new ListNode; p=head->link;/假定职工表带头结点 char num10,name20; int xz; cout<<"=n" cout<<" 1.按编号查询 n" c
10、out<<" 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-&g
11、t;num<<" "<<p->name<<" "<<p->sex<<" "<<p->birthday<<" " cout<<p->education<<" "<<p->working_day<<" "<<p->post<<" " cout<<p->b
12、ase_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->na
13、me,name)=0) cout<<"编号 姓名 性别 出生年月 学历 工作年月 职务 基本工资 电话 地址n" cout<<"-n" cout<<p->num<<" "<<p->name<<" "<<p->sex<<" "<<p->birthday<<" " cout<<p->education<<&q
14、uot; "<<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<<"没有
15、查到要查询的职工!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_day; cin>>p->post>
16、>p->base_pay>>p->phone>>p->addr;3.2 职工信息的修改,先输入职工的姓名,若没有该职工,输出:该系统没有该姓名的职工信息,无法修改.,若有该职工,则可以修改该职工的任何一个信息;具体算法如下:void Modify(NodePtr& head) /修改职工信息 NodePtr p; p=head->link; char name15;/姓名 cout<<"请输入你要修改职工信息的姓名:" cin>>name; while(p) if(strcmp(p->
17、;name,name)=0) break; p=p->link; if(p=NULL) cout<<"该系统没有该姓名的职工信息,无法修改."<<endl; cout<<"请按任意键继续."<<endl; getch(); ListFind(head);elsecout<<"-你现在可以修改此职工的信息了-"<<endl; /数据域。 cout<<"请输入职工新编号:" cin>>p->num; cout&l
18、t;<endl<<"请输入职工新姓名:" cin>>p->name; cout<<endl<<"请输入职工新性别:" cin>>p->sex; cout<<endl<<"请输入职工新出生年月:" cin>>p->birthday; while(cin.fail() cout<<"请输入正确的年份格式。"<<endl; cin.clear(); fflush(stdin);
19、cin>>p->birthday; cout<<endl<<"请输入职工新学历:" cin>>p->education; cout<<endl<<"请输入职工新工作年月:" cin>>p->working_day; cout<<endl<<"请输入职工新职称:" cin>>p->post; cout<<endl<<"请输入职工基本工资:" cin&g
20、t;>p->base_pay; while(cin.fail() cout<<"请输入正确的工资数据。"<<endl; cin.clear(); fflush(stdin); cin>>p->base_pay; cout<<endl<<"请输入职工新电话: "cin>>p->phone;cout<<endl<<"请输入职工新地址: "cin>>p->addr;cout<<endl; 3.
21、2 职工信息的排序,若系统没有职工信息,无法进行排序,若有职工信息,则按冒泡法进行排序。具体算法如下:void Sort(NodePtr head) NodePtr p,q; p=head->link; if(p=NULL) cout<<"该系统还没有储存一个职工,没法进行排序."<<endl; cout<<"请按任意键继续.n" getch(); /menu_select(); else while(p!=NULL) q=p->link; while(q!=NULL) if(p->base_pay&
22、lt;q->base_pay) swap(p,q); q=q->link; p=p->link; cout<<"排序成功."<<endl; void swap(NodePtr &p,NodePtr &q)/交换两个节点里所含的信息 char num10;/编号 char name15;/姓名 char sex5;/性别 char birthday50;/出生年月 char education50;/学历 char working_day50;/工作年月 char post50;/职务 int base_pay;/基本
23、工资 char phone50;/电话 char addr50;/地址 strcpy(num,p->num);strcpy(p->num,q->num);strcpy(q->num,num); strcpy(name,p->name);strcpy(p->name,q->name);strcpy(q->name,name); strcpy(sex,p->sex);strcpy(p->sex,q->sex);strcpy(q->sex,sex); strcpy(birthday,p->birthday);strcpy(
24、p->birthday,q->birthday);strcpy(q->birthday,birthday); strcpy(education,p->education);strcpy(p->education,q->education);strcpy(q->education,education); strcpy(working_day,p->working_day);strcpy(p->working_day,q->working_day);strcpy(q->working_day,working_day); strcpy
25、(post,p->post);strcpy(p->post,q->post);strcpy(q->post,post); base_pay=p->base_pay;p->base_pay=q->base_pay;q->base_pay=base_pay; strcpy(phone,p->phone);strcpy(p->phone,q->phone);strcpy(q->phone,phone); strcpy(addr,p->addr);strcpy(p->addr,q->addr);strcpy(q-
26、>addr,addr);3.2 职工信息的删除,先输入职工的工号,若结点为空,则输出:没有找到要删除的职工,若结点不为空,输出职工信息,提示真的要删除该职工吗,选择y或n可进行操作。具体算法如下:void DelNode(NodePtr& head) NodePtr p,q; p=new ListNode;q=new ListNode; p=head->link;/假定职工信息表带头结点 q=head; char num10; int flag=0; cout<<"请输入要删除者的编号:" cin>>num; do if(strc
27、mp(p->num,num)=0) cout<<"编号 姓名 性别 出生年月 学历 工作年月 职务 基本工资 电话 地址n" cout<<"-n" cout<<p->num<<" "<<p->name<<" "<<p->sex<<" "<<p->birthday<<" " cout<<p->education&
28、lt;<" "<<p->working_day<<" "<<p->post<<" " cout<<p->base_pay<<" "<<p->phone<<" "<<p->addr<<endl; cout<<"-n" flag=1; break; else p=p->link; if(p=NULL) cou
29、t<<"没有查到要删除的职工!n" q=q->link; while(p!=NULL); if(flag=1) cout<<"真的要删除该结点吗?(y/n): " char jx;cin>>jx; if(jx='y'|jx='Y') q->link=p->link;/删除结点 free(p);/释放被删除的结点空间 cout<<"职工已被删除!n" /return 0;通过以上算法实现以下菜单模块:printf(" 欢迎进入职工
30、信息管理系统n"); printf("=n"); printf(" 1.职工信息表的建立n"); printf(" 2.职工结点的添加n"); printf(" 3.职工结点的查询n"); printf(" 4.职工信息的修改n"); printf(" 5.职工信息的排序n"); printf(" 6.职工结点的删除n"); printf(" 7.职工链表的输出n"); printf(" 0.退出管理系统n"
31、;); printf("=n");printf(" 请选择0-7:");4.测试结果与分析(将测试结果抓图说明)5.总结 通过本次课程设计,我学会了如何工程化的编写以下系统软件。首先,要对软件的需求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。软件实现上,设计了清楚的界面,并采用功能模块的设计思想。 在这个过程中,确实付出了很对努力,流了很多汗水,比如,要思考整个设计过程,要一点一点的改正代码中出现的错误等等,但现在想想,都不值得一提,因为从中的收获比什么都重要。同时,我也知道,我的设计还存在不足之处,我会坚持不懈!继续努力!6.参
32、考文献(包括书籍、论文、网络资料等)C+buider 实例入门 陈雪飞 中国青年出版社C+buider 彻底研究 陈灿煌 中国铁路出版社C+面向对象程序设计(第6版) 清华出版社网络上一些代码资料附录 程序源代码/主控菜单处理测试程序 #include<stdio.h>#include<string>#include<stdlib.h>#include<conio.h>#include<fstream>#include<iostream>using namespace std;struct ListNode/职工结点类型
33、char num10;/编号 char name15;/姓名 char sex5;/性别 char birthday50;/出生年月 char education50;/学历 char working_day50;/工作年月 char post50;/职务 int base_pay;/基本工资 char phone50;/电话 char addr50;/地址 ListNode *link;/结点指针域;typedef ListNode *NodePtr;NodePtr load();/导入信息到系统void filesave(NodePtr head);/将链表中的信息保存到文件里 int m
34、enu_select();void CreateList(NodePtr& head);void PrintList(NodePtr head);void ListFind(NodePtr& head);void InsertNode(NodePtr& head);void DelNode(NodePtr& head); /void DomoDify(NodePtr& head); void Modify(NodePtr &head); void Sort(NodePtr head);void swap(NodePtr &p,NodePt
35、r &q);/交换两个节点里所含的信息 /void Disp(NodePtr& base_pay);/主函数int main() NodePtr head,p,ptr; / int base_pay; head=new ListNode;/申请头结点 head=load(); /int n; /char tp100; for(;) switch(menu_select() case 1:cout<<"*n" cout<<"* 职工信息表的建立 *n" cout<<"*n" Creat
36、eList(head);break; case 2:cout<<"*n" cout<<"* 职工信息的添加 *n" cout<<"编号 姓名 性别 出生日期 学历 工作年月 职务 基本工资 电话 地址n" cout<<"*n" InsertNode(head); filesave(head); break; case 3:cout<<"*n" cout<<"* 职工信息的查询 *n" cout<&l
37、t;"*n" ListFind(head); break; case 4:cout<<"*n" cout<<"* 职工信息的修改 *n" cout<<"*n" / DomoDify(head);/修改结点 Modify(head); break; case 5:cout<<"*n" /cout<<"* 按工资排序 *n" cout<<"*n" Sort(head);/按工资排序 /Pr
38、intList(head); /Disp(tp,n); break; case 6:cout<<"*n" cout<<"* 职工信息的删除 *n" cout<<"*n" DelNode(head);/删除结点 filesave(head); break; case 7:cout<<"*n" cout<<"* 职工信息表的输出 *n" cout<<"*n" PrintList(head); break; c
39、ase 0:cout<<"再见!n" return 0; void filesave(NodePtr head)/将链表中的信息保存到文件里 NodePtr p=head->link; FILE *fp; int num=0; if(fp=fopen("file.txt","w")=NULL) cout<<"新建文件失败."<<endl; cout<<"请按任意键退出系统."<<endl; getch(); exit(0); wh
40、ile(p!=NULL) num+; p=p->link; p=head->link; char c255; sprintf(c, "文件中%d个信息如下:n", num); fputs(c,fp); while(p!=NULL) fprintf(fp,"%s",p->num);fprintf(fp,"t"); fprintf(fp,"%s",p->name);fprintf(fp,"t"); fprintf(fp,"%s",p->sex);fp
41、rintf(fp,"t"); fprintf(fp,"%s",p->birthday);fprintf(fp,"t"); fprintf(fp,"%s",p->education);fprintf(fp,"t"); fprintf(fp,"%s",p->working_day);fprintf(fp,"t"); fprintf(fp,"%s",p->post);fprintf(fp,"t");
42、 fprintf(fp,"%d",p->base_pay);fprintf(fp,"t"); fprintf(fp,"%s",p->phone);fprintf(fp,"t"); fprintf(fp,"%s",p->addr);fprintf(fp,"t"); fprintf(fp,"n"); p=p->link; fclose(fp);NodePtr load() NodePtr p,q,head; head=new ListN
43、ode; head->link=NULL; q=head; char base_pay10; /p=new ListNode; int num,i=0; FILE *fp; if(fp=fopen("file.txt","r")=NULL) cout<<"文件尚未存储数据.!n"/exit(1);return head; char c255; fgets(c,256,fp); sscanf(c, "文件中%d个信息如下:n", &num); while(i<num) p=new Li
44、stNode;/这里需要注意,必须放在这个循环的位置里,这是每一次都产生一个节点,链接到链表中去 fscanf(fp,"%s",p->num); fscanf(fp,"%s",p->name); fscanf(fp,"%s",p->sex); fscanf(fp,"%s",p->birthday); fscanf(fp,"%s",p->education); fscanf(fp,"%s",p->working_day); fscanf(fp
45、,"%s",p->post); / fscanf(fp,"%d",p->base_pay); fscanf(fp,"%s",base_pay); p->base_pay=atoi(base_pay); fscanf(fp,"%s",p->phone); fscanf(fp,"%s",p->addr); p->link=NULL; q->link=p; q=p; i+; fclose(fp); return head; /菜单选择函数程序int menu_
46、select() int sn; printf(" 欢迎进入职工信息管理系统n"); printf("=n"); printf(" 1.职工信息表的建立n"); printf(" 2.职工结点的添加n"); printf(" 3.职工结点的查询n"); printf(" 4.职工信息的修改n"); printf(" 5.职工信息的排序n"); printf(" 6.职工结点的删除n"); printf(" 7.职工链表的输出n
47、"); printf(" 0.退出管理系统n"); printf("=n"); printf(" 请选择0-7:"); for(;) cin>>sn; if(sn<0|sn>7) cout<<"nt输入错误,重选0-6:" else break; return sn; /用尾插法建立职工链表函数void CreateList(NodePtr& head)/尾插法建立带头结点的职工链表算法 NodePtr rear; rear=new ListNode; int
48、flag=0;/结束标志置0 rear=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-&
49、gt;education>>p->working_day; cin>>p->post>>p->base_pay>>p->phone>>p->addr; rear->link=p;/新结点连接到尾结点之后 rear=p;/尾结点指向新结点 cout<<"结束建表吗?(0/1):" cin>>flag; filesave(head); /职工链表的输出函数void PrintList(NodePtr head) NodePtr p; p=new ListNod
50、e; p=head->link;/因为链表带头结点,使p指向链表开始接点 cout<<"编号 姓名 性别 出生年月 学历 工作年月 职务 基本工资 电话 地址n" cout<<"-n" while(p!=NULL) cout<<p->num<<" "<<p->name<<" "<<p->sex<<" "<<p->birthday<<" &
51、quot; cout<<p->education<<" "<<p->working_day<<" "<<p->post<<" " cout<<p->base_pay<<" "<<p->phone<<" "<<p->addr<<endl; p=p->link;/后移一个结点 /有序职工链表的查找void ListF
52、ind(NodePtr& head)/有序职工链表上的查找 NodePtr p; p=new ListNode; p=head->link;/假定职工表带头结点 char num10,name20; int xz; cout<<"=n" cout<<" 1.按编号查询 n" cout<<" 2.按姓名查询 n" cout<<"=n" cout<<"请选择:"cin>>xz; if(xz=1) cout<&
53、lt;"请输入要查找者的编号:" cin>>num; do if(strcmp(p->num,num)=0) cout<<"编号 姓名 性别 出生年月 学历 工作年月 职务 基本工资 电话 地址n" cout<<"-n" cout<<p->num<<" "<<p->name<<" "<<p->sex<<" "<<p->birth
54、day<<" " cout<<p->education<<" "<<p->working_day<<" "<<p->post<<" " cout<<p->base_pay<<" "<<p->phone<<" "<<p->addr<<endl; cout<<"-n&q
55、uot; 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&
56、lt;<" "<<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&quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年江西省上饶市余干县数学六年级第一学期期末调研试题含解析
- 2024年江西省赣州市安远县数学六年级第一学期期末统考模拟试题含解析
- 2024年专用仪器仪表:化工仪表项目发展计划
- 2024年湖南省农业厅招聘人员历年高频500题难、易错点模拟试题附带答案详解
- 2024年湖南益阳市人力资源和社会保障局所属事业单位招聘历年高频500题难、易错点模拟试题附带答案详解
- 2024年湖南湘西州保靖县事业单位招聘工作人员141人高频500题难、易错点模拟试题附带答案详解
- 2024年湖南永州第三人民医院招聘历年高频500题难、易错点模拟试题附带答案详解
- 2024年湖南永州市城市社会经济调查队遴选2人历年高频500题难、易错点模拟试题附带答案详解
- 2024年湖南怀化市麻阳县招聘事业单位工作人员58人历年高频500题难、易错点模拟试题附带答案详解
- 2024年湖南张家界市食品药品检验所公益性岗位招聘历年高频500题难、易错点模拟试题附带答案详解
- 模板支撑工程危险源辩识与风险评价清单
- 银行融资贷款流程PPT课件
- 口腔生物学复习全新版整理
- 产品模拟召回方案
- 电镀锌原理及工艺流程56169
- 节假日公车封条模版
- 计量器具管理
- 室内装饰装修工程竣工报告
- 大体积混凝土测温记录
- 21剖宫产术前讨论术后审核制度
- 1重庆房屋建筑与装饰工程计价定额-建筑工程
评论
0/150
提交评论