版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言课程实习报告仪器仪表管理系统仪器仪表信息管理系统题目与题目分析主函数菜单函数功能模块输入模块添加模块修改模块删除模块浏览模块查找模块公共函数操作结果总结与心得仪器仪表信息管理系统题目与题目分析题目:仪器仪表管理[要求] 系统功能的基本要求: ⑴新的仪器仪表信息的录入; ⑵在借出、归还、维修时对仪器仪表信息的修;⑶对报废仪器仪表信息的删除;⑷按照一定的条件查询、统计符合条件的仪器仪表信息;查询功能至少应该包括仪器仪表基本信息的查询、按时间段(如在2004年1月1日到2004年10月10日购买、借出的仪器仪表等)查询、按时间点(借入时间,借出时间,归还时间)查询等,统计功能至少包括按时间段(如在2004年1月1日到2004年10月10日购买、借出的仪器仪表等)统计、按仪器仪表基本住处的统计等;⑸对查询、统计的结果打印输出。需求分析 根据题目要求,由于仪器仪表信息是存放在文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览仪器仪表的信息,应提供显示、查找、删除、添加、修改等操作;另外还提供键盘式选择菜单实现功能选择。总体设计 根据上面的需求分析,可以将这个系统的设计分为以下几个模块:输入模块、添加模块、修改模块、删除模块、查找模块、浏览模块仪器仪表管理系统仪器仪表管理系统输入模块浏览模块查找模块删除模块修改模块添加模块详细设计2.主函数主函数设计比较简单,只有一个函数调用,被调用的函数提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。此函数为菜单函数,执行完每部分模块后能够方便返回到系统界面。intmain(){menu();}菜单函数菜单函数的主要结构用流程图表示如下:YYN显示一系列功能选项输入n,判断n是否是0-9根据n的值调用各功能函数程序:voidmenu(){intn,w;do{puts("\t\t*****************仪表仪器信息管理系统**********************\n\n"); puts("\t\t\t\t经济管理学院喻骏斯学号:20081003064");puts("\t\t\t\t1.仪器信息录入"); puts("\t\t\t\t2.添加新的仪器"); puts("\t\t\t\t3.修改仪器信息"); puts("\t\t\t\t4.删除仪器信息"); puts("\t\t\t\t5.查询仪器信息"); puts("\t\t\t\t6.浏览"); puts("\t\t\t\t7.退出");puts("\n\n\t\t********************我是分界线********************\n"); printf("选择您需要的服务(1-7):[]\b\b"); scanf("%d",&n); if(n<1||n>7) {w=1; getchar();} elsew=0;}while(w==1);switch(n){case1:enter();break;case2:add();break;case3:modify();break;case4:del();break;case5:search();break;case6:browse();break; case7:exit(0);}}功能模块输入模块仪器仪表信息采用结构体变量类型存放,成员包括仪器名称、编号、购买时间、供稿时间、伸出时间、归还时间、维修时间、状态信息(0代表可借出,1代表已借出,2代表正在维修,-1代表删除).程序:voidenter(){inti,n;printf("您要输入的仪器数量(1-%d)?",N);scanf("%d",&n);printf("\n请输入相关信息\n\n");for(i=0;i<n;i++){printf("\n输入第%d台仪器的信息.\n",i+1);input(i);}if(i!=0)save(n);menu();}Y输入用户要输入仪器记录的个数nY输入用户要输入仪器记录的个数ni从0到n-1调用输入函数input(i)i!=0调用保存函数save(n)添加模块该模块的功能是用户需要增加新的仪器记录,请从键盘输入并逐条写到原来的输入文件中,采用追加方式打开文件。由此设计得流程图如下:调用加载函数n=load();并计算可以记录个数n调用加载函数n=load();并计算可以记录个数nk=m+ni从n到k调用输入函数input(i)输入用户要追加仪器记录的个数m保存追加的记录程序:voidadd(){inti,n,b,k;FILE*fp;n=load();printf("您想要添加的仪器的数量(0-%d)?:",N-1-n);scanf("%d",&b);k=b+n;for(i=n;i<k;i++){printf("\n请输入第%d台仪器的信息.\n",i-n+1);input(i);}if((fp=fopen("machine.txt","ab"))==NULL){printf("不能打开文件\n");exit(0);}for(i=n;i<k;i++)if(fwrite(&m[i],sizeof(structmachine),1,fp)!=1)printf("文件书写错误\n"); fclose(fp); printf_back();}修改模块 该模块的功能是显示所有仪器信息,考虑到记录较多,采用分屏显示记录,用户输入要修改仪器的编号,根据编号找到仪器记录,并提示用户该仪器是借出,归还,还是要维修,根据用户选择进行修改相应信息,并将修改后的信息存入相应的文件里面,以保存所有修改的记录。返回主菜单N返回主菜单NYYN显示所有记录,让用户看哪个要修改输入要修改的仪器编号显示找到的记录调用修改函数提示没有找到是否找到此仪器记录询问用户是否继续修改程序:voidmodify(){structmachines;inti,n,k,w0=1,w1,w2=0;n=load();do{k=-1;/*给用户看全部记录以便确认要修改的记录*/printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)){printf("\n\nRememberNO.whichneededmodify.\n按任意键继续.......");getchar();getchar();puts("\n\n");}printf_one(i);}do{printf("\n\n请输入您想修改的仪器编号!NO.:");scanf("%s",s.num);for(i=0;i<n;i++)if(strcmp(s.num,m[i].num)==0){k=i;s=m[i];}if(k==-1)printf("\n\n该仪器已借出!请再次查询");}while(k==-1);printf_face();printf_one(k);w1=modify_data(k);if(w1==1){printf("\n信息修改成功~_~.\n\n请问您想修改其它仪器信息吗?\n\n\t1).是2).储存并返回\t[]\b\b");scanf("%d",&w0);w2=1;}else{w0=0;if(w2==1)m[k]=s;}if(w0!=1&&w2==1)save(n);}while(w0==1);menu();}删除模块该模块与修改模块一样先显示所有仪器信息,同样采用分屏显示,显示完所有记录后,用户输入要删除仪器的编号,根据编号找到该项仪器,并删除。删除时将该项仪器的状态为-1,保存时状态为-1的跳过。流程图NYNYYYN显示所有记录,让用户看哪个要修改输入要修改的仪器编号显示找到的记录提示没有找到是否找到此仪器记录是否删除返回主菜单N询问用户是否继续修改condition=-1返回程序:voiddel(){structmachines;inti,n,k,w0=1,w1,w2=0;n=load();do{k=-1;/*给用户看全部记录以便确认要删除的记录*/printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)){printf("\n\nRememberNO.whichneededdeleted.\n按任意键继续.......");getchar();getchar();puts("\n\n");}printf_one(i);}do{printf("\n\n输入您要删除的仪器编号!第:");scanf("%s",s.num);for(i=0;i<n;i++)if(strcmp(s.num,m[i].num)==0){k=i;s=m[i];}if(k==-1)printf("\n\n仪器不存在!请再次输入");}while(k==-1);printf_face();printf_one(k);printf("您确定吗?\n\n\t\t1).确定\n\t\t2).返回而不储存\n");printf("请选择?[]\b\b");scanf("%d",&w1);if(w1==1){m[k].condition=-1;printf("\n删除成功~_~.\n\n您还想删除其它仪器吗?\n\n\t1).是的2).储存并返回\t[]\b\b");scanf("%d",&w0);w2=1;}else{w0=0;if(w2==1)m[k]=s;}if(w0!=1||w2==1)save(n);}while(w0==1);menu();}浏览模块该模块的功能是显示所有仪器仪表信息。采用分屏显示按任意键返回主菜单按任意键显示下一屏显示仪器仪表信息(10个一屏)流程图按任意键返回主菜单按任意键显示下一屏显示仪器仪表信息(10个一屏)程序:voidbrowse(){inti,n;n=load();printf_face();for(i=0;i<n;i++){if((i!=0)&&i%10==0){printf("\n\n按任意键继续........");getchar();getchar();puts("\n\n");}printf_one(i);/*调用显示一个记录的函数*/}printf("\t有%d台仪器的记录.\n",n);printf("\n按任意键继续.............\n");getchar();/*按任意键*/menu();}查找模块查找与统计合在一起,分为其它信息查找,按时间段和时间点方式查找,该模块提供选择菜单,根据用户的选择以实现不同方式的查找与统计。流程图显示菜单供用户选择显示菜单供用户选择按名称按编号按状态按时间段按时间点程序:voidsearch(){intn,w;do{puts("\t\t=====================菜单====================\n\n");puts("\t\t\t\t查询与统计");puts("\t\t\t\t1.按名称");puts("\t\t\t\t2.按编号");puts("\t\t\t\t3.按仪器状态信息");puts("\t\t\t\t4.按时间段"); puts("\t\t\t\t5.按时间点"); puts("\t\t\t\t6.返回");puts("\n\n\t\t==========================================\n"); printf("请选择查询方式(1-6):[]\b\b"); scanf("%d",&n); if(n<1||n>6) {w=1;printf("inputerror!\n"); getchar();} elsew=0;}while(w==1);switch(n){case1:case2:case3:sbmnc(n);break;case4:sbptime();break;case5:sbdtime();break;case6:menu();}a.按基本信息查找[需求分析]调用加载函数调用加载函数,根据用户的选择,1为按名称查找,2为按编号查找,为3按状态查找,找到一条记录计数器加一,查找完后输出统计结果,讯问是否继续查找,是,则重新查找,否则返回上一级函数。调用加载函数YYYYNY输入仪器名称输出记录,计数器加一是否查找到返回返回c=1c=2c=3输入编号输入编号程序:voidsbmnc(intc){inti,n,j,k,w1=1,w2;structmachinet;n=load();do{do{k=-1;if(c==1){printf("\n\n输入仪器名称!名称:");scanf("%s",);printf_face();for(i=0,j=0;i<n;i++)if(strcmp(,m[i].name)==0){k=i;printf_one(k);j++;}printf("\n有%d%s.台仪器符合这一名称");}if(c==2){printf("\n\n输入仪器编号!编号:");scanf("%s",t.num);printf_face();for(i=0,j=0;i<n;i++)if(strcmp(t.num,m[i].num)==0){k=i;printf_one(k);j++;}printf("\n有%d%s.台仪器符合这一编号");}if(c==3){printf("\n\n输入您想要查询的仪器的状态信息!状态信息:");scanf("%d",&t.condition);printf_face();for(i=0,j=0;i<n;i++)if(t.condition==m[i].condition){k=i;printf_one(k);j++;}printf("\n有%d台仪器处于这种状态");}if(k==-1){printf("\n\n找不到符合要求的结果!");printf("\n\n您想再次尝试吗?\n\t1).再试一次2).返回[]\b\b");scanf("%d",&w1);if(w1!=1)break;}}while(k==-1&&w1==1);printf("您还想做什么?\n\t1)再次搜索2).返回[]\b\b");scanf("%d",&w2);}while(w2==1);search();}b.按时间段查找[需要分析]同样提供一个菜单,供用户选择,1为查询购买情况,2为查询借入情况,3为查询借出情况,4为归还情况。5为维修情况,查询结果后,询问是否返回。程序voidsbparttime(intc){inti,j,n;longt,s;FILE*fp;printf("\n\n输入您想查询的时间段!");printf("\n从:");scanf("%ld",&t);printf("到:");scanf("%ld",&s);printf_face();if(c==1){n=load();for(i=0,j=0;i<n;i++)if(t<=m[i].buy_time&&m[i].buy_time<=s){printf_one(i);j++;}if(j==0)puts("这一时间段内没有仪器购入.");elseprintf("在这一时间段内有%d台仪器购入.\n\n",j);}if(c==2){n=load();for(i=0,j=0;i<n;i++)if(t<=m[i].borrow_time&&m[i].borrow_time<=s){printf_one(i);j++;}if(j==0)puts("这一时间段内没有仪器借入.");elseprintf("在这一时间段内有%d台仪器借入.\n\n",j);}if(c==3){if((fp=fopen("lended.txt","rb"))==NULL)/*以输出打开方式,在此前的记录被覆盖 */printf("\n打不开文件\n"); for(n=0;!feof(fp);n++) fread(&m[n],sizeof(structmachine),1,fp);fclose(fp);for(i=0,j=0;i<n-1;i++)if(t<=m[i].lend_time&&m[i].lend_time<=s){printf_one(i);j++;}if(j==0)puts("这一时间段内没有仪器借出.");elseprintf("在这一时间段内有%d台仪器借出.\n\n",j);}if(c==4){if((fp=fopen("returned.txt","rb"))==NULL)/*以输出打开方式,在此前的记录被覆盖 */ printf("\n打不开文件\n");for(n=0;!feof(fp);n++) fread(&m[n],sizeof(structmachine),1,fp);fclose(fp);for(i=0,j=0;i<n-1;i++)if(t<=m[i].return_time&&m[i].return_time<=s){printf_one(i);j++;}if(j==0)puts("这一时间段内没有仪器返还.");elseprintf("在这一时间段内有%d台仪器返还.\n\n",j);}if(c==5){if((fp=fopen("mended.txt","rb"))==NULL)/*以输出打开方式,在此前的记录被覆盖 */ printf("\n打不开文件\n");for(n=0;!feof(fp);n++) fread(&m[n],sizeof(structmachine),1,fp);fclose(fp);for(i=0,j=0;i<n-1;i++)if(t<=m[i].mend_time&&m[i].mend_time<=s){printf_one(i);j++;}if(j==0)puts("这一时间段内没有仪器在维修.");elseprintf("在这一时间段内有%d台仪器在维修.\n\n",j);}}c.按时间点查找[需要分析] 分按时间段查找基本一样。程序:voidsbdtime(){intn,w,w2;do{do{puts("\t\t=====================MENU====================\n\n");puts("\t\t\t\t查询与统计");puts("\t\t\t\t1.按购买时间");puts("\t\t\t\t2.按借入时间");puts("\t\t\t\t3.按借出时间");puts("\t\t\t\t4.按返还时间");puts("\t\t\t\t5.按修理时间");puts("\t\t\t\t6.返回");puts("\n\n\t\t==========================================\n");printf("选择要查询的内容(1-6):[]\b\b");scanf("%d",&n); if(n<1||n>6) {w=1;printf("无效输入!\n");getchar();}elsew=0;}while(w==1);if(n==6)search();elsebdetailtime(n);printf("您想做什么?\n\t1)再搜索一次2).返回[]\b\b");scanf("%d",&w2);}while(w2==1);search();}voidbdetailtime(intc){inti,n,j,k,w2;longt;FILE*fp;if(c==1||c==2)n=load();else{if(c==3){if((fp=fopen("lended.txt","rb"))==NULL) printf("\n打不开文件\n");}if(c==4){if((fp=fopen("returned.txt","rb"))==NULL) printf("\n打不开文件\n");} if(c==5){if((fp=fopen("mended.txt","rb"))==NULL) printf("\n打不开文件\n");} for(n=0;!feof(fp);n++) fread(&m[n],sizeof(structmachine),1,fp);fclose(fp);n-=1;}do{printf("\n\n输入您想要搜索的时间点!");scanf("%ld",&t);printf_face();if(c==1){puts("\n\t==============buy==============");for(i=0,j=0,k=-1;i<n;i++)if(t==m[i].buy_time){k=i;printf_one(k);j++;}if(j==0)puts("这一时间没有仪器购入.\n");elseprintf("这一时间有%d台仪器购入.\n",j);}if(c==2){puts("\n\t===============borrow=============");for(i=0,j=0,k=-1;i<n;i++)if(t==m[i].borrow_time){k=i;printf_one(k);j++;}if(j==0)puts("这一时间没有仪器借入.");elseprintf("这一时间有%d台仪器借入.",j);}if(c==3){puts("\n\t===============lend=============");for(i=0,j=0,k=-1;i<n;i++)if(t==m[i].lend_time){k=i;printf_one(k);j++;}if(j==0)puts("这一时间没有仪器借出.");elseprintf("这一时间有%d台仪器借出.",j);}if(c==4){puts("\n\t===============return=============");for(i=0,j=0,k=-1;i<n;i++)if(t==m[i].return_time){k=i;printf_one(k);j++;}if(j==0)puts("这一时间没有仪器返还.\n");elseprintf("这一时间有%d台仪器返还.\n",j);}if(c==5){puts("\n\t===============mend=============");for(i=0,j=0,k=-1;i<n;i++)if(t==m[i].mend_time){k=i;printf_one(k);j++;}if(j==0)puts("这一时间没有仪器在维修.\n");elseprintf("这一时间有%d台仪器在维修.\n",j);}if(k==-1)printf("找不到符合要求的记录!\n");printf("您还想做什么?\n\t1)再次搜索2).返回[]\b\b");scanf("%d",&w2);}while(w2==1);sbdtime();}公共函数加载函数intload()/*加载记录或可以记录个数的函数*/{ FILE*fp; inti; if((fp=fopen("machine.txt","rb"))==NULL)/*以输出打开方式,在此前的记录被覆盖 */ {printf("\n打不开文件\n"); return0; } for(i=0;!feof(fp);i++) fread(&m[i],sizeof(structmachine),1,fp);fclose(fp);return(i-1);/*返回记录个数*/}修改整条记录函数intmodify_data(inti){ intc,w1; FILE*fp; do { puts("\n该仪器1).已借出.2).已返还.3).正在维修?\n"); printf("您需要修改什么(1-3)?:[]\b\b"); scanf("%d",&c); if(c>3||c<1) { puts("无效输入!请再次尝试!"); getchar(); }}while(c>3||c<1); do { switch(c) { case1:puts("借出时间:");scanf("%ld",&m[i].lend_time);m[i].condition=1;break; case2:puts("返还时间:");scanf("%ld",&m[i].return_time);m[i].condition=0;break; case3:puts("维修时间:");scanf("%ld",&m[i].mend_time);m[i].condition=2;break; } puts("\nNow:\n"); printf_face(); printf_one(i); printf("您确定吗?\n\n\t1).确定2).重新修改3).返回而不储存[]\b\b"); scanf("%d",&w1); }while(w1==2); if(w1==1) {if(c==1)if((fp=fopen("lended.txt","ab"))==NULL){printf("打不开文件\n");exit(0);}if(c==2)if((fp=fopen("returned.txt","ab"))==NULL){printf("打不开文件\n");exit(0);}if(c==3)if((fp=fopen("mended.txt","ab"))==NULL){printf("打不开文件\n");exit(0);}i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026山东农科动保科技有限公司招聘29人笔试模拟试题及答案详解
- 2026四川达州宣汉县妇幼保健院招募见习人员24人考试参考题库及答案详解
- 江西赣江新区中小学招聘2027届部属公费师范毕业生9人笔试模拟试题及答案详解
- 第2章 人力资源规划
- 2026江西吉安市高级实验中学引进名师4人考试模拟试题及答案详解
- 成都医学院2026年考核招聘博士、副高及以上人员(63人)笔试模拟试题及答案详解
- 2026年6月四川民族学院考核招聘博士辅导员12人考试参考题库及答案详解
- 咳嗽的护理服务模式
- 2026江西吉安市遂川县城市社区管理委员会招聘1人考试参考题库及答案详解
- 输血反应的并发症及处理
- 2026年3月国开电大本科《当代中国政治制度》期末考试试题及答案
- 安全生产法的十大亮点是什么
- 老年患者安全管理与风险防范体系构建
- 2026年高级职称(副高)考试计划生育卫生高级职称(副高)笔试题库附答案
- 统编版小学语文五年级下册《语文园地八》教学评一致性学历案
- 厂房墙身翻新施工方案(3篇)
- 羊水栓塞应急预案演练脚本
- 外科护理学教材编写与评价
- 2026年甘肃省定西市初二学业水平地生会考考试真题及答案
- 2026年驻村帮扶工作管理规范与选派轮换及职责任务及管理考核要点
- 2026年上海市长宁区社区工作者招聘笔试参考试题及答案解析
评论
0/150
提交评论