版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.../...报告语言课程设计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">; else printf<"仪器仪表借还/删除\n">; printf<"\n">; if<n=3> printf<"-->仪器仪表查询<--\n">; else printf<"仪器仪表查询\n">; printf<"\n">; if<n=4> printf<"-->退出程序<--\n">; else printf<"退出程序\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].name printf<"\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">; else printf<"仪器仪表借出\n">; printf<"\n\n">; if<x==2> printf<">仪器仪表归还<\n">; else printf<"仪器仪表归还\n">; printf<"\n\n">; if<x==3> printf<">仪器仪表维修<\n">; else printf<"仪器仪表维修\n">; printf<"\n\n">; if<x==4> printf<">仪器仪表报废<\n">; else printf<"仪器仪表报废\n">; printf<"\n\n">; if<x==5> printf<">返回主菜单<\n">; else printf<"返回主菜单\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; } else return; } printf<"<仪器仪表管理系统>\n">; printf<"\n\n">; printf<"请问确定要报废仪器%s吗?\n",equ[j].name>; printf<"\n\n\n\n">; if<x==1> printf<">确定要报废仪器<\n">; else printf<"确定要报废仪器\n">; printf<"\n\n">; if<x==2> printf<">我要考虑考虑<\n">; else printf<"我要考虑考虑\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">; else printf<"按名称查询\n">; printf<"\n\n">; if<x==2> printf<">按时间段查询<\n">; else printf<"按时间段查询\n">; printf<"\n\n">; if<x==3> printf<">按时间点查询<\n">; else printf<"按时间点查询\n">; printf<"\n\n">; if<x==4> printf<">返回主菜单<\n">; else printf<"返回主菜单\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;//更改以后所有状态 //
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度新能源汽车出口产品购销合同范本4篇
- 2025年度枣树种植基地绿色认证与市场拓展合同4篇
- 2025年度体育场馆场地租赁合同终止及运营权转让协议3篇
- 2025年度体育用品代理销售与售后服务协议4篇
- 2024通信信息保密协议1
- 2025年度智能化厂房整体转让合同书3篇
- 2024-2030年中国RNA聚合酶行业市场全景监测及投资策略研究报告
- 2025年度互联网数据中心服务合同模板2篇
- 2025不锈钢管道系统安装与维护服务合同3篇
- 2024运输公司车辆全面保险合同6篇
- 大唐电厂采购合同范例
- 国潮风中国风2025蛇年大吉蛇年模板
- GB/T 18724-2024印刷技术印刷品与印刷油墨耐各种试剂性的测定
- IEC 62368-1标准解读-中文
- 15J403-1-楼梯栏杆栏板(一)
- 2024年中考语文名句名篇默写分类汇编(解析版全国)
- 新煤矿防治水细则解读
- 故障诊断技术的国内外发展现状
- 医院领导班子集体议事决策制度
- 解读2024年《学纪、知纪、明纪、守纪》全文课件
- 农机维修市场前景分析
评论
0/150
提交评论