《仪器仪表管理系统设计——C语言.docx》由会员分享,可在线阅读,更多相关《仪器仪表管理系统设计——C语言.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、仪器仪表管理系统设计C语言 仪器仪表管理系统 系统功能的基本要求: (1)新的仪器仪表信息的录入; (2)在借出、归还、维修时对仪器仪表信息的修改; (3)对报废仪器仪表信息的删除; (4)按照一定的条件查询符合条件的仪器仪表信息;查询功能至少应该包括仪器仪表基本信息(如仪器仪表名字、仪器仪表编等) 的查询、按时间点(借入时间、借出时间、归还时间)查询等(5)对查询结果的输出。 数据结构采用结构体。仪器仪表信息包括仪器仪表名、仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时间、状态信息(0代表可借出,1代表已借出,2代表正在维修)等。 二、需求分析 根据题目要求,需要把仪器仪表信息
2、的的数据存储在文件里,所以需要提供文件的输入输出等操作;在程序中要提供修改,删除,查找等操作;另外还应该提供键盘式选择菜单实现功能选择。 三、总体设计 系统功能模块图 四、详细设计 1.主函数 主函数一般设计得比较简洁,只提供输入输出和功能处理的函数调用。 其各功能模块用菜单方式选择。本题将main()函数体内的界面选择部 分语句单独抽取出来作为一独立函数,目的在于系统执行完每部分功能 模块后能够方便返回到系统界面。 main() menu(); 菜单部分设计如下: N 主函数的菜单流程图 menu() int n,w; /*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内
3、*/ do puts(tt*MENU*nn); puts(tttt 1.enter); puts(tttt 2.modify); puts(tttt 3.search); puts(tttt 4.delete); puts(tttt 5.exit); puts(nntt *n); printf(Choice your number(1-5): bb); scanf(%d,&n); if(n5) /*对选择的数字作判断*/ w=1; getchar(); else w=0; while(w=1); switch(n) case 1:enter();break; /*输入模块*/ case 2:m
4、odify();break; /*修改模块*/ case 3:search();break; /*查找模块*/ case 4:delete();break; /*删除模块*/ case 5:exit(0); /*退出*/ 2.各功能模块设计 (1)输入模块 单独看各数据信息,仪器仪表名是字符型,可采用字符型数组; 仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时 间应采用实型;状态信息是整数,采用整型。实际上操作时发现只有 字符型的数据可以在文件中成功被保存,所以本题所有数据一律采用 字符型。 struct machine char name5; char number5; cha
5、r buy_time5; char borrowin_time5; char borrowout_time5; char return_time5; char repair_time5; char sta5; char time5;/*time为下面程序中按时间查找和修改时记录输入的时间*/ macN;/* macN中每个数组元素对应一个仪表仪器*/ macN中的N是仪表仪器个数,程序中采用宏定义的方式,可以随时在源程序宏定义中改,本程序宏定义#define N 50。 输入模块流程图 /*输入模块*/ enter() /*输入模块*/ int i,n; printf(录入机器数量(0-%d)
6、?:,N-1); scanf(%d,&n); /*要输入的记录个数*/ printf(n录入日期n); printf(n名称号码购买时间借入时间借出时间归还时间维修时间状态n); for(i=0;in;i+) input(i); /*调用输入函数*/ if(i!=0)save(n); /*调用保存函数*/ printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/ (2)修改模块 需求分析 该模块的功能是显示所有仪器仪表信息,考虑到记录较多,建议采用分屏显示。显示完所有记录后,用户输入要修改的仪器仪表编号,根据编号查找仪器仪表记录,并提示用户修改该记录的哪部分信息,是仪器仪表
7、的借出时间、归还时间、修理时间还是状态,根据用户选择修改相应信息。 修改模块流程图 程序 /*修改模块*/ modify() /*修改模块*/ struct machine m; FILE *fp; int i,n,k,w0=1,w1,w2=0; n=load(); do k=-1; /*给用户看全部记录以便确认要修改的记录*/ printf_face(); /*调用显示数据结构项目函数*/ for(i=0;in;i+) if(i!=0)&(i%10=0) /*分屏显示*/ printf(nn按键继续.); getch(); puts(nn); printf_one(i); /*调用显示一个记
8、录的函数*/ do printf(n情输入机器号码:); scanf(%s,m.number); /*输入要修改的仪器仪表的编号*/ for(i=0;in;i+) /*查找要修改的仪器仪表的记录*/ if(strcmp(m.number,maci.number)=0) k=i; /*找到要修改的记录*/ m=maci; /*把maci备份给m,以便用户后悔时恢复*/ if(k=-1)printf(nn不存在!重试); while(k=-1); /*k=-1时表示没有找到*/ printf_face(); /*调用显示数据结构项目函数*/ printf_one(k); /*调用显示一个记录的函数
9、*/ w1=modify_data(k); /*修改仪器仪表记录并且返回保存控制值w1,w1=1则表示用户以确认修改*/ if(w1=1) /*w1=1表示用户确定这次修改*/ printf(n成功.nn还要修改其它吗?nnt1).是2.保存退出tbb); scanf(%d,&w0); w2=1; /*控制保存,使w2=1是标记已有过修改*/ else w0=0; if(w2=1) mack=m; /*走到这里是由于用户没有确认这次修改(在调用修改函数w1=modify_data(k)时没有确认),使w0=0,为了终止循环;mack=m 则把备份的m恢复给mack,这样的好处是确保在此之前修改
10、过的成功保存,而本次不修改*/ if(w0!=1&w2=1) /*w0!=1则表示正常返回,w2=1表示在此之前有过修改,此时就保存用户已经确认修改的并返回*/ save(n); /*w2!=1表示在此次之前没有修改过,而又反悔这次修改,则不保存返回*/ while(w0=1); printf_back(); 说明:调用w1=modify_data(k)修改函数时,若返回值为1则表示用户在修改函数里面确认了这次修改,其中i 表示第i 个记录(要修改的);若返回值不为1则不保存这次修改,但保存这次之前的修改,这由w2来控制,w2=1则表示有过用户修改确认史。 (3)查找模块 流程图 N 查找模块
11、流程图 程序 /*查找模块*/ int search() int m; puts(tt*nn); puts(tttt mon_search); puts(tttt 2.point_search); puts(tttt 3.exit); puts(nntt *n); printf(情选择号码r(1-3): bb); scanf(%d,&m); switch(m) case 1:common_search();break; case 2:point_search();break; case 3:exit(0); (1.1)基本查找 分析 基本信息查找包括了仪器仪表的名称以及编号的查找,所以该子功能
12、模块的功能是先让用户选择是按仪器仪表名称还是按仪器仪表编号查找,根据用户选择的进行查找,找到以后增加删除和修改功能。 程序 /*基本查找模块*/ int common_search() /*基本查找模块*/ int i,n,k,w1=1,w2,w3,w4; struct machine m; n=load(); printf(通过名称还是号码搜索?1-名称,2-号码:); scanf(%d,&i); if(i=1) do do k=-1; printf(nn情输入名称! 名称:); scanf(%s, ); /*输入要查找的仪器仪表的名称*/ printf_face(); /*调用显示数据结构
13、项目函数*/ for(i=0;in;i+) /*查找想要的记录*/ if(strcmp( ,maci.name)=0) k=i; /*找到要查找的记录*/ printf_one(k); /*调用显示一个记录的函数*/ if(k=-1) printf(nn不存在! ); printf(nn重试?nt1).是2)返回bb); scanf(%d,&w1); while(w1=1) menu();/*保证第一次查找的基础上再查找找不到时能退出*/ while(k=-1&w1=1); /*如果w1!=1则直接返回*/ w4=0;w3=0; if(k!=-1) /*k!=-1表示找到,如果找到则选择操作*
14、/ printf(nn操作?nt1).重新搜索2.修改3).删除4).返回bb); scanf(%d,&w2); switch(w2) case 2:w3=modify_data(k);break; /*调用修改数据函数*/ case 3:printf(n确定?nt1).是2.返回bb); scanf(%d,&w4); if(w3=1|w4=1) save(n); printf(nn成功.); printf(nn操作?nt1).重新搜索2).返回bb); scanf(%d,&w2); while(w2=1); if(i=2) do do k=-1; printf(nn请输入号码! 号码:);
15、scanf(%s,m.number); /*输入要查找的仪器仪表编号*/ printf_face(); /*调用显示数据结构项目函数*/ for(i=0;in;i+) /*查找想要的记录*/ if(strcmp(m.number,maci.number)=0) k=i; /*找到要查找的记录*/ printf_one(k); /*调用显示一个记录的函数*/ if(k=-1) printf(nn不存在! ); printf(nn重试?nt1).是2).返回bb); scanf(%d,&w1); while(w1=1)menu();/*保证第一次查找的基础上再查找找不到时能退出*/ while(k
16、=-1&w1=1); /*如果w1!=1则直接返回*/ w4=0;w3=0; if(k!=-1) /*k!=-1表示找到,如果找到则选择操作*/ printf(nn操作?nt1).重新搜索2.修改3).删除4).返回bb); scanf(%d,&w2); switch(w2) case 2:w3=modify_data(k);break; /*调用修改数据函数*/ case 3:printf(n确定?nt1).是2.返回bb); scanf(%d,&w4); if(w3=1|w4=1) save(n); printf(nn成功.); printf(nn操作?nt1).重新搜索2).返回bb); scanf(%d,&w2); while(w2=1); menu(); /*调用菜单函数*/ (1.2)按时间点查找