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

下载本文档

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

文档简介

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()该函数是无参函数, 主要功能是修改指定员工的信息, 该函数有密码操作, 要输入密码 后才能进入修改界面,密码操作采用 whil

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

5、main() 流程图开始主函数三、测试及调试(测试方案、存在的问题及解决方法)测试方案、存在的问题及解决方法我用的是visual C+ 6.0进行编译和测试的,主要观察程序运行的错误及找出错误发生的原因,还有各函数的功能的实现以及部分变量在程序运行时的变化。采取逐个函数测验 的方法,虽然比较耗时间,但是我实在没有找到可以检查我的海量错误的方法。下面是某此 调试的截图。idmini-lMocals lt empt emp 929ncnajneO. ci. c(80):errorC2143:syntax error : miasing before*3 i. ct0i:vatiting C4091

6、: ” : ignored on left ftf iwt vhsnno variable 13 declaredi c(83):errorC2065: number : undeclared identifierl. cC83):errorC2065;* i* : undeclarftd identifierI. c (134) : error C2O01:I. c (135) i error C2143:L c (140) i error C2143:l. c (l&l) i error C2143:L c C176) i error C2O66:I. c (176) ; warning

7、C4047: n functioni. c (176) : earning C4024: ? strcpy?:Lc(lTfi):Lc(i?6):i,g(206) ii. c(225):i.c(232) Ii.c(233):i. c(236):l c(237):I. c237):i.c(237):I. c(237) il. C f23 7)t诃虫tniiigC4047 I=: iiit 7differs in levels aT indite dt loti f rb*.i. c C244):uiarjiirLa匚4047:? function :1 struct _iobnf T differ

8、s in levels ofindirection from intI l f 少打、 irtsr nird H 9dl ? urr 11 * Ai farnt 牛勒币白住-f n rtnisl artdl ar +111 ri-ara r detr or err or etr Qr error errjr error error errornewline in constantsyntaxerror:Hissing:、;tisfore:乃工亡弹syntaxerror:missingF : ,before3 for3syntaxerror:missing /before3 brealt? wo

9、rkj? : undeclared ldentiiisr;const char X differs in levels of different typ&s for formal and actual :inissins 、 teforeindirection from. ? int ? parameter 2C2143:C2O59:C2U3;C2143:2143:C2143:C2D65:C2OS5: tC4047: iun.ction : const char * die rs ui levels oC4024: 1open1 : different types fo匚 formal and

10、 actual paraneter 1C4047: 二:* ml L differs in levels of indirect ion front struct iotuf *7 ini diff in levels aT inditedtion from. * void *syntax syntaz syntax syntax gyrrt ax syntaxerror error errQi error error terror; / F: missingtef ore 弋沖; missingteforu type:missing; ; tefor皀? type?甲iZlepn : xmd

11、eclared identifier?: undeclared identifierwarning warning earning warning 匚4D4T iindirect ionmt可以看到,这时候几乎什么错误都有,低级的错误数不清,高级的错误无法数,在这样的 局势下,我仍然心静如水地检查错误,下面介绍我遇到的问题及其解决方案。我主要遇到了三个函数问题,第一,我原本想用数组代替指针,这样可以更好的检查错 误,但是后来的的数据保存就遇到了问题,老是无法正确的保存数据,所以还是用了个FILE*fp,当然也为此狂看了文件一章,最后在数据导入也用到了指针和文件。第二,题目本没有 要求写删除函数

12、也没有要求写排序函数,也许修改函数能够代替删除函数的一部分功能,但 是无法减少职工的数目,这个对于想裁员的公司不利,所以,我又想了一个删除函数。写删 除函数遇到的问题是,我删除了编号为 2的函数,如何把2后面的同志移到前面来,而1不 动,后来还是用最笨的for语句搞定了,据说这里可以用链表很美妙地完成,但是也可以不 用链表。排序函数是最后加上去的,一个原因是我的程序不够500行,就完成了功能,后来要求尽情发挥,我就用了排序函数,这个函数相对简单,用的是我们学过的起泡法排序,有 按照编号和工资排序两种方式,也用到了 switch语句,这样是程序的功能更加完善了。第三, 密码的问题,密码函数是个比

13、较严肃的函数,为此不能敷衍了事用个while语句和字符串处理函数搞定,这样密码是明文的,很别扭。所以,我又加了一个不熟悉的头文件#in eludevconio.h,调用了这个文件里的getch()函数,这个函数能够不显示你输入的字符,很有保 密特性。程序设计其实是最大的问题,起初的两三天我根本就不知道从哪里入手,后来参考到 可以用switch语句对各功能函数很好的利用,这里还用到了break语句,感觉,课堂上没讲的东西就是这么有用啊!关于如何输入数据信息的问题,我起初准备用一个scanf语句,输入全部的职工信息, 都是后来发现这样极易出现输入格式不正确的问题,后来就考虑用一个一个数据输入的方法

14、,虽然这样做使代码长度加长了一些,但是这样输入简单明了更加人性化,所以我最终采用了 逐个数据输入的方法。我还用宏定义定义了一个最大员工数MAX_NUM,这样能够使程序更高效率更准确地运行,而且改变最大员工数业很方便。最后谈谈调试错误的问题,上面已经晒了我的错误截图,感觉这些错误确实很震撼人, 有时候就一个字符串函数应用错误,找了半天,居然发现strcmp前面忘记加“!” 了,还有诸如忘记写“;”“ ”,最头痛的还是把s写成%d这样程序能够运行,就是系统告诉你内存 错误,搞得我以为电脑坏了,调了半天电脑,这就足够悲剧的。最后还是一点一点地去检查, 不怕花费时间,就怕那些小东西太不入眼了。越是小的

15、问题,可能浪费的时间就越让人感到悲愤,所以,细心检查永远是解决此类问题的良方。四、小结(收获和建议)通过本次课程设计我不仅温习了 C 程序设计课程的主体知识,还锻炼了对错误的承受能 力,而且这个题目是我这辈子做过的最大的题目,搞了一个多星期才有一点点眉目,让人感 到前途特别渺茫,也催迫着我不断前进。开始时,对这个题目完全无从下手,后来列出了主函数和结构体,就慢慢算入门了, 成天趴在电脑里,电脑前放着那本绿色的程序设计的书,外面冷风嗖嗖,鞭炮响起。明天就 是除夕了,我要赶在春节前把这个题目做完。而现在函数全部写出来了,且运行的相当成功, 几个特殊的功能函数也奇迹般的起作用了,小小的成功给了我大大

16、的喜悦。这个时候,电脑 不是机器,数据不是抽象,一切都像春风一样。调试程序的时候情绪一直十分难控,一声声叹息加上使劲敲打键盘的声音还有怒目对视 屏幕,这样感觉在无尽的黑暗中寻找黎明。现在黎明的曙光已经出现,感觉一切的努力都是 那么值得,心胸豁然开朗。当然也有没有解决的问题,就是我的密码不能够在程序运行的时候修改只能够在源程序 上修改,后来想了很久也没有找到好的办法。建议,由于在学校时没有上过几次实验课,理论的东西已经慢慢淡忘。所以建议以 后此类的课尽量在实验室上好些,还有感觉只有一个题目没有啥挑战性,应该多布置几个附件:主要源程序代码(需打印)/*C 语言课程设计任务书 :职工档案管理系统设计

17、 */ #include #include#include #include #include #define MAX_NUM 900struct workerint ID;char Birth20;char Sex20;char Name30;char Telenum20;int Wage;char Department30;char Job30;workMAX_NUM;void main()void showmenu(); /* 声明主菜单函数 */void append(); /* 声明添加函数 */ void search(); /* 声明查找函数 */ void output();

18、/* 声明输出函数 */ void modify(); /* 声明修改函数 */ void deletes(); /* 声明删除函数 */ void save(); /* 声明保存函数 */ void read(); /* 声明录入函数 */ void sort(); /* 声明排序存函数 */ int m;showmenu();scanf(%d,&m);for(;m=0&mMAX_NUM)printf(”您输入的人数太多,大于%d人!n,MAX_NUM);for(i=0;inumber;i+)printf(n 请输入第 %d 个职工的编号 :t,i+1); scanf(%d,&worki.I

19、D); 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 工资 :); scanf(%d,&worki.Wage); printf(tt 部门 :); scanf(%s,&worki.Department); printf(tt 职称 :); scanf(%s,&wor

20、ki.Job);printf(n 您的输入是 :n);printf( * printf( 序号 编号 姓名 出生年月职工档案信息库*n);电话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);/* 查找函数 */ void search() system(cls);i

21、nt number=MAX_NUM,findID,v,i;char findName30;printf(n 您选择的是档案查询 !n);请选择查询方式);/n*printf(t t 1- 按编号查找 ;t t t t 2-按姓名查找 n); /* 以下可以修改为子菜单方式:1-按编号查找 ,2-按姓名查找 */printf(*n);printf( 请选择: );scanf(%d,&v); switch(v) case 1:system(cls);printf(n 您选择的是按编号查找 !n); printf(n 请输入职工的编号 : ); scanf(%d,&findID);for(i=0;i

22、number;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,worki.Sex,worki.Wag e,worki.Department,worki.Job);else printf( 您输入的编号不存在 !n);break;case 2:system(cls);printf(n 您选择的是按姓

23、名查找 !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”);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.Jo

24、b);else printf( 您输入的姓名不存在 !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;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);voi

25、d 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;printf(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.Telen

26、um,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.Department); 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,wo

27、rki.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,worki.Wag e,worki.Department,worki.Job);number-;/* 修改函数 */void modify()int findID,i,number=MAX_NUM;system(cls);char yz9,psw9=12345678;printf(n 您选择的

28、是档案修改 !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( 密码错误,请重输 !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

29、);:nt%dprintf( 原 档 案t%st%st %st%dt%st%sn,worki.Name,worki.Birth,worki.Telenum,worki.Sex,worki.Wage,worki.D epartment,worki.Job);printf( 请输入新档案 :n );printf(tt 姓名 :);scanf(%s,&worki.Name); printf(tt 出生年月 :); scanf(%s,&worki.Birth); printf(tt 电话 :); scanf(%s,&worki.Telenum); printf(tt 性别 :); scanf(%s,&

30、worki.Sex); printf(tt 工资 :); scanf(%d,&worki.Wage); printf(tt 部门 :); scanf(%s,&worki.Department); printf(tt 职称 :); scanf(%s,&worki.Job);printf(n 您的输入是 :n);printf( * printf( 序号 编号 姓名 出生年月职工档案信息库*n);电话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.B

31、irth,worki.T elenum,worki.Sex,worki.Wage,worki.Department,worki.Job);printf( *nprintf(n);elseprintf( 您输入的编号不存在 !n);/* 保存函数 */void save()FILE *fp;char filepnMAX_NUM;int number=MAX_NUM,i;system(cls);printf( 您选择的是职工档案的保存 !n); printf( 请输入文件路径及文件名 :); scanf(%s,filepn); if(fp=fopen(filepn,w+)=NULL) printf

32、( 不能打开文件 !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=MAX_NUM,i;system(cls);printf( 您选择的是职工档案的读取 !n); printf( 请输入文件路径及文件名 :);scanf(%s,filepn);/* 输入文件路径及名称 */ i

33、f(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);printf(*请选择排序方式);printf(t t 1- 按编号排序 ;t t t t 2-按工资排序 n); /* 以下可以修改为子菜单方式 :1-按编号排序 ,2-按工 资排序 */printf(

34、*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,worki.Name);strcpy(worki.Name,workj.Name);strcpy(workj.Name,temp);strcpy(temp,worki.Sex);strcpy(worki.S

35、ex,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.Department);strcpy(worki.Department,workj.Department);strcpy(workj.Department,temp);strcpy(temp,worki.Job);

36、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 %st%dt%st%sn,worki.ID,worki.Name,worki.Birth,worki.Telenum,worki.Sex,worki.Wag e,worki.Department,worki.Job);break ; ca

37、se 2:int k;printf(n 您选择的是按工资排序/n*!n);请选择排序方式);printf(t t 1- 按工资从高到低排序 ;t t t t 2- 按工资从低到高排序 n); /* 以下可以修改为子菜单方式 :1-按 工资从高到低排序 ;2-按工资从低到高排序 */printf(*n);printf( 请选择: );scanf(%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,

38、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(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,t

温馨提示

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

评论

0/150

提交评论