C语言程序设计课程设计报告-职工档案管理系统设计.doc

上传人:来看看 文档编号:5014224 上传时间:2020-01-28 格式:DOC 页数:21 大小:866.50KB
返回 下载 相关 举报
C语言程序设计课程设计报告-职工档案管理系统设计.doc_第1页
第1页 / 共21页
C语言程序设计课程设计报告-职工档案管理系统设计.doc_第2页
第2页 / 共21页
C语言程序设计课程设计报告-职工档案管理系统设计.doc_第3页
第3页 / 共21页
C语言程序设计课程设计报告-职工档案管理系统设计.doc_第4页
第4页 / 共21页
C语言程序设计课程设计报告-职工档案管理系统设计.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《C语言程序设计课程设计报告-职工档案管理系统设计.doc》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计报告-职工档案管理系统设计.doc(21页珍藏版)》请在三一文库上搜索。

1、C语言程序设计课程设计报告设计题目:职工档案管理系统设计学 号 201030272058 班 级 电信一班 姓 名 完成方式:(单选)自我评分:(单选)独立完成 优秀参考他人工作的基础上完成 良好在他人的帮助下完成 中等完整拷贝他人成果 及格 不及格2010年 2 月29 日C语言课程设计任务书4题目:职工档案管理系统设计功能:职工档案管理系统设计,每个职工是一条记录,包括编号,姓名,性别,出生年月,所在部门,职称,工资级别、电话等。系统可实现以下功能:1、输入功能:输入每一位职工记录,将其信息存入文件中。2、显示功能:完成全部职工记录的显示。3、查找功能:完成按编号或姓名查找职工的相关记录,

2、并显示。分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、建立一个文件,将每位职工的信息写入文件中并能显示于屏幕上。3、完成上述查找(编号,姓名,性别等)、修改等功能。4、进一步要求,修改记录设置密码操作。要求:1、用C语言实现程序设计;2、利用结构体数组实现职工信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。课程设计实验报告要求:1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分 。2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、小结等

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

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

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

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

7、开始主函数删除数据保存数据数据排序添加数据主菜单函数按姓名查找按编号查找三、测试及调试(程序运行截图,测试方案、存在的问题及解决方法)(写明测试软件的时候采用的测试方法、测试数据,并说明在你软件设计、调试过程中的遇到的问题和解决方案)1程序运行截图a.这是添加数据的程序运行截图b.这是查找数据中的按姓名查找的程序运行截图c.这是修改数据的程序运行截图,需要输入9个密码才能够修改。d.这是删除数据的程序运行截图,我们删除了职工e.这是排序数据的程序运行截图2.测试方案、存在的问题及解决方法 我用的是visual C+ 6.0进行编译和测试的,主要观察程序运行的错误及找出错误发生的原因,还有各函数

8、的功能的实现以及部分变量在程序运行时的变化。采取逐个函数测验的方法 ,虽然比较耗时间,但是我实在没有找到可以检查我的海量错误的方法。下面是某此调试的截图。 可以看到,这时候几乎什么错误都有,低级的错误数不清,高级的错误无法数,在这样的局势下,我仍然心静如水地检查错误,下面介绍我遇到的问题及其解决方案。 我主要遇到了三个函数问题,第一,我原本想用数组代替指针,这样可以更好的检查错误,但是后来的的数据保存就遇到了问题,老是无法正确的保存数据,所以还是用了个FILE *fp,当然也为此狂看了文件一章,最后在数据导入也用到了指针和文件。第二,题目本没有要求写删除函数也没有要求写排序函数,也许修改函数能

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

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

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

12、方。 四、小结(收获和建议)通过本次课程设计我不仅温习了C程序设计课程的主体知识,还锻炼了对错误的承受能力,而且这个题目是我这辈子做过的最大的题目,搞了一个多星期才有一点点眉目,让人感到前途特别渺茫,也催迫着我不断前进。 开始时,对这个题目完全无从下手,后来列出了主函数和结构体,就慢慢算入门了,成天趴在电脑里,电脑前放着那本绿色的程序设计的书,外面冷风嗖嗖,鞭炮响起。明天就是除夕了,我要赶在春节前把这个题目做完。而现在函数全部写出来了,且运行的相当成功,几个特殊的功能函数也奇迹般的起作用了,小小的成功给了我大大的喜悦。这个时候,电脑不是机器,数据不是抽象,一切都像春风一样。 调试程序的时候情绪

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

14、defineMAX_NUM900 struct worker int 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(); /* 声明输出函数 */ void modify(); /* 声明修改函数 */ void d

15、eletes(); /* 声明删除函数 */ 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.ID);printf(t职工档案:n);printf(tt姓名:);scanf(%s,&worki.

16、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( 序号 编号 姓名 出生年月 电话t 性别

17、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.Telenum,worki.Sex,worki.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(

18、 *请选择查询方式*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;inumber;i+)if(worki.ID=findID)break;if(inumber)printf(查找结果如下:n);printf(t编号t姓名 t出

19、生年月t电话t 性别t工资t部门t职称n);printf(t%dt%s t%st%st %st%dt%st%sn,worki.ID,worki.Name,worki.Birth,worki.Telenum,worki.Sex,worki.Wage,worki.Department,worki.Job); else printf(您输入的编号不存在!n);break;case 2: system(cls); printf(n您选择的是按姓名查找!n);printf(n请输入职工的姓名: );scanf(%s,&findName);for(i=0;inumber;i+)if(!strcmp(wor

20、ki.Name,findName)break;if(inumber)printf(查找结果如下:n);printf(t编号t姓名 t出生年月t电话t 性别t工资t部门t职称n);printf(t%dt%s t%st%st %st%dt%st%sn,worki.ID,worki.Name,worki.Birth,worki.Telenum,worki.Sex,worki.Wage,worki.Department,worki.Job); else printf(您输入的姓名不存在!n);break; /* 输出函数 */ void output() int i,number=MAX_NUM;sy

21、stem(cls); printf(查找结果如下:n); printf(t编号t姓名 t出生年月t电话t 性别t工资t部门t职称n); for(i=0;inumber;i+) printf(t%dt%s t%st%st %st%dt%st%sn,worki.ID,worki.Name,worki.Birth,worki.Telenum,worki.Sex,worki.Wage,worki.Department,worki.Job); void deletes()int findID,i,j,number=MAX_NUM; system(cls); printf(n您选择的是档案删除!n);pr

22、intf(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.Telenum,workj+1.Telenum); strcpy(workj.Birth,workj+1.Birth); strcpy(workj.Sex,wor

23、kj+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%s t%st%st %st%dt%st%sn,worki.ID,worki.Name,worki.Birth,worki.Telenum,worki.Sex,worki.Wage,worki.Department,worki.Job);elsefor(i=0;inumber-1;i+)printf(t%dt%s

24、 t%st%st %st%dt%st%sn,worki.ID,worki.Name,worki.Telenum,worki.Birth,worki.Sex,worki.Wage,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(*)

25、; if(yzi=r) yzi=0; break; if(!strcmp(psw,yz) printf(n密码正确!n); break; else printf(密码错误,请重输!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%d t%st%st %st%dt%st%sn,worki.Name,worki.Birth,worki.Telenum,wo

26、rki.Sex,worki.Wage,worki.Department,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,&worki.Sex);printf(tt工资:);scanf(%d,&worki.Wage);printf(tt部门:);scanf(%s,&worki.Department);printf(

27、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.Telenum,worki.Sex,worki.Wage,worki.Department,worki.Job);printf( *n);printf(n);elseprintf(您输入的编号

28、不存在!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(不能打开文件!n);for (i=0;inumber;i+) if (fwrite(&worki,sizeof(struct worker),1,fp)!=1) printf(写入文件错误!n); fclose(fp);p

29、rintf(文件已经保存!n); /* 读取档案函数 */ void read() FILE *fp;char filepnMAX_NUM;int number=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;/*

30、排序函数*/void sort()int i,j,n=MAX_NUM,s,v; char temp20; printf(n您选择的是数据排序!n);printf( *请选择排序方式*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);str

31、cpy(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(workj.Sex,temp);s=worki.Wage; worki.Wage=workj.Wage; workj.Wage=s;strcpy(temp,worki.Telenum);strcpy(worki.Tele

32、num,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; 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%s t%st%st %st%dt%st%sn,worki.ID,worki.Name,worki.Birth,worki.Telenum,worki.Sex,worki.Wage,worki.Department,worki.Job);break ;case 2:int k;printf(n您选择的是按工资排序!n);printf( *

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1