if(fwrite(&em[i],sizeof(structemployee),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
}
4系统功能实现及代码描述
4.1输入职工信息
定义一个结构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(n)将所输入的信息写入指定文件。
图4-1输入流程图
4.2浏览职工信息
声明整形变量i和m,其中i记录输出的职工序数,m用来接收传递过来的实参,用for循环输出每个职工的各种信息。
正确输入指令后输出所输入的所有职工信息。
图4-2浏览流程图
4.3查询职工信息
声明整形变量t,先用printf语句显示查询菜单,用scanf输入选择的查询方式代号,用switch(t)进入所选择的具体查询函数,包括按职工号查询、按姓名查询、按学历查询三种方式。
当t=1则表示按职工号查询,t=2表示按姓名查询,t=3表示按学历查询,t=4时返回主菜单。
图4-3查询流程
4.3.1按职工号查询
声明2个整形变量:
i记录职工的序数,number存放键盘输入的职工号。
调用导出函数load(m)(m表示当前的职工人数)。
通过scanf语句从键盘输入需要查询的职工号,并赋值给number。
用for循环,循环主体是先判断em.number中是否有输入的职工号,如果有,用printf语句输出与职工号相对应的该职工所有信息,再跳出循环;如果没有,输出“对不起,查无此人”,并调用search()返回查询菜单。
图4-3-1按姓名查询流程图
4.4删除职工信息
先读出文件中所有职工的信息,并显示。
然后输入要删除职工的姓名,首先定义个局部变量name[](字符数组),用保存用户输入姓名。
用户输入name[]的值。
从职工数组下标为0的元素(即第一个元素)开始,逐个比较name和em[i].name的值,如果相等,就输出该职工的信息,同时将标志flag置为1,表示查找成功。
当查找最后一个职工,若flag=0,则表示查找失败,输出该职工不存在。
找到之后,将位于这个职工下一个的职工信息依次转移的该信息上来进行覆盖,然后再将接下来一个员工的信息转移到已被转移员工的位置上来….就这样循环下来直到将被删除职工之后所有的职工信息都转移完后,将总人数减1,再显示删除后所有职工的信息。
最后结束程序。
图4-4删除流程图
4.5添加职工信息
先输入要添加的人数n,m为已经有的人数,令i=m,判断i是否小于(m+n),当小于成立的时候,就依次输入一个职工的信息,并保存该职工的信息,再进行判断,直到把所有的信息都输入完的时候,就显示新的职工信息,最后结束。
图4-5添加流程图
4.6修改职工信息
先读出文件中所有职工的信息,并显示。
然后输入要修改职工的姓名,首先定义个局部变量name[](字符数组),用保存用户输入姓名。
用户输入name[]的值。
从职工数组下标为0的元素(即第一个元素)开始,逐个比较name和em[i].name的值,如果相等,就输出该职工的信息,同时将标志flag置为1,表示查找成功。
当查找最后一个职工,若flag=0,则表示查找失败,输出该职工不存在。
若找到该职工后,输入数字(1-8)分别表示为1.职工号2.姓名3.性别4.年龄5.学历6.工资7.住址8.电话,选择要对那个地方进行修改若选择错误系统就会提示选择错误,进入修改后,输入自己修改后信息并确认即可。
最后显示修改后所有的职工信息,系统再提示是否进行修改。
直到修改完毕后,结束程序。
图4-6修改流程图
5系统测试
5.1菜单函数
如果输入1-7以外的数字,就会显示输入错误。
输入正确的指令系统才开始工作。
5-1菜单函数
5.2职工信息的录入。
输入指令后,按系统提示依次输入相应的信息。
图5-2职工信息的录入
5.3职工信息的浏览。
输入相应指令浏览职工信息。
图5-3-1浏览职工信息
5.4职工信息的查询(按职工号,学历,姓名查询)以学历查询为例
如果未查到,系统就会显示查无此人。
图5-4-1职工号输入不正确,查无此人
输入正确指令,将会显示查询到的职工信息。
图5-4-2查询到的职工信息
5.5职工信息的删除。
先查找,输入职工的姓名即可;若输入错误,系统提示查无此人。
图5-5-1职工姓名输入错误,查无此人
输入正确后才能删除职工信息。
图5-5-2删除职工信息
5.6职工信息的添加。
先输入自己要添加的人数,从而依次输入要添加的信息。
图5-6-1添加职工信息
添加完毕后,系统会显示新的职工信息。
图5-6-2新的职工信息
5.7职工信息的修改。
先查找职工,再选择修改的类型,修改完后保存。
图5-7修改职工信息
5.8退出系统。
图5-8退出系统
6设计心得与总结
经过对职工信息管理系统的分析与编写,我得到了很大的收获。
自主学习的是解决问题的基础。
这次设计使我重温了以前学过的各科知识,让我对C++编程有了更深刻的认识。
在设计过程中难免遇到困难,这时候要细心仔细寻找自己所出现差错的地方,碰到不懂的地方要及时向老师或者同学们请教,记住自己犯下的错误保证以后不再犯类似错误。
通过这次课程设计,也学到和巩固了许多计算机应用基础知识,对计算机的机体也有了一个较为详细的了解。
在具体操作中对这学期所学的C语言的理论知识得到巩固加强,达到实训的目的,也发现自己的不足之处,为我们以后的c语言学习奠定了基础。
C语言具有的语句简洁,使用灵活,执行效率高等特点使解决问题变得更简单。
这次课程设计让我发现上机操作的重要作用,通过实际操作,学会C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。
总结出了一点点的经验如下:
(1)有明确目标,根据目标制定计划。
(2)要对系统的功能和要求做出详细的分析,并合理分解任务。
(3)把分解出来的子任务,做给一个相对独立的模块。
(4)在设计一个模块之前,要简单构想一下总界面的显视情况。
(5)针对构想出来的界面进行程序的编写。
7参考文献
[1]Brianw.Kernighan,DennisM.Ritchie.THECPROGRAMMINGLANGUAGE.北京:
清华大学出版社.2002./PRENTICEHALL,2001
[2]秦友淑.曹化工.C语言程序设计教程(第二版).武汉:
华中科技大学出版社,2002
[3]Alkelley,IraPohl.C语言教程(英文版.第4版).北京:
机械工业出版社,2004
[4]EricS.Roberts.C语言的科学和艺术(英文版).北京:
机械工业出版社,2004
[5]严蔚敏,吴伟民.数据结构.北京:
清华大学出版社,1997
[6]王晓东.算法设计与分析.北京:
清华大学出版社,2003
[7]ISO的C语言标准:
ISO/IEC9899:
1999(E)
[8]S.P.Harbison,G.L.Steele.C语言参考手册.北京:
机械工业出版社,2003
[9]叶欣.徐金梧.TurboC使用大全.北京:
北京科海培训中心.1990
附录:
源程序清单
#include
#include
#include
#defineN100
structemployee
{
longnum;
charname[20];
charsex;
intage;
charxueli[30];
intwage;
charaddr[30];
chartel[20];
}em[N];/*定义一个结构体*/
voidmenu();
voidinput();
voidsave(int);
voiddisplay();
voiddel();
voidadd();
voidsearch();
voidsearch_num();
voidsearch_xueli();
voidsearch_tel();
voidmodify();/*定义各函数*/
voidmain()
{
menu();
intn,flag;
chara;
do
{
printf("请输入您的选择(1~7):
");
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();/*调用菜单函数*/
printf("请再次输入您的选择(1~7):
\n");
scanf("%d",&n);
printf("\n");
}
else
exit(0);
}
}
voidmenu()/*菜单函数*/
{
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");
}
voidinput()/*录入函数*/
{
inti,n,flag;
printf("请输入需要创建信息的职工人数:
");
scanf("%d",&n);
for(i=0;i{
do
{
printf("请输入职工号(2011000-2011999):
");
scanf("%d",&em[i].num);
if(em[i].num>=2011000&&em[i].num<=2011999)
{
flag=1;break;
}
else
{
flag=0;
printf("输入错误,请重新输入!
");
}
}while(flag==0);
printf("请输入姓名:
");
scanf("%s",em[i].name);
getchar();
do
{
printf("请输入性别(f--女m--男):
");
scanf("%c",&em[i].sex);
if(em[i].sex=='f'||em[i].sex=='m')
{
flag=1;break;
}
else
{
flag=0;
printf("输入错误,请重新输入:
");
getchar();
}
}while(flag==0);
do
{
printf("请输入年龄:
");
scanf("%d",&em[i].age);
if(em[i].age<=75&&em[i].age>=18)
{
flag=1;break;
}
else
{
flag=0;
printf("不科学,请重新输入!
");
}
}while(flag==0);
printf("请输入学历:
");
scanf("%s",em[i].xueli);
printf("请输入工资:
");
scanf("%d",&em[i].wage);
printf("请输入住址:
");
scanf("%s",em[i].addr);
printf("请输入电话:
");
scanf("%s",em[i].tel);
printf("\n");
}
printf("\n创建完毕!
\n");
save(n);
}
voidsave(intm)/*保存文件函数*/
{
inti;
FILE*fp;
if((fp=fopen("employee_list","wb"))==NULL)
{
printf("cannotopenfile\n");
exit(0);
}
for(i=0;iif(fwrite(&em[i],sizeof(structemployee),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
}
intload()/*导入函数*/
{
FILE*fp;
inti=0;
if((fp=fopen("employee_list","rb"))==NULL)
{
printf("cannotopenfile\n");
exit(0);
}
else
{
do
{
fread(&em[i],sizeof(structemployee),1,fp);
i++;
}
while(feof(fp)==0);
}
fclose(fp);
return(i-1);
}
voiddisplay()/*浏览函数*/
{
inti;
intm=load();
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
for(i=0;iprintf("%d\t%s\t%c\t%d\t%s\t%d\t%s\t%s\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
}
voiddel()/*删除函数*/
{
intm=load();
inti,j,n,t,flag;
charname[20];
printf("\n原来的职工信息:
\n");
display();
printf("\n");
printf("请输入要删除的职工的姓名:
\n");
scanf("%s",name);
for(flag=1,i=0;flag&&i{
if(strcmp(em[i].name,name)==0)
{
printf("已找到此人,原始记录为:
\n");
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
printf("%d\t%s\t%c\t%d\t%s\t%d\t%s\t%s\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
printf("\n确实要删除此人信息请按1,不删除请按0\n");
scanf("%d",&n);
if(n==1)
{
for(j=i;j{
strcpy(em[j].name,em[j+1].name);
em[j].num=em[j+1].num;
em[j].sex=em[j+1].sex;
em[j].age=em[j+1].age;
strcpy(em[j].xueli,em[j+1].xueli);
em[j].wage=em[j+1].wage;
strcpy(em[j