《仪器仪表管理c语言仪器仪表管理课程设计-毕设论文.doc》由会员分享,可在线阅读,更多相关《仪器仪表管理c语言仪器仪表管理课程设计-毕设论文.doc(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C程序设计实习报告题目:仪器仪表管理学 院: 机电学院 专 业:机械设计制造及其自动化目录 题目要求第页 需求分析第页 总体设计第页 详细设计第页 上机操作第页 总结第页 参考文献第页 附录:部分/主要程序模块函数清单第页1.1 题目要求仪器仪表管理 要求 系统功能的基本要求:(1).新的仪器仪表信息录入。(2).在借出、归还、维修时对仪器仪表信息的修改。(3).对报废仪器仪表信息的删除。(4).按照一定的条件查询、统计符合条件的仪器仪表信息;查询功能至少应包括仪器仪表基本信息的查询、按时间段(如在2004年1月1日到2004年10月10日购买、借出、维修的仪器仪表等)查询、按时间点(借入时间
2、、借出时间、归还时间)查询等,统计功能至少包括按时间段统计、安仪器仪表的基本信息统计等。(5).对查询、统计的结果打印输出。 提示 数据结构采用结构体。仪器仪表信息包括仪器仪表名、仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时间、状态信息(0代表可借出,1代表可借入,2代表正在维修)等。1.2 需求分析根据题目要求,需要把仪器仪表信息的数据存储在文件里,所以需要提供文件的输入输出等操作;在程序中要提供修改、删除、查找等操作;另外还应该提供键盘式选择输入菜单来实现功能选择。1.3 总体设计根据上面的需求分析,可以将系统的设计分为五个模块,即输入模块、添加模块、修改模块、查找模块、删
3、除模块。仪器仪表管理系统添加修改查找删除】输入退出图1-1 系统功能模块图1.4 详细设计 主函数主函数一般设计得比较简洁,只提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。本题main()函数体内的界面选择部分语句单独抽取出来作为一独立函数,目的在于系统执行完每部分功能后能够方便返回到系统界面。其流程图如下:结束根据n的值调用各功能模块函数输入n,判断m是否是09?显示一系列功能选项开始NY图1-2 主函数流程图【程序】main()menu(); menu() int n,w;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/ do printf(
4、tt*MENU*nn); printf(ntttt1.Enter new data); printf(ntttt2.add new data); printf(ntttt3.modify data); printf(ntttt4.delete data); printf(ntttt5.search data); printf(ntttt6.exit); printf(nntt*n); printf(choose number(1-6): bb); scanf(%d,&n); if(n6)/*对选择的数字做判断*/ w=1; getchar(); else w=0; while(w=1); sw
5、itch(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);/*退出*/ 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。输入模块流程图如下:结束返回主菜单保存调用函数save(n)i!=0?I从0到n-1调用
7、输入函数input(i)输入用户要输入的仪器仪表数量n开始图1-3 输入模块流程图【程序】 /*输入模块*/void newin()/*输入模块*/ int i,n; printf(录入仪器仪表的数量:,N-1); scanf(%d,&n);/*要输入的记录个数*/ printf(n 录入日期nn);printf(n 名称编号购买时间借出时间借入时间归还时间维修时间状态n);for(i=0;in;i+) input(i);/*调用输入函数*/if(i!=0) save(n);/*调用保存函数*/printf_back();/*一个任务结束时让用户选择是浏览还是返回*/(2).添加模块【需求分析
8、】该模块的功能是用户需要增加新的仪器仪表的信息,从键盘输入并逐条写到原来的输入文件中,注意采用追加而不是覆盖的方式。追加模块流程图如下:开始结束保存增加的记录i从n到k调用输入函数input(i)K=m+n输入用户要增加的仪器仪表数量m调用加载函数n=load()并计算可以记录个数图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
9、 请输入仪器仪表信息n,i-n+1); input(i); /*调用输入函数*/ 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、仪器的记录,并提示用户修改该记录的那部分信息,是借出时间、归还时间、维修时间还是状态,根据用户的选择修改相应信息。修改模块流程图如下:开始提示没有找到结束返回主菜单询问用户是否继续修改?显示找到的记录调用修改记录i!=0?输入要修改的编号显示所有记录,让用户看那条信息需要修改图1-5修改模块流程图【程序】/*修改模块*/void modify() struct equip q;/* 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) prin
11、tf(nn记住所要修改的编号!按任意键继续); getchar();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修改成功!nn是否修改下一个?nnt1).是2).否t bb);
12、 scanf(%d,&w0); w2=1; else w0=0; 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 mon search); puts(tttt 2.point search); puts(tttt 3.exit); puts(nntt*n); printf(n choose your
13、 number(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输入仪器仪表编号输入仪器仪表名称用户选择返回主菜单让用户选择查找另一个修改删除返回主菜单询问用
14、户是否继续查找提示没有找到显示找到的记录是否找到该仪器仪表记录Y图1-7 基本查找流程图【程序】/*基本查找模块*/void commom_search()int i,n,k,w1=1,w2,w3,w4;struct equip q;n=load();printf(n通过名称还是编号查找? 1.名称 2.编号: bb);scanf(%d,&i);if(i=1) dodok=-1; printf(nn请输入名称!名称 bb); scanf(%s,q.name); printf_face(); for(i=0;in;i+)if(strcmp(q.name,eqi.name)=0) k=i; pri
15、ntf_one(k); if(k=-1) printf(nn不存在); printf(nn重试nt1).是 2).返回 bb);scanf(%d,&w1); if(w1=2) menu(); while(k=-1&w1=1); w4=0;w3=0;if(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
16、(n); printf(n成功nn); printf(n操作nt1.重新搜索 2.返回 bb); scanf(%d,&w2); while(w2=1); if(i=2) do do k=-1; printf(nn请输入编号编号: bb); scanf(%s,q.num); printf_face(); for(i=0;in;i+)if(strcmp(q.num,eqi.num)=0) k=i;printf_one(k); if(k=-1) printf(nn不存在); printf(nn重试nt1).是 2).返回 bb);scanf(%d,&w1); if(w1=2) menu(); whi
17、le(k=-1&w1=1); w4=0;w3=0;if(k!=-1) printf(nn 操作nt1.重新搜索2.修改 3.删除 4.返回 bb); scanf(%d,&w2); switch(w2) case 2:w3=modify_data(k);break; case 3:printf(nSure?nt1).Yes 2).Back bb);scanf(%d,&w4); if(w3=1|w4=1) save(n); printf(n成功nn); printf(n操作nt1.重新搜索 2.返回 bb);scanf(%d,&w2);while(w2=1); /* menu();*/(4.2)按
18、时间点查找调用加载函数n=load(),并计算可以查找的记录个数n按维修时间查找按借出时间查找用户选择3按仪器归还时间查找让用户选择查找另一个修改删除返回主菜单询问用户是否继续查找提示没有找到显示找到的记录是否找到该仪器仪表记录返回主菜单图1-8 按时间点查找流程图【程序】 /*按时间点查找模块*/void p_search() int i,n,k,w1=1,w2,w3,w4; struct equip q; n=load(); printf(n1.借入时间2.借出时间3.归还时间 bb); scanf(%d,&i); if(i=1) do do k=-1; printf(nn请输入时间!借入
19、时间: bb); scanf(%s,q.time); printf_face(); for(i=0;in;i+)if(strcmp(q.time,eqi.lt)=0) k=i; printf_one(k); if(k=-1) printf(nn不存在); printf(nn重试nt1).是 2).返回 bb); scanf(%d,&w1); if(w1=2) menu(); while(k=-1&w1=1); w4=0;w3=0; if(k!=-1) printf(nn 操作nt1.重新搜索2.修改 3.删除 4.返回 bb); scanf(%d,&w2); switch(w2) case 2
20、:w3=modify_data(k);break; case 3:printf(n确定nt1).是 2).返回 bb);scanf(%d,&w4); if(w3=1|w4=1) save(n); printf(n成功nn); printf(n操作nt1.重新搜索 2.返回 bb); scanf(%d,&w2); while(w2=1); if(i=2) do do k=-1; printf(nn请输入借出时间: bb); scanf(%s,q.time); printf_face(); for(i=0;in;i+)if(strcmp(q.time,eqi.bt)=0) k=i;printf_o
21、ne(k); if(k=-1) printf(nn不存在);printf(nn重试nt1).是 2).返回 bb);scanf(%d,&w1); if(w1=2) menu(); while(k=-1&w1=1); w4=0;w3=0; if(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); pr
22、intf(n成功nn); printf(n操作nt1.重新搜索 2.返回 bb); scanf(%d,&w2); while(w2=1); if(i=3) do do k=-1; printf(nn请输入归还时间: bb); scanf(%s,q.time); printf_face(); for(i=0;in;i+)if(strcmp(q.time,eqi.rt)=0) k=i;printf_one(k); if(k=-1) printf(nn不存在);printf(nn重试nt1).是 2).返回 bb);scanf(%d,&w1); if(w1=2) menu(); while(k=-1
23、&w1=1); w4=0;w3=0; if(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(n成功nn); printf(n操作nt1.重新搜索 2.返回 bb);scanf(%d,&w2); while(w2=1); /*menu();*/(5).删除模块【需求分析】该模块与修改模
24、块一样采用分屏显示,显示完所有记录后,由用户进行选择要删除的编号,经查找后可进行删除。删除模块的流程图如下:开始提示没有找到结束返回主菜单询问用户是否继续删除?显示找到的记录调用删除记录i!=0?输入要删除的编号显示所有记录,让用户看那条信息需要删除图1-9 删除模块流程图【程序】/*删除模块*/void delet() struct equip q;/* 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记住所要修改的编号
25、!按任意键继续); getchar();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); printf(n确认删除?nnt1).是2).不保存返回 bb); scanf(%d,&w1); if(w1=1) eqk.num10=0; printf(n成功nn
26、还要删除其他吗?nnt1).是2).保存退出t bb);scanf(%d,&w0); w2=1; else w0=0; if(w2=1) eqk=q; if(w0!=1&w2=1) save(n); while(w0=1); printf_back(); 5.公用函数(5.1)保存函数save(int n)【程序】void save(int n) FILE *fp;int i;if(fp=fopen(eq.txt,wb)=NULL) printf(n无法打开该文件n); /* return NULL;*/for(i=0;in;i+) if(eqi.num10!=0)if(fwrite(&eqi
27、,sizeof(struct equip),1,fp)!=1)printf(文件写入错误n);fclose(fp); (5.2)加载函数load()【程序】int load() FILE *fp; int i; if(fp=fopen(eq.txt,rb)=NULL) printf(n无法打开该文件n); for(i=0;!feof(fp);i+) fread(&eqi,sizeof(struct equip),1,fp); fclose(fp); return(i-1); (5.3) 编号输入函数num_input(int I,int n)【程序】void num_input(int i,i
28、nt n) int j,k,w1; do w1=0; printf(请输入编号:);scanf(%s,eqi.num);for(j=0;eqi.numj!=0;j+) if(eqi.numj9) printf(输入错误!请输入1到9的数字n);w1=1;break; if(w1!=1) for(k=0;k4|c4|c1); do switch(c) case 1:printf(借出时间:);scanf(%s,eqi.bt);break; case 2:printf(归还时间:);scanf(%s,eqi.rt);break; case 3:printf(维修时间:);scanf(%s,eqi.
29、mt);break; case 4:printf(状态:);scanf(%s,eqi.st);break;printf(nNow:n);printf_face();printf_one(i);printf(n确认修改nnt1).Yes 2).No and remodify 3).Back without save bb);scanf(%d,&w); while(w=2); return(w);1.5 上机操作 数据源为了保存数据,需要建立一个eq.txt文件。2. 编译、连接和运行 结果:(1).主菜单函数图1-10 主菜单(2)输入模块在主界面出现后输入1并按nter键,结果如下:图1-11
30、 输入模块图1-12 输入模块(3)添加模块图1-13 添加模块图1-14 添加模块(4) 修改模块图1-15 修改模块图1-16 修改模块(5)删除模块图1-17删除模块图1-18 删除模块(6)查找模块图 1-19 查找模块图1-20 查找模块1.6 总结课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一周之内的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实