C语言职工档案管理系统_500多行代码[1]_第1页
C语言职工档案管理系统_500多行代码[1]_第2页
C语言职工档案管理系统_500多行代码[1]_第3页
C语言职工档案管理系统_500多行代码[1]_第4页
C语言职工档案管理系统_500多行代码[1]_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、,.1程序的总体设计职工档案管理系统设计,每个职工是一条记录,包括编号,姓名,性别,出生年月,所在部门,职称,工资级别、电话等。系统可实现以下功能:1 、输入功能:输入每一位职工记录,将其信息存入文件中。2 、显示功能:完成全部职工记录的显示。3、查找功能:完成按编号或姓名查找职工的相关记录,并显示。2. 数据结构对于这个职工档案系统的设计, 我主要采用结构体存放不同类型的数据, 运用数组对各数据进行控制,而所有数据(除 id 外)都以字符型的形式存放,这样方便存入中文数据。本程序用指针相对较少,事实上,我只在文件的保存函数上用了指针。只要是因为我们对指针了解相对较少,而且指针相对容易出错误,

2、而这个程序用结构体和数组就可以很好地完成。3. 函数原型声明的说明(功能,参数,返回值)1. 主函数 void main()主函数的主意作用是调用函数以实现程序的预期功能,主函数有各函数的声明调用。 主函数用 switch语句对各函数进行调用。2 添加函数: void append()该函数是无参函数, 主要功能是添加职工, 由于界面为 dos的命令界面, 为了使添加更加人性化,我采用先确认添加人数, 再对每个员工的每条信息,逐个添加, 这样可以减少错误的发生和加快输入速度。 员工添加后可用保存函数, 将其数据保存到指定文件中。3 查找函数: void search()该函数是无参函数, 主要

3、功能是查找员工, 可按编号或姓名查找职工的相关记录, 按姓名查找时采用字符串处理函数 strcmp() 进行比较,这样可以用两种方法查找职工信息。4 输出函数: void output()该函数是无参函数,主要功能是输出全部员工的信息,用for 语句进行输出。5 删除函数: void delete()该函数是无参函数,主要功能是删除指定员工的全部信息,该函数相对较复杂,用for语句对删除后该员工后的员工的序号进行排列。;.,.6 修改函数: void modify()该函数是无参函数, 主要功能是修改指定员工的信息, 该函数有密码操作, 要输入密码后才能进入修改界面,密码操作采用 while

4、语句,用 getch() 输入密码,可以将密码隐藏。这里 getch() 函数要调用 conio.h 文件。7 保存函数: void save()该函数是无参函数, 主要功能是保存添加的员工信息到指定文件,该函数用到了指针和文件的内容。8 主菜单函数: void showmenu()该函数是无参函数,主要功能是提供美观的菜单界面。9 文档导入函数: void read()该函数是无参函数,主要功能是导入文件中的职工档案信息。9 数据排序函数: void sort()该函数是无参函数, 主要将职工数据排序, 分按编号排序和工资排序, 工资排序又分从高到低和从低到高两种。二、详细设计1.main(

5、) 流程图;.,.开始主函数switch 语句添查修删保加找改除存数函函数数据数数据据数据排序输主导出菜入数单数据据函数按按编姓号名查查找找按工资排序修改数据按编号排序三、测试及调试(测试方案、存在的问题及解决方法)测试方案、存在的问题及解决方法我用的是 visual c+ 6.0 进行编译和测试的,主要观察程序运行的错误及找出错误发生的原因,还有各函数的功能的实现以及部分变量在程序运行时的变化。采取逐个函数测验的方法 ,虽然比较耗时间,但是我实在没有找到可以检查我的海量错误的方法。下面是某此调试的截图。;.,.可以看到,这时候几乎什么错误都有,低级的错误数不清,高级的错误无法数,在这样的局势

6、下,我仍然心静如水地检查错误,下面介绍我遇到的问题及其解决方案。我主要遇到了三个函数问题,第一,我原本想用数组代替指针,这样可以更好的检查错误,但是后来的的数据保存就遇到了问题,老是无法正确的保存数据,所以还是用了个 file *fp, 当然也为此狂看了文件一章,最后在数据导入也用到了指针和文件。第二,题目本没有要求写删除函数也没有要求写排序函数,也许修改函数能够代替删除函数的一部分功能,但是无法减少职工的数目,这个对于想裁员的公司不利,所以,我又想了一个删除函数。写删除函数遇到的问题是,我删除了编号为 2 的函数,如何把 2 后面的同志移到前面来,而 1 不动,后来还是用最笨的 for 语句

7、搞定了,据说这里可以用链表很美妙地完成,但是也可以不用链表。排序函数是最后加上去的,一个原因是我的程序不够500 行,就完成了功能,后来要求尽情发挥,我就用了排序函数,这个函数相对简单,用的是我们学过的起泡法排序,有按照编号和工资排序两种方式, 也用到了 switch 语句,这样是程序的功能更加完善了。 第三,密码的问题,密码函数是个比较严肃的函数,为此不能敷衍了事用个while 语句和字符串处理函数搞定,这样密码是明文的,很别扭。所以,我又加了一个不熟悉的头文件 #include ,调用了这个文件里的 getch() 函数,这个函数能够不显示你输入的字符,很有保密特性。程序设计其实是最大的问

8、题,起初的两三天我根本就不知道从哪里入手,后来参考到可以用 switch 语句对各功能函数很好的利用,这里还用到了 break 语句,感觉,课堂上没讲的东西就是这么有用啊!关于如何输入数据信息的问题, 我起初准备用一个 scanf 语句,输入全部的职工信息,都是后来发现这样极易出现输入格式不正确的问题, 后来就考虑用一个一个数据输入的方法,虽然这样做使代码长度加长了一些,但是这样输入简单明了更加人性化,所以我最终采用了逐个数据输入的方法。我还用宏定义定义了一个最大员工数 max_num ,这样能够使程序更高效率更准确地运行,而且改变最大员工数业很方便。最后谈谈调试错误的问题, 上面已经晒了我的

9、错误截图,感觉这些错误确实很震撼人,有时候就一个字符串函数应用错误,找了半天,居然发现 strcmp 前面忘记加“!”了,还有诸如忘记写“;”“ ”,最头痛的还是把 %s写成 %d,这样程序能够运行,就是系统告诉你内存错误,搞得我以为电脑坏了,调了半天电脑,这就足够悲剧的。最后还是一点一点地去检查,不怕花费时间,就怕那些小东西太不入眼了。越是小的问题,可能浪费的时间就越让人感到;.,.悲 ,所以, 心 永 是解决此 的良方。四、小结(收获和建议)通 本次 程 我不 温 了 c 程序 程的主体知 , 了 的承受能力,而且 个 目是我 子做 的最大的 目,搞了一个多星期才有一点点眉目, 人感到前途

10、特 渺茫,也催迫着我不断前 。开始 , 个 目完全无从下手,后来列出了主函数和 构体,就慢慢算入 了,成天 在 里, 前放着那本 色的程序 的 ,外面冷 ,鞭炮响起。明天就是除夕了,我要赶在春 前把 个 目做完。而 在函数全部写出来了,且运行的相当成功,几个特殊的功能函数也奇迹般的起作用了,小小的成功 了我大大的喜悦。 个 候, 不是机器,数据不是抽象,一切都像春 一 。 程序的 候情 一直十分 控,一声声 息加上使 敲打 的声音 有怒目 屏幕, 感 在无尽的黑暗中 找黎明。 在黎明的曙光已 出 ,感 一切的努力都是那么 得,心胸豁然开朗。当然也有没有解决的 ,就是我的密 不能 在程序运行的

11、候修改只能 在源程序上修改,后来想了很久也没有找到好的 法。建 ,由于在学校 没有上 几次 ,理 的 西已 慢慢淡忘。所以建 以后此 的 尽量在 室上好些, 有感 只有一个 目没有 挑 性, 多布置几个附件:主要源程序代码(需打印)/*c 语言课程设计任务书:职工档案管理系统设计*/#include #include#include #include #include #definemax_num900struct workerint id;char birth20;charsex20;charname30;char telenum20;int wage;char department30;c

12、har job30;workmax_num;void main();.,.void showmenu();/* 声明主菜单函数*/void append();/* 声明添加函数 */void search();/*声明查找函数*/void output();/*声明输出函数*/void modify();/* 声明修改函数*/void deletes();/*声明删除函数*/void save();/*声明保存函数*/void read();/*声明录入函数 */void sort();/* 声明排序存函数*/int m;showmenu();scanf(%d,&m);for(;m=0&mma

13、x_num)printf( 您输入的人数太多,大于%d 人!n,max_num);for(i=0;inumber;i+)printf(n 请输入第 %d 个职工的编号:t,i+1);scanf(%d,&worki.id);printf(t职工档案 :n);printf(tt姓名 :);scanf(%s,&worki.name);printf(tt出生年月 :);.,.scanf(%s,&worki.birth);printf(tt电话 :);scanf(%s,&worki.telenum);printf(tt性别 :);scanf(%s,&worki.sex);printf(tt工资 :);s

14、canf(%d,&worki.wage);printf(tt部门 :);scanf(%s,&worki.department);printf(tt职称 :);scanf(%s,&worki.job);printf(n 您的输入是 :n);printf(*职工档案信息库*n);printf(序号编号姓名出生年月电话 t性别t 工资 t 部门 t 职称 n);for(i=0;inumber;i+)printf( %d %d %s %st%st%st%dt%st%sn,i+1,worki.id,worki.name,worki.birth,worki.t elenum,worki.sex,worki

15、.wage,worki.department,worki.job); printf( *n); printf(n);/*查找函数*/void search()system(cls);int number=max_num,findid,v,i;char findname30;printf(n您选择的是档案查询!n);printf(*请选择查询方式*n);printf(t t 1- 按编号查找 ;t t t t 2- 按姓名查找 n); /* 以下可以修改为子菜单方式 :1- 按编号查找 ,2-按姓名查找 */printf(*n);printf( 请选择: );scanf(%d,&v);switc

16、h(v) case 1: system(cls);printf(n 您选择的是按编号查找!n);printf(n 请输入职工的编号: );scanf(%d,&findid);.,.for(i=0;inumber;i+)if(worki.id=findid)break;if(inumber)printf( 查找结果如下:n);printf(t 编号 t 姓名 t 出生年月 t 电话 t 性别 t 工资 t 部门 t 职称 n); printf(t%dt%st%st%st %st%dt%st%sn,worki.id,worki.name,worki.birth,worki.telenum,work

17、i.sex,worki.wag e,worki.department,worki.job);elseprintf( 您输入的编号不存在!n);break;case 2:system(cls);printf(n 您选择的是按姓名查找!n);printf(n 请输入职工的姓名: );scanf(%s,&findname);for(i=0;inumber;i+)if(!strcmp(worki.name,findname)break;if(inumber)printf( 查找结果如下:n);printf(t 编号 t 姓名 t 出生年月 t 电话 t 性别 t 工资 t 部门 t 职称 n); pr

18、intf(t%dt%st%st%st %st%dt%st%sn,worki.id,worki.name,worki.birth,worki.telenum,worki.sex,worki.wag e,worki.department,worki.job);elseprintf( 您输入的姓名不存在!n);break;/*输出函数*/void output()int i,number=max_num;system(cls);printf( 查找结果如下:n);printf(t 编号 t 姓名 t 出生年月 t 电话 t 性别 t 工资 t 部门 t 职称 n); for(i=0;inumber;

19、i+);.,.printf(t%dt%st%st%st %st%dt%st%sn,worki.id,worki.name,worki.birth,worki.telenum,worki.sex,worki.wag e,worki.department,worki.job);void deletes()int findid,i,j,number=max_num;system(cls);printf(n您选择的是档案删除!n);printf(n 请输入职工的编号: );scanf(%d,&findid);for(i=0;inumber;i+)if(worki.id=findid)break;pri

20、ntf(t 编号 t 姓名 t 出生年月 t 电话 t 性别 t 工资 t 部门 t 职称 n); if(inumber)for(j=i;jnumber-1;j+)workj.id=workj+1.id;strcpy(workj.name,workj+1.name);strcpy(workj.telenum,workj+1.telenum);strcpy(workj.birth,workj+1.birth);strcpy(workj.sex,workj+1.sex);workj.wage=workj+1.wage;strcpy(workj.department,workj+1.departme

21、nt);strcpy(workj.job,workj+1.job);for(i=0;inumber-1;i+)printf(t%dt%st%st%st %st%dt%st%sn,worki.id,worki.name,worki.birth,worki.telenum,worki.sex,worki.wag e,worki.department,worki.job);elsefor(i=0;inumber-1;i+)printf(t%dt%st%st%st %st%dt%st%sn,worki.id,worki.name,worki.telenum,worki.birth,worki.sex,

22、worki.wag e,worki.department,worki.job);number-;.,./*修改函数*/void modify()int findid,i,number=max_num;system(cls);char yz9,psw9=12345678;printf(n您选择的是档案修改!n);while(1)printf(n请输入密码 !n);for(i=0;i9;i+)yzi=getch();printf(*);if(yzi=r)yzi=0;break;if(!strcmp(psw,yz)printf(n 密码正确 !n);break;elseprintf( 密码错误,请重

23、输!n);printf(n 请输入职工的编号: );scanf(%d,&findid);for(i=0;inumber;i+)if(worki.id=findid)break;if(inumber)printf(t姓名t 出生年月电话tt 性别 t 工资 t 部门 t 职称 n);printf(原档案:nt%dt%st%st%st%dt%st%sn,worki.name,worki.birth,worki.telenum,worki.sex,worki.wage,worki.department,worki.job);printf( 请输入新档案:n );printf(tt姓名 :);.,.s

24、canf(%s,&worki.name);printf(tt出生年月 :);scanf(%s,&worki.birth);printf(tt电话 :);scanf(%s,&worki.telenum);printf(tt性别 :);scanf(%s,&worki.sex);printf(tt工资 :);scanf(%d,&worki.wage);printf(tt部门 :);scanf(%s,&worki.department);printf(tt职称 :);scanf(%s,&worki.job);printf(n 您的输入是 :n);printf(*职工档案信息库*n);printf(序号

25、编号姓名出生年月电话 t性别t 工资 t 部门 t 职称 n);for(i=0;inumber;i+)printf( %d %d %s %st%st%st%dt%st%sn,i+1,worki.id,worki.name,worki.birth,worki.t elenum,worki.sex,worki.wage,worki.department,worki.job);printf(*n);printf(n);elseprintf( 您输入的编号不存在!n);/*保存函数*/void save()file *fp;char filepnmax_num;int number=max_num,i

26、;system(cls);printf( 您选择的是职工档案的保存!n);printf( 请输入文件路径及文件名:);scanf(%s,filepn);if(fp=fopen(filepn,w+)=null)printf( 不能打开文件!n);.,.for (i=0;inumber;i+)if (fwrite(&worki,sizeof(struct worker),1,fp)!=1)printf( 写入文件错误!n);fclose(fp);printf( 文件已经保存!n);/*读取档案函数*/void read()file *fp;char filepnmax_num;int number

27、=max_num,i;system(cls);printf( 您选择的是职工档案的读取!n);printf( 请输入文件路径及文件名:);scanf(%s,filepn);/* 输入文件路径及名称*/if(fp=fopen(filepn,r+)=null)printf( 不能打开文件!n); i=0; while(!feof(fp)fread(&worki+,sizeof(struct worker),1,fp);number=i-1;/* 排序函数 */void sort()int i,j,n=max_num,s,v;char temp20;printf(n 您选择的是数据排序!n);pri

28、ntf(*请选择排序方式*n);printf(t t 1- 按编号排序 ;t t t t 2- 按工资排序 n); /* 以下可以修改为子菜单方式 :1- 按编号排序 ,2-按工资排序 */;.,.printf(*n);printf( 请选择: );scanf(%d,&v);switch(v) case 1:for(i=0;i=n;i+)for(j=i+1;j=n;j+)if(workj.idworki.id)strcpy(temp,worki.birth);strcpy(worki.birth,workj.birth);strcpy(workj.birth,temp);strcpy(temp

29、,worki.name);strcpy(worki.name,workj.name);strcpy(workj.name,temp);strcpy(temp,worki.sex);strcpy(worki.sex,workj.sex);strcpy(workj.sex,temp);s=worki.wage;worki.wage=workj.wage;workj.wage=s;strcpy(temp,worki.telenum);strcpy(worki.telenum,workj.telenum);strcpy(workj.telenum,temp);strcpy(temp,worki.dep

30、artment);strcpy(worki.department,workj.department);strcpy(workj.department,temp);strcpy(temp,worki.job);strcpy(worki.job,workj.job);strcpy(workj.job,temp);s=worki.id;worki.id=workj.id;workj.id=s;printf(新的排序如下:n);printf(t 编号 t 姓名 t 出生年月 t 电话 t 性别 t 工资 t 部门 t 职称 n); for(i=0;in;i+)printf(t%dt%st%st%st

31、%st%dt%st%sn,worki.id,worki.name,worki.birth,worki.telenum,worki.sex,worki.wag e,worki.department,worki.job);.,.break ;case 2:int k;printf(n您选择的是按工资排序!n);printf(*请选择排序方式*n);printf(t t 1- 按工资从高到低排序 ;t t t t 2- 按工资从低到高排序 n); /* 以下可以修改为子菜单方式 :1-按工资从高到低排序 ;2-按工资从低到高排序 */printf(*n);printf( 请选择: );scanf(%

32、d,&k);switch(k) case 1:for(i=0;i=n;i+)for(j=i+1;j=n;j+)if(worki.wageworkj.wage)strcpy(temp,worki.birth);strcpy(worki.birth,workj.birth);strcpy(workj.birth,temp);strcpy(temp,worki.name);strcpy(worki.name,workj.name);strcpy(workj.name,temp);strcpy(temp,worki.sex);strcpy(worki.sex,workj.sex);strcpy(wor

33、kj.sex,temp);s=worki.wage;worki.wage=workj.wage;workj.wage=s;strcpy(temp,worki.telenum);strcpy(worki.telenum,workj.telenum);strcpy(workj.telenum,temp);strcpy(temp,worki.department);strcpy(worki.department,workj.department);strcpy(workj.department,temp);strcpy(temp,worki.job);strcpy(worki.job,workj.job);strcpy(workj.job,temp);s=worki.id;work

温馨提示

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

评论

0/150

提交评论