仪器仪表管理_c语言仪器仪表管理课程设计.doc_第1页
仪器仪表管理_c语言仪器仪表管理课程设计.doc_第2页
仪器仪表管理_c语言仪器仪表管理课程设计.doc_第3页
仪器仪表管理_c语言仪器仪表管理课程设计.doc_第4页
仪器仪表管理_c语言仪器仪表管理课程设计.doc_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

c程序设计实习报告题目:仪器仪表管理学 院: 机电学院 专 业:机械设计制造及其自动化目录 题目要求第页 需求分析第页 总体设计第页 详细设计第页 上机操作第页 总结第页 参考文献第页 附录:部分/主要程序模块函数清单第页1.1 题目要求仪器仪表管理 要求 系统功能的基本要求:(1).新的仪器仪表信息录入。(2).在借出、归还、维修时对仪器仪表信息的修改。(3).对报废仪器仪表信息的删除。(4).按照一定的条件查询、统计符合条件的仪器仪表信息;查询功能至少应包括仪器仪表基本信息的查询、按时间段(如在2004年1月1日到2004年10月10日购买、借出、维修的仪器仪表等)查询、按时间点(借入时间、借出时间、归还时间)查询等,统计功能至少包括按时间段统计、安仪器仪表的基本信息统计等。(5).对查询、统计的结果打印输出。 提示 数据结构采用结构体。仪器仪表信息包括仪器仪表名、仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时间、状态信息(0代表可借出,1代表可借入,2代表正在维修)等。1.2 需求分析根据题目要求,需要把仪器仪表信息的数据存储在文件里,所以需要提供文件的输入输出等操作;在程序中要提供修改、删除、查找等操作;另外还应该提供键盘式选择输入菜单来实现功能选择。1.3 总体设计根据上面的需求分析,可以将系统的设计分为五个模块,即输入模块、添加模块、修改模块、查找模块、删除模块。仪器仪表管理系统添加修改查找删除】输入退出图1-1 系统功能模块图1.4 详细设计 主函数主函数一般设计得比较简洁,只提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。本题main()函数体内的界面选择部分语句单独抽取出来作为一独立函数,目的在于系统执行完每部分功能后能够方便返回到系统界面。其流程图如下:结束根据n的值调用各功能模块函数输入n,判断m是否是09?显示一系列功能选项开始ny图1-2 主函数流程图【程序】main()menu(); menu() int n,w;/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/ do printf(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); 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);/*退出*/ 2.各功能模块设计(1).输入模块【数据结构】【分析】单独看各数据信息,仪器仪表名是字符型,可采用字符型数组;仪器仪表编号、购买时间、借出时间、借入时间、归还时间、维修时间应采用实型;状态信息是整数,应采用整型;实际上操作时发现只有字符型的数据才可以在文件中成功保存,故本题所有数据均采用字符型。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调用输入函数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).添加模块【需求分析】该模块的功能是用户需要增加新的仪器仪表的信息,从键盘输入并逐条写到原来的输入文件中,注意采用追加而不是覆盖的方式。追加模块流程图如下:开始结束保存增加的记录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 请输入仪器仪表信息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).修改模块【需求分析】该模块考虑到是显示所有仪器仪表信息,考虑到记录较多,建建议采用分屏显示。显示完所有纪录后,用户输入要修改的仪器仪表编号,根据编号查找仪器的记录,并提示用户修改该记录的那部分信息,是借出时间、归还时间、维修时间还是状态,根据用户的选择修改相应信息。修改模块流程图如下:开始提示没有找到结束返回主菜单询问用户是否继续修改?显示找到的记录调用修改记录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) printf(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); 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 1.common search); puts(tttt 2.point search); puts(tttt 3.exit); puts(nntt*n); printf(n choose your 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输入仪器仪表编号输入仪器仪表名称用户选择返回主菜单让用户选择查找另一个修改删除返回主菜单询问用户是否继续查找提示没有找到显示找到的记录是否找到该仪器仪表记录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,); printf_face(); for(i=0;in;i+)if(strcmp(,)=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: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.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(); 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(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)按时间点查找调用加载函数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请输入时间!借入时间: 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: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_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(n); printf(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&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).删除模块【需求分析】该模块与修改模块一样采用分屏显示,显示完所有记录后,由用户进行选择要删除的编号,经查找后可进行删除。删除模块的流程图如下:开始提示没有找到结束返回主菜单询问用户是否继续删除?显示找到的记录调用删除记录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记住所要修改的编号!按任意键继续); 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还要删除其他吗?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,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,int 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.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 输入模块图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语言课程设计是十分必要的。回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一周之内的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。通过这次课程设计,使我对c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习c语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。1.7 参考文献【】 谭浩强,程序设计,清华大学出版社,2005.7【】 张冬梅,刘远兴,陈晶,王媛妮,语言课程设计与学习指导,中国铁道出版社,2008.61.8 附录:部分/主要程序模块清单#include#include#define n 100 struct equip char num10; char name50; char pt10; char bt10; char lt10; char rt10; char mt10; char st5; char time5;eqn; void menu(); 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,sizeof(struct equip),1,fp)!=1)printf(文件写入错误n);fclose(fp); 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); void num_input(int i,int 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(借出时间:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论