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