C语言课程设计职工信息管理系统.docx
《C语言课程设计职工信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计职工信息管理系统.docx(16页珍藏版)》请在冰豆网上搜索。
![C语言课程设计职工信息管理系统.docx](https://file1.bdocx.com/fileroot1/2023-4/28/e788c46e-ecc1-496b-a26f-1c1f8805689e/e788c46e-ecc1-496b-a26f-1c1f8805689e1.gif)
C语言课程设计职工信息管理系统
;
C语言程序设计
题目:
职工信息管理系统
学号:
姓名:
班级:
成绩:
目录
一、设计思想2
二、概要设计2
(一)模块介绍2
(二)系统流程;3
三、详细设计4
(一)函数介绍4
(二)参数介绍10
(三)返回结果介绍10
四、结果总结10
一、设计思想
主要分为六大功能,分别用六个函数来实现:
1、录入职工信息并保存:
用fwrite将输入的数据保存在文件中,用fp=fopen("emploee_date1","wb")语句进行写入;
2、添加职工信息并保存:
用fp=fopen("emploee_date1","ab")语句追加所输入的信息,再用fwrite函数保存到文件中;
3、显示所有职工信息:
用fread函数对文件进行读取;
4、职工查询:
职工号方式查询,输入职工号,读取文件,输出与文件中相对应的信息;
职工姓名查询,用strcmp函数比较文件中的字符串与输入的字符串;
5、删除职工信息:
先用第4个功能查找信息,然后再把文件中的信息用后一项代替前一项,保存的项数减一;
6、修改职工信息并保存:
先用第4个功能查找信息,将数据从文件中读出后再赋值,然后重新全部保存;
二、概要设计
(一)模块介绍
i.录入职工信息并保存
第一次进入需进行首次录入后才能运行,录入后将会保存到文件"emploee_date1"中;
ii.添加功能
在录入的基础上对信息进行追加,并保存在文件中;
iii.显示所有职工信息
将文件中的信息全部读出,然后显示在屏幕上;
iv.职工查询
查询分为职工号查询和职工姓名查询。
进入查找后会提醒是职工号查询还是职工姓名查询。
查找为输入要查询的职工号或姓名,就会显示出查询的职工全部信息;
v.删除职工信息
在删除界面输入要删除职工的职工号或姓名,查询出职工信息后,选择删除后即可删除;
vi.修改职工信息并保存
对于职工信息的修改,在修改界面输入要修改职工的姓名或职工号,查询出该职工后选择修改,输入要修改的信息即完成修改。
(二)系统流程;
主函数流程图为:
进入程序后,会有菜单提示操作选项,当输入操作选项后,程序进入选择操作的工作界面。
当输入1时,进入录入职工信息并保存界面,选择录入个数,然后会将录入的信息保存在emploee_date1文件中。
当输入2时,进入添加职工信息并保存界面,选择添加个数,然后会将添加的信息保存在emploee_date1文件中。
当输入3时,屏幕上会显示所有的职工信息。
当输入4时,进入查询界面,屏幕上会显示是按职工号查找还是按姓名查找。
选择相应的操作后,屏幕上会出现输入查询职工的姓名或职工号,输入后选择查询即可查找到要查的职工信息,若输入的职工不存在,会提醒不存在。
查询完后会再提示是继续查找还是退出查询,选择相应的操作选项即可实现想要的操作。
当输入5时,会提示是按姓名查找删除还是按职工号查找删除,选择相应的选项后输入要删除的职工的姓名或职工号,屏幕上会显示要删除的职工信息,然后会提示确定删除还是退出删除,选择删除即可删除。
当输入5时,会提示是按姓名查找修改还是按职工号查找修改,选择相应的选项后,输入要修改的职工的姓名或职工号,然后选择修改,输入修改的内容,即可完成修改。
三、详细设计
代码介绍
(三)函数介绍
#include
#defineSIZE20
intk,m,y,i,n,d,p=1,z=0;
structemploee_type
{
intnum;
charname[10];
charsex;
structdate
{
intyear;
intmonth;
intday;
}birth;
charstate[10];
intpay;
charphone[11];
}emp[SIZE];
主函数:
voidmain()
{
system("color3f");//换背景颜色语句
m=open2();//从emploee_date2文件中取出m值
while
(1)//功能的重复运行
{
printf("请选择功能:
");
scanf("%d",&n);
if(n<7)
{
switch(n)
{
case1:
printf("录入的职工信息的个数:
");
scanf("%d",&m);
save1();
break;
case2:
while(p==1)//功能的重复运行
{
printf("添加的职工信息的个数:
");
scanf("%d",&k);
save2();
m=m+k;
}
break;
case3:
output();break;
case4:
printf("请选择查找方式:
\n");
find();break;
case5:
while(p==1)
{
m=del(m);//将m值返回
printf("继续删除请按1,退出删除请按2:
");
scanf("%d",&p);
}
break;
case6:
change();break;
}
p=1;//让程序能够再次进入功能2、3、4、5
open1();//保存m值到文件emploee_date2
printf("\n(提示请按7,退出程序请按8)\n");
}
elseif(n==7)
……
elseif(n==8)
break;//退出循环
else
printf("错误,请重新输入\n");
}
}
主函数由一个死循环构成,保证功能的重复运行,用stwich语句展开对六个函数的引用,各分函数用循环语句保证各自功能的重复运行。
voidsave1()//录入职工
{
FILE*fp;
printf("职工号姓名性别(F/M)出生职务工资电话号码\n");
for(i=0;iscanf("%d%s%s%d-%d-%d%s%d%s",&emp[i].num,emp[i].name,&emp[i].sex,&emp[i].birth.year,&emp[i].birth.month,&emp[i].birth.day,emp[i].state,&emp[i].pay,emp[i].phone);
fp=fopen("emploee_date1","wb")//以写方式打开文件emploee_date1
for(i=0;iif(fwrite(&emp[i],sizeof(structemploee_type),1,fp)!
=1)
printf("文件写入错误\n");
fclose(fp);//关闭文件emploee_date1
}
用fwrite将职工信息保存在文件emploee_date1中。
voidsave2()//添加职工
{
FILE*fp;
inti;
printf("职工号姓名性别(F/M)出生职务工资电话号码\n");
for(i=0;iscanf("%d%s%s%d-%d-%d%s%d%s",&emp[i].num,emp[i].name,&emp[i].sex,&emp[i].birth.year,&emp[i].birth.month,&emp[i].birth.day,emp[i].state,&emp[i].pay,emp[i].phone);
(fp=fopen("emploee_date1","ab")//以追加方式打开文件emploee_date1
for(i=0;iif(fwrite(&emp[i],sizeof(structemploee_type),1,fp)!
=1)
printf("文件写入错误\n");
fclose(fp);
printf("继续添加请按1,退出添加请按2:
");
scanf("%d",&p);
}
用fwrite追加职工信息并保存在文件emploee_date1中。
voidoutput()//显示所有职工功能
{
FILE*fp;
inti;
printf("职工号姓名性别出生职务工资电话号码\n");
fp=fopen("emploee_date1","rb");//以读方式打开emploee_date1文件
for(i=0;i{
fread(&emp[i],sizeof(structemploee_type),1,fp);//读出文件中的信息
printf("%-10d%-11s%-5c%d-%d-%-3d%-8s%-8d%s",emp[i].num,emp[i].name,emp[i].sex,emp[i].birth.year,emp[i].birth.month,emp[i].birth.day,emp[i].state,emp[i].pay,emp[i].phone);
printf("\n");
}
fclose(fp);
}
用fread文件emploee_date1中的信息读取。
find()//查找功能
{
FILE*fp;
inti,n=0,y,x,number;//其中n=0是为了控制是否文件中存在该信息
chara[10];
fp=fopen("emploee_date1","rb");
printf("1--按职工号\n2--按姓名\n");
scanf("%d",&x);
if(x==1)//选择查找方式
{
printf("请输入职工号:
");
scanf("%d",&number);
for(i=0;i{
fread(&emp[i],sizeof(structemploee_type),1,fp);
if(emp[i].num==number)//比较输入的数据与文件中职工号相同的信息
{
y=i;//将查找到位置给y
n=1;//文件中存在与所输入的数据相同的信息
}
}
}
if(x==2)
{
printf("请输入名字:
");
scanf("%s",&a);
for(i=0;i{
fread(&emp[i],sizeof(structemploee_type),1,fp);
if(strcmp(emp[i].name,a)==0)//比较输入的字符串与文件中姓名相同的信息
{
y=i;
n=1;
}
}
}
if(n==1)
{
printf("职工号姓名性别出生职务工资电话号码\n");
printf("%-10d%-11s%-5c%d-%d-%-3d%-8s%-8d%s",emp[y].num,emp[y].name,emp[y].sex,emp[y].birth.year,emp[y].birth.month,emp[y].birth.day,emp[y].state,emp[y].pay,emp[y].phone);
printf("\n");
}
if(n==0)
printf("查无此人\n");
fclose(fp);
return(y);
}
读取文件后,用比较输入的数据和字符串与文件中的数据是否相同来实行查找功能,使用了strcmp函数来比较两个字符串是否相同,其中用n的值来控制文件中存在与所输入的信息相同的数据。
del(intm)//删除功能
{
FILE*fp;
printf("请选择删除方式:
\n");
y=find();//利用功能4的函数首先查找到所需修改的信息,并将查找到的数据所对应的位置提取出来
printf("确定删除吗(是按1,否按2):
");
scanf("%d",&p);
if(p==1)//功能的循环
{
m=m-1;//删除一个值后信息量减少一个
for(i=y;iemp[i]=emp[i+1];//从所查找到的信息开始,依次将后一项的信息代替前一项
printf("删除成功\n");
if((fp=fopen("emploee_date1","wb"))==NULL)//将修改的信息重新保存到文件中
{
printf("文件无法打开\n");
return;
}
for(i=0;iif(fwrite(&emp[i],sizeof(structemploee_type),1,fp)!
=1)
printf("文件写入错误\n");
fclose(fp);
return(m);//将修改后的m值返回
}
}
首先利用查找功能查找到所需修改的信息,再将后一项的信息依次代替前一项,同时信息量m减少一。
voidchange()//修改功能
{
while(p==1)
{
FILE*fp;
printf("请选择所需修改的职工:
\n");
y=find();//查找所需修改的内容
printf("请按格式填写修改的内容:
\n");
printf("职工号姓名性别(F/M)出生职务工资电话号码\n");
scanf("%d%s%s%d-%d-%d%s%d%s",&emp[y].num,emp[y].name,&emp[y].sex,&emp[y].birth.year,&emp[y].birth.month,&emp[y].birth.day,emp[y].state,&emp[y].pay,emp[y].phone);//重新输入所查找到的信息,将原来的信息淹没即可完成修改。
(fp=fopen("emploee_date1","wb")//重新保存信息
for(i=0;iif(fwrite(&emp[i],sizeof(structemploee_type),1,fp)!
=1)
printf("文件写入错误\n");
fclose(fp);
printf("修改成功\n");
printf("继续修改请按1,退出修改请按2:
");
scanf("%d",&p);
}
}
查找到所需修改的内容后,新输入信息将原来的信息覆盖,重新保存信息即可完成修改功能。
voidopen1()//保存m值
{
FILE*fp2;
if((fp2=fopen("emploee_date2","wb"))==NULL)
{printf("cannotopenfile\n");
return;
}
fprintf(fp2,"%d",m);
fclose(fp2);
}
用fprintf函数将变量m值保存。
open2()//提取m值
{
FILE*fp2;
if((fp2=fopen("emploee_date2","rb"))==NULL)
{
printf("cannotopenfile\n");
return;
}
fscanf(fp2,"%d",&m);
fclose(fp2);
return(m);
}
用fscanf函数将m值读取。
(四)参数介绍
编写的程序中,所有的参数都为m,都表示文件中有效的职工信息个数。
其中变量p﹑n﹑y值,分别用来控制功能的循环,信息的存在与否以及信息位置的控制。
(五)返回结果介绍
编写的程序中,所有的返回值都为m,都表示文件中有效的职工信息个数。
四、结果总结
在整个编写的过程中,将功能模块化,逐个解决各项功能,用文件的方式将信息保存起来,其中注意对文件的打开和关闭,有字符串的比较。
值得关注的是程序中对有效职工信息数m的定义和运用,在录入,添加,删除时,m的值均会发生变化,其中用到了fscanf和fprintf函数对m值进行提取和保存,以达到对信息量的控制。
修改后以“wb”对职工信息重新保存,删除时,用到将职工信息前移以覆盖要删除信息,达到删除目的,修改信息时,将查找的信息直接用新的数据覆盖,然后再保存到文件中,以达到修改的目的,对于电话号码,11位数超过了整型的计数范围,故用字符串。