仪器仪表的管理.docx

上传人:小飞机 文档编号:5006832 上传时间:2023-05-29 格式:DOCX 页数:26 大小:379.49KB
返回 下载 相关 举报
仪器仪表的管理.docx_第1页
第1页 / 共26页
仪器仪表的管理.docx_第2页
第2页 / 共26页
仪器仪表的管理.docx_第3页
第3页 / 共26页
仪器仪表的管理.docx_第4页
第4页 / 共26页
仪器仪表的管理.docx_第5页
第5页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《仪器仪表的管理.docx》由会员分享,可在线阅读,更多相关《仪器仪表的管理.docx(26页珍藏版)》请在三一办公上搜索。

1、中国地质大学(武汉) C语言课程实习报告学院:资源学院专业:资源勘测(油气)班级:021103学号:20101002354姓名:姚国华指导老师;张霞时间;2012年1月15号题目要求仪器仪表管理【要求】系统功能的基本要求:(1)新的仪器仪表信息的录入;(2)在借出、归还、维修时对仪器仪表信息的修改;(3)对报废仪器仪表信息的删除;(4)按照一定的条件查询符合条件的仪器仪表信息;查询功能至少应该包括 仪器仪表基本信息(如仪器仪表名字、仪器仪表编号等)的查询、按时 间点(借入时间、借出时间、归还时间)查询等(5)对查询结果的输出。【提示】数据结构采用结构体。仪器仪表信息包括仪器仪表名、仪器仪表编号

2、、购买时 间、借入时间、借出时间、归还时间、维修时间、状态信息0代表可借出,1代表已借出, 2代表正在维修)等。二、需求分析根据题目要求,需要把仪器仪表信息的的数据存储在文件里,所以需要提供文件的输入 输出等操作;在程序中要提供修改,删除,查找等操作;另外还应该提供键盘式选择菜 单实现功能选择。三、总体设计系统功能模块图四、详细设计1.主函数主函数一般设计得比较简洁,只提供输入输出和功能处理的函数调用。其各功能模 块用菜单方式选择。本题将main()函数体内的界面选择部分语句单独抽取出来作 为一独立函数,目的在于系统执行完每部分功能模块后能够方便返回到系统界面。【程序】main()(menu(

3、);菜单部分设计如下:流程图】显示一系列功能选项 N输入。,判断n是否是15 根据n的值调用各功能模块函数主函数的菜单流程图【程序】menu()int n,w;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/do puts(tt*MENU*nn);puts(tttt l.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);/*对选择的数字作判断*/sc

4、anf(%d”,&n);if(n5)w=1;getchar();else w=0;while(w=1);switch(n)(case 1:enter();break;/*输入模块 */case 2:modify();break;/* 修改模块*/case 3:search();break;/* 查找模块*/case 4:delete();break;/* 删除模块*/case 5:exit(0);/* 退出 */2. 各功能模块设计(1)输入模块【数据结构】【分析】单独看各数据信息,仪器仪表名是字符型,可采用字符型数组;仪器仪表 编号、购买时间、借入时间、借出时间、归还时间、维修时间应采用实型

5、;状 态信息是整数,采用整型。实际上操作时发现只有字符型的数据可以在文件中 成功被保存,所以本题所有数据一律采用字符型。struct machine(char name5;char number5;char buy_time5;char borrowin_time5;char borrowout_time5;char return_time5;char repair_time5;char sta5;char time5;/*time为下面程序中按时间查找和修改时记录输入的时间*/macN;/* macN 中每个数组元素对应一个仪表仪器*/【注意】macN中的N是仪表仪器个数,程序中采用宏定义的

6、方式,可以随时在源程 序宏定义中改,本程序宏定义#define N 50。流程图】 输入用户要输入仪器的个数ni从0到n-1调用输入函数input(i)保存调用函数save(n)输入模块流程图【程序】2 “ kL.Z 、 -Wv -H-t / /* 输入模块 */enter()/*输入模块*/( int i,n;printf(How many machines do you want to enter(0-%d)?:,N-1);scanf(%d”,&n);/*要输入的记录个数*/printf(n Enter data now n);printf(n name number buy_time b

7、orrowin_time borrowout_time return_time repair_time state n);for(i=0;in;i+)(input(i);/*调用输入函数*/if(i!=0)save(n);/* 调用保存函数 */printf_back();/* 一个任务结束时让用户选择是浏览还是返回*/(2)修改模块需求分析该模块的功能是显示所有仪器仪表信息,考虑到记录较多,建议采用分屏显示。显示 完所有记录后,用户输入要修改的仪器仪表编号,根据编号查找仪器仪表记录,并提示用户 修改该记录的哪部分信息,是仪器仪表的借出时间、归还时间、修理时间还是状态,根据用 户选择修改相应信

8、息。返回主菜单修改模块流程图程序/* 修改模块 */ 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(nnpass any key to continue.); getch(); puts(nn); printf_one(i); do printf(nplease enter machine number:); scanf(%s”,m.number);/*输

9、入要修改的仪器仪表的编号*/for(i=0;in;i+)/*查找要修改的仪器仪表的记录*/if(strcmp(m.number,maci.number)=0) k=i;/*找到要修改的记录*/m=maci;/*把maci备份给m,以便用户后悔时恢复*/ if(k=-1)printf(nnNO exist!Try again); while(k=-1); printf_face(); printf_one(k); w1=modify_data(k);/*修改仪器仪表记录并且返回保存控制值w1,w1=1则表示用户以确认修改*/ if(w1=1)/*w1=1表示用户确定这次修改*/ printf(n

10、SuccessfulA_A.nnAre you modify another?nnt1).Yes 2).Back with savetbb); scanf(%d”,&w0); w2=1; else w0=0;/*给用户看全部记录以便确认要修改的记录*/*调用显示数据结构项目函数*/*分屏显示*/*调用显示一个记录的函数*/*k=-1时表示没有找到*/*调用显示数据结构项目函数*/*调用显示一个记录的函数*/*控制保存,使w2=1是标记已有过修改*/if(w2=1)mack=m;/*走到这里是由于用户没有确认这次修改(在调用修改函数w1=modify_data(k)时没有 确认),使w0=0,为

11、了终止循环;mack=m则把备份的m恢复给mack,这样的好处是确保在此之前修改过的成功保存,而本次不修改*/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来控制,w

12、2=1则表示有过用户修改确认史。(3)查找模块流程图N查找模块流程图程序/*查找模块*/int search()( int m;puts(tt*nn);puts(tttt mon_search);puts(tttt 2.point_search);puts(tttt 3.exit);puts(nntt *n);printf(Please choice your number(1-3): bb);scanf(%d”,&m);switch(m)(case 1:common_search();break;case 2:point_search();break;case 3:exit(0);(1.1)

13、基本查找分析基本信息查找包括了仪器仪表的名称以及编号的查找,所以该子功能模块的功能 是先让用户选择是按仪器仪表名称还是按仪器仪表编号查找,根据用户选择的进行查找,找 到以后增加删除和修改功能。流程图基本查找模块流程图程序/* 基本查找模块 */int common_search()/* 基本查找模块 */ ( int i,n,k,w1=1,w2,w3,w4;struct machine m; n=load();printf(Search the machine by name or number?1-name,2-number:); scanf(%d”,&i);if(i=1)dodo k=-1

14、;printf(nnEnter the machine name that you want to search! name:); scanf(%s”,m.name);/*输入要查找的仪器仪表的名称*/printf_face();/*调用显示数据结构项目函数*/for(i=0;in;i+)/*查找想要的记录*/if(strcmp(m.name,maci.name)=0) k=i;/*找到要查找的记录*/printf_one(k);/*调用显示一个记录的函数*/ if(k=-1) printf(nnNO exist! please); printf(nnAre you again?nt1).ag

15、ain 2).NO and back bb); scanf(%d”,&w1); while(w1=1) menu();/*保证第一次查找的基础上再查找找不到时能退出*/ while(k=-1&w1=1);/*如果 w1!=1 则直接返回*/w4=0;w3=0; if(k!=-1)/*k!=-1表示找到,如果找到则选择操作*/printf(nnWhat do you want to do?nt1).Search another 2).Modify 3).Delete 4).Back menu bb); scanf(%d”,&w2); switch(w2) case 2:w3=modify_dat

16、a(k);break;/* 调用修改数据函数 */case 3:printf(nAre you sure?nt1).Sure 2).No and back bb); scanf(%d”,&w4); if(w3=1llw4=1) save(n); printf(nnSuccessful.A_A.); printf(nnWhat do you want to do?nt1).Search another 2).Back bb); scanf(%d”,&w2); while(w2=1); dodo k=-1;printf(nnEnter the machine number that you wan

17、t to search! number:); 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(nnNO exist! please);2).NO and back bb);printf(nnAre you again?nt1).againscanf(%d”,&w1);while(

18、w1=1)menu();/*保证第一次查找的基础上再查找找不到时能退出*/ /*如果w1!=1则直接返回*/while(k=-1&w1=1);w4=0;w3=0;if(k!=-1)/*k!=-1表示找到,如果找到则选择操作*/ printf(nnWhat do you want to do?nt1).Search another 2).Modify 3).Delete 4).Back menu bb); scanf(%d”,&w2); switch(w2) case 2:w3=modify_data(k);break;/* 调用修改数据函数 */case 3:printf(nAre you s

19、ure?nt1).Sure 2).No and back bb); scanf(%d”,&w4); if(w3=1|w4=1) save(n);printf(nnSuccessful.A_A.);printf(nnWhat do you want to do?nt1).Search another 2).Back bb); scanf(%d”,&w2);while(w2=1);/*调用菜单函数*/ menu();(1.2)按时间点查找流程图时间点查找模块流程图程序/* 时间点查找模块 */int point_search()/*时间点查找模块*/( int i,n,k,w1=1,w2,w3,w

20、4;struct machine m;n=load();printf(Press 1-borrowin_time 2-borrowout_time or 3-return_time);scanf(%d”,&i);/*选择要查找的是哪个时间点*/if(i=1)dodo k=-1;printf(nnEnter the machine borrowin time that you want to search! borrowin time:);/*输入要查找的仪器仪表的借入时间*/*调用显示数据结构项目函数*/*查找想要的记录*/scanf(%s”,m.time);printf_face();for

21、(i=0;in;i+) if(strcmp(m.time,maci.borrowin_time)=0) k=i;/*找到要查找的记录*/printf_one(k);/*调用显示一个记录的函数*/if(k=-1) printf(nnNO exist! please);printf(nnAre you again?nt1).again 2).NO and back bb); scanf(%d”,&w1);while(w1=1) menu();/*保证第一次查找的基础上再查找找不到时能退出*/ /*如果w1!=1则直接返回*/while(k=-1&w1=1);w4=0;w3=0;if(k!=-1)/

22、*k!=-1表示找到,如果找到则选择操作*/printf(nnWhat do you want to do?nt1).Search another 2).Modify 3).Delete 4).Back menu bb);scanf(%d”,&w2);switch(w2)case 2:w3=modify_data(k);break;/* 调用修改数据函数 */case 3:printf(nAre you sure?nt1).Sure 2).No and back bb); scanf(%d”,&w4);if(w3=1llw4=1)save(n);printf(nnSuccessful.A_A.

23、);printf(nnWhat do you want to do?nt1).Search another 2).Back bb); scanf(%d”,&w2);while(w2=1);if(i=2)dodo k=-1;/*输入要查找的仪器仪表的借出时间*/*调用显示数据结构项目函数*/*查找想要的记录*/printf(nnEnter borrowout time:);scanf(%s”,m.time);printf_face();for(i=0;in;i+)if(strcmp(m.time,maci.borrowout_time)=0) k=i;/*找到要查找的记录*/printf_one

24、(k);/*调用显示一个记录的函数*/if(k=-1) printf(nnNO exist! please);printf(nnAre you again?nt1).again 2).NO and back bb);scanf(%d”,&w1);while(w1=1)menu();/*保证第一次查找的基础上再查找找不到时能退出*/ /*如果w1!=1则直接返回*/while(k=-1&w1=1);w4=0;w3=0;if(k!=-1)/*k!=-1表示找到,如果找到则选择操作*/ printf(nnWhat do you want to do?nt1).Search another 2).Mo

25、dify 3).Delete4).Back menu bb);scanf(%d”,&w2);switch(w2) case 2:w3=modify_data(k);break;/* 调用修改数据函数 */case 3:printf(nAre you sure?nt1).Sure 2).No and back bb);scanf(%d”,&w4);if(w3=1|w4=1) save(n);printf(nnSuccessful.A_A.);printf(nnWhat do you want to do?nt1).Search another 2).Back bb); scanf(%d”,&w2

26、);while(w2=1);if(i=3)dodo k=-1;printf(nnEnter return time:);scanf(%s”,m.time);/*输入要查找的仪器仪表的归还时间*/printf_face();/*调用显示数据结构项目函数*/for(i=0;in;i+)/*查找想要的记录*/if(strcmp(m.time,maci.return_time)=0) k=i;/*找到要查找的记录*/printf_one(k);/*调用显示一个记录的函数*/if(k=-1)( printf(nnNO exist! please);printf(nnAre you again?nt1).

27、again 2).NO and back bb);scanf(%d”,&w1);while(w1=1) menu();/*保证第一次查找的基础上再查找找不到时能退出*/ while(k=-1&w1=1);w4=0;w3=0;if(k!=-1)/*如果w1!=1则直接返回*/*k!=-1表示找到,如果找到则选择操作*/( printf(nnWhat do you want to do?nt1).Search another 2).Modify 3).Delete 4).Back menu bb);scanf(%d”,&w2);switch(w2)( case 2:w3=modify_data(k

28、);break;/* 调用修改数据函数 */case 3:printf(nAre you sure?nt1).Sure 2).No and back bb);scanf(%d”,&w4);if(w3=1|w4=1) save(n);printf(nnSuccessful.A_A.);printf(nnWhat do you want to do?nt1).Search another 2).Back bb); scanf(%d”,&w2);while(w2=1);menu();/*调用菜单函数*/(4)删除模块需求分析该模块的功能与修改模块一样先显示所有仪器仪表信息,同样考虑到记录较多,建议

29、采用分屏显示。显示完所有记录后,用户输入要修改的仪器仪表编号,根据编号查找仪器仪 表记录,并提示用户是否确定要删除。流程图显示所有记录,让用户看哪个要删除输入要删除的仪器仪表编号删除模块流程图程序/*删除模块 */delete()/*删除模块*/( struct machine m;FILE *fp;int i,n,k,w0=1,w1,w2=0;n=load();/*给用户看全部记录以便确认要删除的记录*/dok=-1;printf_face();/*调用显示数据结构项目函数*/for(i=0;in;i+)if(i!=0)&(i%10=0)/*分屏显示 */printf(nnpass any

30、key to continue.);getch();puts(nn);printf_one(i);/*调用显示一个记录的函数*/do printf(nplease enter machine number you want to delete:);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(nnNO exist!T

31、ry again); while(k=-1);/*k=-1 时表示没有找到*/printf_face();/*调用显示数据结构项目函数*/printf_one(k);/*调用显示一个记录的函数*/printf(nAre you sure?nnt1).Sure 2).Back without save in this time bb); scanf(%d”,&w1);/*返回保存控制值w1,w1=1则表示用户以确认要删除*/if(w1=1)/*w1=1表示用户确定这次删除*/( mack.number=0;/* mack.number=0 表示已经删除 */printf(nSuccessfulA

32、_A.nnAre you delete another?nnt1).Yes 2).Back with savetbb);scanf(%d”,&w0);w2=1;/*控制保存,使w2=1是标记已有过修改*/else( w0=0;if(w2=1)mack=m;/*走到这里是由于用户没有确认这次删除,使w0=0,为了终止循环mack=m则把 备份的m恢复给mack,这样的好处是确保在此之前删除过的成功保存,而本次不删除*/ if(w0!=1&w2=1) /*w0!=1则表示正常返回,w2=1表示在此之前有过删除,此时就 保存用户已经确认删除的并返回*/save(n);/*w2!=1表示在此次之前没有

33、删除过,而又反悔这次删除,则不保存返回*/ while(w0=1);printf_back();3. 公共函数下面是在每个功能模块中都有可能用到的一些公共函数。(1) 保存函数 save(int n)说明形参n控制保存的个数。当maci.number=0表示删除,不保存该记录。程序/*保存函数*/save(int n)/*保存函数,保存n个记录*/ FILE *fp;int i;if(fp=fopen(”data.txt”,”wb”)=NULL) /*以输出打开方式,在此前的记录被覆盖*/ printf(nCannot open filen);return NULL;for(i=0;in;i+

34、)if(maci.number!=0)/*maci.number=0 表示此记录已删除 */if(fwrite(&maci,sizeof(struct machine),1,fp)!=1)printf(file write error!n);fclose(fp);(2) 输入整一个记录函数input(int i)说明形参i表示第i个仪器仪表的记录。程序/*输入一个记录函数*/input(int i)( printf(name:);scanf(%s”,maci.name);num_input(i,i);/*调用仪器仪表编号输入函数*/printf(buy_time:);scanf(%s”,mac

35、i.buy_time);printf(borrowin_time:);scanf(%s”,maci.borrowin_time);printf(borrowout_time:);scanf(%s”,maci.borrowout_time);printf(return_time:);scanf(%s”,maci.return_time);printf(repair_time:);scanf(%s”,maci.repair_time);printf(state:);scanf(%s”,maci.sta);(3)仪器仪表编号输入函数num_input(int i,int n)说明该函数对输入的仪器仪

36、表编号进行判断,确保输入的编号唯一。形参i表示 第i个仪器仪表记录,形参n表示总共有n个仪器仪表记录。程序/*仪器仪表编号输入函数*/num_input(int i,int n) /*i表示第i个仪器仪表记录,n表示比较到第n个仪器仪表*/ ( int j,k,w1;do( w1=0;printf(number:n);scanf(%s”,maci.number);for(j=0;maci.numberj!=0;j+)/* 仪器仪表输入函数作了严格规定*/if(maci.numberj9)/* 判断编号是否为数字 */( puts(Input error!Only be made up of(0-9).Please reinput!n);w1=1;break;if(w1!=1)for(k=0;knn 1). borrowout_time 2).return_time 3).repair_time 4).state);printf(Which you need?:bb);scanf(%d”,&c);if(c4|c4|c1);do switch(c)/*选择要修改的项目*/case1:printf(ente

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号