《课程设计-仪器仪表管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计-仪器仪表管理系统.docx(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程设计-仪器仪表管理系统 C语言程序设计 课程设计报告 专业:材料化学 班级: 034141 姓名:郭亮 指导教师:薛思清 2022 年 1 月 15 日 目录 1.课程设计目的_ 1 2.问题需求分析_ 1 3.系统设计_ 2 4.编程实现_ 2 5.系统测试_ 23 6.实习总结_ 26 7.部分关键源程序_ 27 参考书目_ 40 1.课程设计目的 仪器仪表管理系统 要求 系统功能的基本要求: (1).新的仪器仪表信息录入。 (2).在借出、归还、维修时对仪器仪表信息的修改。 (3).对报废仪器仪表信息的删除。 (4).按照一定的条件查询、统计符合条件的仪器仪表信息;查询功能至少应包括
2、仪器仪表基本信息的查询、按时间段(如在2022年1月1日到2022年10月10日购买、借出、维修的仪器仪表等)查询、按时间点(借入时间、借出时间、归还时间)查询等,统计功能至少包括按时间段统计、安仪器仪表的基本信息统计等。 (5).对查询、统计的结果打印输出。 提示 数据结构采用结构体。仪器仪表信息包括仪器仪表名、仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时间、状态信息(0代表可借出,1代表可借入,2代表正在维修)等。 2.问题需求分析 根据题目要求,需要把仪器仪表信息的数据存储在文件里,所以需要提供文件的输入输出等操作;在程序中要提供修改、删除、查找等操作;另外还应该提供键盘
3、式选择输入菜单来实现功能选择。 3. 系统设计 总体软件框架 根据上面的需求分析,可以将系统的设计分为五个模块,即输入模块、添 加模块、修改模块、查找模块、删除模块。 图1-1 系统功能模块图 4.编程实现 4.1主函数 主函数一般设计得比较简洁,只提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。本题main()函数体内的界面选择部分语句单独抽取出来作为一独立函数,目的在于系统执行完每部分功能后能够方便返回到系统界面。其流程图如下: 仪器仪表管理系统 输入 删除 查找 修改 退出 添加 开始 N Y 图1-2 主函数流程图 main() menu(); menu() int
4、n,w;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/ do printf(tttt欢迎进入仪表仪器管理系统nn); printf(tt*菜单*nn); printf(ntttt1.输入新数据n); printf(ntttt2.添加新数据n); printf(ntttt3.修改数据n); printf(ntttt4.删除数据n); printf(ntttt5.查找数据n); printf(ntttt6.退出n); printf(nntt*n); printf(请选择编号(1-6): bb); scanf(%d,&n); if(n6) /*对选择的数字做判断*/ w
5、=1; getchar(); else w=0; while(w=1); switch(n) case 1:newin();break; /*输入模块*/ case 2:add();break; /*添加模块*/ case 3:modify();break; /*修改模块*/ case 4:delet();break; /*删除模块*/ case 5:search();break; /*查找模块*/ case 6:exit(0); /*退出*/ 4.2各功能模块设计 (1).输入模块 单独看各数据信息,仪器仪表名是字符型,可采用字符型数组;仪器仪表编号、购买时间、借出时间、借入时间、归还时间、
6、维修时间应采用实型;状态信息是整数,应采用整型;实际上操作时发现只有字符型的数据才可以在文件中成功保存,故本题所有数据均采用字符型。 struct equip char num10; char name50; char pt10; char bt10; char lt10; char rt10; char mt10; char st5; char time5; /*为下面程序中按时间查找和修改时记录输入的时间*/ eqN; /*eqN中每个数组元素对应一台仪器信息*/ eqN中的N是仪器仪表个数,程序采用宏定义的方式,可以随时在源程序宏定义中修改,本程序宏定义#define N 100。输入模
7、块流程图如下: 开始 图1-3 输入模块流程图 void newin() /*输入模块*/ int i,n; printf(请输入要录入仪器仪表的数量:,N-1) scanf(%d,&n); /*要输入的记录个数*/ printf(n编号名称购买时间借出时间借入时间归还时间维修时间状态n); for(i=0;in;i+) input(i); /*调用输入函数*/ if(i!=0) save(n); /*调用保存函数*/ printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/ (2).添加模块 该模块的功能是用户需要增加新的仪器仪表的信息,从键盘输入并逐条写到原来的输入文件
8、中,注意采用追加而不是覆盖的方式。追加模块流程图如下: 开始 调用加载函数n=load()并计算可以记录个数 输入用户要增加的仪器仪表数量m K=m+n i从n到k调用输入函数input(i) 保存增加的记录 结束 图1-4 添加模块流程图 void add() /*添加模块*/ int i,n,m,k; FILE *fp; n=load(); printf( 请输入要添加仪器仪表的数量:,N-1-n); scanf(%d,&m); /*输入要添加的数量*/ k=m+n; for(i=n;ik;i+) printf(n 请输入仪器仪表信息n,i-n+1); input(i); /*调用输入函数
9、*/ if(fp=fopen(eq.txt,ab)=NULL) /*以ab方式打开文件,追加保存*/ printf(无法打开该文件n); for(i=n;ik;i+) if(fwrite(&eqi,sizeof(struct equip),i,fp)!=1) /*输出到文件中*/ printf(文件写入错误n); fclose(fp); printf_back(); (3).修改模块 该模块考虑到是显示所有仪器仪表信息,考虑到记录较多,建建议采用分屏显示。显示完所有纪录后,用户输入要修改的仪器仪表编号,根据编号查找仪器的记录,并提示用户修改该记录的那部分信息,是借出时间、归还时间、维修时间还是
10、状态,根据用户的选择修改相应信息。修改模块流程图如下 图1-5 修改模块流程图 void modify() /*修改模块*/ struct equip q; /* FILE *fp;*/ int i,n,k,w0=1,w1,w2=0; n=load(); 开始 显示所有记录,让用户看那条信息需要修改 输入要修改的编号 i!=0? 显示找到的记录调用修改记录 询问用户是否继续修改? 返回主菜单 结束 提示没有找到 do k=-1; printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0) printf(nn记住所要修改的编号!按任意键继续); getchar
11、();puts(nnn); printf_one(i); Do printf(nn请输入所要修改的编号:); scanf(%s,q.num); for(i=0;in;i+) if(strcmp(q.num,eqi.num)=0) k=i; q=eqi; if(k=-1) printf(nn编号不存在!请重新输入); while(k=-1); printf_face(); printf_one(k); w1=modify_data(k); if(w1=1) printf(n修改成功,是否修改下一个?nnt1).是2).否t bb); scanf(%d,&w0);w2=1; else w0=0;
12、if(w2=1) eqk=q; if(w0!=1&w2=1) save(n); while(w0=1); menu(); (4).查找模块 显示一系列功能选项 输入n,判断是11否为1-3 根据的值调用各子功能模块函数 图1-6 查找模块流程图 void search() /*查找模块*/ int m; puts(tt*nn); puts(tttt 1.基本查找); puts(tttt 2.时间查找); puts(tttt 3.退出); puts(nntt*n); printf(n 请选择编号(1-3): bb); scanf(%d,&m); switch(m) case 1:commom_search();break; case 2:p_search(); case 3:exit(0); (4.1).基本查找 基本信息查找包含仪器仪表的名称以及编号的查找,所以该子功能模块的功能是先让用户选择是按仪器仪表的名称还是按仪器仪表的编号查找,根据用户的选择进行查找,找到以后增加修改和删除功能。基本查找模块的流程图如下: 调用加载函数n=load(),并计算可以查找的记录个数n 用户选择 输入仪器仪表名称输入仪器仪表编号