 
         
         
         
         
        版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、0C 语言课程设计语言课程设计仪表仪器管理仪表仪器管理 班班 级级: 姓姓 名名: 学学 号号: 指指 导导 老老师师: 1目录目录一、题目要求一、题目要求 .2 2二、需求分析二、需求分析 .2 2三、总体设计三、总体设计 .2 2四、详细设计四、详细设计 .3 31、主函数 .32、各功能模块设计 .6(1).录入模块.6(2).仪器仪表状态改变模块.8(3) 、仪器仪表查找模块.173、公共函数 .24(1) 、状态改变函数.24(2) 、查找仪器仪表函数.24五、上机操作五、上机操作 .25251、数据源 .252、编译、连接和运行 .25六、总结六、总结 .35352一、题目要求一、
2、题目要求仪器仪表管理 要求要求 系统功能的基本要求:(1) 新的仪器仪表信息录入。(2) 在借出、归还、维修时对仪器仪表信息的修改。(3) 对报废仪器仪表信息的删除。(4) 按照一定的条件查询、统计符合条件的仪器仪表信息;查询功能至少应包括仪器仪表基本信息的查询、按时间段(如在 2004 年 1 月 1 日到2004 年 10 月 10 日购买、借出、维修的仪器仪表等)查询、按时间点(借入时间、借出时间、归还时间)查询等,统计功能至少包括按时间段统计、安仪器仪表的基本信息统计等。(5) 对查询、统计的结果打印输出。 提示提示 数据结构采用结构体。仪器仪表信息包括仪器仪表名、仪器仪表编号、购买时
3、间、借入时间、借出时间、归还时间、维修时间、状态信息(0 代表可借出,1 代表可借入,2 代表正在维修)等。二、需求分析二、需求分析根据题目要求,由于仪器仪表信息是存放在文件,所以应提供文件的输入、输出等操作;在程序中要浏览仪器仪表的信息。应提供录入、显示、查找,修改等操作;另外还应提供键盘式选择菜单实现功能选择。三、总体设计三、总体设计根据上面的需求分析,可以将这个系统的设计分为三个大的模块:仪表3仪器录入、仪表仪器修改(删除) 、仪表仪器查询四、详细设计四、详细设计1、主函数、主函数 主函数一般设计得比较简洁,只提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。其中流程图如
4、下: 程序程序 其中为主函数设定了一个菜单函数,方便用于选择其他模块函数。用 getch();获得所按下的键值,用函数内的局部静态变量储存键值对应的其他功能函数。4void menu(char c)static int n=0;if (c=s|c=S) n+;if (c=w|c=W) n-;if (n=5) n=1;if (n=0) n=4;if (c=13)switch (n)case 1: if (insert()=0) insert(); break;case 2: change(); break;case 3: search(); break;case 4: exit(0);syste
5、m(cls);printf(nnnn); printf( |-仪器仪表管理系统-|n); printf( | |n); printf( | 姓名:吴洋 |n); printf( | 班级:052081-16 |n); printf( | 学号:20081001698 |n); printf( | |n);printf( | |n);printf( | |n);if (n=1)printf( | - 仪表仪器录入 仪表仪器借还/删除 仪表仪器查询 退出 仪表仪器借出 仪表仪器归还 仪表仪器开始维修 仪表仪器报废 返回主菜单 -n); else printf( 返回主菜单n); printf(n)
6、; printf(n); printf( |-|n); c=getch(); /*while*/ else system(cls); printf(nnnn); printf( |-仪器仪表管理系统-|n); printf(n);printf( 请输入仪器的名字:%sn,equ_input); printf(n);printf(n);printf( 对不起,找不到该仪器n);printf(n);printf( 可能是由于您输入仪器的名称错误n);printf(n);printf( 也可能是由于无此仪器,还未购买n);printf(n);printf(n);printf(n);printf( 修
7、改失败,请按任意键返回主菜单n);printf(n);printf(n);printf( |-|n);getch(); /*if(strcmp(equ_input,)=0)else*/ return; 11、借出模块、借出模块首先输入借出的时间,然后在仪器仪表的结构体数组中查找该仪器仪表在这个输入的时间点上有无其他状态。若无其他状态则可以借出,否者不可借出。开始输入借出时间是否空闲返回主菜单标记状态为借出结束是 否 程序程序int mylean(int n)int year,month,day;system(cls); printf(nnnn);printf( |-仪器仪表管
8、理系统-|n);printf(n); printf(n); printf(n);printf( 请输入借出时间(以此格式年/月/日):);scanf(%d/%d/%d,&year,&month,&day);if (equn.timeyearmonthday=inlib) printf(n); printf(n); printf(n); printf(n);printf( 借出成功,请按任意键返回上一级菜单n);printf(n); printf(n); printf(n); printf(n);printf( |-|n);state(year,month,day,n,l
9、ean);getch(); return(1); else printf(n); printf(n); printf( 对不起!n);printf( 此仪器还没有购买或还没有归还或正在维修中,n);printf( 故无法借出。n);printf(n); printf(n);printf( 借出失败,请按任意键返回上一级菜单n);12printf(n);printf( |-|n);getch();return(0); /* mylean */、归还模块、归还模块 与借出模块相同,首先输入归还的时间,然后在仪器仪表的结构体数组中查找该仪器仪表在这个归还的时间点上有无借出状态。若有借出状态则可以归还
10、,否者不可归还。开始输入归还时间是否借出返回主菜单标记状态为归还结束是 否 程序程序int myback(int n) int year,month,day; system(cls); printf(nnnn); printf( |-仪器仪表管理系统-|n); printf(n); printf(n); printf(n); printf( 请输入归还时间(以此格式年/月/日):); scanf(%d/%d/%d,&year,&month,&day); if (equn.timeyearmonthday=lean) printf(n);13 printf(n); pri
11、ntf(n); printf(n); printf( 归还成功,请按任意键返回上一级菜单n); printf(n); printf(n); printf(n); printf(n); printf( |-|n); state(year,month,day,n,inlib); getch(); return(1); else printf(n); printf(n); printf( 对不起!n); printf( 此仪器还没有购买或还没有借出或正在维修中,n); printf( 故无法归还。n); printf(n); printf(n); printf( 归还失败,请按任意键返回上一级菜单n
12、); printf(n); printf( |-|n); getch(); return(0); /* myback */、维修模块、维修模块同样是首先输入维修开始的时间和维修结束的时间,然后在仪器仪表的结构体数组中查找该仪器仪表在这个归还的时间点上有其他状态。若有为空闲状态则可以维修,否者不可维修。14开始输入维修开始、结束时间是否空闲返回主菜单标记状态为维修结束是 否 程序程序int myrepair(int n) int year,month,day; system(cls); printf(nnnn); printf( |-仪器仪表管理系统-|n); printf(n); printf
13、(n); printf(n); printf( 请输入开始维修时间(以此格式年/月/日):); scanf(%d/%d/%d,&year,&month,&day); if (equn.timeyearmonthday=inlib) state(year,month,day,n,repair); printf(n); printf(n); printf( 请输入结束维修时间(以此格式年/月/日):); scanf(%d/%d/%d,&year,&month,&day); state(year,month,day,n,inlib); printf(n
14、); printf(n); printf( 维修成功,请按任意键返回上一级菜单n); printf(n); printf(n); printf( |-|n);15 getch(); return(1); else printf(n); printf(n); printf( 对不起!n); printf( 此仪器还没有购买或还没有借出或正在维修中,n); printf( 故无法维修。n); printf(n); printf(n); printf( 维修失败,请按任意键返回上一级菜单n); printf(n); printf( |-|n); getch(); return(0); /* myre
15、pair */、删除模块、删除模块删除模块将删除本仪器仪表,具体删除过程为将需要删除的后一项覆盖至删除的这一项,即需删除以后的每一个结构体元素都向前移一个单位。开始是否删除返回主菜单循环将需删除的后面所有元素整体向前移动一个单位结束是 否 程序程序int mydel(int n)16 char c=s; int x=0; while (1) system(cls); if (c=s|c=S) x+; if (c=w|c=W) x-; if (x=3) x=1; if (x=0) x=2; if (c=13) if(x=1) int i; for (i=n;i 确定要报废仪器仪表 我要再考虑考虑
16、 按名称查询 按时间段查询 按时间点查询 返回主菜单 -n);elseprintf( 返回主菜单n);printf(n);printf(n);printf(n);printf( |-|n);c=getch(); /* while(1) */因不管查找条件是什么,最终都会对应到需查找的仪器仪表上,故补充一个公共函数 condi_p();,输出查找一个仪器仪表的结果程序void condi_p(int year,int month,int day,int n,int *bool_lean,int *bool_repair) if (equn.timeyearmonthday=buy) printf
17、( %4d 年%2d 月%2d 日购买%s 仪器仪表n,year,month,day,); /* 借出&归还 */ if (equn.timeyearmonthday=lean&(*bool_lean)=0)19 printf( %4d 年%2d 月%2d 日借出%s 仪器仪表n,year,month,day,); (*bool_lean)=1; if (equn.timeyearmonthday=inlib&(*bool_lean)=1) printf( %4d 年%2d 月%2d 日归还%s 仪器仪表n,year,month,da
18、y,); (*bool_lean)=0; /* 借出&归还 */ /* 维修&修完 */ if (equn.timeyearmonthday=repair&(*bool_repair)=0) printf( %4d 年%2d 月%2d 日开始维修%s 仪器仪表n,year,month,day,); (*bool_repair)=1; if (equn.timeyearmonthday=inlib&(*bool_repair)=1) printf( %4d 年%2d 月%2d 日结束维修%s 仪器仪表n,year,month,d
19、ay,); (*bool_repair)=0; /* 维修&修完 */ 、按名称查询、按名称查询首先输入仪器仪表的名称,然后在结构体数组中查找是否存在这个仪器仪表,若是则循环该仪器仪表的所有时间点来判断改时间点处于什么状态,并用公共函数 condi_p();来输出。20开始输入仪器仪表名称是否存在返回主菜单循环查找并输出结束是 否 程序程序int name() char equ_input100; int i; system(cls); printf(n); printf( |-仪器仪表管理系统-|n); printf(n);printf( 请输入仪器的名字:);sc
20、anf(%s,equ_input);printf(n);i=presence(equ_input); if (i!=0) int j_y,j_m,j_d,bool_lean=0,bool_repair=0; for (j_y=0;j_y=year_max;j_y+) for (j_m=0;j_m=month_max;j_m+) for (j_d=0;j_d=day_max;j_d+) /P(j_y,j_m,j_d,i); system(pause); condi_p(j_y,j_m,j_d,i,&bool_lean,&bool_repair); /* for for for *
21、/ printf(n);printf( 查询完成,请按任意键返回上一级菜单n);printf(n);printf(n);21printf( |-|n);getch(); return; /* if */ else printf(n);printf(n);printf( 对不起,找不到该仪器n);printf(n);printf( 可能是由于您输入仪器的名称错误n);printf(n);printf( 也可能是由于无此仪器,还未购买n);printf(n);printf(n);printf(n);printf( 查询失败,请按任意键返回主菜单n);printf(n);printf(n);prin
22、tf( |-|n);getch();return; /* else */ return; 、按时间点查询、按时间点查询输入需查询的时间点,然后循环每个仪器仪表在该时间点的状态且判断,并用公共函数 condi_p();来输出。22开始输入时间点返回主菜单循环每个仪器仪表,判断状态,并输出结束程序int time_p() int i,year,month,day,equ_tmp,bool_lean101,bool_repair101; for (i=0;i101;i+) bool_leani=0; bool_repairi=0; system(cls); printf(n); printf( |-
23、仪器仪表管理系统-|n); printf(n);printf( 请输入时间点:(以此格式年/月/日);scanf(%d%/%d/%d,&year,&month,&day);printf(n);for(equ_tmp=1;equ_tmp=equ_num;equ_tmp+) condi_p(year,month,day,equ_tmp,&bool_leanequ_tmp,&bool_repairequ_tmp); /* 每个仪器 */ printf(n);printf( 查询完成,请按任意键返回上一级菜单n);printf(n); printf(n);pri
24、ntf( |-|n);getch(); return; 、按时间段查询、按时间段查询首先输入起始时间点和结束时间点,应为每个月的天数不完全一样,用三重循环来做比较麻烦,故采用模拟法,设三个变量 i、j、k,分别对应年,月,日,然后赋予初值为起始时间点,设置一无限循环,循环内设有判断是否i、j、k 的值为结束时间点的语句。若是则跳出循环,否则继续循环。同时,在循环内 k 总是自加,当 k 自加至当月最大天数时,j 就自加,当 j 自加至当年最大月数时,i 自加。23开始输入起始、结束时间点返回主菜单循环在时间段每个仪器仪表,判断状态,并输出结束程序程序int time_d() int year1
25、,month1,day1,year2,month2,day2, i,j,k,equ_tmp,bool_lean101,bool_repair101; for (i=0;i12) i+; j=1; if (k31) j+; k=1; for (equ_tmp=1;equ_tmp=equ_num;equ_tmp+)condi_p(i,j,k,equ_tmp,&bool_leanequ_tmp,&bool_repairequ_tmp); /* 每个仪器 */ if (i=year2)&(j=month2)&(k=day2) break; k+; 24 printf(n
26、);printf( 查询完成,请按任意键返回上一级菜单n);printf(n);printf(n);printf( |-|n);getch(); return; /* time_d() */3、公共函数、公共函数(1) 、状态改变函数、状态改变函数应为在修改仪器仪表状态时有大量的修改代码,故专门补充一个状态改变函数来改变状态。函数的参数为年、月、日和需改成的状态程序程序void state(int year,int month,int day,int n,int s) int i,j,k; for (k=day;k=day_max;k+) equn.timeyearmonthk=s; /* 当
27、月改状态 */ for (j=month+1;j=month_max;j+) for (k=1;k=day_max;k+) equn.timeyearjk=s; /* 当年改状态 */ for (i=year+1;i=year_max;i+) for (j=1;j=month_max;j+) for (k=1;k=day_max;k+) equn.timeijk=s; /* 以后所有改状态 */以下为调试代码 /* for (i=year;i=year_max;i+) for (j=1;j=month_max;j+) for (k=1;k=day_max;k+) P(i,j,k,n); sys
28、tem(pause); */ (2) 、查找仪器仪表函数、查找仪器仪表函数函数参数为仪器仪表的名称,并返回是否查找到该仪器仪表,若找到则返回该仪器仪表所在的结构体数组下标,否则返回 0;25程序程序int presence(char *equ_input) int i; for (i=0;i101;i+) if (strcmp(equ_input,)=0) return(i); return(0); /* 非 0 为存在,0 为不存在 */五、上机操作五、上机操作1、数据源、数据源仪器仪表名称买入时间abc11989/11/27abc21999/12/1abc32001/1/
29、1abc42005/4/262、编译、连接和运行、编译、连接和运行1.结果结果26主函数27录入模块录入成功28当已购买时录入失败需修改仪器仪表名称29当输入名称错误时名称正确时对仪器仪表操作30借出时间错误时借出成功31归还成功维修成功32查找菜单按名称查询33时间点查询时间段查询34确认仪器仪表 abc1 删除仪器仪表 abc1 已删除35再次查找仪器仪表 abc1 时已不存在六、六、总结总结课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无
30、处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而 C 语言又是最常见,功能最强大的一种高级语言,因此做好 C 语言课程设计是十分必要的。回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一周的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。 通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。36在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人力资源规划师职业资格考试《组织行为学》备考题库及答案解析
- 司法考试法律文书写作题库及答案
- 2025年景观设计师(LDS)备考题库及答案解析
- 14秋东财《基础会计》在线作业二答案
- 2025年社会工作者《公益服务与社会支援技能》备考题库及答案解析
- 2025年审计初级考试押题试卷及答案解析
- 晶体切割工岗前认证考核试卷含答案
- 护理专利案例分析题库及答案解析
- 泥瓦作文物修复师变革管理评优考核试卷含答案
- 铁合金电极糊工岗前岗位晋升考核试卷含答案
- 精益化管理专题汇报
- 技术规格书模板
- 企业党校管理办法
- 新与心2025大食饮行业消费者心智及决策链路研究白皮书-小红书x尼尔森iq-202507
- 立达G32细纱机电气培训
- 2025年公务员考试《行测》真题及参考答案
- 中医护理适宜技术
- 静脉输液护理课件
- 档案管理重要性培训
- 铁路路基压实检测
- 粮食机收减损培训课件
 
            
评论
0/150
提交评论