《C语言课程设计报告仪器仪表管理系统报告.doc》由会员分享,可在线阅读,更多相关《C语言课程设计报告仪器仪表管理系统报告.doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、- .报告语言课程设计C学院:自动化学院专业:自动化班级: 231XXX XX: XXX 学号: 231XXX-XX - . 可修编.目录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页 专业资料 题目:仪器仪表管理系统要求系统功能的根本
2、要求:(1)新的仪器仪表信息录入。(2)在借出、归还、维修时对仪器仪表信息的修改。(3)对报废仪器仪表信息的删除。(4)按照一定的条件查询、统计符合条件的仪器仪表信息;查询功能至少应包括仪器仪表根本信息的查询、按时间段(如在2004年1月1日到2004年10月10日购置、借出、维修的仪器仪表等)查询、按时间点(借入时间、借出时间、归还时间)查询等,统计功能至少包括按时间段统计、按仪器仪表的根本信息统计等。(5)对查询、统计的结果打印输出。提示数据构造采用构造体。仪器仪表信息包括仪器仪表名、仪器仪表编号、购置时间、借入时间、借出时间、归还时间、维修时间、状态信息(0 代表可借出,1代表可借入,2
3、 代表正在维修) 等。需求分析:根据题目要求,由于仪器仪表信息是存放在文件,所以应提供文件的输入、输出等操作; 在程序中要浏览仪器仪表的信息。应提供录入、显示、查找,修改等操作; 另外还应提供键盘式选择菜单实现功能选择。总体设计:根据上面的需求分析,可以将这个系统的设计分为三个大的模块: 仪表仪器录入、仪表仪器修改(删除)、仪表仪器查询仪器仪表管理系统查询录入修改详细设计一主函数主函数一般设计得比拟简洁,只提供输入、处理和输出局部的函数调用。其中各功能模块用菜单方式选择。其中流程图如下:程序其中为主函数设定了一个菜单函数,方便用于选择其他模块函数。用getch0;获得所按下的键值,用函数的局部
4、静态变量储存键值对应的其他功能函数。void menu(char c) /*菜单函数*/static int n=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) 专业资料 case 1:if(insert ()=0) insert (); break; /录入 case 2:change();break; /修改 case 3:serch(); break; /查询开场 case 4:exit(0); /退出程序 ;system(cls);显示一系列功能选项printf(nn);pri
5、ntf( 仪器仪表管理系统 n);printf(n);选择一个功能printf( XX:xxx );printf( 班级231xxx); printf(nn);根据选择的功能调用功能模块函数if(n=1)printf( -仪器仪表录入仪器仪表借还/删除仪器仪表查询 退出程序仪器仪表管理系统按W向上选择按S向下选择按回车确定选择按任意键进入系统- n);printf( n);getch();menu(s);while(1) menu(getch(); 二各功能模块设计数据构造数据构造选用构造体数组。这里只简单的给仪器仪表两个局部,一个为仪器仪表的名称、字符串函数,一个为仪器仪表的各个时间点的状态
6、定义一个time的三维数组,数组下标表示年月日,数组的值表示仪器的状态。#define buy 1 /购置#define lean 2 /借出#define repair 3 /维修#define inlib 4 /空闲#define year_max 3000#define month_max 12#define day_max 31#define N 100 /预设仪器最大数 int n;/仪器数struct equment char name100;int time year_max+1month_max+1day_max+1;equN;(1) 录入模块开场通过strcpy函数实现仪器名
7、称的录入,state函数实现仪器状态的更改。输入仪器仪表名称【程序】void insert()int i,j_year,j_month,j_day,year,month,day;char equ_input100;是否已录入入system(cls);是printf(nnnn); 否printf( -仪器仪表管理系统- n);printf(nnnn);返回主菜单输入买入时间printf( 请输入仪器的名称:);scanf(%s,&equ_input);完毕if(presence(equ_input)!=0)printf(n);printf(n);printf( 对不起!此仪器已购置n );pri
8、ntf(n);printf( 录入失败,请按任意键返回主菜单n );printf(n);printf( n);getch(); elseint state (int year,int month,int day,int n,int s); n+;strcpy(equn.name,equ_input); /将equ_input复制给equequ_num.name printf(n);printf( 请输入购置时间年/月/日(例如1998/2/15):);scanf(%d/%d/%d,&year,&month,&day);state(year,month,day,n,inlib); / equn
9、将当天状态改为空闲equn.timeyearmonthday=buy; /equn 将该天以后状态改为购入/printf(%d,equn.timeyearmonthday);printf(n);printf(n);printf( 录入成功,请按任意键返回主菜单n);printf(n);printf(n);printf( n);getch(); (二) 状态改变模块该模块包括对仪器仪表的借出、归还、维修、报废等小模块的操作,仍然用getch();函数获取键值来做上下选择。本函数只考虑对一种仪器仪表的修改,故先要输入该仪器仪表的名称并查找是否已经购置。开场【程序】int change()输入仪器仪
10、表名称char equ_input100,c=s;int j,x=0;system(cls);是否已购置printf(nnnn);否printf( n);是printf(nn);选择需要进展的操作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)case 1:mylean(j
11、);break;case 2:myback(j);break;case 3:myrepair(j);break;case 4:mydel(j);break;case 5:return(1);system(cls);printf(nnnn);printf( n);printf(nn);/*printf( 请输入仪器名称: );scanf(%s,equ_input); printf(nn);*/if(x=1)printf( -仪器仪表借出仪器仪表归还仪器仪表维修仪器仪表报废返回主菜单-n);elseprintf( 返回主菜单 n);printf( n); c=getch();else/*syste
12、m(cls);printf(nnnn);printf( n);printf(nn);*/printf(nn);printf( 对不起!找不到该仪器n);printf( 可能是由于您输入仪器的名称错误,n);printf( 也可能是由于无此仪器,还没购置。n);开场printf(nn);printf( 修改失败,请按任意键返回主菜单 n);输入仪器仪表名称printf( n);getch();/return; 是否空闲(1) 借出模块首先输入借出的时间,然后在仪器仪表的构造体数组中查是否找该仪器仪表在这个输入的时间点上有无其他状态。假设无其他状态那么可以借出,否那么不可借出。返回主菜单 标记状态
13、为借出【程序】int mylean(int j)int year,month,day;完毕system(cls);printf(nnnn);printf( n);printf(nn);printf( 请输入借出时间年/月/日: );scanf(%d/%d/%d,&year,&month,&day);/system(pause);/printf(%d,equj.timeyearmonthday);if (equj.timeyearmonthday=inlib) /判断仪器是否空闲printf(nn);printf( 借出成功,请按任意键返回上一级菜单 n);printf(n); printf(
14、n);state(year,month,day,j,lean); /状态改为借出getch(); return(1);elseprintf(nn);printf( 对不起!n);printf( 此仪器还没有购置或没有归还或正在维修中,n);printf( 故无法借出。n);printf( 借出失败,请按任意键返回上一级菜单 n);printf(nn);printf( n);getch(); return(0); (2) 归还模块首先输入借出的时间,然后在仪器仪表的构造体数组中查找该仪器仪表在这个输入的时间点上有无其他状态。假设无其他状态那么可以借出,否那么不可借出。【程序】int myback
15、(int j)int year,month,day;system(cls);printf(nnnn);printf( n);printf(nn);printf( 请输入归还时间年/月/日: );scanf(%d/%d/%d,&year,&month,&day);if (equj.timeyearmonthday=lean) /判断状态是否为借出开场输入仪器仪表名称是是否借出标记状态为空闲返回主菜单否完毕printf(nnn); printf( 归还成功,请按任意键返回上一级菜单 n);printf(nn); printf( n);state(year,month,day,j,inlib); /
16、改状态为空闲getch(); return(1);elseprintf(nn);printf( 对不起!n);printf( 此仪器还没有购置或还没有借出n);printf( 或正在维修中,故无法归还。n);printf( 归还失败,请按任意键返回上一级菜单 n);printf(n);printf( n);getch(); return(0); 3维修模块同样是首先输入维修开场的时间和维修完毕的时间,然后在仪器仪表的构造体数组中查找该仪器仪表在这个归还的时间点上有其他状态。假设有为空闲状态那么可以维修,否那么不可维修。开场输入维修开场完毕时间是是否空闲标记状态为维修返回主菜单否完毕【程序】in
17、t myrepair(int j)int year,month,day;system(cls); printf(nnnn);printf( n);printf(nn);printf( 请输入开场维修时间年/月/日:);scanf(%d/%d/%d,&year,&month,&day);if (equj.timeyearmonthday=inlib)state(year,month,day,j,repair); /改状态为维修printf(nn);printf( 请输入维修完毕时间年/月/日:);scanf(%d/%d/%d,&year,&month,&day);state(year,month
18、,day,j,inlib);printf(nn);printf( 维修成功,请按任意键返回上一级菜单 n);printf(n); printf( n);getch(); return(1);elseprintf(nn);printf( 对不起!n);printf( 此仪器还没有购置或借出,n);printf( 故无法维修。n);printf(nn);printf( 维修失败,请按任意键返回上一级菜单 n);printf(nn);printf( n);getch(); return(0); 4删除模块删除模块将删除本仪器仪表,具体删除过程为将需要删除的后一项覆盖至删除的这一项,即需删除以后的每一
19、个构造体元素都向前移一个单位。开场是是否删除循环将需删除的后面所有元素整体向前移动一个单位返回主菜单否完毕【程序】int mydel(int j) char c=s;int x=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)int i;for(i=n;in;i+)equi=equi-1; n-;system(cls);printf(nnnn);printf( n);printf(nn);printf( 报废仪表已删除!n );printf(nn);printf
20、( 请按任意键返回上一级菜单 n);printf(n); printf( n);getch(); return;else return;printf( n);printf(nn);printf( 请问确定要报废仪器%s吗?n ,equj.name);printf(nnnn);if (x=1)printf( -确定要报废仪器我要考虑考虑- n);elseprintf( 我要考虑考虑 n);printf(nn); printf( n);c=getch(); (三)仪器仪表查找模块仪器仪表查找分为按名称查找、按时间点查找、按时间段查找三个模块,通过键盘w s进展选择,分别用三个小模块来表示,通过状态
21、函数condition_p输出仪器仪表状态。【程序】void search()char c=s;int x=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)case 1:name();break;case 2:time_d();break;case 3:time_p();break;case 4:return; ;system(cls);printf(nnnn);printf( n);printf(nn);if(x=1)printf( -按名称查询按时间段查询按时间点查询返回主菜
22、单-n);elseprintf( 返回主菜单 n);printf(nn);printf( n);c=getch(); 因为不管查找条件是什么,最终都会对应到需查找的仪器仪表上,故补充一个公共函数condition_p;,输出查找一个仪器仪表的结果。【程序】void condition_p(int year,int month,int day,int n,int *bool_repair,int *bool_lean)/printf(%d,equn.timeyearmonthday); /system(pause);if (equn.timeyearmonthday=buy) printf( %
23、4d年%2d月%2d日购置%s仪器仪表n,year,month,day,equn.name); /借出/归还if (equn.timeyearmonthday=lean)&(*bool_lean)=0)printf( %4d年%2d月%2d日借出%s仪器仪表n,year,month,day,equn.name);(*bool_lean)=1; /printf(%dn,equn.timeyearmonthday=lean); /printf(%dn); if (equn.timeyearmonthday=inlib&(*bool_lean)=1)printf( %4d年%2d月%2d日归还%s仪
24、器仪表n,year,month,day,equn.name);(*bool_lean)=0; /printf(%d,equn.timeyearmonthday); /维修/修完if (equn.timeyearmonthday=repair&(*bool_repair)=0)printf( %4d年%2d月%2d日开场维修%s仪器仪表n,year,month,day,equn.name);(*bool_repair)=1; if (equn.timeyearmonthday=inlib&(*bool_repair)=1)printf( %4d年%2d月%2d日完毕维修%s仪器仪表n,year,
25、month,day,equn.name);(*bool_repair)=0; 1按名称查找首先输入仪器仪表的名称,然后在构造体数组中查找是否存在,这个仪器仪假设是那么循环该仪器仪表的所有时间点来判断改时间点处于什么状态,并用公共函数condition_p来输出。【程序】int name()开场输入仪器仪表名称是是否存在循环并输出返回主菜单否完毕char equ_input100;int i; system(cls);printf(nnnn);printf( n);printf(nn);printf( 请输入仪器名字: );scanf(%s,equ_input);i=presence(equ_i
26、nput);if (i!=0)int j_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(nn);printf( 查询完成,请按任意键返回上一级菜单 n);printf(nn); printf( n);getch(); return(1);elseprintf(nn);printf( 对不起!n);printf( 可能是由于您输入错误,n);开场输入时间点完毕循环每个仪器仪表的判断状态并输出返回主菜单printf( 也有可