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

下载本文档

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

文档简介

.语言课程设计C报告学院: 自动化学院专业: 自动化班级: 231XXX姓名: XXX学号:231XXX-XXword专业资料.目录1.题目概述,总体设计--------------------------------第1页2.详细设计,菜单函数--------------------------------第2页3.功能模块:录入模块--------------------------------第3页4.状态改变模块--------------------------------------第4页5.状态改变,借出归还--------------------------------第6页6.状态改变,维修------------------------------------第7页7.状态改变,删除------------------------------------第8页8.状态查询模块--------------------------------------第9页9.按名称查询----------------------------------------第11页10.按时间点/段查询----------------------------------第12页11.公共函数-----------------------------------------第13页12.上机实践-----------------------------------------第14页13.程序的亮点与不足---------------------------------第17页14.总结---------------------------------------------第18页word专业资料.题目:仪器仪表管理系统[要求]系统功能的基本要求 :新的仪器仪表信息录入。在借出、归还、维修时对仪器仪表信息的修改。对报废仪器仪表信息的删除。按照一定的条件查询、统计符合条件的仪器仪表信息;查询功能至少应包括仪器仪表基本信息的查询、按时间段(如在2004年1月1日到2004年10月10日购买、借出、维修的仪器仪表等)查询、按时间点(借入时间、借出时间、归还时间)查询等,统计功能至少包括按时间段统计、按仪器仪表的基本信息统计等。对查询、统计的结果打印输出。[提示]数据结构采用结构体。 仪器仪表信息包括仪器仪表名、 仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时间、状态信息 (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)word专业资料.{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");elseprintf(" 仪器仪表录入 \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");

开始显示一系列功能选项选择一个功能根据选择的功能调用功能模块函数结束word专业资料.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

是返回主菜单word专业资料.{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;word专业资料.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");word专业资料.printf(" 可能是由于您输入仪器的名称错误,printf(" 也可能是由于无此仪器,还没购买。printf("\n\n");printf(" 修改失败,请按任意键返回主菜单printf(" <----------------------------------->\n");getch();//return;} }1)借出模块首先输入借出的时间,然后在仪器仪表的结构体数组中查找该仪器仪表在这个输入的时间点上有无其他状态。若无其他状态则可以借出,否则不可借出 。【程序】intmylean(intj){intyear,month,day;system("cls");printf("\n\n\n\n");printf("<----仪器仪表借出系统--->\n");printf("\n\n");

\n");\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);}}(2)归还模块首先输入借出的时间,然后在仪器仪表的结构体数组中查找该仪器仪表在这个输入的时间点上有无其他状态。若无其他状态则可以借出,否则不可借出。word专业资料.【程序】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\nn");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(" 请输入维修结束时间 (年/月/日):");word专业资料.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");word专业资料.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");word专业资料.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);word专业资料.(*bool_repair)=0; } }(1)按名称查找首先输入仪器仪表的名称, 然后在结构体数组中查找是否存在, 这个仪器仪若是则循环该仪器仪表的所有时间点来判断改时间点处于什么状态,并用公共函数condition_p来输出。【程序】intname(){ charequ_input[100];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");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];word专业资料.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(){intyear1,month1,day1,year2,month2,day2,i,j,k,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;}word专业资料.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);}(四)公共函数状态改变函数因为在修改仪器仪表状态时有大量的修改代码,故专门补充一个状态改变函数来改变状态。函数的参数为年、月、日和需改成的状态。【程序】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(

温馨提示

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

评论

0/150

提交评论