职工信息管理系统设计.docx
- 文档编号:1416219
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:35
- 大小:299.83KB
职工信息管理系统设计.docx
《职工信息管理系统设计.docx》由会员分享,可在线阅读,更多相关《职工信息管理系统设计.docx(35页珍藏版)》请在冰豆网上搜索。
职工信息管理系统设计
北京理工大学珠海学院实验报告
ZHUHAICAMPAUSOFBEIJINGINSTITUTEOFTECHNOLOGY
班级:
计算机
(2)班学号:
************姓名:
徐岩指导教师:
王日桂成绩:
实验题目:
职工信息管理系统设计实验时间:
2011年6月26日星期日
一、实验设计目的
通过亲自设计程序,可以令我们熟悉C语言操作,更熟练的掌握C语句。
初步体会编程的过程,为将来的程序深入学习打下基础和培养兴趣。
二、实验设计要求
试设计一职工信息管理系统,使之能提供以下功能:
1.职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
2.系统以菜单方式工作
3.职工信息录入功能(职工信息用文件保存)--输入
4.职工信息浏览功能--输出
5.查询和排序功能:
按工资查询、按学历查询等(至少一种查询方式)--算法
6.职工信息删除、修改功能(任选项)
三、实验总体设计
录入函数
:
用键盘输入职工信息
写入文件
:
将信息写入指定文本文件
导出函数
:
将信息从文件中导出放在结构数组中
浏览函数
:
将所有信息显示在屏幕上
显示主菜单
查询函数
:
按职工号查询、按学历查询、按电话查询
删除函数
:
删除原有的职工信息
添加函数
:
添加新的职工信息
四、实验详细设计
1.菜单函数menu
使用printf语句在屏幕上打印出工作菜单,包括录入职工信息、浏览职工信息、查询职工信息、删除职工信息、添加职工信息、修改职工信息、退出。
2.主函数main
调用菜单函数menu,显示系统工作菜单,罗列该系统所有功能。
运用do…while语句和选择函数switch即可根据使用者所输入的功能代号进入对应的功能程序。
程序开头的宏定义defineN指定首次输入的职工人数为100,可根据不同需要随时更改。
3.录入函数input
定义一个结构structemployee和数组em[N]用来储存N个职工的所有信息(职工号em[i].number、姓名em[i].name性别em[i].sex年龄em[i].age学历em[i].xueli工资em[i].wage住址em[i].addr电话em[i].tel)。
通过for循环输入所有职工信息。
用printf语句提示需要输入的内容,接着用scanf语句输入相应内容。
输入完毕后套用保存函数save(m)将所输入的信息写入指定文件。
4.保存文件函数save
定义文件指针fp,创建文件并用if语句判断能否打开,若fopen返回值不为0,则可继续下面操作。
用for循环通过fwrite语句将结构数组em中的内容写入保存在D盘的文本文件里面。
形参m指需要写入文件的职工人数。
最后关闭文件。
5.导出函数load
首先判断文件打开是否成功,若fopen返回值不为零,继续下面操作。
用do…while循环通过fread语句将文件中的职工信息取出放到em结构数组里面。
最后关闭文件。
6.浏览函数display
声明整形变量i和m,其中i记录输出的职工序数,m用来接收调用浏览函数时所传递过来的实参,接着将其值传递给导出函数load(m),使得导出的职工人数与浏览的职工人数保持一致。
通过调用load函数后(即给em数组附值),用for循环输出每个职工的各种信息。
7.删除函数del
声明整形变量i,j,n,t,flag和char形数组name[20]。
调用浏览函数display(),显示所有职工信息,便于使用者审阅需删除的对象。
用printf语句提示“输入要删除的职工名字”,接着用scanf语句输入删除对象名字。
用for循环,循环主体是先判断em.name中是否存在所输入的名字(调用字符串比较函数stecmp)。
若存在,printf语句提示是否确认删除,用scanf语句输入确认指令,再用for循环从要删除的这个职工开始,依次用后一个职工的信息覆盖前一个的。
循环结束后当前职工人数m自减1,并保存,跳出大循环;若不存在,输出“输入错误,无此人”。
printf提示下一步操作“\n继续删除请按1,不再删除请按0\n”。
switch根据键盘输入的指令代号选择下一步连接的函数。
8.添加函数add
声明整形变量i,n,m,定义文件指针fp,用追加的方式打开文件,printf提示“输入要添加的人数”scanf输入要添加的人数存放在n。
用for循环输入要添加的职工信息,浏览增加后的所有职工信息。
将输入的新信息追加写入文件保存。
关闭文件。
9.查询函数search
声明整形变量t,先用printf语句显示查询菜单,用scanf输入选择的查询方式代号,用switch(t)进入所选择的具体查询函数,包括按职工号查询、按学历查询、按电话查询三中方式。
10.按职工号查询search_num
声明两个整形变量:
i记录职工的序数,num存放键盘输入的职工号。
调用导出函数load()表示当前的职工人数。
通过scanf语句从键盘输入需要查询的职工号,并赋值给num。
用for循环,循环主体是先判断em.num中是否有输入的职工号,如果有,用printf语句输出与职工号相对应的该职工所有信息,再跳出循环;如果没有,输出“查无此人”,并调用search()返回查询菜单。
按学列查询和按电话查询与此方法类似,就不多说,以下只附按职工号查询程序流程图。
五、调试与测试
整个程序代码是分块书写的,每个函数都可以独立运行。
只有输入函数查询、菜单函数写得很顺利,一次性就能够成功运行,其他函数在调试过程中或多或少都出现了问题。
而且串联所有函数时,调试提示出错:
有几个函数“redefinition;differentbasictypes”解决:
在函数名前加void指明类型。
1.保存函数save()在调试和链接的时候都没有出现错误提示,但在运行的时候出现了问题。
写入指定位置的文件,打开后总会有乱码。
与c语言课本上的例题对照后发现,我写的fopen指向的文件没有指定文件的存储类型。
2.导出函数load()遇到一个问题。
是用fscanf语句时,漏写地址符。
调试和链接都没问题,但点击运行后,总出现一个提示出错的蓝色小窗口。
经过网上的查询发现了原因所在。
解决:
在em[i].name等之前加上地址符。
3.浏览函数display()遇到的问题虽然不大,但解决起来很麻烦。
理想的运行结果是美观整齐。
即下面的职工信息分别与第一个printf输出的中文项目提示对齐。
解决方法:
不断修改空格个数,不断运行察看效果。
4.按学历查询函数search_xueli(),要考虑输入一种学历,可能对应出很多职工,这就不能延用按姓名和职工号查询中判断是否输入错误的方法了。
为了显示出所有具有该学历的职工,就需要让for循环一直运行到最后一个为止。
这时计量数i始终会等于职工人数,不能再用i来判断是否不存在此人。
这就需要再定一个整形变量k,用来计量单独的一个循环次数。
5.删除函数del()的难点在于多次删除。
即在删除掉第一个人以后,现有职工人数发生改变,而宏定义中的N却是不变的。
最开始我想到了用static定义一个整形变量a来计量当前人数。
这在单独运行删除函数时,可以成功的连续删除。
最后所有函数串在一起时,有了更好的解决方法—指针。
6.添加函数add()遇到的问题是用printf输入新职工信息后,保存到文件里面,发现原有的信息不见了。
解决:
文件打开方式改用"a"追加写入。
六、源程序代码
#include
#include
#include
#include
#defineN100
structemployee
{
intnum;
charname[10];
charsex;
intage;
charxueli[30];
intwage;
charaddr[30];
longinttel;
}em[100];/*定义一个结构体*/
voidmenu();
voidinput();
voidsave(int);
voiddisplay();
voiddel();
voidadd();
voidsearch();
voidsearch_num();
voidsearch_xueli();
voidsearch_tel();
voidmodify();/*定义各函数*/
voidmenu()/*菜单函数*/
{
printf("\n");
printf("\n");
printf("******************职工信息管理****************\n");
printf("1.录入职工信息");
printf("2.浏览职工信息\n");
printf("3.查询职工信息");
printf("4.删除职工信息\n");
printf("5.添加职工信息");
printf("6.修改职工信息\n");
printf("7.退出\n");
printf("********************谢谢使用******************\n");
printf("\n");
printf("\n");
}
voidmain()
{
menu();/*调用菜单函数*/
intn,flag;
chara;
do
{
printf("请选择你需要操作的步骤(1--7):
\n");
scanf("%d",&n);
if(n>=1&&n<=7)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择!
");
}
}
while(flag==0);
while(flag==1)
{
switch(n)
{
case1:
printf("◆◆◆输入职工信息◆◆◆\n");printf("\n");input();break;
case2:
printf("◆◆◆浏览职工信息◆◆◆\n");printf("\n");display();break;
case3:
printf("◆◆◆按职工号查询职工信息◆◆◆\n");printf("\n");search();break;
case4:
printf("◆◆◆删除职工信息◆◆◆\n");printf("\n");del();break;
case5:
printf("◆◆◆添加职工信息◆◆◆\n");printf("\n");add();break;
case6:
printf("◆◆◆修改职工信息◆◆◆\n");printf("\n");modify();break;
case7:
exit(0);break;
default:
break;
}
getchar();
printf("\n");
printf("是否继续进行(yorn):
\n");
scanf("%c",&a);
if(a=='y')
{
flag=1;
system("cls");/*清屏*/
menu();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 职工 信息管理 系统 设计