C语言课程设计仪器仪表管理系统报告优质资料_第1页
C语言课程设计仪器仪表管理系统报告优质资料_第2页
C语言课程设计仪器仪表管理系统报告优质资料_第3页
C语言课程设计仪器仪表管理系统报告优质资料_第4页
C语言课程设计仪器仪表管理系统报告优质资料_第5页
已阅读5页,还剩134页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言课程设计仪器仪表管理系统报告优质资料(可以直接使用,可编辑优质资料,欢迎下载)

C语言课程设计仪器仪表管理系统报告优质资料(可以直接使用,可编辑优质资料,欢迎下载)报告语言课程设计C报告语言课程设计学院:自动化学院专业:自动化班级:231XXX姓名:XXX学号:231XXX-XX目录题目概述,总体设计第1页详细设计,菜单函数第2页功能模块:录入模块第3页状态改变模块第4页状态改变,借出归还第6页状态改变,维修第7页状态改变,删除第8页状态查询模块第9页按名称查询第11页10.按时间点/段查询第12页11.公共函数第13页12.上机实践第14页13.程序的亮点与不足第17页14.总结第18页题目:仪器仪表管理系统[要求]系统功能的基本要求:(1)

新的仪器仪表信息录入。(2)

在借出、归还、维修时对仪器仪表信息的修改。(3)

对报废仪器仪表信息的删除。(4)

按照一定的条件查询、统计符合条件的仪器仪表信息;

查询功能至少应包括仪器仪表基本信息的查询、按时间段(如在2004

年1月1日到2004

年10

月10

日购买、借出、维修的仪器仪表等)

查询、按时间点(借入时间、借出时间、归还时间)

查询等,统计功能至少包括按时间段统计、按仪器仪表的基本信息统计等。(5)

对查询、统计的结果打印输出。[提示]数据结构采用结构体。仪器仪表信息包括仪器仪表名、仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时间、状态信息(0代表可借出,1代表可借入,2代表正在维修)等。需求分析:根据题目要求,由于仪器仪表信息是存放在文件,所以应提供文件的输入、输出等操作;在程序中要浏览仪器仪表的信息。应提供录入、显示、查找,修改等操作;另外还应提供键盘式选择菜单实现功能选择。总体设计:根据上面的需求分析,可以将这个系统的设计分为三个大的模块:仪表仪器录入、仪表仪器修改(删除)、仪表仪器查询仪器仪表管理系统仪器仪表管理系统查询录入查询录入修改修改详细设计(一)主函数主函数一般设计得比较简洁,只提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。其中流程图如下:[程序]其中为主函数设定了一个菜单函数,方便用于选择其他模块函数。用getch0;获得所按下的键值,用函数内的局部静态变量储存键值对应的其他功能函数。voidmenu(charc)/*菜单函数*/{staticintn=0;//内部变量if(c=='s'||c=='S')n++;if(c=='w'||c=='W')n--;if(n==5)n=1;if(n==0)n=4;if(c==13){switch(n){case1:if(insert()==0)insert();break;//录入case2:change();break;//修改case3:serch();break;//查询开始case4:exit(0);//退出程序};开始}system("cls");显示一系列功能选项printf("\n\n");显示一系列功能选项printf("仪器仪表管理系统\n");printf("\n");选择一个功能printf("姓名:xxx");选择一个功能printf("班级231xxx");printf("\n\n");根据选择的功能调用功能模块函数if(n=1)根据选择的功能调用功能模块函数printf("-->仪器仪表录入<--\n");else结束printf("仪器仪表录入\n");结束printf("\n");if(n=2)printf("-->仪器仪表借还/删除<--\n");elseprintf("仪器仪表借还/删除\n");printf("\n");if(n=3)printf("-->仪器仪表查询<--\n");elseprintf("仪器仪表查询\n");printf("\n");if(n=4)printf("-->退出程序<--\n");elseprintf("退出程序\n");printf("\n");//主函数voidmain(){system("cls");printf("\n\n\n\n");printf("-->仪器仪表管理系统<--\n");printf("\n");printf("-->按W向上选择<--\n");printf("-->按S向下选择<--\n");printf("-->按回车确定选择<--\n");printf("\n");printf("\n");printf("-->按任意键进入系统<--\n");printf("<>\n");getch();menu('s');while(1)menu(getch());}(二)各功能模块设计[数据结构]数据结构选用结构体数组。这里只简单的给仪器仪表两个部分,一个为仪器仪表的名称、字符串函数,一个为仪器仪表的各个时间点的状态(定义一个time的三维数组,数组下标表示年月日,数组的值表示仪器的状态)。#definebuy1//购买#definelean2//借出#definerepair3//维修#defineinlib4//空闲#defineyear_max3000#definemonth_max12#defineday_max31#defineN100//预设仪器最大数intn;//仪器数structequment{charname[100];inttime[year_max+1][month_max+1][day_max+1];}equ[N];

录入模块开始通过strcpy函数实现仪器名称的录入,state函数实现仪器状态的更改。开始输入仪器仪表名称【程序】voidinsert()输入仪器仪表名称{inti,j_year,j_month,j_day,year,month,day;charequ_input[100];是否已录入入system("cls");是否已录入入是printf("\n\n\n\n");是否printf("-->仪器仪表管理系统<--\n");否printf("\n\n\n\n");返回主菜单输入买入时间printf("请输入仪器的名称:");返回主菜单输入买入时间scanf("%s",&equ_input);结束if(presence(equ_input)!=0)结束{printf("\n");printf("\n");printf("对不起!此仪器已购买\n");printf("\n");printf("录入失败,请按任意键返回主菜单\n");printf("\n");printf("<>\n");getch();}else{intstate(intyear,intmonth,intday,intn,ints);n++;strcpy(equ[n].name,equ_input);//将equ_input复制给equ[equ_num].nameprintf("\n");printf("请输入购买时间(年/月/日)(例如1998/2/15):");scanf("%d/%d/%d",&year,&month,&day);state(year,month,day,n,inlib);//equ[n]将当天状态改为空闲equ[n].time[year][month][day]=buy;//equ[n]将该天以后状态改为购入//printf("%d",equ[n].time[year][month][day]);printf("\n");printf("\n");printf("录入成功,请按任意键返回主菜单\n");printf("\n");printf("\n");printf("<>\n");getch();}}状态改变模块该模块包括对仪器仪表的借出、归还、维修、报废等小模块的操作,仍然用getch();函数获取键值来做上下选择。本函数只考虑对一种仪器仪表的修改,故先要输入该仪器仪表的名称并查找是否已经购买。开始【程序】开始intchange()输入仪器仪表名称{charequ_input[100],c='s';输入仪器仪表名称intj,x=0;system("cls");是否已购买printf("\n\n\n\n");是否已购买否printf("<仪器仪表管理系统>\n");否是printf("\n\n");是选择需要进行的操作printf("请输入仪器名称:");选择需要进行的操作返回主菜单scanf("%s",&equ_input);返回主菜单结束j=presence(equ_input);结束//printf("\n%d",j);system("pause");if(j!=0){while(1){if(c=='s'||c=='S')x++;if(c=='w'||c=='W')x--;if(x==6)x=1;if(x==0)x=5;if(c==13){switch(x){case1:mylean(j);break;case2:myback(j);break;case3:myrepair(j);break;case4:mydel(j);break;case5:return(1);}}system("cls");printf("\n\n\n\n");printf("<仪器仪表管理系统>\n");printf("\n\n");/*printf("请输入仪器名称:");scanf("%s",equ_input);printf("\n\n");*/if(x==1)printf(">仪器仪表借出<\n");elseprintf("仪器仪表借出\n");printf("\n\n");if(x==2)printf(">仪器仪表归还<\n");elseprintf("仪器仪表归还\n");printf("\n\n");if(x==3)printf(">仪器仪表维修<\n");elseprintf("仪器仪表维修\n");printf("\n\n");if(x==4)printf(">仪器仪表报废<\n");elseprintf("仪器仪表报废\n");printf("\n\n");if(x==5)printf(">返回主菜单<\n");elseprintf("返回主菜单\n");printf("<>\n");c=getch();}}else{/*system("cls");printf("\n\n\n\n");printf("<仪器仪表管理系统>\n");printf("\n\n");*/printf("\n\n");printf("对不起!找不到该仪器\n");printf("可能是由于您输入仪器的名称错误,\n");printf("也可能是由于无此仪器,还没购买。\n");开始printf("\n\n");开始printf("修改失败,请按任意键返回主菜单\n");输入仪器仪表名称printf("<>\n");输入仪器仪表名称getch();//return;}}是否空闲借出模块是否空闲首先输入借出的时间,然后在仪器仪表的结构体数组中查是否找该仪器仪表在这个输入的时间点上有无其他状态。若无是否其他状态则可以借出,否则不可借出。返回主菜单标记状态为借出【程序】返回主菜单标记状态为借出intmylean(intj){intyear,month,day;结束system("cls");结束printf("\n\n\n\n");printf("<仪器仪表借出系统>\n");printf("\n\n");printf("请输入借出时间(年/月/日):");scanf("%d/%d/%d",&year,&month,&day);//system("pause");//printf("%d",equ[j].time[year][month][day]);if(equ[j].time[year][month][day]==inlib)//判断仪器是否空闲{printf("\n\n");printf("借出成功,请按任意键返回上一级菜单\n");printf("\n");printf("<>\n");state(year,month,day,j,lean);//状态改为借出getch();return(1);}else{printf("\n\n");printf("对不起!\n");printf("此仪器还没有购买或没有归还或正在维修中,\n");printf("故无法借出。\n");printf("借出失败,请按任意键返回上一级菜单\n");printf("\n\n");printf("<>\n");getch();return(0);}}归还模块首先输入借出的时间,然后在仪器仪表的结构体数组中查找该仪器仪表在这个输入的时间点上有无其他状态。若无其他状态则可以借出,否则不可借出。【程序】intmyback(intj){intyear,month,day;system("cls");printf("\n\n\n\n");printf("<仪器仪表归还系统>\n");printf("\n\n");printf("请输入归还时间(年/月/日):");scanf("%d/%d/%d",&year,&month,&day);if(equ[j].time[year][month][day]==lean)//判断状态是否为借出开始输入仪器仪表名称开始输入仪器仪表名称是是否借出标记状态为空闲返回主菜单否结束printf("归还成功,请按任意键返回上一级菜单\n");printf("\n\n");printf("<>\n");state(year,month,day,j,inlib);//改状态为空闲getch();return(1);}else{printf("\n\n");printf("对不起!\n");printf("此仪器还没有购买或还没有借出\n");printf("或正在维修中,故无法归还。\n");printf("归还失败,请按任意键返回上一级菜单\n");printf("\n");printf("<>\n");getch();return(0);}}(3)维修模块同样是首先输入维修开始的时间和维修结束的时间,然后在仪器仪表的结构体数组中查找该仪器仪表在这个归还的时间点上有其他状态。若有为空闲状态则可以维修,否则不可维修。开始输入维修开始结束时间开始输入维修开始结束时间是是否空闲标记状态为维修返回主菜单否结束intmyrepair(intj){intyear,month,day;system("cls");printf("\n\n\n\n");printf("<仪器仪表管理系统>\n");printf("\n\n");printf("请输入开始维修时间(年/月/日):");scanf("%d/%d/%d",&year,&month,&day);if(equ[j].time[year][month][day]==inlib){state(year,month,day,j,repair);//改状态为维修printf("\n\n");printf("请输入维修结束时间(年/月/日):");scanf("%d/%d/%d",&year,&month,&day);state(year,month,day,j,inlib);printf("\n\n");printf("维修成功,请按任意键返回上一级菜单\n");printf("\n");printf("<>\n");getch();return(1);}else{printf("\n\n");printf("对不起!\n");printf("此仪器还没有购买或借出,\n");printf("故无法维修。\n");printf("\n\n");printf("维修失败,请按任意键返回上一级菜单\n");printf("\n\n");printf("<>\n");getch();return(0);}}(4)删除模块删除模块将删除本仪器仪表,具体删除过程为将需要删除的后一项覆盖至删除的这一项,即需删除以后的每一个结构体元素都向前移一个单位。开始是开始是是否删除循环将需删除的后面所有元素整体向前移动一个单位返回主菜单否结束intmydel(intj){charc='s';intx=0;while(1){system("cls");if(c=='s'||c=='S')x++;if(c=='w'||c=='W')x--;if(x==3)x=1;if(x==0)x=2;if(c==13){if(x==1){inti;for(i=n;i<n;i++)equ[i]=equ[i-1];n--;system("cls");printf("\n\n\n\n");printf("<仪器仪表管理系统>\n");printf("\n\n");printf("报废仪表已删除!\n");printf("\n\n");printf("请按任意键返回上一级菜单\n");printf("\n");printf("<>\n");getch();return;}elsereturn;}printf("<仪器仪表管理系统>\n");printf("\n\n");printf("请问确定要报废仪器%s吗?\n",equ[j].name);printf("\n\n\n\n");if(x==1)printf(">确定要报废仪器<\n");elseprintf("确定要报废仪器\n");printf("\n\n");if(x==2)printf(">我要考虑考虑<\n");elseprintf("我要考虑考虑\n");printf("\n\n");printf("<>\n");c=getch();}}(三)仪器仪表查找模块仪器仪表查找分为按名称查找、按时间点查找、按时间段查找三个模块,通过键盘ws进行选择,分别用三个小模块来表示,通过状态函数condition_p输出仪器仪表状态。【程序】voidsearch(){charc='s';intx=0;while(1){if(c=='s'||c=='S')x++;if(c=='w'||c=='W')x--;if(x==6)x=1;if(x==0)x=5;if(c==13){switch(x){case1:name();break;case2:time_d();break;case3:time_p();break;case4:return;};};system("cls");printf("\n\n\n\n");printf("<仪器仪表管理系统>\n");printf("\n\n");if(x==1)printf(">按名称查询<\n");elseprintf("按名称查询\n");printf("\n\n");if(x==2)printf(">按时间段查询<\n");elseprintf("按时间段查询\n");printf("\n\n");if(x==3)printf(">按时间点查询<\n");elseprintf("按时间点查询\n");printf("\n\n");if(x==4)printf(">返回主菜单<\n");elseprintf("返回主菜单\n");printf("\n\n");printf("<>\n");c=getch();}}因为不管查找条件是什么,最终都会对应到需查找的仪器仪表上,故补充一个公共函数condition_p();,输出查找一个仪器仪表的结果。【程序】voidcondition_p(intyear,intmonth,intday,intn,int*bool_repair,int*bool_lean){//printf("%d",equ[n].time[year][month][day]);//system("pause");if(equ[n].time[year][month][day]==buy)printf("%4d年%2d月%2d日购买%s仪器仪表\n",year,month,day,equ[n].name);//借出/归还if((equ[n].time[year][month][day]==lean)&&((*bool_lean)==0)){printf("%4d年%2d月%2d日借出%s仪器仪表\n",year,month,day,equ[n].name);(*bool_lean)=1;}//printf("%d\n",equ[n].time[year][month][day]==lean);//printf("%d\n");if(equ[n].time[year][month][day]==inlib&&(*bool_lean)==1){printf("%4d年%2d月%2d日归还%s仪器仪表\n",year,month,day,equ[n].name);(*bool_lean)=0;//printf("%d",equ[n].time[year][month][day]);}//维修/修完if(equ[n].time[year][month][day]==repair&&(*bool_repair)==0){printf("%4d年%2d月%2d日开始维修%s仪器仪表\n",year,month,day,equ[n].name);(*bool_repair)=1;}if(equ[n].time[year][month][day]==inlib&&(*bool_repair)==1){printf("%4d年%2d月%2d日结束维修%s仪器仪表\n",year,month,day,equ[n].name);(*bool_repair)=0;}}(1)按名称查找首先输入仪器仪表的名称,然后在结构体数组中查找是否存在,这个仪器仪若是则循环该仪器仪表的所有时间点来判断改时间点处于什么状态,并用公共函数condition_p来输出。【程序】intname()开始输入仪器仪表名称开始输入仪器仪表名称是是否存在循环并输出返回主菜单否结束inti;system("cls");printf("\n\n\n\n");printf("<仪器仪表管理系统>\n");printf("\n\n");printf("请输入仪器名字:");scanf("%s",equ_input);i=presence(equ_input);if(i!=0){intj_y,j_d,j_m,bool_lean=0,bool_repair=0;for(j_y=0;j_y<=year_max;j_y++)for(j_m=0;j_m<=month_max;j_m++)for(j_d=0;j_d<=day_max;j_d++){//P(j_y,j_m,j_d,m);systen("pause")condition_p(j_y,j_m,j_d,i,&bool_lean,&bool_repair);}printf("\n\n");printf("查询完成,请按任意键返回上一级菜单\n");printf("\n\n");printf("<>\n");getch();return(1);}else{printf("\n\n");printf("对不起!\n");printf("可能是由于您输入错误,\n");开始输入时间点开始输入时间点结束循环每个仪器仪表的判断状态并输出返回主菜单printf("\n\n");printf("查询失败,请按任意键返回主菜单\n");printf("\n\n");printf("<>\n");getch();return(0);}}(2)按时间点查询【程序】inttime_p(){inti,year,month,day,equ_tmp,bool_lean[101],bool_repair[101];for(i=0;i<10;i++){bool_lean[i]=0;bool_repair[i]=0;}system("cls");printf("\n\n\n\n");printf("<仪器仪表管理系统>\n");printf("\n\n");printf("请输入时间点(年/月/日):");scanf("%d/%d/%d",&year,&month,&day);printf("\n\n");for(equ_tmp=1;equ_tmp<=n;equ_tmp++)condition_p(year,month,day,equ_tmp,&bool_lean[equ_tmp],&bool_repair[equ_tmp]);//每个仪器printf("\n\n");printf("查询完成,请按任意键返回上一级菜单\n");printf("\n");printf("<>\n");getch();return(0);}(3)按时间段查询首先输入起始时间点和结束时间点,应为每个月的天数不完全一样,用三重循环来做比较麻烦,故采用模拟法,设三个变量i、j、k,分别对应年,月,日,然后赋予初值为起始时间点,设置一无限循环,循环内设有判断是否i、j、k的值为结束时间点的语句。若是则跳出循环,否则继续循环。同时,在循环内k总是自加,当k

自加至当月最大天数时,j就自加,当j自加至当年最大月数时,i自加。【程序】inttime_d()开始输入起始、结束时间点开始输入起始、结束时间点结束循环每个仪器仪表,判断状态,并输出返回主菜单equ_tmp,bool_lean[101],bool_repair[101];for(i=0;i<101;i++){bool_lean[i]=0;bool_repair[i]=0;}system("cls");printf("\n\n\n\n");printf("<仪器仪表管理系统>\n");printf("\n");printf("请输入起始时间(年/月/日):");scanf("%d/%d/%d",&year1,&month1,&day1);printf("\n");printf("请输入结束时间(年/月/日):");scanf("%d/%d/%d",&year2,&month2,&day2);printf("\n");i=year1;j=month1;k=day1;while(1){if(j>12){i++;j=1;}if(k>31){j++;k=1;}for(equ_tmp=1;equ_tmp<=n;equ_tmp++)condition_p(i,j,k,equ_tmp,&bool_lean[equ_tmp],&bool_repair[equ_tmp]);//每个仪器if((i==year2)&&(j==month2)&&(k==day2))break;//到结束时间时终止输出k++;}printf("\n\n");printf("查询完成,请按任意键返回上一级菜单\n");printf("\n");printf("<>\n");getch();return(0);}(四)公共函数(1)状态改变函数因为在修改仪器仪表状态时有大量的修改代码,故专门补充一个状态改变函数来改变状态。函数的参数为年、月、日和需改成的状态。【程序】intstate(intyear,intmonth,intday,intn,ints){//printf("%d",n);//system("pause");//通过for循环实现time数组的赋值inti,j,k;for(k=day;k<=day_max;k++)equ[n].time[year][month][k]=s;//当月改状态for(j=month;j<=month_max;j++)for(i=1;i<=day_max;i++)equ[n].time[year][j][k]=s;//当年改状态for(i=year;i<=year_max;i++)for(j=i;j<=month_max;j++)for(k=1;k<=day_max;k++)equ[n].time[i][j][k]=s;//更改以后所有状态//以下为调试代码/*for(i=year;i<=year_max;j++)for(j=month;j<=month_max;j++)for(k=day;k<=day_max;k++){printf("%d%d%d%d\n",i,j,k,n);printf("\n%d",equ[n].time[year][month][k]);system("pause");}*/}(2)查找仪器仪表函数函数参数为仪器仪表的名称,并返回是否查找到该仪器仪表,若找到则返回该仪器仪表所在的结构体数组下标,否则返回0。附:strcmp:比较字符串大小,相同时返回0【程序】intpresence(char*equ_input){inti;for(i=0;i<101;i++)if(strcmp(equ_input,equ[i].name)==0)return(i);return(0);}//非0为存在,0为不存在上机实践编译运行数据输入仪器仪表名称时间a2021/12/18b2021/12/19c2021/12/20d2021/12/21运行结果主菜单主界面录入成功录入失败状态改变模块借出成功时间输错时借出失败归还失败归还成功仪器维修仪器报废查询模块按名称查询按时间段查询按时间点查询程序的亮点和不足亮点:定义一个time的三维数组,数组的下标表示年月日,数组的值来表示仪器仪表的状态,减少了变量的定义,同时为状态的保存提供了方便。利用if语句实现菜单选择,而采用菜单选择的方式,使系统界面更加清晰美观。定义状态改变函数和状态输出函数(利用指针),使程序得到简化。不足:没有采用文件的输入、输出,导致每一次运行程序都要重新输入数据,而且数据只在程序运行时得到保存,造成极大的不便,需要改进。总结通过这次课程设计的学习,我充分认识到了C语言的学习光靠书本上的知识是不够的,更重要的是要有足够的实践所以后在学习过程中,我会更加注视实践操作,使自己便好地学习。在参考了C语言课程设计上的程序以后,我开始着手自己编写程序,在码完将近六百行代码,一编译,就出现了很多问题,有许多是粗心大意造成的。在程序成功运行之后,程序的某些模块又出现问题,通过不断的输出,暂停程序,分析代码,所有问题都解决,内心无比高兴。此外我还认识到编程是一项高精度的工作所以我们要有规范化,标准化的代码编写习惯,通过这次编程我们深深的感受到对代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同人员之间的协作。同时我明白了,善于总结也是学习能力的一种体现,每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的应用状况,随时总结,找到自己的不足,这样所编写的程序才能逐步提高。这次课程设计不仅提高了我对C语言的学习热情与兴趣,更加使我对C语言某些难懂的知识(例如指针、数据结构等)有了更深的认识,同时我的上机实践编写代码的能力得到了巨大的提高。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!高级语言(C语言)课程设计说明书起止日期:2021年07月2日至2021年07月14日题目工资管理系统学生姓名班级学号成绩通信与信息工程学院课程设计要求课程设计系统组成及模块功能:工资管理程序主要完成对职工的工资信息录入,然后进行排序,统计,查询,计算税金等功能操作。具体要求如下:1.职工录入工资信息包括:编号,姓名,基本工资,扣款,应发工资,税金,实发工资2.程序主菜单如下:"**************MENU*************",/*菜单的标题行*/0.initlist/*初始化单链表*/1.Enterlist/*输入数据,创建单链表*/2.Listall/*显示所有记录*/3.Calcthesalary/*计算实发工资*/4.Searchrecordonname/*查找职工信息数据*/5.Deletearecord/*删除记录*/6.Sortonsfgz/*按实发工资升序排序*/7.Computerticketnumber/*计算所需票面数*/8.Totalonnumber/*分类合计*/9.Quit/*退出*/3.要求定义如下函数,对应菜单功能/******函数原型*********/voidinit();/*单链表初始化*/voidcreate();/*创建单链表,输入数据*/voidcalc();/*计算实发工资*/voiddelete();/*删除*/voidsearch();/*查找*/voidcomputer();/*计算所需各种票面张数*/voidsort();/*排序*/voidlist();/*显示所有数据*/voidprint(SALARY*p);/*输出单条记录*/floatfax(floatx);/*计算税金*/voidtotal();/*分类合计*/intmenu_select();/*主菜单*/程序的功能设计此工资管理系统主要利用链表实现,由如下八个功能模块实现1、输入模块。主要完成输入工资信息的工作,并存入链表中。2、输出模块。主要完成对所有工人信息的输出。3、修改模块。主要完成对职工信息的修改工作。4、插入模块。主要完成对职工信息的插入工作。5、查询模块。主要完成对某个职工信息的查询工作。6、删除模块。主要完成对某退休或离职职工信息的删除。7、排序模块。主要完成对所有职工按实发工资进行的升序或降序排列。8、保存模块。主要完成对已经输入和修改或删除的保存文件。9、退出。退出系统程序的数据结构本程序运用结构体、单项链表等数据结构。职工信息结构体如下:structworker//定义数据结构//{charno[11];//编号//charname[15];//姓名//charxb[10];//性别//doublejbgz;//基本工资//doublekoukuan;//扣款//doubleyfgz;//应发工资//doubleshuijin;//税金//doublesfgz;//实发工资//charpost[10];//职位//structworker*next;};typedefstructworkerSTU;//结构体类型名///四、程序的函数设计函数的功能描述intmenu_select(void);//主菜单//STU*append(STU*head);//添加记录//STU*appendNode(STU*head);voidlist(STU*head);//显示所有数据//STU*modify(STU*head);//修改职工记录//STU*modifyNode(STU*head);void*search(STU*head);//查询职工信息//void*no(STU*head);//编号查询//void*name(STU*head);//姓名查询//STU*dele(STU*head);//删除职工信息//STU*deleNode(STU*head,chark[11]);void*save(STU*head);//保存文件//STU*insert(STU*head);//插入职工信息//STU*tax(STU*head);//计算税金//STU*calc(STU*head);//计算应发工资//STU*total(STU*head);//计算实发工资//STU*sort(STU*head);//对职工信息进行排序//STU*insort(STU*head);//升序函数//STU*desort(STU*head);//降序函数//void*index(STU*head);//分类统计//void*index1(STU*head);void*index2(STU*head);void*index3(STU*head);void*index4(STU*head);intuser_ID();//登录账户函数//STU表示结构体类型名Head表示链表的头结点、函数的调用关系voidmain(){intch;chara;STU*head=NULL;system("color02");//背景色/前景色的设置(0黑色、1蓝色、2绿色、3浅绿色、4红色、5紫色、6黄色、7白色、8灰色、9淡紫色、A淡绿色、B淡浅绿色、C淡红色、D淡紫色、E淡黄色、F亮白色)//a=getchar();while(!a);system("cls");user_ID();while(1){ch=menu_select();switch(ch){case1: head=append(head); break;//制作工资表//case2: list(head); break;//输出所有的职工的信息//case3: head=modify(head); break;//修改职工信息//case4: head=insert(head); break;//插入职工信息// case5: search(head); break;//查询职工信息// case6: head=dele(head); break;//删除职工信息// case7: head=sort(head); break;//对职工信息进行排序// case8: save(head); break;//保存文件// case9: index(head); break;//分类统计//case0: exit(0);//退出//default:printf("Inputerror!\n");break;}}五、程序源代码#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<memory.h>#include<windows.h>structworker//定义数据结构//{charno[11];//编号//charname[15];//姓名//charxb[10];//性别//doublejbgz;//基本工资//doublekoukuan;//扣款//doubleyfgz;//应发工资//doubleshuijin;//税金//doublesfgz;//实发工资//charpost[10];//职位//structworker*next;};typedefstructworkerSTU;//结构体类型名///******函数原型*********/intmenu_select(void);//主菜单//STU*append(STU*head);//添加记录//STU*appendNode(STU*head);voidlist(STU*head);//显示所有数据//STU*modify(STU*head);//修改职工记录//STU*modifyNode(STU*head);void*search(STU*head);//查询职工信息//void*no(STU*head);//编号查询//void*name(STU*head);//姓名查询//STU*dele(STU*head);//删除职工信息//STU*deleNode(STU*head,chark[11]);STU*insert(STU*head);//插入职工信息//STU*tax(STU*head);//计算税金//STU*calc(STU*head);//计算应发工资//STU*total(STU*head);//计算实发工资//STU*sort(STU*head);//对职工信息进行排序//STU*insort(STU*head);//升序函数//STU*desort(STU*head);//降序函数//voidindex(STU*head);//分类统计//voidindex1(STU*head);voidindex2(STU*head);voidindex3(STU*head);voidindex4(STU*head);intuser_ID();//登录账户函数//voidmain(){intch;chara;STU*head=NULL;system("color02");//背景色/前景色的设置(0黑色、1蓝色、2绿色、3浅绿色、4红色、5紫色、6黄色、7白色、8灰色、9淡紫色、A淡绿色、B淡浅绿色、C淡红色、D淡紫色、E淡黄色、F亮白色)//printf("&****&****&****&****&****&****&****&\n");printf("**欢迎使用工资管理系统**\n");printf("************************************\n");printf("**************************表头***************************\n");printf("**********@@@实验名称:工资管理系统**********\n");printf("**********@@@学校:西安科技大学**********\n");printf("**********@@@姓名:张帝**********\n");printf("**********@@@学号:1107050415**********\n");printf("**********@@@专业:电子信息工程**********\n");printf("*********************************************************\n");printf("&&&&&&&&&&&&********按任意键继续********&&&&&&&&&&&&&&&&&\n");a=getchar();while(!a);system("cls");user_ID();while(1){ch=menu_select();switch(ch){case1: head=append(head);break;//制作工资表//case2: list(head);break;//输出所有的职工的信息//case3: head=modify(head);break;//修改职工信息//case4: head=insert(head);break;//插入职工信息//case5: search(head);break;//查询职工信息//case6: head=dele(head);break;//删除职工信息//case7: head=sort(head);break;//对职工信息进行排序//case8: index(head);break;//分类统计//case0: exit(0);//退出//default:printf("Inputerror!\n");break;}}}intmenu_select(void){intch;printf("&*************主菜单*************************&\n");printf("*1.制作工资表*\n");printf("*2.输出所有的职工的信息*\n");printf("*3.修改职工的信息*\n");printf("*4.插入职工信息*\n");printf("*5.查询职工的信息*\n");printf("*6.删除职工的信息*\n");printf("*7.对职工信息进行排序*\n");printf("*8.分类统计*\n");printf("*0.退出*\n");printf("&********************************************&\n");printf("请输入你的选择:");scanf("%d",&ch);returnch;}STU*append(STU*head){charc;system("cls");do{head=appendNode(head);//向链表末尾添加一个节点//printf("确认添加新纪录请按Y/y!");printf("其他键视为不添加!\n"); printf("你想添加一个新的记录吗(Y/N)?");scanf("%c",&c);}while(c=='Y'||c=='y');system("cls");returnhead;}STU*appendNode(STU*head){STU*p=NULL;STU*pr=head;p=(STU*)malloc(sizeof(STU));//为新添加的节点申请内存//if(p==NULL)//若申请内存失败,则输出错误信息,退出程序//{printf("Noenoughmemorytoalloc");exit(0);}if(head==NULL)//若原链表为空,则将新建节点置为首节点//{head=p;}else{while(pr->next!=NULL)//若未到表尾,则继续移动指针pr,直到pr指向表尾//{pr=pr->next;}pr->next=p;//将新建节点添加到链表的末尾//}pr=p;//让pr指向新建节点//printf("输入职工的编号:");scanf("%s",p->no);printf("输入职工的姓名:");scanf("%s",p->name);printf("输入职工的性别:");scanf("%s",p->xb);printf("输入职工的职位:");scanf("%s",p->post);printf("输入职工的月基本工资:");scanf("%lf",&p->jbgz);printf("输入职工的月扣款数:");scanf("%lf",&p->koukuan);p->sfgz=0;//初始实发工资为0//p->shuijin=0;//初始税金为0//p->yfgz=0;//初始应发工资为0//pr->next=NULL;//将新建节点置为表尾//returnhead;}voidlist(STU*head){STU*p=head;system("cls");if(p==NULL)printf("工资表为空请重新输入!!\n");else{head=calc(head);head=tax(head);head=total(head);printf("*************************************工资表*******************\n");printf("编号\t姓名\t性别\t职位\t基本工资\t扣款\t应发工资\t实发工资");while(p!=NULL){printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",p->no,p->name,p->xb,p->post,p->jbgz,p->koukuan,p->yfgz,p->sfgz);p=p->next;}}}STU*modify(STU*head){charc;STU*p=NULL;STU*q=head;system("cls");do{p=modifyNode(head);printf("继续修改请按Y/y!");printf("其他键视为不修改!\n"); printf("你想继续修改记录吗(Y/N)?");scanf("%c",&c);}while(c=='Y'||c=='y');returnhead;}STU*modifyNode(STU*head){inti,j;chark[11];STU*p=NULL;STU*q=head;system("cls");if(q==NULL){printf("工资表为空请重新输入!!\n");returnhead;}printf("请输入你想修改的职工的编号:");scanf("%s",k);while(q&&strcmp(q->no,k)!=0)//做比较判断//q=q->next;//没找到,指针后移继续查找//if(q==NULL)//指针为空,说明没有找到//{printf("Notfound!\n");returnhead;}else{printf("编号\t姓名\t性别\t职位\t基本工资\t扣款\t应发工资\t实发工资");printf("%s\t%s\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",q->no,q->name,q->xb,q->post,q->jbgz,q->koukuan,q->yfgz,q->sfgz);printf("按1修改职工编号\n");printf("按2修改职工姓名\n");printf("按3修改职工性别\n");printf("按4修改职工职位\n");printf("按5修改职工基本工资\n");printf("按6修改职工扣款数\n");printf("请输入要修改的列名:");scanf("%d",&i);switch(i){case1:system("cls");printf("请输入修改后的职工编号:");scanf("%s",q->no);system("cls");printf("\n\n是否继续修改?\n");printf("是请输入1\n");printf("否请输入2\n");printf("你的选择:");scanf("%d",&j);switch(j){case1:p=modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}break;case2:system("cls");printf("请输入修改后的职工姓名:");scanf("%s",q->name);system("cls");printf("\n\n是否继续修改?\n");printf("是请输入1\n");printf("否请输入2\n");printf("你的选择:");scanf("%d",&j);switch(j){case1:modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}break;case3:system("cls");printf("请输入修改后的职工性别:");scanf("%s",q->xb);system("cls");printf("\n\n是否继续修改?\n");printf("是请输入1\n");printf("否请输入2\n");printf("你的选择:");scanf("%d",&j);switch(j){case1:modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}break;case4:system("cls");printf("请输入修改后的职工职位:");scanf("%s",q->post);system("cls");printf("\n\n是否继续修改?\n");printf("是请输入1\n");printf("否请输入2\n");printf("你的选择:");scanf("%d",&j);switch(j){case1:modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}break;case5:system("cls");printf("请输入修改后的职工基本工资:");scanf("%lf",&q->jbgz);system("cls");printf("\n\n是否继续修改?\n");printf("是请输入1\n");printf("否请输入2\n");printf("你的选择:");scanf("%d",&j);switch(j){case1:modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}break;case6:system("cls");printf("请输入修改后的扣款数:");scanf("%lf",&q->koukuan);system("cls");printf("\n\n是否继续修改?\n");printf("是请输入1\n");printf("否请输入2\n");printf("你的选择:");scanf("%d",&j);switch(j){case1:modifyNode(head);break;case2:system("cls");break;default:printf("Inputerror!\n");break;}default:printf("Inputerror!\n");break;}}returnp;}void*search(STU*head){inta;system("cls");printf("\n\n\n\n\n\n");printf("*********查询菜单**********

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论