1、课程设计(论文)题 目 名 称 简朴职工管理系统 课 程 名 称 数据构造课程设计 学 生 姓 名 学 号 系 、专 业 信息工程系、通信工程 指 导 教 师 12 月 23 日摘 要建立一种“简朴职工管理系统”,系统以菜单方式工作,编写存储有职工基本信息,包括职工工号,姓名,性别,出生年月,学历,职务,工资,住址,电话等,并且规定录入职工号不重复;录入职工号信息规定用文献形式保存,并可以对其进行浏览、查询、修改、删除等基本操作,建立职工信息管理文献。核心词:职工信息管理;文献;浏览;查询;修改;插入;删除;排序目 录1 问题描述22 需求分析23 概要设计331抽象数据类型定义332模块划分
2、34 详细设计441数据类型定义442重要模块算法描述65 测试分析76 课程设计总结12参照文献12附录(源程序清单)131 问题描述1.对单位职工进行管理,涉及插入、删除、查找、排序等功能。2.规定职工对象涉及姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文献中。(2)删除一名职工:从职工管理文献中删除一名职工对象。(3)查询:从职工管理文献中查询符合某些条件职工。(4)修改:检索某个职工对象,对其某些属性进行修改。(5)排序:按某种需要对职工对象文献进行排序。3.实现提示职工对象数不必诸多,便于一次读入内存,所有操
3、作不通过内外存互换。(1)由键盘输入职工对象,以文献方式保存。程序执行时先将文献读入内存。(2)对职工对象中姓名按字典顺序进行排序。(3)对排序后职工对象进行增、删、查询、修改、排序等操作。4.选做内容将职工对象按散列法存储,并设计解决冲突办法。在此基本上实现增、删、查询、修改、排序等操作。2 需求分析 1. 该程序可用于对公司员工状况基本信息存储、更新、查询、输出等操作,以实现对公司员工管理。 2. 其中更新功能涉及:添加信息、删除信息、修改信息、可依照需要添加一种或各种员工信息,也可对个别员工信息进行恰当删除或修改。以便随时更新员工信息。 3. 程序中设计查询功能可依照需要从若干数据中查询
4、某个员工信息,并且可依照两种不同办法查询:按工作证号查询和按姓名查询。以满足不同需要。3 概要设计31抽象数据类型定义struct employee /定义一种职工信息构造体 int num; char name10; char sex; int age; char xueli30; int wage; char addr30; char tel20;em100; 32模块划分各模块功能和实现1.菜单模块:显示职工管理系统主菜单,供顾客选取所需功能,通过自己定义void menu()函数来实现。2.输入模块:输入职工工号、姓名以及其他某些职工有关信息,通过自己定义void input()函数来
5、实现。3.保存模块:将内存中职工信息输出到磁盘文献中,可以通过自己定义void save(int)函数来实现。4.浏览模块:浏览所有职工有关信息,通过自己定义void display()函数来实现。5.删除模块:删除需要删除职工所有信息,通过自己定义void del()函数来实现。6.添加模块:添加需要添加职工有关信息,通过自己定义void add()函数来实现。7.按职工号查询模块:可以按职工号来查询职工有关信息,通过自己定义void search_num()函数来实现。 8.按职工学历查询模块:可以按职工学从来查询职工有关信息,通过自己定义void search_xuelil函数来实现。9
6、.按职工电话号码查询模块:可以按职工电话来查询职工有关信息,通过自己定义void search_tel函数来实现。10.修改模块:可以修改需要修改职工有关信息,通过自己定义void modify()函数 来实现。11.退出系统模块:退出职工信息管理系统,通过头文献windows.h中exit(0)函数来实现。4 详细设计41数据类型定义(1)职工管理系统类型#include #include #include #include #include #include #include #include (2)队列类型struct Employee /声明职工构造作为链表节点。 /-数据域- str
7、ing m_Code;string m_Name;unsigned short int m_Year;string m_Sex;string m_Post;string m_Department;unsigned int m_Wage;/链表节点指针域- struct Employee* Next;/-个人习惯:取别名- typedef struct Employee Node;typedef Node* Link;/-函数声明- Link Create(Link Head);void Release(Link Head);Link Add(Link Head);bool Search(Lin
8、k Head);Link Search_Unique(Link Head);void Display_List(Link Head);void Display_Node(Link pNode);Link Modify(Link Head);Link Del(Link Head);void Save_ByFile(Link Head,fstream& ofile);Link Sort(Link Head);/-函数实现- Link Create(Link Head) /创立一种带头节点空链表。 Head=(Link)new Node;if(!Head) cout分派内存失败!m_Code=;He
9、ad-m_Name=;Head-m_Year=0;Head-m_Sex=;Head-m_Post=;Head-m_Department=;Head-m_Wage=0;Head-Next=NULL;return Head; 42重要模块算法描述菜单 开始依照菜单输入n值选取程序保存结束与否继续进行 NY YY5添加职工信息6修改职工信息2浏览职工信息3查询职工信息4删除职工信息7退出1录入职工信息5 测试分析1. 运营程序,进入职工信息管理系统主菜单:图1:进入主菜单界面2.输入数字“1”进行录入职工信息:图2:录入职工信息3.输入“y”返回主菜单(界面同图1)。4. 输入“2”浏览职工信息:图
10、3:浏览职工信息5. 输入“y”后继续,输入“3”进行查询职工信息:图4:按职工号及学历查询职工信息图5:按电话号码查询职工信息6. 进入主菜单,输入“4”进行删除职工信息:图6:删除职工信息7. 进入主菜单输入“5”进行添加职工信息:图7:添加职工信息8. 进入主菜单输入“6”进行修改职工信息:图8:修改职工信息9.进入主菜单输入”7”退出职工信息管理系统。6 课程设计总结通过这次课程设计,增长了咱们对软件技术理解,虽然还不明确软件技术包括详细内容,但从学习数据构造这门课程开始,已发现程序设计好处,它对咱们学习也有很大协助。在学习数据构造过程中也学到并巩固了许多计算机应用基本知识,对计算机机
11、体也有了一种较为详细理解。在详细操作中对这学期所学数据构造理论知识得到巩固加强,达到实训目,也发现自己局限性之处,为咱们后来数据构造学习奠定了基本,同步体会到数据构造具备语句简洁,使用灵活,执行效率高等特点。发现上机操作重要作用,特别是对数组和循环有了深刻理解。通过黄教师精心指引及我实际操作,我学会 了数据构造程序编程基本环节、基本办法,开发了自己逻辑思维能力,培养了分析问题、解决问题能力。在此我要非常感谢我指引教师黄同成教师,感谢教师认真细心地为我解答我在数据构造中遇到疑难问题,感谢教师为我指出我在实际操作中浮现问题并及时帮我纠正过来。由于教师始终对我认真细心地辅导,使我对数据构造这门功课有
12、了浓厚兴趣并认真去学习它,因此我这门功课有了很大进步。参照文献1 黄同成,黄俊民,董建寅数据构造M北京:中华人民共和国电力出版社,2 董建寅,黄俊民,黄同成数据构造实验指引与题解M北京:中华人民共和国电力出版社,3 严蔚敏,吴伟民. 数据构造(C语言版)M. 北京:清华大学出版社,4 刘振鹏,张晓莉,郝杰数据构造M北京:中华人民共和国铁道出版社,附录(源程序清单)#include #include #include #define N 100struct employeeint num; char name20; char sex; int age; char xueli30; int wag
13、e; char addr30; char tel20;em100; /*定义一种构造体*/void menu();void input();void save(int);void display();void del();void add();void search();void search_num();void search_xueli();void search_tel();void modify(); /*定义各函数*/void main() menu(); int n,flag; char a; do printf(请选取你需要操作环节(1-7):n); scanf(%d,&n);
14、if(n=1&n=7) flag=1; break; else flag=0; printf(您输入有误,请重新选取!); while(flag=0); while(flag=1) switch(n) case 1:printf( 输入职工信息n);printf(n);input();break; case 2:printf( 浏览职工信息n);printf(n);display();break; case 3:printf( 按职工号查询职工信息n);printf(n);search();break; case 4:printf( 删除职工信息n);printf(n);del();break
15、; case 5:printf( 添加职工信息n);printf(n);add();break; case 6:printf( 修改职工信息n);printf(n);modify();break; case 7:exit(0);break; default :break; getchar(); printf(n); printf(与否继续进行(y or n):n); scanf(%c,&a); if(a=y) flag=1; system(cls); /*清屏*/ menu();/*调用菜单函数*/ printf(请再次选取你需要操作环节(1-7):n); scanf(%d,&n); prin
16、tf(n); else exit(0); void menu() /*菜单函数*/printf( *欢迎进入职工信息管理系统*n); printf( 1.录入职工信息); printf( 2.浏览职工信息n); printf( 3.查询职工信息); printf( 4.删除职工信息n); printf( 5.添加职工信息); printf( 6.修改职工信息n); printf( 7.退出n); printf( *谢谢使用*n); printf(n); printf(n); void input() /*录入函数*/ int i,m; printf(请输入需要创立信息职工人数(1-100):n
17、); scanf(%d,&m); for (i=0;im;i+) printf(请输入职工号: ); scanf(%d,&emi.num); printf(请输入姓名: ); scanf(%s,emi.name); getchar(); printf(请输入性别(f-女 m-男): ); scanf(%c,&emi.sex); printf(请输入年龄: ); scanf(%d,&emi.age); printf(请输入学历: ); scanf(%s,emi.xueli); printf(请输入工资: ); scanf(%d,&emi.wage); printf(请输入住址: ); scanf
18、(%s,emi.addr); printf(请输入电话: ); scanf(%s,emi.tel); printf(n); printf(n创立完毕!n); save(m);void save(int m) /*保存文献函数*/int i; FILE*fp; if (fp=fopen(employee_list,wb)=NULL) printf (cannot open filen); exit(0); for (i=0;im;i+) /*将内存中职工信息输出到磁盘文献中去*/ if (fwrite(&emi,sizeof(struct employee),1,fp)!=1) printf(f
19、ile write errorn); fclose(fp);int load() /*导入函数*/ FILE*fp; int i=0; if(fp=fopen(employee_list,rb)=NULL) printf (cannot open filen); exit(0); else do fread(&emi,sizeof(struct employee),1,fp); i+; while(feof(fp)=0); fclose(fp); return(i-1);void display() /*浏览函数*/int i; int m=load(); printf( 职工号t姓名tt性别
20、tt年龄 n); for(i=0;im;i+) /*m为输入某些职工人数*/printf(n%dtt%st%ctt%dtn,emi.num,emi.name,emi.sex,emi.age); printf(n 学历tt工资tt住址tt电话 n);for(i=0;im;i+) /*m为输入某些职工人数*/printf(n %st%dtt%st%sn,emi.xueli,emi.wage,emi.addr,emi.tel);void del() /*删除函数*/int m=load(); int i,j,n,t,flag; char name20; printf(n 本来职工信息:n); dis
21、play(); printf(n); printf(请输入要删除职工姓名:n); scanf(%s,name); for(flag=1,i=0;flag&im;i+) if(strcmp(emi.name,name)=0) printf(n已找到此人,原始记录为:n); printf( 职工号t姓名tt性别tt年龄 n); printf(n %dtt%st%ctt%dtn,emi.num,emi.name,emi.sex,emi.age); printf(n 学历tt工资tt住址tt电话 n); printf(n %st%dtt%st%sn,emi.xueli,emi.wage,emi.add
22、r,emi.tel); printf(n的确要删除此人信息请按1,不删除请按0n); scanf(%d,&n); if(n=1) for(j=i;jm-1;j+) strcpy(emj.name,emj+1.name); emj.num=emj+1.num; emj.sex=emj+1.sex; emj.age=emj+1.age; strcpy(emj.xueli,emj+1.xueli); emj.wage=emj+1.wage; strcpy(emj.addr,emj+1.addr); strcpy(emj.tel,emj+1.tel); flag=0; if(!flag) m=m-1;
23、 else printf(n对不起,查无此人!n); printf(n 浏览删除后所有职工信息:n); save(m); /*调用保存函数*/ display(); /*调用浏览函数*/ printf(n继续删除请按1,不再删除请按0n); scanf(%d,&t); switch(t) case 1:del();break; case 0:break; default :break; void add()/*添加函数*/FILE*fp; int n; int count=0; int i; int m=load(); printf(n 本来职工信息:n); display(); printf
24、(n); fp=fopen(emploee_list,a); printf(请输入想增长职工数:n); scanf(%d,&n); for (i=m;i=1&t=4) flag=1; break; else flag=0; printf(您输入有误,请重新选取!); while(flag=0); while(flag=1) switch(t) case 1:printf(按职工号查询n);search_num();break; case 2:printf(按学历查询n);search_xueli();break; case 3:printf(按电话号码查询n);search_tel();bre
25、ak; case 4:main();break; default:break; void search_num() int num; int i,t; int m=load(); printf(请输入要查找职工号:n); scanf(%d,&num); for(i=0;im;i+) if(num=emi.num) printf(n已找到此人,其记录为:n); printf( 职工号t姓名tt性别tt年龄 n); printf(n %dtt%st%ctt%dtn,emi.num,emi.name,emi.sex,emi.age); printf(n 学历tt工资tt住址tt电话 n); prin
26、tf(n %st%dtt%st%sn,emi.xueli,emi.wage,emi.addr,emi.tel); break; if(i=m) printf(n对不起,查无此人n); printf(n); printf(返回查询函数请按1,继续查询职工号请按2n); scanf(%d,&t); switch(t) case 1:search();break; case 2:break; default:break; void search_xueli() char xueli30; int i,t; int m=load(); printf(请输入要查找学历:n); scanf(%s,xuel
27、i); for(i=0;im;i+) if(strcmp(emi.xueli,xueli)=0) printf(n已找到,其记录为:n); printf( 职工号t姓名tt性别tt年龄 n); printf(n %dtt%st%ctt%dtn,emi.num,emi.name,emi.sex,emi.age); printf(n 学历tt工资tt住址tt电话 n); printf(n %st%dtt%st%sn,emi.xueli,emi.wage,emi.addr,emi.tel); if(i=m) printf(n对不起,查无此人n); printf(n); printf(返回查询函数请按
28、1,继续查询学历请按2n); scanf(%d,&t); switch(t) case 1:search();break; case 2:break; default :break; void search_tel() char tel20; int i,t; int m=load(); printf(请输入要查找电话号码:n); scanf(%s,tel); for(i=0;im;i+) if(strcmp(tel,emi.tel)=0) printf(n已找到此人,其记录为:n); printf( 职工号t姓名tt性别tt年龄 n); printf(n %dtt%st%ctt%dtn,em
29、i.num,emi.name,emi.sex,emi.age); printf(n 学历tt工资tt住址tt电话 n); printf(n %st%dtt%st%sn,emi.xueli,emi.wage,emi.addr,emi.tel); break; if(i=m) printf(n对不起,查无此人n); printf(n); printf(返回查询函数请按1,继续查询电话号码请按2n); scanf(%d,&t); switch(t) case 1:search();break; case 2:break; default :break; void modify() /*修改函数*/
30、int num; char name20; char sex; int age; char xueli30; int wage; char addr30; char tel20; int b,c,i,n,t,flag; int m=load(); printf(n 本来职工信息:n); display(); printf(n); printf(请输入要修改职工姓名:n); scanf(%s,name); for(flag=1,i=0;flag&i8|c1) printf(n选取错误,请重新选取!n); flag=0; if(flag=1) printf(n对不起,查无此人!n); do swi
31、tch(c) /*由于当找到第i个职工时,for语句后i自加了1,所如下面应当把改后信息赋值给第i-1个人*/ case 1:printf(职工号改为:); scanf(%d,&num); emi-1.num=num; break; case 2:printf(姓名改为:); scanf(%s,name); strcpy(emi-1.name,name); break; case 3:printf(性别改为:); getchar(); scanf(%c,&sex); emi-1.sex=sex; break; case 4:printf(年龄改为:); scanf(%d,&age); emi-
32、1.age=age; break; case 5:printf(学历改为:); scanf(%s,xueli); strcpy(emi-1.xueli,xueli); break; case 6:printf(工资改为:); scanf(%d,wage); break; case 7:printf(住址改为:); scanf(%s,addr); strcpy(emi-1.addr,addr); break; case 8:printf(电话改为:); scanf(%s,tel); strcpy(emi-1.tel,tel); break; printf(n); printf(n与否拟定所修改信息?n 是 请按1 ;不,重新修改 请按2: n);