职工信息管理系统设计_第1页
职工信息管理系统设计_第2页
职工信息管理系统设计_第3页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、北京理工大学珠海学院实验报告ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY班级:计算机(2)班学号:100201021001姓名:徐岩指导教师:王日桂 实验题 目 实 验 时 间成绩::职工信息 管:2011年6月26日星期日理 系统 设计、实验设计目的通过亲自设计程序,可以令我们熟悉C语言操作,更熟练的掌握 C语句。初步体会编程的过程,为将来的程序深入学习打下基础和培养兴趣。、实验设计要求试设计一职工信息管理系统,使之能提供以下功能:1. 职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)2. 系统以菜单方式工作

2、3. 职工信息录入功能(职工信息用文件保存)输入4. 职工信息浏览功能一一输出5. 查询和排序功能:按工资查询、按学历查询等(至少一种查询方式)算法6. 职工信息删除、修改功能(任选项)二、实验总体设计显示主菜单:用键盘输入职工信息:将信息写入指定文本文件:将信息从文件中导出放在结构数组中:将所有信息显示在屏幕上:按职工号查询、按学历查询、按电话查询:删除原有的职工信息:添加新的职工信息四、实验详细设计1. 菜单函数menu使用printf 语句在屏幕上打印出工作菜单,包括录入职工信息、浏览职工信息、查询职工 信息、删除职工信息、添加职工信息、修改职工信息、退出。2. 主函数main调用菜单函

3、数 menu,显示系统工作菜单,罗列该系统所有功能。运用dowhile语句和选择函数switch即可根据使用者所输入的功能代号进入对应的功能程序。程序开头的宏定义 define N指定首次输入的职工人数为100,可根据不同需要随时更改。左如町富迤槿怖帶區抑昨的步辆C1-GM);brek',Piiiiif *时空铝H佶岂ex 逬 Q);13. 录入函数in put定义一个结构struct employee 和数组emN用来储存 N个职工的所有信息(职工号emi.number 、姓名 性另U emi.sex 年龄 emi.age 学历 emi.xueli 工资 emi.w

4、age 住址emi.addr 电话emi.tel )。通过for循环输入所有职工信息。用printf语句提示需要输入的内容,接着用scanf语句输入相应内容。输入完毕后套用保存函数save(m)将所输入的信息写入指定文件。4. 保存文件函数save定义文件指针fp ,创建文件并用if语句判断能否打开,若fopen返回值不为0,则可继续下面操作。用for循环通过fwrite 语句将结构数组 em中的内容写入保存在D盘的文本文件里 面。形参m指需要写入文件的职工人数。最后关闭文件。inti 汗(fip=fbDen("em_nnntff" cannot open filen&qu

5、ot;)>VL=O+J*pnntff" file write).广fcloseffo)>5.导出函数load首先判断文件打开是否成功,若fopen返回值不为零,继续下面操作。用dowhile循环通6. 浏览函数display声明整形变量i和m其中i记录输出的职工序数, m用来接收调用浏览函数时所传递过来 的实参,接着将其值传递给导出函数 load(m),使得导出的职工人数与浏览的职工人数保持一 致。通过调用load函数后(即给em数组附值),用for循环输出每个职工的各种信息。7. 删除函数del声明整形变量i,j,n,t,flag 和char形数组name20。调用浏览

6、函数 display。,显示所有 职工信息,便于使用者审阅需删除的对象。用printf语句提示“输入要删除的职工名字”,接着用scanf语句输入删除对象名字。用for循环,循环主体是先判断中是否存在所输入的名字(调用字符串比较函数stecmp)。若存在,printf语句提示是否确认删除,用scanf语句输入确认指令,再用for循环从要删除的这个职工开始,依次用后一个职工的信息 覆盖前一个的。循环结束后当前职工人数m自减1并保存,跳出大循环;若不存在,输出“输入错误,无此人”。printf提示下一步操作“ n继续删除请按1,不再删除请按0n ”。switch根据键盘输入的指令代号选

7、择下一步连接的函数。坦 浏览删除后的朋有ibreaks8. 添加函数add声明整形变量i,n,m ,定义文件指针fp,用追加的方式打开文件,printf 提示"输入要添加的 人数” scanf输入要添加的人数存放在n。用for循环输入要添加的职工信息,浏览增加后的所有职工信息。将输入的新信息追加写入文件保存。关闭文件。9. 查询函数search声明整形变量t,先用printf语句显示查询菜单,用scanf输入选择的查询方式代号,用switch(t)进入所选择的具体查询函数,包括按职工号查询、按学历查询、按电话查询三中方 式。px说fTH摄裁H号査甸済按咤1;breali;pnrtfl

8、''直田工号査御tinea:;btreak;10. 按职工号查询 search_num声明两个整形变量:i记录职工的序数,num存放键盘输入的职工号。调用导出函数load()表示当前的职工人数。通过scanf语句从键盘输入需要查询的职工号,并赋值给num用for循环,循环主体是先判断em. num中是否有输入的职工号,如果有,用printf 语句输出与职工号相对应的该职工所有信息,再跳出循环;如果没有,输出“查无此人”,并调用search()返回查询菜单。按学列查询和按电话查询与此方法类似,就不多说,以下只附按职工号查询 程序流程图。整个程序代码是分块书写的,每个函数都可以独立

9、运行。只有输入函数查询、菜单函数写 得很顺利,一次性就能够成功运行,其他函数在调试过程中或多或少都出现了问题。而且串 联所有函数时,调试提示出错:有几个函数"redefinition;different basic types ”解决:在函数名前加void指明类型。1保存函数save()在调试和链接的时候都没有出现错误提示,但在运行的时候出现了问题。写入指定位置的文件,打开后总会有乱码。与c语言课本上的例题对照后发现,我写的fopen指向的文件没有指定文件的存储类型。2. 导出函数load()遇到一个问题。是用fscanf语句时,漏写地址符。调试和链接都没问题, 但点击运行后,总出现

10、一个提示出错的蓝色小窗口。经过网上的查询发现了原因所在。解决: 在等之前加上地址符。3. 浏览函数display。遇到的问题虽然不大,但解决起来很麻烦。 理想的运行结果是美观整 齐。即下面的职工信息分别与第一个 printf 输出的中文项目提示对齐。解决方法:不断修改 空格个数,不断运行察看效果。4. 按学历查询函数 search_xueli() ,要考虑输入一种学历,可能对应出很多职工,这就不 能延用按姓名和职工号查询中判断是否输入错误的方法了。为了显示出所有具有该学历的职 工,就需要让 for 循环一直运行到最后一个为止。这时计量数 i 始终会等于职工人数,不能 再用i来判

11、断是否不存在此人。 这就需要再定一个整形变量 k,用来计量单独的一个循环次数。5. 删除函数 del() 的难点在于多次删除。 即在删除掉第一个人以后, 现有职工人数发生改变, 而宏定义中的N却是不变的。最开始我想到了用 static 定义一个整形变量 a来计量当前人数。 这在单独运行删除函数时,可以成功的连续删除。最后所有函数串在一起时,有了更好的解 决方法指针。6. 添加函数 add() 遇到的问题是用 printf 输入新职工信息后,保存到文件里面,发现原有 的信息不见了。解决:文件打开方式改用 "a" 追加写入。六、源程序代码#include<stdio.h&

12、gt;#include<windows.h>#include<time.h>#include<string.h>#define N 100struct employeeint num;char name10;char sex;int age;char xueli30;int wage;char addr30;long int tel;em100;/* 定义一个结构体 */void menu();void input();void save(int);void display();void del();void add();void search();void

13、 search_num();void search_xueli();void search_tel();void modify(); /* 定义各函数 */void menu() /* 菜单函数 */printf("n"); printf("n");printf("*职工信息管理*n")printf("1.录入职工信息");printf("2.浏览职工信息n");printf("3.查询职工信息");printf("4.删除职工信息n");printf(&

14、quot;5.添加职工信息");printf("6.修改职工信息n");printf("7.退出 n");printf("*谢谢使用 *n");printf("n"); printf("n");void main()menu(); /* 调用菜单函数 */ int n,flag;char a;doprintf(" 请选择你需要操作的步骤 (1-7):n"); scanf("%d",&n);if(n>=1&&n<

15、=7)flag=1; break;elseflag=0;printf(" 您输入有误,请重新选择 !"); while(flag=0);while(flag=1)switch(n)n");printf("n");input();break; case 2:printf("n");printf("n");display();break;case 3:printf(" 浏 览 职 工 信 息 case1:printf(” 输入职工信息 case 4:printf("删除职工信息n"

16、;);printf("n");del();break;case 5:printf("添加职工信息n");printf("n");add();break;case 6:printf("修改职工信息 按职工号查询职工信息n");printf("n");search();break;n");printf("n");modify();break;case 7:exit(0);break;default :break;getchar();printf("n"

17、;);printf(" 是否继续进行 (y or n):n");scanf("%c",&a);if(a='y')flag=1;system("cls");/*清屏 */menu(); /*调用菜单函数 */printf(" 请再次选择你需要操作的步骤(1-6):n");scanf("%d",&n);printf("n");elseexit(0);void input() /*录入函数 */int i,m;printf(" 请输入需要创

18、建信息的职工人数(1-100):n");scanf("%d",&m);for (i=0;i<m;i+)printf(" 职工号: ");srand(int)time(0);emi.num=rand()%10000+20000000;if(emi.num!=emi-1.num)printf("%8d ",emi.num);printf("n");printf(" 请输入姓名 : ");scanf("%s",);getchar();prin

19、tf(" 请输入性别 (f- 女 m- 男 ): "); scanf("%c",&emi.sex);printf(" 请输入年龄 : "); scanf("%d",&emi.age); printf(" 请输入学历 : "); scanf("%s",emi.xueli); printf(" 请输入工资 : "); scanf("%d",&emi.wage); printf(" 请输入住址 : "

20、;); scanf("%s",emi.addr); printf(" 请输入电话 : "); scanf("%d",&emi.tel); printf("n");printf("n 创建完毕 !n");save(m);void save(int m) /* 保存文件函数 */int i;FILE*fp;if(fp=fopen("employee_list","wb")=NULL) /* 创建文件并判断是否能打开 */ printf ("c

21、annot open filen");exit(0);for (i=0;i<m;i+) /* 将内存中职工的信息输出到磁盘文件中去 */if (fwrite(&emi,sizeof(struct employee),1,fp)!=1)printf("file write errorn");fclose(fp);int load() /* 导出函数 */FILE*fp;int i=0;if(fp=fopen("employee_list","rb")=NULL)printf ("cannot open

22、filen");exit(0); else do fread(&emi,sizeof(struct employee),1,fp);i+; while(feof(fp)=0);fclose(fp);return(i-1);void display() /* 浏览函数 */int i;int m=load();printf("n 职工号t姓名t性别t年龄t学历t工资t住址t电话n"); for(i=0;i<m;i+)/*m为输入部分的职工人数 */printf("n %dt%st%ct%dt%st%dt%st%ldn",emi.nu

23、m,,emi.se x,emi.age,emi.xueli,emi.wage,emi.addr,emi.tel);void del() /* 删除函数 */int m=load();int i,j,n,t,flag;char name20;printf("n 原来的职工信息 :n");display(); /*调用浏览函数 */printf("n");printf(" 请输入要删除的职工的姓名 :n");scanf("%s",name); for(flag=1,i=0;flag&&i

24、<m;i+)if(strcmp(,name)=0)printf("n 已找到此人,原始记录为: n");printf("n 职工号t姓名t性别t年龄t学历t工资t住址t电话n”);printf("n%dt%st%ct%dt%st%dt%st%ldn",emi.num,,emi.sex, emi.age,emi.xueli,emi.wage,emi.addr,emi.tel);printf("n 确实要删除此人信息请按 1, 不删除请按 0n");scanf("%d",

25、&n);if(n=1)/* 如果删除,则其他的信息都往上移一行 */for(j=i;j<m-1;j+)strcpy(,emj+1.name); emj.num=emj+1.num; emj.sex=emj+1.sex; emj.age=emj+1.age; strcpy(emj.xueli,emj+1.xueli); emj.wage=emj+1.wage; strcpy(emj.addr,emj+1.addr); emj.tel=emj+1.tel;flag=0;if(!flag)m=m-1;elseprintf("n 对不起,查无此人 !n"

26、;); printf("n 浏览删除后的所有职工信息 :n"); save(m); /*调用保存函数 */display(); /* 调用浏览函数 */ printf("n 继续删除请按 1,不再删除请按 0n"); scanf("%d",&t);switch(t)case 1:del();break;case 0:break;default :break;void add() /* 添加函数 */FILE*fp;int n;int count=0;int i;int m=load();printf("n 原来的职工

27、信息 :n");display(); /* 调用浏览函数 */ printf("n");fp=fopen("emploee_list","a");printf(" 请输入想增加的职工数 :n"); scanf("%d",&n);for (i=m;i<(m+n);i+)printf("n 请输入新增加职工的信息 :n"); printf(" 请输入职工号 : "); srand(int)time(0);emi.num=rand()%1

28、0000+20000000; if(emi.num!=emi-1.num)printf("%8d ",emi.num);printf("n");printf(" 请输入姓名 : "); scanf("%s",);getchar();printf(" 请输入性别 (f- 女 m- 男 ): "); scanf("%c",&emi.sex);printf(" 请输入年龄 : ");scanf("%d",&em

29、i.age); printf(" 请输入学历 : ");scanf("%s",emi.xueli); printf(" 请输入工资 : ");scanf("%d",&emi.wage);printf(" 请输入住址 : "); scanf("%s",emi.addr);printf(" 请输入电话 : ");scanf("%d",&emi.tel);printf("n");count=count+1;

30、printf(" 已增加的人数 :n"); printf("%dn",count);printf("n 添加完毕 !n"); m=m+count;printf("n 浏览增加后的所有职工信息 :n"); printf("n");save(m);display(); fclose(fp);void search() /* 查询函数 */int t,flag;do3, 进printf("n 按职工号查询请按 1 ; 按学历查询请按 2 ; 按电话号码查询请按 入主函数按 4n")

31、;scanf("%d",&t);if(t>=1&&t<=4)flag=1;break;elseflag=0;printf(" 您输入有误,请重新选择 !"); while(flag=0);while(flag=1)switch(t)case 1:printf("按职工号查询 n");search_num();break;case 2:printf("按学历查询 n");search_xueli();break;case 3:printf("按电话号码查询 n"

32、);search_tel();break;case 4:main();break;default:break;void search_num()int num;int i,t;int m=load();printf(" 请输入要查找的职工号 (20001111-20009999):n");scanf("%d",&num);for(i=0;i<m;i+)if(num=emi.num)printf("n 已找到此人,其记录为: n");printf("n职工号t姓名t性别t年龄t学历t工资t住址t电话n”);pri

33、ntf("n%dt%st%ct%dt%st%dt%st%ldn",emi.num,,emi.sex, emi.age,emi.xueli,emi.wage,emi.addr,emi.tel);break;if(i=m)printf("n 对不起,查无此人 n");printf("n");printf(" 返回查询函数请按 1, 继续查询职工号请按 2n"); scanf("%d",&t);switch(t)case 1:search();break;case 2: bre

34、ak; default:break;void search_xueli()char xueli30;int i,t;int m=load();printf(" 请输入要查找的学历 :n"); scanf("%s",xueli);for(i=0;i<m;i+)if(strcmp(emi.xueli,xueli)=0)printf("n 已找到,其记录为: n");printf("n 职工号t姓名t性别t年龄t学历t工资t住址t电话n”);printf("n%dt%st%ct%dt%st%dt%st%ldn&qu

35、ot;,emi.num,,emi.sex, emi.age,emi.xueli,emi.wage,emi.addr,emi.tel);if(i=m)printf("n 对不起,查无此人 n");printf("n");printf(" 返回查询函数请按 1, 继续查询学历请按 2n");scanf("%d",&t);switch(t)case 1:search();break;case 2:break;default :break;void search_tel()long int tel;

36、int i, t;int m=load();printf(" 请输入要查找的电话号码 :n");scanf("%ld",&tel);for(i=0;i<m;i+)if(tel=emi.tel) printf("n 已找到此人,其记录为: n");printf("n职工号t姓名t性别t年龄t学历t工资t住址t电话n”);printf("n%dt%st%ct%dt%st%dt%st%ldn",emi.num,,emi.sex, emi.age,emi.xueli,emi.wage

37、,emi.addr,emi.tel);break;if(i=m)printf("n 对不起,查无此人 n");printf("n");printf(" 返回查询函数请按 1, 继续查询电话号码请按 2n"); scanf("%d",&t);switch(t)case 1:search();break;case 2:break;default :break;void modify() /*修改函数 */int num;char name10;char sex;int age;char xueli30;int

38、wage;char addr30;long int tel;int b,c,i,n,t,flag;int m=load(); /* 导入文件内的信息 */printf("n原来的职工信息 :n");display(); /*调用浏览函数 */printf("n");printf(" 请输入要修改的职工的姓名 :n"); scanf("%s",name);for(flag=1,i=0;flag&&i<m;i+) if(strcmp(,name)=0)printf("n

39、已找到此人,原始记录为: n");printf("n职工号t姓名t性别t年龄t学历t工资t住址t电话n”);printf("n%dt%st%ct%dt%st%dt%st%ldn",emi.num,,emi.sex,emi.age,emi.xueli,emi.wage,emi.addr,emi.tel);printf("n 确实要修改此人信息请按 1 ; 不修改请按 0n"); scanf("%d",&n);if(n=1)printf("n 需要进行修改的选项 n 1.学历 6. 工

40、资 7. 住址 8. 电话 n");printf(" 请输入你想修改的那一项序号scanf("%d",&c);if(c>8|c<1)printf("n 选择错误,请重新选择职工号 2. 姓名 3. 性别 4. 年龄 5.:n");!n"); flag=0;if(flag=1)printf("n 对不起,查无此人 !n"); do switch(c) /* 把改后的信息赋值给第case 1:printf("i-1因为当找到第 i 个职工时 ,for 个人*/语句后 i 自加了

41、1, 所以下面的应该职工号改为 : ");scanf("%d",&num); emi-1.num=num; break;case 2:printf(" 姓名改为 : "); scanf("%s",name); strcpy(,name); break;case 3:printf(" 性别改为 : "); getchar(); scanf("%c",&sex); emi-1.sex=sex; break;case 4:printf(" 年龄改

42、为 : "); scanf("%d",&age); emi-1.age=age; break;case 5:printf(" 学历改为 : "); scanf("%s",xueli); strcpy(emi-1.xueli,xueli); break;case 6:printf(" 工资改为 : "); scanf("%d",wage); break;case 7:printf(" 住址改为 : "); scanf("%s",addr);

43、 strcpy(emi-1.addr,addr); break;case 8:printf(" 电话改为 : "); scanf("%ld",&tel); emi-1.tel=tel; break;printf("n");printf("n 是否确定所修改的信息 ?n 是 请按 1 ; 不 , 重新修改 请按 2: n"); scanf("%d",&b); while(b=2); printf("n 浏览修改后的所有职工信息 :n"); printf(&quo

44、t;n");save(m);display();printf("n 继续修改请按 1,不再修改请按 0n"); scanf("%d",&t);switch(t)case 1:modify();break;case 0:break;default :break;七、执行结果K "D:Microson: Visual StudjoMSDe¥98MyProiects«uanliDebug 1Z3LexeB'K息息息 "低«.«. 一i工 k职职职 浏删修 -2 4 6 w导一

45、TI.?二H自心自!h.« 一二_11>£_口 b / J. / 冃工工工 =职职职H入询加出 H H 二- 12 5 7賢"谢谢使用mmm输入职工信息息的职工人数11R0J:In“ 花56 10明才、科翊芯?! 93小弋26本犯颐13 0 -0-f2名别龄历资址话 姓性丢于工住电 号入坎1A1A坎 工口戸EHfcEE冃UI冃Ml冃兰门丫入电话_万-20005791认姓名:小兰紅一女叶-男片 f:22:硕士:5600:颐和小区日栋2单元6号:133235&&66Sy op na nD:MicrosoFt Visual 5tudioM5Dev9

46、8MyPrajectsguanliDebiig123.exe,<*WT<b 息管理宫息2 浏言息4-删言息6-修入职工(史查询职工45 勸虹 退出河耳两E :f :賓河鞫員:同M X河鞫員:车:耳使甲UKHKMKJCX1.XWiKljOt职工号20009310 1107033520009791 38664777浏览职工信息姓名小明性别年龄学历工资住址 电话是否继续进行O本科硕士3005000颐芯花园饰栋d单元2号颐和小区3栋2单元忌号班职工信息管理*4-«;1谢谢使用f13,逾S;按学历查询请按2 ;技电话号码查询请按齐进入主函数按4按电話号码查询4 » _L ul !< jL l_学历住址电话颐和小区3栋2单元£号225Q0B工资硕士已找到此人其记录为职工号姓名性别年龄20UH9791小兰f;按学历查询请按;!;按电话号码查询请按芥进入主函数按4住址电话颐芯花园址栋3单元2号3000学历工资2Q本科己找到此人*其记录为职工号姓名性别 年龄

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论