C语言课程设计报告_职工管理.doc_第1页
C语言课程设计报告_职工管理.doc_第2页
C语言课程设计报告_职工管理.doc_第3页
C语言课程设计报告_职工管理.doc_第4页
C语言课程设计报告_职工管理.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

目 录第1章 课题概述(课题介绍、)11.1 课题的目的11.2 课题的要求11.2.1 输入输出的要求11.2.2 程序所要实现的功能1第2章 设计思路(概要设计、总体设计、)22.1 存储结构的确定22.2 程序流程图2第3章 程序实现33.1 存储结构与方式33.2 程序中各函数分析3第4章 问题与解决15第5章 程序测试16第6章 总 结22参考文献23职工信息管理程序23第1章 课题概述(课题介绍、)1.1 课题的目的课程设计题目:职工信息管理程序;要求设计一个程序,能够对输入的职工信息进行修改、删除、查询、排序等功能。各功能以菜单方式列出,由用户进行选择。1.2 课题的要求1.2.1 输入输出的要求(1)输入的职工信息以文件形式保存;(2)输出时以职工号和工资排序;1.2.2 程序所要实现的功能程序需要实现的功能有:(1)职工信息的录入功能(职工信息用文件 Workers.dat保存);(2)职工信息的删除、修改功能;(3)职工信息浏览功能;(4)按职工号和姓名查询的功能;(5)按职工号和资排序的功能;(6)各功能以菜单方式列出,由用户进行选择。第2章 设计思路(概要设计、总体设计、)2.1 存储结构的确定课题要求职工信息以文件形式保存,存储结构确定为结构体数组。成员分别包括职工号、姓名、性别、年龄、学历、工资、住址电话等。2.2 程序流程图整个程序的流程如图2-1所示。图2-1第3章 程序实现3.1 存储结构与方式在程序运行时,文件以结构体数组的方式存储在内存中,再以文件形式保存到硬盘。struct employee/*定义结构体*/int number;/*职工号*/int age;/*年龄*/int wage;/*工资*/char name20,sex10,address30,xueli20;/*姓名、性别、地址、学历*/long int telephone;/*电话*/emN;FILE *fp;/*打开文件*/if(fp=fopen(Workers.txt,ab+)=NULL)printf(不能打开该文件:n);exit(1);3.2 程序中各函数分析表3-1 程序中的函数列表函数名函数功能main()主函数search()选择查找方式search_name()查找姓名search_number()查找职工号display()显示职工信息del()删除职工信息input()输入职工信息change()修改职工信息sortNumber()按职工号对职工进行排序sortWage()按工资对职工进行排序(1) main()显示系统工作菜单,罗列该系统所有功能。先声明所有将会调用到的函数名。再运用选择函数switch即可根据使用者所输入的功能代号进入对应的功能程序。同时通过对文件数据的读取,获得当前文件中的职工个数。main() /*函数申明,已省略*/int k;int i;int n;FILE *fp;if(fp=fopen(Workers.txt,ab+)=NULL)/*打开方式选择“ab+”,当文件不存在时,可创建文件*/printf(不能打开该文件:n);exit(1);for(i=0;i=N;i+)/*“i”为读取出的人数*/if(fread(&emi,sizeof(emi),1,fp)=0)/*当读取后的返回值是“0”则读取结束*/break;people=i;/*当读取结束后将代表当前人数的“i”赋值给人数“people”*/*输出菜单,已省略*/scanf(%d,&n);switch(n)/*选择功能*/case 1:printf( 输入职工信息n);printf(n);k=input();main();break;case 2:printf( 浏览职工信息n);printf(n);display();main();break;case 3:printf( 查询职工信息n);printf(n);search();break; case 4:printf( 删除职工信息n);printf(n);del();break;case 5:printf( 修改职工信息n);printf(n);change();break;case 6:printf( 按职工号排序n);printf(n);sortNumber();break;case 7:printf( 按工资排序n);printf(n);sortWage();break;case 8:exit(0);break;default :break;(2)search()该函数的功能是输出查找菜单,选择查找方式。void search() int t;printf(n按职工号查询按1n按姓名查询请按2);printf(n返回主菜单请按3n);scanf(%d,&t);switch(t)case 1:printf(n按职工号查询n);search_number(); break;case 2:printf(n按姓名查询n);search_name(); break;case 3:main();break; default :printf(输入错误,请重新输入!n);search(); break; (2) search_name()查找姓名。定义字符串数组“name20”,输入想要查找的姓名,赋值给“name”。用for循环将“name”中的字符串与结构体数组中的成员“name”进行比较。如相同,则输出该成员所在的结构体数组;如比较完毕还未找到相同项,则输出“查无此人”void search_name() int i;char name20;/*打开文件,已省略*/ printf(n请输入要查询的姓名:);scanf(%s,name);for(i=0;ipeople;i+)/*从“”开始查找*/if(!strcmp(,name)/*查找相同项*/printf(n该职工信息如下:n);printf(n职工号t 姓名t性别t年龄t 学历t 工资t 住址t 电话n);printf(n%dt%8st%st%dt%8st%dt%st%dn,emi.number,,emi.sex,emi.age,emi.xueli,emi.wage,emi.address,emi.telephone);printf(n);break;if(i=people)/*当“i”值等于当前人数时,即没有相同项*/printf(n查无此人n);fclose(fp); search(); (3) search_number()查找职工号,与“查找姓名”功能类似,原理类似。(4) display()显示。显示文件中的职工信息,用for循环输出。原理较简单,不在此处详述。(5) del()删除。先通过用户输入,确定要删除的员工的姓名。用for循环查找此人。用此人所在的结构体数组的后一个结构体数组替代此人所在的结构体数组,以此类推,将职工信息删除。void del()int i,t,j,m,l;char name20;/*打开文件,已省略*/printf(n所有职工信息:n);display(people); printf(n请输入要删除职工的名字:);scanf(%s,name);for(i=0;ipeople;i+)if(!strcmp(,name)/*查找*/printf(n确认删除请按1n取消请按2n);scanf(%d,&t);if(t=1) for(j=i;jpeople;j+)/*从此所错在结构体数组开始删除*/emj.age=emj+1.age;emj.wage=emj+1.wage;emj.number=emj+1.number;emj.telephone=emj+1.telephone;strcpy(emj.xueli,emj+1.xueli);strcpy(,emj+1.name);strcpy(emj.address,emj+1.address);strcpy(emj.sex,emj+1.sex); people-;/*删除后,人数减少,故“people”执行自减*/for(l=0;lpeople;l+)fwrite(&eml, sizeof(eml), 1, fp); break;if(t=2)break;if(j=people)printf(n输入错误,无此人n);fclose(fp); printf(n继续删除请按1n浏览信息请按2n返回主菜单请按3n);scanf(%d,&m);switch(m)case 1:del(people);break; case 2:display(people);main();break; case 3:main();break;default:break;(6) input()录入职工信息。用scanf输入职工信息,用fwrite保存到文件。int input() FILE *fp;/*打开文件,已省略*/fflush(stdin);printf(请输入职工号: );scanf(%d,&empeople.number);fflush(stdin);printf(请输入姓名: );scanf(%s,);fflush(stdin);printf(请输入性别: );scanf(%s,&empeople.sex);fflush(stdin);printf(请输入年龄: );scanf(%d,&empeople.age);fflush(stdin);printf(请输入学历: );scanf(%s,empeople.xueli);fflush(stdin);printf(请输入工资: );scanf(%d,&empeople.wage);fflush(stdin);printf(请输入住址: );scanf(%s,empeople.address);fflush(stdin);printf(请输入电话: );scanf(%d,&empeople.telephone);fflush(stdin);printf(n);printf(输入成功!n); fwrite(&empeople,sizeof( struct employee),1,fp);fclose(fp);people+;/*每录入一次,员工人数加1,故“people”执行自增*/return people;/*将“people”返回,更新员工个数*/ (7) change()修改职工信息。用“scanf”语句输入想要修改的职工姓名,查找该员工。再查找到该员工后,通过“switch”语句选择要修改的职工信息,用赋值语句将要修改的职工信息赋值到原职工信息。/*修改*/void change()int num;char name10;char sex;int age;char xueli30;int wage;char addr30;long int tel;int i,t,n,k;/*打开文件,已省略*/printf(n 原来的职工信息:n);display(people);printf(输入想要更改信息的员工名字:n);scanf(%s,&name);for(i=0;i8|t1)printf(输入错误,请输入18之间的任意整数!n);switch (t)/*将新信息赋值给旧信息以实现修改*/case 1:printf(职工号改为: );scanf(%d,&num);emi.number=num;break; case 2:printf(姓名改为: );scanf(%s,name);strcpy(,name); break; case 3:printf(性别改为: );scanf(%s,&sex);strcpy(,name); break; case 4:printf(年龄改为: );scanf(%d,&age);emi.age=age;break; case 5:printf(学历改为: );scanf(%s,xueli);strcpy(emi.xueli,xueli); break; case 6:printf(工资改为: );scanf(%d,&wage);emi.age=age;break; case 7:printf(住址改为: );scanf(%s,addr);strcpy(emi.address,addr);break; case 8:printf(电话改为: );scanf(%ld,&tel);emi.telephone=tel; break; printf(n是否确定所修改的信息?n 是 请按1 ; 不,重新修改 请按2: n);scanf(%d,&k);if (k=1)/*保存信息*/for(i=0;ipeople;i+)fwrite(&emi, sizeof(emi), 1, fp);fclose(fp);elsechange();if(i=people)printf(n查无此人n);main();(8) sortNumber()按职工号排序。排序方式选择冒泡排序法。void sortNumber()int i,j;struct employee p;/*打开文件,已省略*/for(i=0;ipeople;i+)/*冒泡排序*/for(j=0;ji+1;j+)if(emi.numberemj.number)p=emi;emi=emj;emj=p;printf(n职工号t 姓名t性别t年龄t 学历t 工资t 住址t 电话n);for(i=0;ipeople;i+)printf(n%dt%8st%st%dt%8st%dt%st%dn,emi.number,,emi.sex,emi.age,emi.xueli,emi.wage,emi.address,emi.telephone);printf(n);fclose(fp); main();(9) sortWage()按工资排序,与“sortNumber()”函数类似。第4章 问题与解决编写程序的过程中遇到了很多问题,但是通过询问老师和与同组同学讨论都一一解决了,这些问题主要是以下几种类别:一、程序编写时遇到的问题与解决没有编写类似教复杂的程序的经验,先前都是做的一些小功能。虽然单个功能的编写不会有太大问题,但将他们组合在一起时有种无从下手的感觉。在经过老师的和参考网上的类似程序,终于将程序完成。在初次编写时,使用了多个全局变量,导致在程序实现的过程中出现了多个问题,数次修改无果,询问老师后,老师给的建议是,尽量少用全局变量。经过修改后,程序思路变得清晰了,错误也解决了。二、程序实现时遇到的问题Q1:程序关闭后再次运行时,上次输入的数据无法读取;A1:这个问题研究了很久,始终被禁锢在原本的思路中,跳不出来。初步认为数据并没有保存到文件。手动打开文件,发现文件中存在数据,但并不是以正确的方式保存。在询问了老师后,老师教了我一种方法,在主函数中增加一端代码,在程序运行时能够读取文件中的人数,之后保存正确,程序再次运行时也读取正确。Q2:程序的修改功能是采用将新信息赋值给旧信息的方法,在赋值语句中,出现过编译错误;A2:开始的时候为了这个问题十分头痛,不知道该怎么办才好,不管是翻阅参考书还是上网搜索资料,都找不到合适的方式,后来在仔细分析程序后,发现结构体数组中的成员类型不同,而我都是用strcpy语句进行赋值,故出现错误;第5章 程序测试图6-1 程序主菜单图6-2

温馨提示

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

评论

0/150

提交评论