1C语言程序设计课程设计报告设计题目:职工档案管理系统设计学号201030272058班级电信一班姓名陈文凯完成方式:(单选)自我评分:(单选)○独立完成○优秀○参考他人工作的基础上完成○良好○在他人的帮助下完成○中等○完整拷贝他人成果○及格○不及格2010年2月29日2C语言课程设计任务书4题目:职工档案管理系统设计功能:职工档案管理系统设计,每个职工是一条记录,包括编号,姓名,性别,出生年月,所在部门,职称,工资级别、电话等。系统可实现以下功能:1、输入功能:输入每一位职工记录,将其信息存入文件中。2、显示功能:完成全部职工记录的显示。3、查找功能:完成按编号或姓名查找职工的相关记录,并显示。分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、建立一个文件,将每位职工的信息写入文件中并能显示于屏幕上。3、完成上述查找(编号,姓名,性别等)、修改等功能。4、进一步要求,修改记录设置密码操作。要求:1、用C语言实现程序设计;2、利用结构体数组实现职工信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。课程设计实验报告要求:1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分。2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、小结等。一、总体设计1.程序的总体设计职工档案管理系统设计,每个职工是一条记录,包括编号,姓名,性别,出生年月,所在部门,职称,工资级别、电话等。系统可实现以下功能:1、输入功能:输入每一位职工记录,将其信息存入文件中。2、显示功能:完成全部职工记录的显示。3、查找功能:完成按编号或姓名查找职工的相关记录,并显示。2.数据结构对于这个职工档案系统的设计,我主要采用结构体存放不同类型的数据,运用数组对各数据进行控制,而所有数据(除ID外)都以字符型的形式存放,这样方便存入中文数据。本程序用指针相对较少,事实上,我只在文件的保存函数上用了指针。只要是因为我们对指针了解相对较少,而且指针相对容易出错误,而这个程序用结构体和数组就可以很好地完成。3.函数原型声明的说明(功能,参数,返回值)31.主函数voidmain()主函数的主意作用是调用函数以实现程序的预期功能,主函数有各函数的声明调用。主函数用switch语句对各函数进行调用。2添加函数:voidappend()该函数是无参函数,主要功能是添加职工,由于界面为DOS的命令界面,为了使添加更加人性化,我采用先确认添加人数,再对每个员工的每条信息,逐个添加,这样可以减少错误的发生和加快输入速度。员工添加后可用保存函数,将其数据保存到指定文件中。3查找函数:voidsearch()该函数是无参函数,主要功能是查找员工,可按编号或姓名查找职工的相关记录,按姓名查找时采用字符串处理函数strcmp()进行比较,这样可以用两种方法查找职工信息。4输出函数:voidoutput()该函数是无参函数,主要功能是输出全部员工的信息,用for语句进行输出。5删除函数:voiddelete()该函数是无参函数,主要功能是删除指定员工的全部信息,该函数相对较复杂,用for语句对删除后该员工后的员工的序号进行排列。6修改函数:voidmodify()该函数是无参函数,主要功能是修改指定员工的信息,该函数有密码操作,要输入密码后才能进入修改界面,密码操作采用while语句,用getch()输入密码,可以将密码隐藏。这里getch()函数要调用conio.h文件。7保存函数:voidsave()该函数是无参函数,主要功能是保存添加的员工信息到指定文件,该函数用到了指针和文件的内容。8主菜单函数:voidshowmenu()该函数是无参函数,主要功能是提供美观的菜单界面。9文档导入函数:voidread()该函数是无参函数,主要功能是导入文件中的职工档案信息。9数据排序函数:voidsort()4该函数是无参函数,主要将职工数据排序,分按编号排序和工资排序,工资排序又分从高到低和从低到高两种。二、详细设计1.main()流程图Switch语句查找函数输出数据修改函数开始主函数删除数据保存数据数据排序添加数据主菜单函数按姓名查找按编号查找由高到低按编号排序由低到高导入数据按工资排序输入密码修改数据5三、测试及调试(程序运行截图,测试方案、存在的问题及解决方法)(写明测试软件的时候采用的测试方法、测试数据,并说明在你软件设计、调试过程中的遇到的问题和解决方案)1.程序运行截图a.这是添加数据的程序运行截图6b.这是查找数据中的按姓名查找的程序运行截图c.这是修改数据的程序运行截图,需要输入9个密码才能够修改。7d.这是删除数据的程序运行截图,我们删除了职工e.这是排序数据的程序运行截图82.测试方案、存在的问题及解决方法我用的是visualC++6.0进行编译和测试的,主要观察程序运行的错误及找出错误发生的原因,还有各函数的功能的实现以及部分变量在程序运行时的变化。采取逐个函数测验的方法,虽然比较耗时间,但是我实在没有找到可以检查我的海量错误的方法。下面是某此调试的截图。可以看到,这时候几乎什么错误都有,低级的错误数不清,高级的错误无法数,在这样的9局势下,我仍然心静如水地检查错误,下面介绍我遇到的问题及其解决方案。我主要遇到了三个函数问题,第一,我原本想用数组代替指针,这样可以更好的检查错误,但是后来的的数据保存就遇到了问题,老是无法正确的保存数据,所以还是用了个FILE*fp,当然也为此狂看了文件一章,最后在数据导入也用到了指针和文件。第二,题目本没有要求写删除函数也没有要求写排序函数,也许修改函数能够代替删除函数的一部分功能,但是无法减少职工的数目,这个对于想裁员的公司不利,所以,我又想了一个删除函数。写删除函数遇到的问题是,我删除了编号为2的函数,如何把2后面的同志移到前面来,而1不动,后来还是用最笨的for语句搞定了,据说这里可以用链表很美妙地完成,但是也可以不用链表。排序函数是最后加上去的,一个原因是我的程序不够500行,就完成了功能,后来要求尽情发挥,我就用了排序函数,这个函数相对简单,用的是我们学过的起泡法排序,有按照编号和工资排序两种方式,也用到了switch语句,这样是程序的功能更加完善了。第三,密码的问题,密码函数是个比较严肃的函数,为此不能敷衍了事用个while语句和字符串处理函数搞定,这样密码是明文的,很别扭。所以,我又加了一个不熟悉的头文件#includeconio.h,调用了这个文件里的getch()函数,这个函数能够不显示你输入的字符,很有保密特性。程序设计其实是最大的问题,起初的两三天我根本就不知道从哪里入手,后来参考到可以用switch语句对各功能函数很好的利用,这里还用到了break语句,感觉,课堂上没讲的东西就是这么有用啊!关于如何输入数据信息的问题,我起初准备用一个scanf语句,输入全部的职工信息,都是后来发现这样极易出现输入格式不正确的问题,后来就考虑用一个一个数据输入的方法,虽然这样做使代码长度加长了一些,但是这样输入简单明了更加人性化,所以我最终采用了逐个数据输入的方法。我还用宏定义定义了一个最大员工数MAX_NUM,这样能够使程序更高效率更准确地运行,而且改变最大员工数业很方便。最后谈谈调试错误的问题,上面已经晒了我的错误截图,感觉这些错误确实很震撼人,有时候就一个字符串函数应用错误,找了半天,居然发现strcmp前面忘记加“!”了,还有诸如忘记写“;”“}”,最头痛的还是把%s写成%d,这样程序能够运行,就是系统告诉你内存错误,搞得我以为电脑坏了,调了半天电脑,这就足够悲剧的。最后还是一点一点地去检查,不怕花费时间,就怕那些小东西太不入眼了。越是小的问题,可能浪费的时间就越让人感到悲愤,所以,细心检查永远是解决此类问题的良方。四、小结(收获和建议)通过本次课程设计我不仅温习了C程序设计课程的主体知识,还锻炼了对错误的承受能力,而且这个题目是我这辈子做过的最大的题目,搞了一个多星期才有一点点眉目,让人感到前途特别渺茫,也催迫着我不断前进。开始时,对这个题目完全无从下手,后来列出了主函数和结构体,就慢慢算入门了,成天趴在电脑里,电脑前放着那本绿色的程序设计的书,外面冷风嗖嗖,鞭炮响起。明天就是除夕了,我要赶在春节前把这个题目做完。而现在函数全部写出来了,且运行的相当成功,几个特殊的功能函数也奇迹般的起作用了,小小的成功给了我大大的喜悦。这个时候,电脑不是机器,数据不是抽象,一切都像春风一样。调试程序的时候情绪一直十分难控,一声声叹息加上使劲敲打键盘的声音还有怒目对视屏幕,这样感觉在无尽的黑暗中寻找黎明。现在黎明的曙光已经出现,感觉一切的努力都是那么值得,心胸豁然开朗。当然也有没有解决的问题,就是我的密码不能够在程序运行的时候修改只能够在源程序10上修改,后来想了很久也没有找到好的办法。建议,由于在学校时没有上过几次实验课,理论的东西已经慢慢淡忘。所以建议以后此类的课尽量在实验室上好些,还有感觉只有一个题目没有啥挑战性,应该多布置几个……附件:主要源程序代码(需打印)/*C语言课程设计任务书:职工档案管理系统设计*/#includestdio.h#includestring.h#includestdlib.h#includeconio.h#includestdlib.h#defineMAX_NUM900structworker{intID;charBirth[20];charSex[20];charName[30];charTelenum[20];intWage;charDepartment[30];charJob[30];}work[MAX_NUM];voidmain(){voidshowmenu();/*声明主菜单函数*/voidappend();/*声明添加函数*/voidsearch();/*声明查找函数*/voidoutput();/*声明输出函数*/voidmodify();/*声明修改函数*/voiddeletes();/*声明删除函数*/voidsave();/*声明保存函数*/voidread();/*声明录入函数*/voidsort();/*声明排序存函数*/intm;showmenu();11scanf(%d,&m);for(;m=0&&m=8;){switch(m){case1:append();/*用户选择1号菜单,程序执行添加的数据文件的函数*/break;case2:search();/*用户选择2号菜单,程序执行查找数据的函数*/break;case3:modify();/*用户选择3号菜单,程序执行修改数据的函数*/break;case4:deletes();/*用户选择4号菜单,程序执行删除数据的函数*/break;case5:output();/*用户选择5号菜单,程序执行输出数据录的函数*/break;case6:save();/*用户选择6号菜单,程序执行保存数据的函数*/break;case7:read();/*用户选择7号菜单,程序执行读取文件的函数*/break;case8:sort();/*用户选择8号菜单,程序执行排序数据的函数*/break;case0:exit(0);/*用户选择3号菜单,程序执行退书的函数*/printf(\n\n操作完毕,请再次选择!);default:printf(错误,重新输入\n);}showmenu();scanf(%d,&m);}}/*主菜单函数*/voidshowmenu()/*显示主菜单,并返回用户所选择的菜单项的编号*/{printf(********************************************************************\n);printf(^^^^^^^^^^^^^^^^^^^^^^^职工档案管理系统^^^^^^^