职工档案管理系统设计_第1页
职工档案管理系统设计_第2页
职工档案管理系统设计_第3页
职工档案管理系统设计_第4页
职工档案管理系统设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、一、软件课题:职工档案管理系统设计二、软件要求:1、用C语言实现系统;2、函数功能要划分好(结构化程序设计);3、界面友好(良好的人机交互),加必要的注释;4、要提供程序测试方案,程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。三、功能结构:职工档案管理系统包含了职工的全部信息,每个职工是一条记录,包括编号,姓名,部门,电话等。系统可完成:信息录入、信息查询,并按可选的自定义规则进行排序;信息删除与修改(须设置密码),将职工的信息保存于外部存储器的文件中。SSwitch语句添加函数删除函数修改函数排序函数查找函数列表函数保存函数退出输入姓名输入密码输入名字查找

2、删除数据输入姓名修改要添加的人数添加保存在文档中显示信息显示直接结束主函数统计总数四、软件特色在程序的开头,从文件读取一个字符,来判断以前是否有保存职工的信息,如果有,则读取已保存的内容,若没,则什么都不做,执行下面的程序。主函数很普通。添加函数:如果没有数据,可以批量添加,如果有数据,可以一个一个添加,且不会覆盖前面的数据,使程序更健壮。删除函数:密码是已经定义好的,删除用if判断是否跟已定义的密码一样,一样的话,则执行删除操作。排序函数:原理是冒泡法排序。两个选项供用户选择。保存函数:先调用了统计函数,统计共添加多少数据,然后通过循环进行保存。共保存了两个文件,信息文件和标记文件。标记文件

3、是用来标记已经保存过职工的信息,供下次打开程序时读取职工的信息。查找函数、列表显示是按书上的方法改了点。五、程序代码#include#include#include#includestruct zhigong /定义结构体char name10; /定义姓名。int gonghao; /定义工号。char bumen10; /定义部门。char haoma15; / 定义号码。struct zhigong *next;void main() /主函数。struct zhigong *duqu(void);/带回一个指向链表头的指针struct zhigong *tianjia(struct z

4、higong *head); /声明自定义函数struct zhigong *shanchu(struct zhigong *head); /声明自定义函数struct zhigong *xiugai(struct zhigong *head); /声明自定义函数struct zhigong *paixu(struct zhigong *head); /声明自定义函数void chazhao(struct zhigong *); /声明自定义函数void liebiao(struct zhigong *); /声明自定义函数void baocun(struct zhigong *); /声明自

5、定义函数char k5;int b; /定义选择数字,switch中用到struct zhigong *head=NULL; /定义头结点FILE *fp;fp=fopen(d:/biaoji.txt,r+);if(!fp); /要是打不开就什么都不做,直接运行下面的程序elsehead=duqu(); while(1) /无限循环,选择菜单能多次选择。printf( 职工档案管理系统n);printf(*n);printf(1、添加 );printf(2、删除n);printf(3、查找 );printf(4、列表查看n);printf(5、保存 );printf(6、修改n);printf

6、(7、排序 );printf(8、退出n);printf(*n);printf(请输入你的选择n);scanf(%s,k);b=atoi(k);if(b8) /判断输入的选择是否越界。printf(选择错误,请重新选择n); /如果越界,重新选择。switch (b)case 1: head=tianjia(head);break; /返回值要赋给headcase 2: head=shanchu(head);break;case 3: chazhao(head);break;case 4: liebiao(head);break;case 5: baocun(head);break;case

7、6: head=xiugai(head);break;case 7: head=paixu(head);break;case 8: exit(0);break; struct zhigong *tianjia(struct zhigong *head) /添加函数struct zhigong *p,*q; /定义结构体类型。int i,z; /用于for 循环if(!head)printf(请输入要添加的人数n);scanf(%d,&z);head=p=(struct zhigong *)malloc (sizeof (struct zhigong); /头结点head-next=NULL;

8、/头结点 指向的next 为空 for(i=0;iname,&q-gonghao,q-bumen,q-haoma);p-next=q;p=p-next; /继续开辟 p-next=NULL; else p=head;while(p-next!=NULL)p=p-next;q=(struct zhigong *)malloc(sizeof(struct zhigong);printf(请输入 姓名,工号,部门,号码n);scanf(%s%d%s%s,q-name,&q-gonghao,q-bumen,q-haoma);q-next=NULL;p-next=q;p=p-next; return h

9、ead; / 返回链表的首地址,head 接收。struct zhigong *shanchu(struct zhigong *head) /删除函数struct zhigong *p,*q; / 声明是结构体类型char name110; /定义要删除的人的姓名char mima10=yuan; / 定义删除密码char b10; / 用来输入删除密码p=head; if(head=NULL) /判断head是否为空。 printf(列表为空!无法删除。n); return 0; printf(请输入要删除的职工的姓名n); /输入要删除的姓名。 scanf(%s,name1);while(

10、strcmp(p-name,name1)!=0&p-next!=NULL) /通过循环来找到要删除的姓名。q=p;p=p-next;if(strcmp(p-name,name1)=0) /找到要删除的姓名了。printf(请输入删除密码n); scanf(%s,b); if(strcmp(b,mima)=0) /判断删除密码是否正确,正确执行删除操作。q-next=p-next; free(p); /释放掉(可以不释放喔!)printf(删除成功n); else / 不正确,显示密码错误。 printf(密码不正确n);else /没有找到要删除的姓名。printf(找不到该姓名n);retu

11、rn head; /返回主函数。void chazhao(struct zhigong *head) /查找函数struct zhigong *p; /声明是结构体类型。char name110; /声明要查找的姓名。if(head=NULL) /还是判断head 是否为空。printf(没有数据n);elsep=head-next; /因为头结点不为空,故p=head-next。printf(请输入要查找的姓名n); /输入要查找的姓名。scanf(%s,name1); while(strcmp(p-name,name1)!=0&p-next!=NULL) /寻找要查找的姓名。p=p-nex

12、t; if(strcmp(p-name,name1)=0) /找到了。 printf(姓名,工号,部门,号码n); printf(%s,%d,%s,%sn,p-name,p-gonghao,p-bumen,p-haoma); /*显示该姓名的信息。*/ else printf(找不到该姓名n); /没有找到。 void liebiao(struct zhigong *head) /列表显示 函数。struct zhigong *p; /声明是结构体类型。if(head=NULL) /判断是否为空。printf(没有数据n);else p=head-next; /head 不为空,p=head-

13、next。printf(姓名,工号,部门,号码n);for(;p!=NULL;p=p-next) /循环 显示链表中所有节点的内容。printf(%s,%d,%s,%sn,p-name,p-gonghao,p-bumen,p-haoma); /没有返回值。void baocun(struct zhigong *head) /保存函数。int zongshu(struct zhigong *head);struct zhigong *p; /声明是结构体类型。FILE *fp;FILE *TP;int n; int biaoji;fp=fopen(d:/yuan.txt,w+); /为保存 新建

14、一个文件。if(fp=NULL) /判断是否打开成功。printf(文件打开失败n);if(head=NULL) /判断链表是否为空。printf(没有数据n);return ;n=zongshu(head); /把统计得到的数给它fputc(n,fp); /把n输出到fp所指的文件夹p=head-next; /头结点为空。while(p) /循环保存,结束条件等价于 p!=NULL。fprintf(fp,%s %d %s %sn,p-name,p-gonghao,p-bumen,p-haoma);p=p-next; fclose(fp);TP=fopen(d:/biaoji.txt,w+);

15、if(!TP)printf(文件打开失败!n);return; /*没有数据就要返回*/biaoji=1;fputc(biaoji,TP);/把n输出到tp所指的文件夹fclose(TP);printf(保存成功n);struct zhigong *xiugai(struct zhigong *head) /修改函数。struct zhigong *p; /声明是结构体类型char name110; if(head=NULL)printf(没有数据n);elsep=head-next;printf(请输入要修改的姓名n);scanf(%s,name1); while(strcmp(p-name

16、,name1)!=0&p-next!=NULL) p=p-next; if(strcmp(p-name,name1)=0)printf(请输入要修改的数据n);printf(请输入 姓名,工号,部门,号码n);scanf(%s%d%s%s,p-name,&p-gonghao,p-bumen,p-haoma); /*修改节点的内容。*/printf(修改成功n); else printf(找不到该姓名n);return head;struct zhigong *paixu(struct zhigong *head) /排序函数。struct zhigong *p,*q; /声明是结构体类型。in

17、t flag,k,b; /flag 是用来判断循环是否结束。char cat10,v5; /*两字符串进行交换所需的中间字符串*/if(head=NULL) /判断是否为空。printf(没有数据n);return 0;printf(1、按工号排序。n);printf(2、按姓名排序。n);printf(请输入你的选择。n);scanf(%s,v);b=atoi(v); /字符型的转换为整型的。if(b2|bnext; flag=0; /flag 使其为零,结束循环。while(p-next!=NULL) /* 函数目的是两个节点的内容进行比较和交换节点的内容。*/q=p-next;if(p-

18、gonghao)(q-gonghao) /*如果前个节点的工号大于后个节点的工号,两个节点的内容交换。*/strcpy(cat,p-name); /交换节点的内容。strcpy(p-name,q-name); /*两个字符串的内容是不能直接进行交换的,所以借助strcpy.*/strcpy(q-name,cat);k=p-gonghao;p-gonghao=q-gonghao;q-gonghao=k;strcpy(cat,p-bumen);strcpy(p-bumen,q-bumen);strcpy(q-bumen,cat);strcpy(cat,p-haoma);strcpy(p-haoma

19、,q-haoma);strcpy(q-haoma,cat);flag=1; /*flag =1 外层循环的结束标志,在这里是记录里面的循环是否执行,如果没执行,说明链表里的内容是有序的。*/p=p-next;while(flag);printf(排序完成。n);return head;break;case 2:do /两个循环进行排序,其原理是冒泡排序法。p=head-next; flag=0; /flag 使其为零,结束循环。while(p-next!=NULL) /*函数目的是两个节点的内容进行比较和交换节点的内容。*/q=p-next;if(strcmp(p-name,q-name)0)

20、 /*如果前个节点的姓名大于后个节点的姓名,两个节点的内容交换。*/strcpy(cat,p-name); /交换节点的内容。strcpy(p-name,q-name); /*两个字符串的内容是不能直接进行交换的,所以借助strcpy.*/strcpy(q-name,cat);k=p-gonghao;p-gonghao=q-gonghao;q-gonghao=k;strcpy(cat,p-bumen);strcpy(p-bumen,q-bumen);strcpy(q-bumen,cat);strcpy(cat,p-haoma);strcpy(p-haoma,q-haoma);strcpy(q-

21、haoma,cat);flag=1; /*flag =1 外层循环的结束标志,在这里是记录里面的循环是否执行,如果没执行,说明链表里的内容是有序的。*/p=p-next;while(flag);printf(排序完成n);return head;break;return head;struct zhigong *duqu(void)struct zhigong *p,*q,*H;FILE *fp;int n;H=p=(struct zhigong *)malloc (sizeof(struct zhigong);fp=fopen(D:/yuan.txt,r+);if(!fp)printf(文件

22、打开失败);elsen=fgetc(fp); /共添加多少while(n0)q=(struct zhigong *)malloc (sizeof(struct zhigong);fscanf(fp,%s %d %s %sn,q-name,&q-gonghao,q-bumen,q-haoma);p-next=q;p=p-next; /继续开辟下一个。n-;p-next=NULL;fclose(fp);return H;int zongshu(struct zhigong *head) /统计一下下共添加了多少。int n=0;struct zhigong *p;p=head-next;while

23、(p)n+;p=p-next;return n;六、程序调试及修改记录:排序函数增加了一个选择,原来只是按序号排序的。运用atoi将字符型的转换为整型的。显示函数做了修改,可以将上一次输入的信息显示出来。增加一个标记文档,要是标记里面有内容,则可以进行读取。对输入的信息进行记录(总数)。七、输入数据及输出结果: 职工档案管理系统*1、添加 2、删除3、查找 4、列表查看5、保存 6、修改7、排序 8、退出*请输入你的选择4姓名,工号,部门,号码张三,2,自治部,1293898445李四,8,学习部,4875847584 职工档案管理系统*1、添加 2、删除3、查找 4、列表查看5、保存 6、修改7、排序 8、退出*请输入你的选择1请输入 姓名,工号,部门,号码王五3文娱部1234567890 职工档案管理系统*1、添加 2、删除3、查找 4、列表查看5、保存 6、修改7、排序 8、退出*请输入你的选择4姓名,工号,部门,号码张三,2,自治部,1293898445李四,8,学习部,4875847584王五,3,文娱部,1234567890 职工档案管理系统*1、添加 2、删除3、查找 4、列表查看5、保存 6、修改7、排序 8、退出*请输入你的选择5保存成功

温馨提示

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

评论

0/150

提交评论