小野C语言课程设计.docx
- 文档编号:12586683
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:47
- 大小:578.17KB
小野C语言课程设计.docx
《小野C语言课程设计.docx》由会员分享,可在线阅读,更多相关《小野C语言课程设计.docx(47页珍藏版)》请在冰点文库上搜索。
小野C语言课程设计
C语言课程设计
院系:
计算机学院
姓名:
小野
学号:
20101001957
班号:
191104-23
指导教师:
王老师
日期:
2011年7月
人事管理系统
一、题目要求
某高校主要人员有:
在职人员(行政人员,教师,一般员工)、退休员工和临时工。
现在需要存储这些人员的人事档案信息,内容包括编号、姓名、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别。
其中,人员编号唯一,不能重复。
(1)添加删除功能:
能根据学院人事的变动情况,添加删除记录。
(2)查询功能:
能根据编号和姓名进行查询。
(3)编辑功能:
根据记录对相应的记录进行修改并存储。
(4)统计功能:
能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数、(硕士学位以上或者副教授以上)),统计要求同时显示被统计者的信息。
(5)排序功能:
按照年龄、来院时间来排序。
(6)保存功能:
能对输入的数据进行相应的存储。
二、需求分析
人员信息用结构体存储,其中来院时间又有一个结构体来存储。
程序运行时采用文件读入方式自动读入,对人员信息进行添加删除修改后,都保存在文件中。
查询功能分为按名字查询和按编号查询,查询后可编辑人员信息,但不能修改编号。
统计功能分四种统计方式,排序功能分两种排序方式,各自用不同的函数表示。
最后,能对修改后的人员信息进行保存。
三、总体分析
根据上面的需求分析,可以将这个系统的设计分为以下模块
四、详细设计
预处理
定义存储信息的数据结构以及实现各个功能的所有分支函数。
#include
#defineN50
structperson/*人员信息用结构体来存放*/
{
intnum;
charname[20];
charsex;
intage;
intzhiwu;
intzhicheng;
intmianmao;
intxueli;
intleibie;
intrenzhi;
structtime/*时间信息再用一个结构体来存放*/
{
intyear;
intmonth;
intday;
};
structtimelaiyuan;
}a[N];
intm;/*m用来存放人员总数*/
voidadd();
intload();
voidmenu();
voidprint(inti);
voidPRINT();
voidchaxun();
intbianji(inti);
intxiugai(inti);
voiddelete(inti);
voidcount();
voidpaixu();
intsave();
voidbianhao();
voidname();
voidlaiyuan();
voidage();
voidzaizhi();
voiddangyuan();
voidnvgong();
voidgaoxueli();
一、主函数
流程图如下:
打印出五个功能选项,提示选择所需功能。
intmain()/*主函数*/
{
m=load();/*从文件中读入人员信息*/
caidan();/*打印菜单*/
return0;
}
voidcaidan()
{
intn,w;
do
{
puts("\t\t*********************菜单*******************\n\n");
puts("\t\t\t\t1.添加");
puts("\t\t\t\t2.查询编辑");
puts("\t\t\t\t3.统计");
puts("\t\t\t\t4.排序");
puts("\t\t\t\t5.退出");
puts("\n\n\t\t*******************************************\n");
printf("\t请选择功能(1-5):
[]\b\b");
scanf("%d",&n);
if(n<1||n>5)
{
w=1;getchar();
}
elsew=0;
}
while(w==1);
switch(n)
{
case1:
add();break;
case2:
chaxun();break;
case3:
count();break;
case4:
paixu();break;
case5:
exit(0);}
}二、公共函数
1、读入人员信息
该函数实现从文件中读入人员信息的功能。
intload()/*从文件中读入人员信息*/
{
FILE*fp;
inti;
if((fp=fopen("yuangong.txt","r"))==NULL)
{
printf("\ncannotopenfile\n");
return0;
}
for(i=0;!
feof(fp);i++)
{
fscanf(fp,"%d%s%c%d%d",&a[i].num,a[i].name,&a[i].sex,&a[i].age,&a[i].zhiwu);
fscanf(fp,"%d%d%d%d",&a[i].zhicheng,&a[i].mianmao,&a[i].xueli,&a[i].renzhi);
fscanf(fp,"%d%d%d%d",&a[i].laiyuan.year,&a[i].laiyuan.month,&a[i].laiyuan.day,&a[i].leibie);
}
fclose(fp);
returni-1;}
2、打印人员信息
voidprint(inti)/*打印单个人员信息*/
{
printf("%d%s%c%d",a[i].num,a[i].name,a[i].sex,a[i].age);
switch(a[i].zhiwu)
{
case0:
printf("行政");break;
case1:
printf("教师");break;
case2:
printf("一般");break;
default:
printf("无");break;
}
switch(a[i].zhicheng)
{
case0:
printf("助教");break;
case1:
printf("讲师");break;
case2:
printf("副教");break;
case3:
printf("教授");break;
default:
printf("error");break;
}
switch(a[i].mianmao)
{
case0:
printf("团员");break;
case1:
printf("党员");break;
default:
printf("error");break;
}
switch(a[i].xueli)
{
case0:
printf("专科");break;
case1:
printf("本科");break;
case2:
printf("硕士");break;
case3:
printf("博士");break;
default:
printf("error");break;
}
printf("%d",a[i].renzhi);
printf("%d,%d,%d",a[i].laiyuan.year,a[i].laiyuan.month,a[i].laiyuan.day);
switch(a[i].leibie)
{
case0:
printf("在职");break;
case1:
printf("退休");break;
case2:
printf("临时");break;
default:
printf("error");break;
}
printf("\n");
}
(2)打印所有人员信息
voidPRINT()/*打印所有人员信息*/
{
intj;
printf("编号姓名性别年龄职务职称政治面貌最高学历任职时间来院时间人员类别\n");
for(j=0;j print(j);} 三、功能函数 1、添加功能 按提示顺序及格式输入需要添加的人员信息,输入后显示添加成功并保存。 voidadd()/*添加人员信息*/ { FILE*fp1; printf("编号姓名性别年龄职务职称政治面貌最高学历任职时间来院时间人员类别\n"); printf("请按上面格式输入添加的内容: \n"); scanf("%d%s%c%d%d",&a[m+1].num,a[m+1].name,&a[m+1].sex,&a[m+1].age,&a[m+1].zhiwu); scanf("%d%d%d%d",&a[m+1].zhicheng,&a[m+1].mianmao,&a[m+1].xueli,&a[m+1].renzhi); scanf("%d%d%d%d",&a[m+1].laiyuan.year,&a[m+1].laiyuan.month,&a[m+1].laiyuan.day,&a[m+1].leibie); if((fp1=fopen("yuangong.txt","a"))==NULL) { printf("\ncannotopenfile\n"); exit(0); } fprintf(fp1,"%d%s%c%d%d",a[m+1].num,a[m+1].name,a[m+1].sex,a[m+1].age,a[m+1].zhiwu); fprintf(fp1,"%d%d%d",a[m+1].zhicheng,a[m+1].mianmao,a[m+1].xueli); fprintf(fp1,"%d",a[m+1].renzhi); fprintf(fp1,"%d%d%d%d",a[m+1].laiyuan.year,a[m+1].laiyuan.month,a[m+1].laiyuan.day,a[m+1].leibie); fclose(fp1); printf("\n添加成功! ^^\n\n"); m=load(); menu(); }2、查询功能 按编号查询返回主菜单按名字查询 voidchaxun()/*查询功能函数*/ { intn,w; do voidchaxun()/*查询功能函数*/ { intn,w; do { puts("\t\t*********************查询*******************\n\n"); puts("\t\t\t\t1.按编号查询"); puts("\t\t\t\t2.按名字查询"); puts("\t\t\t\t3.返回主菜单"); puts("\n\n\t\t*******************************************\n"); printf("\t请选择功能(1-3): []\b\b"); scanf("%d",&n); printf("\n\n"); if(n<1||n>3) { w=1;getchar(); } elsew=0; } while(w==1); switch(n) { case1: number(); case2: name(); case3: menu(); } } voidnumber()/*按编号查询单个人员信息*/ { intn,w,i; printf("\n\n请输入需要查询的编号如1001[]\b\b\b\b\b\b"); scanf("%d",&n); printf("\n\n"); for(i=0;i if(n==a[i].num){w=1;break;} elsew=0; if(w==1){printf("\n\n");printf("查找成功! ^^\n\n"); printf("编号姓名性别年龄职务职称政治面貌最高学历任职时间来院时间人员类别\n"); print(i);printf("\n\n");} elseprintf("\n\n没有找到该编号==! \n\n"); edit(i); }voidname()/*按名字查询单个人员信息*/ { charn[20]; intw,i; printf("\n\n请输入需要查询的名字[]\b\b\b\b\b\b\b\b\b\b\b\b\b"); scanf("%s",n); for(i=0;i if(strcmp(n,a[i].name)==0){w=1;break;} elsew=0; if(w==1) { printf("\n\n"); printf("查找成功! ^^\n\n"); printf("编号姓名性别年龄职务职称政治面貌最高学历任职时间来院时间人员类别\n"); print(i);printf("\n\n"); } elseprintf("\n\n没有找到该名字==! \n\n"); edit(i); } 3、编辑功能 修改功能退出删除功能 intedit(inti)/*编辑查询到的单个人员信息*/ { intn,w; do { puts("\t\t*********************编辑*******************\n\n"); puts("\t\t\t\t1.修改"); puts("\t\t\t\t2.删除"); puts("\t\t\t\t3.返回主菜单"); puts("\t\t\t\t4.退出"); puts("\n\n\t\t*******************************************\n"); printf("\t请选择功能(1-4): []\b\b"); scanf("%d",&n); printf("\n\n"); if(n<1||n>4) { w=1;getchar(); } elsew=0; } while(w==1); switch(n) { case1: xiugai(i); case2: delete(i); case3: menu(); case4: exit(0); } return0; }4、修改功能 intxiugai(inti)/*修改查询到的单个人员信息*/ { structpersonb; printf("姓名性别年龄职务职称政治面貌最高学历任职时间来院时间人员类别\n"); printf("请按上面格式输入修改后的内容: \n"); b.num=a[i].num; scanf("%s%c%d%d",b.name,&b.sex,&b.age,&b.zhiwu); scanf("%d%d%d%d",&b.zhicheng,&b.mianmao,&b.xueli,&b.renzhi); scanf("%d%d%d%d",&b.laiyuan.year,&b.laiyuan.month,&b.laiyuan.day,&b.leibie); a[i]=b; save(); printf("\n\n修改成功! \n\n"); printf("修改后的内容为: \n\n"); printf("编号姓名性别年龄职务职称政治面貌最高学历任职时间来院时间人员类别\n"); print(i); edit(i); return0;} 5、保存功能 intsave()/*保存人员信息*/ { FILE*fp1; intj; if((fp1=fopen("yuangong.txt","w"))==NULL) { printf("\ncannotopenfile\n"); exit(0); } for(j=0;a[j].num! =0;j++) { fprintf(fp1,"%d%s%c%d%d",a[j].num,a[j].name,a[j].sex,a[j].age,a[j].zhiwu); fprintf(fp1,"%d%d%d",a[j].zhicheng,a[j].mianmao,a[j].xueli); fprintf(fp1,"%d",a[j].renzhi); fprintf(fp1,"%d%d%d%d\n",a[j].laiyuan.year,a[j].laiyuan.month,a[j].laiyuan.day,a[j].leibie); } fclose(fp1); return0; }6、删除功能 voiddelete(inti)/*删除查询到的单个人员信息*/ { intj; for(j=i;j a[j]=a[j+1]; save(); m=load(); printf("\n删除成功! ^^\n\n"); edit(i); }7、统计功能 voidcount()/*统计功能函数*/ { intn,w; do { puts("\t\t*********************统计*******************\n\n"); puts("\t\t\t\t1.在职人数统计"); puts("\t\t\t\t2.党员人数统计"); puts("\t\t\t\t3.女工人数统计"); puts("\t\t\t\t4.高学历高职称人数统计"); puts("\t\t\t\t5.返回主菜单"); puts("\n\n\t\t*******************************************\n"); printf("\t请选择功能(1-5): []\b\b"); scanf("%d",&n); if(n<1||n>5) { w=1;getchar(); } elsew=0; } while(w==1); switch(n) { case1: zaizhi();break; case2: dangyuan();break; case3: women();break; case4: gaoxueli();break; case5: menu();break; } } voidzaizhi()/*统计在职人数*/ { intk,num=0; printf("编号姓名性别年龄职务职称政治面貌最高学历任职时间来院时间人员类别\n"); for(k=0;k { if(a[k].leibie==0) {num++;print(k);} } printf("\n在职人数为: %d\n",num); count(); } voiddangyuan()/*统计党员人数*/ { intk,num=0; printf("编号姓名性别年龄职务职称政治面貌最高学历任职时间来院时间人员类别\n"); for(k=0;k { if(a[k].mianmao==1) {num++;print(k);} } printf("\n党员人数为: %d\n",num); count(); } voidwomen()/*统计女工人数*/ { intk,num=0; printf("编号姓名性别年龄职务职称政治面貌最高学历任职时间来院时间人员类别\n"); for(k=0;k { if(a[k].sex=='W') {num++;print(k);} } printf("\n女工人数为: %d\n",num); count(); } voidgaoxueli()/*统计高学历高职称人数*/ { intk,num=0; printf("编号姓名性别年龄职务职称政治面貌最高学历任职时间来院时间人员类别\n"); for(k=0;k { if(a[k].xueli>=2||a[k].zhicheng>=2) {num++;print(k);} } printf("\n高学历人数为: %d\n",num); count(); }8、排序功能 voidpaixu()/*排序功能函数*/ { intn,w; do { puts("\t\t*********************排序*******************\n\n"); puts("\t\t\t\t1.按年龄排序"); puts("\t\t\t\t2.按来院时间排序"); puts("\t\t\t\t3.返回主菜单"); puts("\n\n\t\t*******************************************\n"); printf("\t请选择功能(1-3): []\b\b"); scanf("%d",&n); if(n<1||n>3) { w=1;getchar(); } elsew=0; } while(w==1); switch(n) { case1: age();break; case2: laiyuan();break; case3: menu();break; } } voidage()/*按年龄进行排序*/ { intk,j,q; structpersonb; for(k=0;k {q=k; for(j=k+1;j { if(a[j].age>a[q].age)q=j; } b=a[q];a[q]=a[k];a[k]=b; } PRINT(); paixu(); } voidlaiyuan()/*按来院时间进行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计