1、C语言课程实习报告学 院: 计算机学院专 业: 计算机科学与技术班 级: 191114学 号: 20111002635姓 名: 高跃攀题目要求19、仪器仪表管理【要求】 系统功能的基本要求:(1) 新的仪器仪表信息的录入;(2) 在借出、归还、维修时对仪器仪表信息的修改;(3) 对报废仪器仪表信息的删除;(4) 按照一定的条件查询符合条件的仪器仪表信息;查询功能至少应该包括仪器仪表基本信息(如仪器仪表名字、仪器仪表编等)的查询、按时间点(借入时间、借出时间、归还时间)查询等(5) 对查询结果的输出。 【提示】 数据结构采用结构体。仪器仪表信息包括仪器仪表名、仪器仪表编号、购买时间、借入时间、借
2、出时间、归还时间、维修时间、状态信息(0代表可借出,1代表已借出,2代表正在维修)等。二、 需求分析根据题目要求,需要把仪器仪表信息的的数据存储在文件里,所以需要提供文件的输入输出等操作;在程序中要提供修改,删除,查找等操作;另外还应该提供键盘式选择菜单实现功能选择。三、 总体设计 仪器仪表管理系统输入查找修改删除退出系统功能模块图四、 详细设计1. 主函数主函数一般设计得比较简洁,只提供输入输出和功能处理的函数调用。其各功能模块用菜单方式选择。本题将main()函数体内的界面选择部分语句单独抽取出来作为一独立函数,目的在于系统执行完每部分功能模块后能够方便返回到系统界面。【程序】 main(
3、)menu();菜单部分设计如下:【流程图】显示一系列功能选项 输入n,判断n是否是15 N Y根据n的值调用各功能模块函数 主函数的菜单流程图【程序】 menu() int n,w;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/ 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):
4、 bb); scanf(%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 machinechar 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中每个数组元素
6、对应一个仪表仪器*/【注意】macN中的N是仪表仪器个数,程序中采用宏定义的方式,可以随时在源程序宏定义中改,本程序宏定义#define N 50。输入用户要输入仪器的个数n 【流程图】i从0到n1调用输入函数input(i) i!0 Y保存调用函数save(n)输入模块流程图【程序】 /*输入模块*/enter() /*输入模块*/ int i,n; printf(How many machines do you want to enter(0-%d)?:,N-1); scanf(%d,&n); /*要输入的记录个数*/ printf(nEnter data nown); printf(nn
7、ame number buy_time borrowin_time borrowout_time return_time repair_time staten); for(i=0;in;i+) input(i); /*调用输入函数*/ if(i!=0)save(n); /*调用保存函数*/ printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/(2)修改模块需求分析 该模块的功能是显示所有仪器仪表信息,考虑到记录较多,建议采用分屏显示。显示完所有记录后,用户输入要修改的仪器仪表编号,根据编号查找仪器仪表记录,并提示用户修改该记录的哪部分信息,是仪器仪表的借出时间、归还时间
8、、修理时间还是状态,根据用户选择修改相应信息。显示所有记录,让用户看哪个要修改流程图输入要修改的仪器仪表编号是否找到此记录 Y N显示找到的记录,调用修改函数提示没有找到询问用户是否继续修改Y N返回主菜单修改模块流程图程序/*修改模块*/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) /*分
9、屏显示*/ printf(nnpass any key to continue.); getch(); puts(nn); printf_one(i); /*调用显示一个记录的函数*/ do printf(nplease enter machine number:);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)pr
10、intf(nnNO exist!Try again); while(k=-1); /*k=-1时表示没有找到*/ printf_face(); /*调用显示数据结构项目函数*/ printf_one(k); /*调用显示一个记录的函数*/ w1=modify_data(k); /*修改仪器仪表记录并且返回保存控制值w1,w1=1则表示用户以确认修改*/ if(w1=1) /*w1=1表示用户确定这次修改*/ printf(nSuccessful_.nnAre you modify another?nnt1).Yes 2).Back with savetbb); scanf(%d,&w0); w
11、2=1; /*控制保存,使w2=1是标记已有过修改*/ else w0=0; if(w2=1) mack=m; /*走到这里是由于用户没有确认这次修改(在调用修改函数w1=modify_data(k)时没有确认),使w0=0,为了终止循环; mack=m 则把备份的m恢复给mack,这样的好处是确保在此之前修改过的成功保存,而本次不修改*/ if(w0!=1&w2=1) /*w0!=1则表示正常返回,w2=1表示在此之前有过修改,此时就保存用户已经确认修改的并返回*/ save(n); /*w2!=1表示在此次之前没有修改过,而又反悔这次修改,则不保存返回*/ while(w0=1); pri
12、ntf_back();说明:调用w1=modify_data(k)修改函数时,若返回值为1则表示用户在修改函数里面确认了这次修改,其中i表示第i个记录(要修改的);若返回值不为1则不保存这次修改,但保存这次之前的修改,这由w2来控制,w2=1则表示有过用户修改确认史。(3)查找模块显示一系列功能选项流程图输入n,判断n是否是1-3 N Y根据n的值调用各子功能模块函数查找模块流程图程序 /*查找模块*/int search() int m; puts(tt*nn); puts(tttt mon_search); puts(tttt 2.point_search); puts(tttt 3.ex
13、it); 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) 基本查找 分析 基本信息查找包括了仪器仪表的名称以及编号的查找,所以该子功能模块的功能是先让用户选择是按仪器仪表名称还是按仪器仪表编号查找,根据用户选择的进行查找,找到以后增加删除和修改功能。 流程图调用加载函数n=load();并计算可以查找的记录个数n 用户
14、选择1 2输入仪器仪表名称输入仪器仪表编号 是否找到该仪器仪表记录Y N 提示没有找到显示找到的记录询问用户是否继续查找Y N让用户选择1).查找另一个2).修改3).删除4).返回主菜单返回主菜单基本查找模块流程图程序 /*基本查找模块*/ 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) do do k=-
15、1; 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 aga
16、in?nt1).again 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=
17、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._.); printf(nnWhat do you want to do?nt1).Search another 2).Back bb); scanf(%d,&w2); while(w2=1); if(i=2) do do k=-1; printf(nnEnter the machine numb
18、er that you want 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); printf(nnAre you again?nt1).again 2).NO and b
19、ack 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_data(k);break; /*调用
20、修改数据函数*/ 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._.); printf(nnWhat do you want to do?nt1).Search another 2).Back bb); scanf(%d,&w2); while(w2=1); menu(); /*调用菜单函数*/(1.2) 按时间点查找 流程图调用加载函数n=load();并计算可以查找的记录个数n 用户选择1 2输入仪器仪表借
21、出时间输入仪器仪表借入时间 3 输入仪器仪表归还时间是否找到该仪器仪表记录Y N 提示没有找到显示找到的记录询问用户是否继续查找Y N让用户选择1).查找另一个2).修改3).删除4).返回主菜单返回主菜单时间点查找模块流程图程序/*时间点查找模块*/int point_search() /*时间点查找模块*/ int i,n,k,w1=1,w2,w3,w4; struct machine m; n=load(); printf(Press 1-borrowin_time 2-borrowout_time or 3-return_time); scanf(%d,&i); /*选择要查找的是哪个
22、时间点*/ if(i=1) do do k=-1; printf(nnEnter the machine borrowin time that you want to search! borrowin time:); scanf(%s,m.time); /*输入要查找的仪器仪表的借入时间*/ printf_face(); /*调用显示数据结构项目函数*/ for(i=0;in;i+) /*查找想要的记录*/ if(strcmp(m.time,maci.borrowin_time)=0) k=i; /*找到要查找的记录*/ printf_one(k); /*调用显示一个记录的函数*/ if(k=
23、-1) printf(nnNO exist! please); printf(nnAre you again?nt1).again 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)
24、.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._.); printf(nnWhat do you want to do?nt1).Search another 2).Back bb); scanf(%d,&w2); while(w2=1);
25、 if(i=2) do do 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(k); /*调用显示一个记录的函数*/ if(k=-1) printf(nnNO exist! please); printf(nnAre you again
26、?nt1).again 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=mod
27、ify_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._.); printf(nnWhat do you want to do?nt1).Search another 2).Back bb); scanf(%d,&w2); while(w2=1); if(i=3) do do k=-1; printf(nnEnter return time:); scan
28、f(%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).again 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_data(k);break; /*调用修改数据函数*/
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922