C语言设计人事管理管理系统 精品.docx
《C语言设计人事管理管理系统 精品.docx》由会员分享,可在线阅读,更多相关《C语言设计人事管理管理系统 精品.docx(33页珍藏版)》请在冰豆网上搜索。
C语言设计人事管理管理系统精品
人事管理管理系统
[要求]
某高校主要人员有:
在职人员(行政人员、教师、一般员工)、退休人员和临时工。
现在,需要存储这些人员的人事档案信息:
编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别。
其中,人员编号唯一,不能重复。
(1)添加删除功能:
能根据学院人事的变动情况,添加删除记录;
(2)查询功能:
能根据编号和姓名进行查询;
(3)编辑功能(高级):
根据查询对相应的记录进行修改,并存储;
(4)统计功能:
能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数(硕士学位以上或者副教授以上)),统计要求同时显示被统计者的信息;
(5)排序功能:
按照年龄、来院时间进行排序;
(6)保存功能:
能对输入的数据进行相应的存储;
二.总体设计:
根据以上需求分析,将程序分成以下几个模块:
1.添加和删除
****添加人员信息并保存
(1)
****按名称和编号查询与删除记录并保存
(2)
2.查询与编辑
****按名称和编号查询
****重新编辑信息并保存
3.统计
****统计在职人数
****统计党员人数
****统计女工人数
****统计硕士以上学历和副教授以上职称人数
****将统计得到的信息保存在worker3.txt文件中
4.排序
****按年龄进行排序
(1)
****按来院时间进行排序
(2)
三详细设计;
1、主函数:
主函数设计的比较简单,只提供输入、处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
其流程图如下
程序
main()
{
intn,w;
do
{
puts("\t\t***********************高校人事管理*************************\n\n\n");
puts("\t\t\t\t1.添加或删除\n");
puts("\t\t\t\t2.查询与编辑\n");
puts("\t\t\t\t3.统计\n");
puts("\t\t\t\t4.排序\n");
puts("\t\t*************************************************************\n");
printf("选择你要的服务(1-4):
[]\b\b");
scanf("%d",&n);
if(n<1||n>4)
{
w=1;
getchar();
}
elsew=0;
}
while(w==1);
switch(n)
{
case1:
retify();break;
case2:
sear_edit();break;
case3:
stat();break;
case4:
row();break;
}
}
1.添加与删除模块,此模块有
(1),
(2)两个模块构成。
voidretify()
{
intn,w;
do
{
puts("\t\t***************删除或添加人员的信息****************\n\n\n\n\n");
puts("\t\t\t\t1.添加");
puts("\t\t\t\t2.删除");
printf("请选择服务(1-2):
[]\b\b");
scanf("%d",&n);
if(n<1||n>2)
{
w=1;
getchar();
}
elsew=0;
}
while(w==1);
switch(n)
{
case1:
tianjia();break;
case2:
shanchu();break;
}
}
(1).添加功能:
voidtianjia()
{
FILE*fp;
inti,number;
structworkerwor_t[N];
printf("您要添加的人的人数:
");
scanf("%d",&number);
printf("输入添加人的信息:
\n");
for(i=0;i{
printf("编号:
\n");scanf("%d",&wor_t[i].num);
printf("姓名:
\n");scanf("%s",wor_t[i].name);
printf("性别:
\n");scanf("%s",wor_t[i].sex);
printf("年龄:
\n");scanf("%d",&wor_t[i].old);
printf("职称:
\n");scanf("%s",wor_t[i].zhicheng);
printf("职位:
\n");scanf("%s",wor_t[i].zhiwei);
printf("政治面貌:
\n");scanf("%s",wor_t[i].mianmao);
printf("学历:
\n");scanf("%s",wor_t[i].xueli);
printf("来院时间:
\n");scanf("%d",&wor_t[i]e_time);
printf("在院工作时间:
\n");scanf("%d",&wor_t[i].work_time);
printf("在职与否:
在职请按1,不在职请按2\n");scanf("%d",&wor_t[i].leibie);
printf("您刚才输入的人的信息\n");
printf("%d%s%s%d%s%s%s%s%d%d%d\n",wor_t[i].num,wor_t[i].name,wor_t[i].sex,wor_t[i].old,wor_t[i].zhicheng,wor_t[i].zhiwei,wor_t[i].mianmao,wor_t[i].xueli,wor_t[i]e_time,wor_t[i].work_time,wor_t[i].leibie);
}
if((fp=fopen("D:
\\txt\\worker.txt","a+"))==NULL)
{
printf("\nCannotopenfile\n");exit(0);
}
for(i=0;i{
fprintf(fp,"\n%d%s%s%d%s%s%s%s%d%d%d",wor_t[i].num,wor_t[i].name,wor_t[i].sex,wor_t[i].old,wor_t[i].zhicheng,wor_t[i].zhiwei,wor_t[i].mianmao,wor_t[i].xueli,wor_t[i]e_time,wor_t[i].work_time,wor_t[i].leibie);
}
fclose(fp);
}
(2).删除模块
该模块的功能是根据编号和姓名先查询出该人的信息,然后从原文件中删除该人的信息。
流程图如下,
程序
voidshanchu()
{
FILE*fp,*fp1;
inti,number,k,j,m;
structworkerworker1[M],worker2[M];
inta[N];
charb[N][20];
printf("您要删除的人的人数:
\n");
scanf("%d",&number);
for(i=0;i{
printf("输入删除人的信息的编号和姓名:
\n");
printf("输入添加人的编号:
\n");scanf("%d",&a[i]);
printf("输入添加人的姓名:
\n");scanf("%s",b[i]);
printf("您刚才输入的人的信息的编号和姓名:
\n");
printf("%d%s\n",a[i],b[i]);
}
if((fp=fopen("D:
\\txt\\worker.txt","r"))==NULL)
{
printf("\nCannotopenfile\n");
getch();
exit(0);
}
printf("输出公司更改前所有人员的信息:
\n编号姓名性别年龄职称职位面貌学历来院时间工作时间在职与否\n");
for(i=0;!
feof(fp);i++)
fscanf(fp,"%d%s%s%d%s%s%s%s%d%d%d",&worker2[i].num,worker2[i].name,worker2[i].sex,&worker2[i].old,worker2[i].zhicheng,worker2[i].zhiwei,worker2[i].mianmao,worker2[i].xueli,&worker2[i]e_time,&worker2[i].work_time,&worker2[i].leibi);
k=i;
fclose(fp);
m=0;
for(i=0;i{
for(j=0;j{
if(worker2[i].num!
=a[j]&&strcmp(worker2[i].name,b[j]))
{
worker1[m]=worker2[i];
m++;
}
}
printf("%d%s%s%d%s%s%s%s%d%d%d\n",worker2[i].num,worker2[i].name,worker2[i].sex,worker2[i].old,worker2[i].zhicheng,worker2[i].zhiwei,worker2[i].mianmao,worker2[i].xueli,worker2[i]e_time,worker2[i].work_time,worker2[i].leibie);
if(k==m){printf("\n这个人不存在?
?
?
");exit(0);getch();}
}
printf("输出公司更改后所有人员的信息:
\n编号姓名性别年龄职称职位面貌学历来院时间工作时间在职与否\n");
if((fp1=fopen("D:
\\txt\\worker.txt","w"))==NULL)
{
printf("\nCannotopenfile\n");
getch();
exit(0);
}
for(i=0;i{
printf("%d%s%s%d%s%s%s%s%d%d%d\n",worker1[i].num,worker1[i].name,worker1[i].sex,worker1[i].old,worker1[i].zhicheng,worker1[i].zhiwei,worker1[i].mianmao,worker1[i].xueli,worker1[i]e_time,worker1[i].work_time,worker1[i].leibie);
fprintf(fp1,"%d%s%s%d%s%s%s%s%d%d%d\n",worker1[i].num,worker1[i].name,worker1[i].sex,worker1[i].old,worker1[i].zhicheng,worker1[i].zhiwei,worker1[i].mianmao,worker1[i].xueli,worker1[i]e_time,worker1[i].work_time,worker1[i].leibie);
}
fclose(fp1);
getch();
}
2,查询和编辑功能:
首先,输入你要查询的人的编号和姓名,电脑将显示出该人的信息,并提问你是否要对该人的信息重新进行编辑,若选择了重新编辑的选项就重新输入该人的信息,此时将显示该人的信息并且对原文件进行修改和保存。
voidsear_edit()
{
FILE*fp,*fp1;
structworkerwor_people,worker1[M];
inti,k,m,n;
printf("你想查询谁?
\n");
printf("输入你想查询的人的编号和姓名\n");
printf("输入你想查询的人的编号\n");scanf("%d",&wor_people.num);
printf("输入你想查询的人的姓名\n");scanf("%s",wor_people.name);
if((fp=fopen("D:
\\txt\\worker.txt","r"))==0)
{
printf("\nCannotopenfile\n");getch();
exit(0);
}
for(i=0;!
feof(fp);i++)
for(i=0;!
feof(fp);i++)
fscanf(fp,"%d%s%s%d%s%s%s%s%d%d%d",&worker1[i].num,worker1[i].name,worker1[i].sex,&worker1[i].old,worker1[i].zhicheng,worker1[i].zhiwei,worker1[i].mianmao,worker1[i].xueli,&worker1[i]e_time,&worker1[i].work_time,&worker1[i].leibie);
k=i;m=-1;
for(i=0;i{
if(wor_people.num==worker1[i].num||!
(strcmp(wor_people.name,worker1[i].name)))
{
printf("%d%s%s%d%s%s%s%s%d%d%d",worker1[i].num,worker1[i].name,worker1[i].sex,worker1[i].old,worker1[i].zhicheng,worker1[i].zhiwei,worker1[i].mianmao,worker1[i].xueli,worker1[i]e_time,worker1[i].work_time,worker1[i].leibie);
m=i;
}
}
fclose(fp);
if(m==-1)
{
printf("\n这个人不存在?
?
?
");exit(0);getch();
}
printf("\n你想重新编辑这个人的信息吗?
\n");
printf("如果你想,请按1\n如果不想请按2\n");
scanf("%d",&n);
if(n==1)
{
{
printf("这个人的初始信息:
\n");
printf("\n%d%s%s%d%s%s%s%s%d%d%d\n",worker1[m].num,worker1[m].name,worker1[m].sex,worker1[m].old,worker1[m].zhicheng,worker1[m].zhiwei,worker1[m].mianmao,worker1[m].xueli,worker1[m]e_time,worker1[m].work_time,worker1[m].leibie);
printf("输入新的信息\n");
printf("编号:
\n");scanf("%d",&worker1[m].num);
printf("姓名:
\n");scanf("%s",worker1[m].name);
printf("性别:
\n");scanf("%s",worker1[m].sex);
printf("年龄:
\n");scanf("%d",&worker1[m].old);
printf("职称:
\n");scanf("%s",worker1[m].zhicheng);
printf("职位:
\n");scanf("%s",worker1[m].zhiwei);
printf("政治面貌:
\n");scanf("%s",worker1[m].mianmao);
printf("学历:
\n");scanf("%s",worker1[m].xueli);
printf("来院时间:
\n");scanf("%d",&worker1[m]e_time);
printf("在院工作时间:
\n");scanf("%d",&worker1[m].work_time);
printf("在职与否:
在职请按1,不在职请按2\n");scanf("%d",&worker1[i].leibie);
printf("您刚才输入的人的信息\n");
printf("\n%d%s%s%d%s%s%s%s%d%d%d\n",worker1[m].num,worker1[m].name,worker1[m].sex,worker1[m].old,worker1[m].zhicheng,worker1[m].zhiwei,worker1[m].mianmao,worker1[m].xueli,worker1[m]e_time,worker1[m].work_time,worker1[m].leibie);
}
if((fp1=fopen("D:
\\txt\\worker.txt","w"))==0)
{
printf("\nCannotopenfile\n");exit(0);
}
for(i=0;ifprintf(fp1,"%d%s%s%d%s%s%s%s%d%d%d\n",worker1[i].num,worker1[i].name,worker1[i].sex,worker1[i].old,worker1[i].zhicheng,worker1[i].zhiwei,worker1[i].mianmao,worker1[i].xueli,worker1[i]e_time,worker1[i].work_time,worker1[i].leibie);
fclose(fp1);
}
if(n=2)exit(0);
}
3,根据各个参数进行统计:
****统计在职人数
****统计党员人数
****统计女工人数
****统计硕士以上学历和副教授以上职称人数
****将统计得到的信息保存在worker3.txt文件中
voidstat()
{
FILE*fp,*fp1;
intw_num,d_num,wo_num,x_c_num,i,k;
structworkerworker1[M];
puts("\t\t*******************统计人数菜单********************\n\n");
printf("\t\t\t\t各种人员的人数");
puts("\n\n\t\t**************************************************\n");
if((fp=fopen("D:
\\txt\\worker.txt","r"))==0)
{
printf("\nCannotopenfile\n");
exit(0);
}
for(i=0;!
feof(fp);i++)
fscanf(fp,"%d%s%s%d%s%s%s%s%d%d%d",&worker1[i].num,worker1[i].name,worker1[i].sex,&worker1[i].old,worker1[i].zhicheng,worker1[i].zhiwei,worker1[i].mianmao,worker1[i].xueli,&worker1[i]e_time,&worker1[i].work_time,&worker1[i].leibie);
k=i;
fclose(fp);
w_num=0,d_num=0,wo_num=0,x_c_num=0;
for(i=0;i{
if(!
(strcmp(worker1[i].sex,"w")))wo_num++;
if(!
(strcmp(worker1[i].mianmao,"dang")))d_num++;
if(worker1[i].leibie==1)w_num++;
if(!
(strcmp(worker1[i].xueli,"doc")))x_c_num++;
if(!
(strcmp(worker1[i].xueli,"mas")))x_c_num++;
if(!
(strcmp(worker1[i].zhicheng,"Professor")))x_c_num++;
if(!
(strcmp(worker1[i].zhicheng,"a_professor")))x_c_num++;
}
printf("在职人员数目:
");
printf("%d\n",wo_num);
printf("党员人数:
");
printf("%d\n",d_num);
printf("女职工人数:
");
printf("%d\n",wo_num);
printf("高职称高学历人数:
");
printf("%d",x_c_num);
getch();
if((fp1=fopen("D:
\\txt\\worker3.txt","w"))==NULL)
{
printf("\nCannotopenfile\n");
exit(0);
}
fprintf(fp1,"%d%d%d%d",w_num,d_num,wo_num,x_c_num);
fclose(fp1);
}
4.排序模块:
该模块有两个子模块构成,按年龄和来源时间对原文件里的信息进行排序并且将排序分别保存在old_row.txt和ingtime_row.txt中。
voidrow()
{
intn,w;
do
{
puts("\t\t************按年龄和来院时间排序*****************\n\n");
puts("\t\t\t\t1.按年龄排序\n");
puts("\t\t\t\t2.按来院时间排序\n");
puts("\n\n\t\t**********************************************\n")