C语言职工档案管理系统 500多行代码.docx
- 文档编号:30702542
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:32
- 大小:488.62KB
C语言职工档案管理系统 500多行代码.docx
《C语言职工档案管理系统 500多行代码.docx》由会员分享,可在线阅读,更多相关《C语言职工档案管理系统 500多行代码.docx(32页珍藏版)》请在冰豆网上搜索。
C语言职工档案管理系统500多行代码
C语言程序设计
课程设计报告
设计题目:
职工档案管理系统设计
学号************
班级电信一班
姓名陈文凯
完成方式:
(单选)
自我评分:
(单选)
○独立完成
○优秀
○参考他人工作的基础上完成
○良好
○在他人的帮助下完成
○中等
○完整拷贝他人成果
○及格
○不及格
2010年2月29日
C语言课程设计任务书4
题目:
职工档案管理系统设计
功能:
职工档案管理系统设计,每个职工是一条记录,包括编号,姓名,性别,出生年月,所在
部门,职称,工资级别、电话等。
系统可实现以下功能:
1、输入功能:
输入每一位职工记录,将其信息存入文件中。
2、显示功能:
完成全部职工记录的显示。
3、查找功能:
完成按编号或姓名查找职工的相关记录,并显示。
分步实施:
1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。
2、建立一个文件,将每位职工的信息写入文件中并能显示于屏幕上。
3、完成上述查找(编号,姓名,性别等)、修改等功能。
4、进一步要求,修改记录设置密码操作。
要求:
1、用C语言实现程序设计;
2、利用结构体数组实现职工信息的数据结构设计;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序加必要的注释。
课程设计实验报告要求:
1、预习报告:
题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分。
2、实验总结报告:
流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、小结等。
一、总体设计
1.程序的总体设计
职工档案管理系统设计,每个职工是一条记录,包括编号,姓名,性别,出生年月,所在
部门,职称,工资级别、电话等。
系统可实现以下功能:
1、输入功能:
输入每一位职工记录,将其信息存入文件中。
2、显示功能:
完成全部职工记录的显示。
3、查找功能:
完成按编号或姓名查找职工的相关记录,并显示。
2.数据结构
对于这个职工档案系统的设计,我主要采用结构体存放不同类型的数据,运用数组对各数据进行控制,而所有数据(除ID外)都以字符型的形式存放,这样方便存入中文数据。
本程序用指针相对较少,事实上,我只在文件的保存函数上用了指针。
只要是因为我们对指针了解相对较少,而且指针相对容易出错误,而这个程序用结构体和数组就可以很好地完成。
3.函数原型声明的说明(功能,参数,返回值)
1.主函数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()
该函数是无参函数,主要将职工数据排序,分按编号排序和工资排序,工资排序又分从高到低和从低到高两种。
二、详细设计
1.main()流程图
修改数据
按工资排序
按编号排序
导入数据
三、测试及调试(程序运行截图,测试方案、存在的问题及解决方法)
(写明测试软件的时候采用的测试方法、测试数据,并说明在你软件设计、调试过程中的遇到的问题和解决方案)
1.程序运行截图
a.这是添加数据的程序运行截图
b.这是查找数据中的按姓名查找的程序运行截图
c.这是修改数据的程序运行截图,需要输入9个密码才能够修改。
d.这是删除数据的程序运行截图,我们删除了职工
e.这是排序数据的程序运行截图
2.测试方案、存在的问题及解决方法
我用的是visualC++6.0进行编译和测试的,主要观察程序运行的错误及找出错误发生的原因,还有各函数的功能的实现以及部分变量在程序运行时的变化。
采取逐个函数测验的方法,虽然比较耗时间,但是我实在没有找到可以检查我的海量错误的方法。
下面是某此调试的截图。
可以看到,这时候几乎什么错误都有,低级的错误数不清,高级的错误无法数,在这样的局势下,我仍然心静如水地检查错误,下面介绍我遇到的问题及其解决方案。
我主要遇到了三个函数问题,第一,我原本想用数组代替指针,这样可以更好的检查错误,但是后来的的数据保存就遇到了问题,老是无法正确的保存数据,所以还是用了个FILE*fp,当然也为此狂看了文件一章,最后在数据导入也用到了指针和文件。
第二,题目本没有要求写删除函数也没有要求写排序函数,也许修改函数能够代替删除函数的一部分功能,但是无法减少职工的数目,这个对于想裁员的公司不利,所以,我又想了一个删除函数。
写删除函数遇到的问题是,我删除了编号为2的函数,如何把2后面的同志移到前面来,而1不动,后来还是用最笨的for语句搞定了,据说这里可以用链表很美妙地完成,但是也可以不用链表。
排序函数是最后加上去的,一个原因是我的程序不够500行,就完成了功能,后来要求尽情发挥,我就用了排序函数,这个函数相对简单,用的是我们学过的起泡法排序,有按照编号和工资排序两种方式,也用到了switch语句,这样是程序的功能更加完善了。
第三,密码的问题,密码函数是个比较严肃的函数,为此不能敷衍了事用个while语句和字符串处理函数搞定,这样密码是明文的,很别扭。
所以,我又加了一个不熟悉的头文件#include
程序设计其实是最大的问题,起初的两三天我根本就不知道从哪里入手,后来参考到可以用switch语句对各功能函数很好的利用,这里还用到了break语句,感觉,课堂上没讲的东西就是这么有用啊!
关于如何输入数据信息的问题,我起初准备用一个scanf语句,输入全部的职工信息,都是后来发现这样极易出现输入格式不正确的问题,后来就考虑用一个一个数据输入的方法,虽然这样做使代码长度加长了一些,但是这样输入简单明了更加人性化,所以我最终采用了逐个数据输入的方法。
我还用宏定义定义了一个最大员工数MAX_NUM,这样能够使程序更高效率更准确地运行,而且改变最大员工数业很方便。
最后谈谈调试错误的问题,上面已经晒了我的错误截图,感觉这些错误确实很震撼人,有时候就一个字符串函数应用错误,找了半天,居然发现strcmp前面忘记加“!
”了,还有诸如忘记写“;”“}”,最头痛的还是把%s写成%d,这样程序能够运行,就是系统告诉你内存错误,搞得我以为电脑坏了,调了半天电脑,这就足够悲剧的。
最后还是一点一点地去检查,不怕花费时间,就怕那些小东西太不入眼了。
越是小的问题,可能浪费的时间就越让人感到悲愤,所以,细心检查永远是解决此类问题的良方。
四、小结(收获和建议)
通过本次课程设计我不仅温习了C程序设计课程的主体知识,还锻炼了对错误的承受能力,而且这个题目是我这辈子做过的最大的题目,搞了一个多星期才有一点点眉目,让人感到前途特别渺茫,也催迫着我不断前进。
开始时,对这个题目完全无从下手,后来列出了主函数和结构体,就慢慢算入门了,成天趴在电脑里,电脑前放着那本绿色的程序设计的书,外面冷风嗖嗖,鞭炮响起。
明天就是除夕了,我要赶在春节前把这个题目做完。
而现在函数全部写出来了,且运行的相当成功,几个特殊的功能函数也奇迹般的起作用了,小小的成功给了我大大的喜悦。
这个时候,电脑不是机器,数据不是抽象,一切都像春风一样。
调试程序的时候情绪一直十分难控,一声声叹息加上使劲敲打键盘的声音还有怒目对视屏幕,这样感觉在无尽的黑暗中寻找黎明。
现在黎明的曙光已经出现,感觉一切的努力都是那么值得,心胸豁然开朗。
当然也有没有解决的问题,就是我的密码不能够在程序运行的时候修改只能够在源程序上修改,后来想了很久也没有找到好的办法。
建议,由于在学校时没有上过几次实验课,理论的东西已经慢慢淡忘。
所以建议以后此类的课尽量在实验室上好些,还有感觉只有一个题目没有啥挑战性,应该多布置几个……
附件:
主要源程序代码(需打印)
/*C语言课程设计任务书:
职工档案管理系统设计*/
#include
#include
#include
#include
#include
#defineMAX_NUM900
structworker
{
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();
scanf("%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("^^^^^^^^^^^^^^^^^^^^^^^职工档案管理系统^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("----------------------------------设计者:
陈文凯---------------------\n");
printf("*******************************************************************\n");
printf("\n");
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf("&1,添加职工5,输出职工&\n");
printf("&2,查找职工6,保存职工&\n");
printf("&3,修改职工7,读取档案&\n");
printf("&4,删除职工8,职工排序&\n");
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf("--------------------------------------------退出,请按0----------------\n");
printf("请选择(0--8):
");
}
/*添加函数*/
voidappend()
{intnumber,i;
FILE*fp;
charfilepn[MAX_NUM];
system("cls");
printf("\n您选择的是添加职工!
\n");
printf("\n请输入本次添加的职工人数:
");
scanf("%d",&number);
if(number>MAX_NUM)
{
printf("您输入的人数太多,大于%d人!
\n",MAX_NUM);
}
for(i=0;i { printf("\n请输入第%d个职工的编号: \t",i+1); scanf("%d",&work[i].ID); printf("\t职工档案: \n"); printf("\t\t姓名: "); scanf("%s",&work[i].Name); printf("\t\t出生年月: "); scanf("%s",&work[i].Birth); printf("\t\t电话: "); scanf("%s",&work[i].Telenum); printf("\t\t性别: "); scanf("%s",&work[i].Sex); printf("\t\t工资: "); scanf("%d",&work[i].Wage); printf("\t\t部门: "); scanf("%s",&work[i].Department); printf("\t\t职称: "); scanf("%s",&work[i].Job); } printf("\n您的输入是: \n"); printf("**********************************职工档案信息库*************************\n"); printf("序号编号姓名出生年月电话\t性别\t工资\t部门\t职称\n"); for(i=0;i { printf("%d%d%s%s\t%s\t%s\t%d\t%s\t%s\n",i+1,work[i].ID,work[i].Name,work[i].Birth,work[i].Telenum,work[i].Sex,work[i].Wage,work[i].Department,work[i].Job); } printf("*************************************************************************\n"); printf("\n");} /*查找函数*/ voidsearch() { system("cls"); intnumber=MAX_NUM,findID,v,i; charfindName[30]; printf("\n您选择的是档案查询! \n"); printf("*****************************请选择查询方式********************************\n"); printf("\t\t1--按编号查找;\t\t\t\t2--按姓名查找\n");/*以下可以修改为子菜单方式: 1--按编号查找,2--按姓名查找*/ printf("***************************************************************************\n"); printf("请选择: ");scanf("%d",&v); switch(v) {case1: system("cls"); printf("\n您选择的是按编号查找! \n"); printf("\n请输入职工的编号: "); scanf("%d",&findID); for(i=0;i { if(work[i].ID==findID) break; } if(i { printf("查找结果如下: \n"); printf("\t编号\t姓名\t出生年月\t电话\t性别\t工资\t部门\t职称\n"); printf("\t%d\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n",work[i].ID,work[i].Name,work[i].Birth,work[i].Telenum,work[i].Sex,work[i].Wage,work[i].Department,work[i].Job); } elseprintf("您输入的编号不存在! \n"); break; case2: system("cls"); printf("\n您选择的是按姓名查找! \n"); printf("\n请输入职工的姓名: "); scanf("%s",&findName);; for(i=0;i { if(! strcmp(work[i].Name,findName)) break; } if(i { printf("查找结果如下: \n"); printf("\t编号\t姓名\t出生年月\t电话\t性别\t工资\t部门\t职称\n"); printf("\t%d\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n",work[i].ID,work[i].Name,work[i].Birth,work[i].Telenum,work[i].Sex,work[i].Wage,work[i].Department,work[i].Job); } elseprintf("您输入的姓名不存在! \n"); break; } } /*输出函数*/ voidoutput() {inti,number=MAX_NUM; system("cls"); printf("查找结果如下: \n"); printf("\t编号\t姓名\t出生年月\t电话\t性别\t工资\t部门\t职称\n"); for(i=0;i { printf("\t%d\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n",work[i].ID,work[i].Name,work[i].Birth,work[i].Telenum,work[i].Sex,work[i].Wage,work[i].Department,work[i].Job); } } voiddeletes() {intfindID,i,j,number=MAX_NUM; system("cls"); printf("\n您选择的是档案删除! \n"); printf("\n请输入职工的编号: "); scanf("%d",&findID); for(i=0;i { if(work[i].ID==findID) break; } printf("\t编号\t姓名\t出生年月\t电话\t性别\t工资\t部门\t职称\n"); if(i {for(j=i;j { work[j].ID=work[j+1].ID; strcpy(work[j].Name,work[j+1].Name); strcpy(work[j].Telenum,work[j+1].Telenum); strcpy(work[j].Birth,work[j+1].Birth); strcpy(work[j].Sex,work[j+1].Sex); work[j].Wage=work[j+1].Wage; strcpy(work[j].Department,work[j+1].Department); strcpy(work[j].Job,work[j+1].Job); } for(i=0;i { printf("\t%d\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n",work[i].ID,work[i].Name,work[i].Birth,work[i].Telenum,work[i].Sex,work[i].Wage,work[i].Department,work[i].Job); } } else for(i=0;i printf("\t%d\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n",work[i].ID,work[i].Name,work[i].Telenum,work[i].Birth,work[i].Sex,work[i].Wage,work[i].Department,work[i].J
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言职工档案管理系统 500多行代码 语言 职工 档案管理系统 500 代码