工资信息管理系统.docx
- 文档编号:28585255
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:19
- 大小:213.30KB
工资信息管理系统.docx
《工资信息管理系统.docx》由会员分享,可在线阅读,更多相关《工资信息管理系统.docx(19页珍藏版)》请在冰豆网上搜索。
工资信息管理系统
C语言课程设计
192101班01号
2011-6-2
作者:
李汉
指导老师:
张冬梅
工资信息管理系统
C语言课程设计
一、题目要求
设计工资信息管理系统,要求该系统能够实现工资信息管理。
系统包括录入、浏览、查询、统计等功能。
其中录入功能要求能够添加新的工资信息到文件,浏览功能要求能按照工资卡号、姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号、姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。
二、需求分析
根据题目要求,由于工资信息是存放在文件中,所以应提供文件的输入输出等操作;在程序中需要浏览工资信息,应提供显示、查找、排序等操作另外还应提供键盘式选择彩旦实现功能选择。
总体设计
四
、
详细设计
1.
主函数
voidmain()
{
menu();/*主函数只用于调用菜单*/
};
2.菜单#include""
intmenu()
{
intn,w1;
do
{
system("cls");
puts("工资信息管理系统\n\t\tWageInformationManagementSystem\n\t\t\t\tBY李汉192101班");
puts("
********************************
MENU
**************************
puts("1.
***");
输入数据enterdata
puts("2.
添加数据additiondata
******");
puts("3.
浏览全部browseall
******H\・
*********
\n\n");
puts("4.
***
***
***
***********"
);
按姓名查找searchbyname
***
***
***
puts("6.按卡号排序orderbycardnumber***
);
***
);
puts("
**********************************************************************
*\n");
printf("请输入你的选择(1-6):
\nChoiceyournumber(1-6):
[]\b\b");
scanf("%d",&n);
if(n<1||n>8)
{
w1=1;
getchar();
}
elsew1=0;
}while(w1==1);
switch(n)
{
case1:
enter();break;
case2:
add();break;
case3:
browse();break;
case4:
search_by_name();break;
case5:
search_by_card();break;
case6:
order();break;
case7:
count();break;
case8:
exit(0);
}
return1;
}3.各功能模块设计
1)录入模块
数据结构
structemployer
{
intmonth;
charnum[11];
charname[20];
floatyfgz;
floatsf;
floatdf;
floatsj;
floatsfgz;
}emp[N];
N为职工人数,在此宏定义为100,
#defineN100
那么此阶段的流程图如下
保存save(n)
[程序]
#include""
intsave(intn)
{FILE*fp;
inti;
if((fp二fopen("","wb"))==NULL)
{printf("\nCannotopenfile无法打幵此文件\n");
returnNULL;
}
for(i=0;i if(emp[i].salary! =O) if(fwrite(&emp[i],sizeof(structemployer),1,fp)! =1)printf("filewriteerror文件写入有误\n"); fclose(fp); return1; 2)追加模块 先确定要追加信息的条数,调用n=load()函数,再调用输入函数 input(),最后保存追加的记录。 整个过的的流程图如下: [程序] #include"" #include<> voidadd() {inti,n,m,k; FILE*fp; n=load(); printf("Howmanyemployersareyouwanttoadd(0-%d)? : \n(你想添加多少 位员工的信息? )",N-1-n); scanf("%d",&m); k=m+n; for(i二n;i {printf("\nInput%dthemployerrecord.\n \n",i-n+1,i-n+1); record_input(i); } if((fp=fopen("","ab"))==NULL) {printf("cannotopenfile(打开文件失败! } for(i=n;i if(fwrite(&emp[i],sizeof(structemployer),1,fp)! =1)printf("filewriteerror(文件写入错误! ) fclose(fp); printf_back(); } 3)查询模块 下面是流程图: (请输入第%小名员工的信息) )\n"); \n"); [程序] #include"" voidsearch_by_name() {inti,n,k,w1=1,w2,w3,w4; structemployere; n=load(); do { do {k=1; printf("\n\nEnterthenamethatyouwanttosearch! 请输入要查找的姓 名! name: "); scanf("%s",; printf_face(); for(i=0;i if(strcmp,emp[i].name)==0) {k=i; printf_one(k);break; } if(k==-1) {printf("\n\nNOexist! Pleasetryagain.不存在! 请重试! ");printf("\n\nAreyouagain? 继续? \n\t1).again是的2).NOandback不,返回[]\b\b"); scanf("%d",&w1); if(w1==2)break; } }while(k==-1&&w1==1); w4=0;w3=0; if(k! =-1) {printf("\n\nWhatdoyouwannado? 接下来想做啥? \n\t1).Searchanother查找另一个2).Backmenu返回主菜单[]\b\b"); scanf("%d",&w2); }if(w3==1||w4==1) {save(n); printf("\n\(n_n)o"); printf("\n\nWhatdoyouwannado? \n(接下来你想做啥米? )\n\t1).Searchanother(查找另一个)2).Back(返回)[]\b\b"); scanf("%d",&w2); } while(w2==1); menu(); } voidsearch_by_card() {inti,n,k,w1=1,w2,w3,w4; structemployere; n=load(); do { do {k=1; printf("\n\nEnterthenumberthatyouwanttosearch! 请输入要查找的 卡号! number: "); scanf("%s",; printf_face(); for(i=0;i if(strcmp,emp[i].name)==0) {k=i; printf_one(k);break; } if(k==-1) {printf("\n\nNOexist! Pleasetryagain.不存在! 请重试! "); printf("\n\nAreyouagain? 继续? \n\t1).again是的2).NOandback不,返回[]\b\b"); scanf("%d",&w1); if(w1==2)break; } } while(k==-1&&w1==1); w4=0;w3=0; if(k! =-1) {printf("\n\nWhatdoyouwannado? 接下来想做啥? \n\t1).Searchanother查找另一个2).Backmenu返回主菜单[]\b\b"); scanf("%d",&w2); } if(w3==1||w4==1) {save(n); printf("\n\(n_n)o"); printf("\n\nWhatdoyouwannado? \n(接下来你想做啥米? )\n\t1).Searchanother(查找另一个)2).Back(返回)[]\b\b"); scanf("%d",&w2); } } while(w2==1); menu(); } 4)浏览模块流程图 [程序] #include"" voidbrowse() {inti,n; n=load(); printf_face(); for(i=0;i {if((i! =0)&&i%10==0) {printf("\n\nPsaaanykeytocontinue... puts("\n\n"); } printf_one(i); } printf("\tThereare%drecord.'n",n); printf("\nPassanykeytoback... getch(); system("cls"); menu(); } 5)排序模块 (按任意键继续) (按任意键返回)"); ");getch(); 此阶段按工人工资卡号升序排列程序如下: #include""voidorder(){inti,j,n; chart[11];n=load(); for(i=0;i { for(j=i+1;j strcpy(t,emp[i].num); strcpy(emp[i].num,emp[j].num); strcpy(emp[j].num,t); } }save(n);puts("\n\n"); printf_back(); } 6)统计模块程序如下: #include""voidcount() { intm,n,i; floatf; structemployers; puts("请输入开始时间Pleaseentertheformertime: "); scanf("%d",&m); puts("请输入结束时间Pleaseenterthelattertime: ");scanf("%d",&n); puts("请输入要统计的员工的卡号Pleaseenterthenumberthatbelongstotheonewhoyouwanttocount: "); scanf("%s",; for(i=0;i f+=emp[i].payment; } 4.公共函数 1)保存函数 程序如下: #include"" intsave(intn) {FILE*fp; inti; if((fp=fopen("","wb"))==NULL) {printf("\nCannotopenfile无法打开此文件\n"); returnNULL; } for(i=0;i if(emp[i].salary! =0)if(fwrite(&emp[i],sizeof(structemployer),1,fp)! =1)printf("filewriteerror文件写入有误\n");fclose(fp); return1; } 2)加载函数程序如下: #include""intload(){FILE*fp; inti; if((fp=fopen("","rb"))==NULL) \n"); {printf("\nCannotopenfile\n(打开文件失败! ) returnNULL; }for(i=0;! feof(fp);i++)fread(&emp[i],sizeof(structemployer),1,fp);fclose(fp); return(i-1); } 3)工资信息输入函数程序如下: record_input(inti) { intj;printf("month: ");scanf("%d",&emp[i].month);no_input(i,i); printf("name: ");scanf("%s",&emp[i].name);printf("yfgz: ");scanf("%f",&emp[i].yfgz); printf("sf: ");scanf("%f",&emp[i].sf);printf("df: ");scanf("%f",&emp[i].df); } 4)输入工资卡号的函数程序如下: no_input(inti,intn){intj,k,w1; do {w1=0; printf("NO.: "); scanf("%s",emp[i].num);for(j=0;emp[i].num[j]! ='\0';j++)if(emp[i].num[j]<'0'||emp[i].num[j]>'9') {puts("Inputerror! Onlybemadeupof(0-9).Pleasereinput! \n");w1=1;break; } if(w1! =1) for(k=0;k =i&&strcmp(emp[k].num,emp[i].num)==0){puts("Thisrecordis! \n"); w1=1;break; } }while(w1==1); } 5)计算税金的函数程序如下: sj(inti) {if(emp[i].yfgz<800)emp[i].sj=0; if(emp[i].yfgz>800&&emp[i].yfgz<1400)emp[i].sj=(emp[i].yfgz-800)*; if(emp[i].yfgz>1400)emp[i].sj=(emp[i].yfgz-1400)*; } 6)计算实发工资的函数程序如下: sfgz(inti) {emp[i].sfgz=emp[i].yfgz-emp[i].sf-emp[i].df-emp[i].sj;} 7)显示数据结构项目函数程序如下: voidprintf_face() {printf("\n\tNO.namemonthyfgzsfdfsjsfgz\n"); } 8)显示一个记录的函数 程序如下: voidprintf_one(inti) {printf("%s%s%d%f%f%f%f%f\n",emp[i].num,emp[i].name,emp[i].month,emp[i].yfgz,emp[i].sf,emp[i].df,emp[i].sj,emp[i].sfgz); } 9)一个任务结束时的选择浏览还是返回的函数 程序如下: printf_back() {intk,w; printf("\n\n\tSuccessful.A_A\n\n"); printf("Whatdoyouwanttodo? \n\n\t1)Browseallnow\t2).Back: []\b\b"); scanf("%d",&w); if(w==1)browse(); elsemenu(); } 5上机操作 1)主菜单 2)录入模块 输入1后提示输入记录的条数,输入3后界面如下 再逐条输入信息后界面如下 3)追加模块 输入2后,回到主菜单,在输入2选在追加信息,提示输入追加信息条数,输入1后界面如下 再将追加的信息录入后界面如下 4)查询模块 输入2后回到主菜单,输入4进入查询,输入职工名字ccc后可获得其工资信息,界面如下 5)浏览模块 输入2后回到主菜单,输入3浏览工资信息,界面如下 6)排序模块 点任意键返回主菜单后输入6,可按工人工资卡号升序将信息排列后显示出来,界面如下 点任意键返回主菜单后输入6退出。 上机演示完毕。 五、课程设计心得 刚开始运行时出现的错误: 由于浏览和查询模块中多定义了局部变量,且与全局变量同名将全局变量屏蔽,以至于这些模块不能达到预期效果,总是只输出最近一次的数据,经过修改后将其删除,达到了所要的效果。 使程序得以执行。 到目前程序中还有一小毛病,就是计算税金是实数双精度与单精度转换存在不足。 做此C程序设计的体会: 在本次课程设计中,我学到了设计一些比较大的程序的方法: 首先,在设计程序之前,应该认真的审题,弄清楚题目的要求,然后根据要求想好完成题目所需要的函数模块,接下来用菜单的形式设计一个调用各个功能函数模块的主函数,最后一次完成每个功能模块的设计,在设计的过程中,各个函数模块可能会调用到同一个函数,此即为公共函数。 在程序设计之前也应该细心考虑应该用哪些公共函数,将这些函数设计成一个模块,放在最后。 采用这种方法设计程序会使程序井井有条,别人看的时候一目了然,自己编的时候思路明确,不容易出错,即使程序出错了也方便检查。 其次,我认为基础知识一定要掌握牢靠,不然的话在编程时会屡屡出错,出错了还不易发现。 最后,我觉得一个程序员一定要认真,严谨,有耐心,只有具有了这些品质,他才能很好的完成一个程序。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工资 信息管理 系统