职工信息管理系统课设报告_第1页
职工信息管理系统课设报告_第2页
职工信息管理系统课设报告_第3页
职工信息管理系统课设报告_第4页
职工信息管理系统课设报告_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、*实践教学* 计算机与通信学院20 年春季学期 C程序设计 课程设计题 目:职工信息管理系统专业班级: 姓 名: 学 号: 指导教师: 成 绩:_ _摘 要 职工信息管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。 使用计算机对职工信息进行管理,具有手工管理所无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高职工管理的效率,也是公司的科学化、正规化管理和与世界接轨的重要条件。本系统利用C语言开发,实现了简单的职工基本信息的录入

2、、追加、修改、查询、删除等操作,并且能利用文件系统长久地保留原始数据。通过本系统的开发,我们熟悉了面向过程的程序设计的基本方法和步骤,对于C语言有了更深入的理解,并且较好地掌握了C语言的编程方法和技术。关键字:C语言;职工;信息管理系统;函数目 录一、需求分析1二、总体设计2三、详细设计33.1数据定义33.2主函数设计43.3算法流程图5四、编码9五、测试105.1职工管理系统主界面105.2进入新增职工信息界面115.3进入删除职工信息界面125.4进入查询职工信息界面135.5进入修改职工信息界面145.6进入职工信息排序界面155.7退出系统16六、设计总结17致谢18参考文献19附录

3、20 一、需求分析1.1问题描述对单位的职工进行管理,包括插入、删除、查找、排序等功能。1.2要求职工对象包括姓名(字符串)、性别(字符)、出生年月(数字)、工作年月(数字)、学历(字符串)、职务(字符串)、住址(字符串)、电话(字符串)等信息。(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。(2)删除一名职工:从职工管理文件中删除一名职工对象。(3)查询:从职工管理文件中查询符合某些条件的职工。(4)修改:检索某个职工对象,对其某些属性进行修改。(5)排序:按某种需要对职工对象文件进行排序。1.3实现功能(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。

4、(2)对职工对象中的“姓名”按字典顺序进行排序。(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。二、总体设计根据需求分析,为了实现系统功能,我确定职工信息管理系统总体模块如图1所示。图1 工资管理系统功能模块图三、详细设计3.1数据定义3.1.1定义表结点(typedef struct Node)ypedef struct Nodelong int born_time,work_time,tele_num;char sex,nameALLMAX,degreeALLMAX,jobALLMAX,addressALLMAX;struct Node *next;SLNode;3.1.2定义

5、职工信息(typedef struct Datatype)typedef structlong int born_time,work_time,tele_num;char nameALLMAX,sex,degreeALLMAX,jobALLMAX,addressALLMAX;DataType;3.1.3初始化链表(ListInitiate(SLNode *head))void ListInitiate(SLNode *head)/-链表初始化if(*head=(SLNode *)malloc(sizeof(SLNode)=NULL) exit(1);/动态分配存储空间(*head)-next=

6、NULL;3.2主函数设计根据详细设计要求,可以得到主函数代码及其对应的程序流程图。在主函数中,实现了友好的界面设计。系统需要输入职工的基本信息:姓名、性别、出生年月、工作年月、学历、职务、住址、电话等。这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有七种操作的调用:新增职工信息:SLNode *ListInsert(SLNode *head,DataType x)查询职工信息:Listfind(SLNode head)删除职工信息:ListDelete(SLNode *head)修改职工信息:ListModify(SLNode *head)职工信息排序:Listpaixu(SLNode

7、 *head)保存职工信息:put(SLNode *head,FILE *fp)显示职工信息:print(SLNode *head)3.3算法流程图3.3.1 保存函数Save()的算法流程图如图2所示。FILE *fp;(fp=fopen(outfile,wb)=NULLprintf(nSaving file.n);printf(can not open filen);p!=NULLfclose(fp);fwrite(p,sizeof(SALARY),1,fp);图2 保存函数Save()的算法流程图3.3.2 主函数程序流程图如图3所示。图3 主函数程序流程图3.3.3 按姓名查找的算法流

8、程图如图4所示。 图4 按姓名查找的算法流程图3.3.4 排序算法流程图如图5所示。图5 排序算法流程图四、编码4.1总体框架0,退出职工管理系统;1,提示依次输入职工信息,录入完毕自动返回主界面;2,提示输入删除的姓名,成功正确返回,错误有提示无此员工信息;3,会提示查询方式:0.退出查询系统,回到主菜单1.对姓名进行查询2.对出生年月进行查询3.对学历进行查询4.对工作年月进行查询,输入相应编号进行查询;4,提示输入修改职工姓名,然后进行依次修改职工所有信息;5,提示:0.退出排序系统,回到主菜单1.对性别进行排序2.对出生年月进行排序3.对工作年月进行排序4.对姓名进行排序,输入号码进行

9、查询。(详细见附录)4.2模块设计模块函数或数据结构功能链表数据类型typedef struct Node定义链表结点typedef struct Datatype定义职工信息ListInitiate(SLNode *head)初始化链表系统处理模块SLNode *ListInsert(SLNode *head,DataType x)插入职工信息ListDelete(SLNode *head)删除职工信息ListModify(SLNode *head)修改职工信息put(SLNode *head,FILE *fp)保存职工信息Listfind(SLNode head)查询职工信息Listpai

10、xu(SLNode *head)职工信息排序输出模块print(SLNode *head)显示职工信息五、测试5.1职工管理系统主界面在Visual C+ 6.0中运行本系统,可以得到图5所示的录入职工人数界面。图7主菜单界面在图5中输入0,进入图6所示的系统主菜单界面。图6 系统主菜单界面5.2进入新增职工信息界面在图6中输入1,进入图7所示的新增职工界面。图7 新增职工信息界面 5.3进入删除职工信息界面在图7中输入2,进入图8所示的删除职工信息界面。图8 删除职工信息界面5.4进入查询职工信息界面在图8中输入3,进入图9所示的查询职工信息界面。图9 查询职工信息界面在图9中输入1,进入图

11、10所示的对姓名查询界面。 图10 对姓名进行查询5.5进入修改职工信息界面在图10中先输入0返回图5所示的主菜单,再输入4,进入11图所示的修改职工信息界面。图11 修改职工信息系统界面5.6进入职工信息排序界面在图11中输入5,进入图12所示的职工信息排序界面。图12 职工信息排序界面5.7退出系统在图12中先输入0返回图5所示的主菜单,再输入0退出职工管理系统 图13 退出职工管理系统六、设计总结本次课程设计是围绕数据结构进行。根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。但是,为了

12、实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。把职工信息存储在一个单链表中,利用指针实现对职工信息的各项基本操作。虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方。那就是可以排序上面多设计几个算法。实现多角度排序。在这个系统中没有职工序号的信息,所以允许职工姓名相同,在很大程度上面,可能是的职工信息重复。经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响,及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成

13、特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。致谢通过一周的努力,我们顺利完成这一次的课程设计。在这里,首先感谢指导老师x老师在知识和技术上的指导和帮助。在x老师的帮助下,我们克服了许多技术上的难题,顺利地完成这次课程设计。同时,也要感谢与我同做一个课题的xxx同学。在我们

14、两人的共同努力下,终于顺利地完成了这次课程设计。 参考文献1姜灵芝,余健. C语言课程设计案例精编.北京:清华大学出版社,20082王新,孙雷. C语言课程设计.北京:清华大学出版社,20093游洪跃、彭骏、谭斌.C语言程序设计实验与课程设计教程.北京:清华大学出版社,20114王连相.C/C+程序设计上机指导与测试. 北京:中国铁道出版社,20065C语言函数手册,机械工业出版社,1999附录#include #include #include #include #define ALLMAX 100 /总共统计的职工的人数typedef struct Node long int born_d

15、ate,work_date,tele_num; char sex,nameALLMAX,degreeALLMAX,jobALLMAX,addressALLMAX; struct Node *next;SLNode;typedef struct long int born_date,work_date,tele_num; char nameALLMAX,sex,degreeALLMAX,jobALLMAX,addressALLMAX;DataType;void ListInitiate(SLNode *head)/链表初始化 if(*head=(SLNode *)malloc(sizeof(SL

16、Node)=NULL) exit(1);/动态分配存储空间 (*head)-next=NULL;SLNode *ListInsert(SLNode *head,DataType x)/职工信息的插入姓名并按照升序排列 SLNode *p,*q,*s; p=head-next; if(q=(SLNode *)malloc(sizeof(SLNode)=NULL) exit(1);/动态分配存储空间 q-born_date=x.born_date; q-work_date=x.work_date; q-tele_num=x.tele_num; strcpy(q-name,); q-se

17、x=x.sex; strcpy(q-degree,x.degree); strcpy(q-job,x.job); strcpy(q-address,x.address); if(head-next=NULL)/如果只有链表的头结点,没有其他的结点,直接插入在头结点后面 head-next=q; head-next-next=NULL; else/链表非空 for(;p;p=p-next) if(p-next!=NULL) if(strcmp(p-name,)next-name,)0)/位于两个结点之间 s=p-next; p-next=q; q-next=s; brea

18、k; /else if(strcmp(p-name,)=0)break; /如果姓名相同则不插入信息 else if(strcmp(p-name,)next=NULL)/链表非空,并且在排序中是最后一个 p-next=q; q-next=NULL; break; if(strcmp(p-name,)0)/位于链表头结点之后的位置 s=head-next; head-next=q; q-next=s; break; return head;void ListDelete(SLNode *head)/职工信息的删除 SLNode *p,*s; char x20;

19、 s=head; p=head-next; if(head-next=NULL)/链表为空,输出:名单中无职工信息,无须删除! printf(名单中无此职工信息,无须删除!n); return; printf(请输入要删除职工的姓名:n); /输入要删除的人的姓名 scanf(%s,x); for(p;p;p=p-next)/在链表中从头到尾查找输入的人的姓名 if(strcmp(p-name,x)=0) /如果存在,则删除,否则输出:名单中无职工信息,无须删除! s-next=p-next; free(p); printf(删除成功!请继续操作!n); break; s=p; if(p=NU

20、LL)/链表本身为空 printf(名单中无此职工信息,无须删除!n); void ListModify(SLNode *head)/职工信息的修改 DataType x; SLNode *p; p=head-next; if(p=NULL)/链表本身为空 printf(职工名单无职工信息,无须修改!n); return; printf(请输入要修改的职工姓名:n); scanf(%s,); for(;p;p=p-next) if(strcmp(,p-name)=0)/查找到了该职工的信息 printf(依次写入该职工的新信息:n); printf(请输入职工信息:n姓

21、名、性别、出生年月、工作年月、学历、职务、住址、电话n); scanf(%s %c %d %d %s %s %s %d,p-name,&p-sex,&p-born_date,&p-work_date,p-degree,p-job,p-address,&p-tele_num); printf(修改成功!请继续操作!n); break; if(p=NULL)/如果链表为空 printf(此职工不存在,无法修改其信息!n); void put(SLNode *head,FILE *fp)/职工信息的保存 SLNode *p; if(fp=fopen(Employee.txt,w)=NULL)/ pr

22、intf(无法打开Employee.txt!n); exit(0); for(p=head-next;p;p=p-next) fprintf(fp,%s %c %d %d %s %s %s %dn,p-name,p-sex,p-born_date,p-work_date,p-degree,p-job,p-address,p-tele_num); if(fclose(fp) printf(无法关闭Employee.txt!n); exit(0); void Listfind(SLNode head)/职工信息的查找 int i,j; SLNode *p; DataType x; if(head.

23、next=NULL)/链表为空 printf(名单中无职工信息,查询失败!n); return; /返回主菜单 printf(n); printf(tn); printf(t 职工信息查询操作 n); printf(t n); printf(t 0.退出查询系统,回到主菜单tt 1.对姓名进行查询tnt 2.对出生年月进行查询 tt 3.对学历进行查询tnt 4.对工作年月进行查询 tt 5.对职务进行查询tnt 6.对住址进行查询 tt 7.对电话进行查询tn); printf(tn); while(1) printf(请输入您要选择的操作:); scanf(%d,&i); if(i=0)/

24、输入0,退出查询系统,回到主菜单 break; else if(i=1)/输入1,对姓名进行查询 p=head.next; printf(请输入姓名:); scanf(%s,); j=0; for(p;p;p=p-next) if(strcmp(p-name,)=0)/如果存在这个人,那么j自加 +j; printf(n姓名、性别、出生年月、工作年月、学历、职务、住址、电话n); printf(%s %c %d %d %s %s %s %dn,p-name,p-sex,p-born_date,p-work_date,p-degree,p-job,p-address,p-

25、tele_num); if(j=0)/表示没有找到输入的信息 printf(职工名单中不存在此人!n); else printf(查询成功!继续操作!n); else if(i=2)/输入2,对出生年月进行查询 p=head.next; printf(请输入出生年月:); scanf(%d,&x.born_date); j=0; for(p;p;p=p-next) if(p-born_date=x.born_date)/输入的出生年月在链表中存在 +j;/如果存在这个人,那么j自加 printf(n姓名、性别、出生年月、工作年月、学历、职务、住址、电话n); printf(%s %c %d %

26、d %s %s %s %dn,p-name,p-sex,p-born_date,p-work_date,p-degree,p-job,p-address,p-tele_num); if(j=0)/表示没有找到输入的信息 printf(职工名单中没有这个时间出生的!n); else printf(查询成功!请继续操作!n); else if(i=4)/输入4,对工作年月进行查询 p=head.next; printf(请输入工作年月:); scanf(%d,&x.work_date); j=0; for(p;p;p=p-next) if(p-work_date=x.work_date) +j;/

27、如果存在这个人,那么j自加 printf(n姓名、性别、出生年月、工作年月、学历、职务、住址、电话n); printf(%s %c %d %d %s %s %s %dn,p-name,p-sex,p-born_date,p-work_date,p-degree,p-job,p-address,p-tele_num); if(j=0)/表示没有找到输入的信息 printf(职工名单中没有这个时间工作的!n); else printf(查询成功!请继续操作!n); else if(i=3)/输入3,对学历进行查询 p=head.next; printf(请输入学历:); scanf(%s,x.de

28、gree); j=0; for(p;p;p=p-next) if(strcmp(p-degree,x.degree)=0) +j;/如果存在这个人,那么j自加 printf(n姓名、性别、出生年月、工作年月、学历、职务、住址、电话n); printf(%s %c %d %d %s %s %s %dn,p-name,p-sex,p-born_date,p-work_date,p-degree,p-job,p-address,p-tele_num); if(j=0)/表示没有找到输入的信息 printf(职工名单中没有这种学历的!n); else printf(查询成功!请继续操作!n); els

29、e if(i=5)/输入5,对职务进行查询 p=head.next; printf(请输入职务:); scanf(%s,x.job); j=0; for(p;p;p=p-next) if(strcmp(p-job,x.job)=0) +j;/如果存在这个人,那么j自加 printf(n姓名、性别、出生年月、工作年月、学历、职务、住址、电话n); printf(%s %c %d %d %s %s %s %dn,p-name,p-sex,p-born_date,p-work_date,p-degree,p-job,p-address,p-tele_num); if(j=0)/表示没有找到输入的信息

30、 printf(职工名单中没有这种职务的!n); else printf(查询成功!请继续操作!n); else if(i=6)/输入6,对住址进行查询 p=head.next; printf(请输入住址:); scanf(%s,x.address); j=0; for(p;p;p=p-next) if(strcmp(p-address,x.address)=0) +j;/如果存在这个人,那么j自加 printf(n姓名、性别、出生年月、工作年月、学历、职务、住址、电话n); printf(%s %c %d %d %s %s %s %dn,p-name,p-sex,p-born_date,p-

31、work_date,p-degree,p-job,p-address,p-tele_num); if(j=0)/表示没有找到输入的信息 printf(职工名单中没有住这的!n); else printf(查询成功!请继续操作!n); else if(i=7)/输入7,对电话号码进行查询 p=head.next; printf(请输入电话:); scanf(%d,&x.tele_num); j=0; for(p;p;p=p-next) if(p-tele_num=x.tele_num) +j;/如果存在这个人,那么j自加 printf(n姓名、性别、出生年月、工作年月、学历、职务、住址、电话n)

32、; printf(%s %c %d %d %s %s %s %dn,p-name,p-sex,p-born_date,p-work_date,p-degree,p-job,p-address,p-tele_num); if(j=0)/表示没有找到输入的信息 printf(职工名单中没人用这个号码!n); else printf(查询成功!请继续操作!n); else if(i!=0 & i!=1 & i!=2 & i!=3 & i!=4 & i!=5 & i!=6 & i!=7)/输入任意不是上述数字的,那么久显示输入错误 printf(输入出错!请再次输入!n); printf(n); pr

33、intf(tn); printf(t 职工信息查询系统 n); printf(t n); printf(t 0.退出查询系统,回到主菜单tt 1.对姓名进行查询tnt 2.对出生年月进行查询 tt 3.对学历进行查询tnt 4.对工作年月进行查询 tt 5.对职务进行查询tnt 6.对住址进行查询 tt 7.对电话进行查询tn); printf(tn); /printf(0.退出查询系统,回到主菜单n1.对姓名进行查询n2.对出生年月进行查询n3.对工作年月进行查询n4.对学历进行查询n5.对职务进行查询n6.对住址进行查询n7.对电话号码进行查询n); void print(SLNode *

34、head)/职工信息的显示 SLNode *p;for(p=head-next;p!=NULL;p=p-next)/输出所有职工的信息 printf(%s %c %d %d %s %s %s %dn,p-name,p-sex,p-born_date,p-work_date,p-degree,p-job,p-address,p-tele_num);void printLink(SLNode *head)/职工信息的显示 printf(职工名单:n姓名、性别、出生年月、工作年月、学历、职务、住址、电话n); print(head);void Listpaixu(SLNode *head)/职工信息

35、的排序 int i,n=0,m,flag=1; SLNode *p,*q,*s; if(head-next=NULL)/职工链表为空 printf(名单中无职工信息,无法排序!nn); return; / printf(输入出错!请再次输入!nn); printf(tt.n); printf(tt. 职工信息排序操作 .n); printf(tt. .n); printf(tt.t0.退出排序系统,回到主菜单 .ntt.t1.对性别进行排序 .ntt.t2.对出生年月进行排序 .ntt.t3.对工作年月进行排序 .ntt.t4.对姓名进行排序 .n); printf(tt.n); while(1) printf(请输入您要选择的操作:); scanf(%d,&i); if(i=0)/输入0,退出排序系统,回到主菜单 break; else if(i=1)/输入1,对性别进行排序 n=0,m,flag=1; for(p=head;NU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论