




免费预览已结束,剩余27页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计 报告语言课程设计C学院: 自动化学院专业: 自动化 班级: 231XXX 姓名: XXX 学号: 231XXX-XX 2 目录1. 题目概述,总体设计-第 1页2. 详细设计,菜单函数-第 2页3. 功能模块:录入模块-第 3页4. 状态改变模块-第 4页5. 状态改变,借出归还-第 6页6. 状态改变,维修-第 7页7. 状态改变,删除-第 8页8. 状态查询模块-第 9页9. 按名称查询-第11页10.按时间点/段查询-第12页11.公共函数-第13页12.上机实践-第14页13.程序的亮点与不足-第17页14.总结-第18页 题目:仪器仪表管理系统要求系统功能的基本要求:(1)新的仪器仪表信息录入。(2)在借出、归还、维修时对仪器仪表信息的修改。(3)对报废仪器仪表信息的删除。(4)按照一定的条件查询、统计符合条件的仪器仪表信息;查询功能至少应包括仪器仪表基本信息的查询、按时间段(如在2004年1月1日到2004年10月10日购买、借出、维修的仪器仪表等)查询、按时间点(借入时间、借出时间、归还时间)查询等,统计功能至少包括按时间段统计、按仪器仪表的基本信息统计等。(5)对查询、统计的结果打印输出。提示数据结构采用结构体。仪器仪表信息包括仪器仪表名、仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时间、状态信息(0 代表可借出,1代表可借入,2 代表正在维修) 等。需求分析:根据题目要求,由于仪器仪表信息是存放在文件,所以应提供文件的输入、输出等操作; 在程序中要浏览仪器仪表的信息。应提供录入、显示、查找,修改等操作; 另外还应提供键盘式选择菜单实现功能选择。总体设计:根据上面的需求分析,可以将这个系统的设计分为三个大的模块: 仪表仪器录入、仪表仪器修改(删除)、仪表仪器查询仪器仪表管理系统 查询录入修改详细设计 (一) 主函数 主函数一般设计得比较简洁,只提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。其中流程图如下:程序其中为主函数设定了一个菜单函数,方便用于选择其他模块函数。用getch0;获得所按下的键值,用函数内的局部静态变量储存键值对应的其他功能函数。void 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)第 2 页 共 32 页case 1:if(insert ()=0) insert (); break; /录入 case 2:change();break; /修改 case 3:serch(); break; /查询开始 case 4:exit(0); /退出程序 ;system(cls);显示一系列功能选项printf(nn);printf( 仪器仪表管理系统 n);printf(n);选择一个功能printf( 姓名:xxx );printf( 班级231xxx); printf(nn);根据选择的功能调用功能模块函数if(n=1)printf( -仪器仪表录入仪器仪表借还/删除仪器仪表查询 退出程序仪器仪表管理系统按W向上选择按S向下选择按回车确定选择按任意键进入系统- n);printf( n);getch();menu(s);while(1) menu(getch(); (二)各功能模块设计数据结构数据结构选用结构体数组。这里只简单的给仪器仪表两个部分,一个为仪器仪表的名称、字符串函数,一个为仪器仪表的各个时间点的状态(定义一个time的三维数组,数组下标表示年月日,数组的值表示仪器的状态)。#define buy 1 /购买 #define lean 2 /借出 #define repair 3 /维修 #define inlib 4 /空闲 #define year_max 3000#define month_max 12#define day_max 31#define N 100 /预设仪器最大数 int n;/仪器数 struct equment char name100;int time year_max+1month_max+1day_max+1;equN;(1) 录入模块开始通过strcpy函数实现仪器名称的录入,state函数实现仪器状态的更改。输入仪器仪表名称【程序】void insert()int i,j_year,j_month,j_day,year,month,day;char equ_input100;是否已录入入system(cls);是printf(nnnn); 否printf( -仪器仪表管理系统- n);printf(nnnn);返回主菜单输入买入时间printf( 请输入仪器的名称:);scanf(%s,&equ_input);结束if(presence(equ_input)!=0)printf(n);printf(n);printf( 对不起!此仪器已购买n );printf(n);printf( 录入失败,请按任意键返回主菜单n );printf(n);printf( n);getch(); elseint state (int year,int month,int day,int n,int s); n+;strcpy(,equ_input); /将equ_input复制给equequ_ printf(n);printf( 请输入购买时间(年/月/日)(例如1998/2/15):);scanf(%d/%d/%d,&year,&month,&day);state(year,month,day,n,inlib); / equn 将当天状态改为空闲 equn.timeyearmonthday=buy; /equn 将该天以后状态改为购入 /printf(%d,equn.timeyearmonthday);printf(n);printf(n);printf( 录入成功,请按任意键返回主菜单n);printf(n);printf(n);printf( n);getch(); (2) 状态改变模块该模块包括对仪器仪表的借出、归还、维修、报废等小模块的操作,仍然用getch();函数获取键值来做上下选择。本函数只考虑对一种仪器仪表的修改,故先要输入该仪器仪表的名称并查找是否已经购买。开始【程序】int change()输入仪器仪表名称char equ_input100,c=s;int j,x=0;system(cls);是否已购买printf(nnnn);否printf( n);是printf(nn);选择需要进行的操作printf( 请输入仪器名称: );返回主菜单scanf(%s,&equ_input);结束j=presence(equ_input);/printf(n%d,j); system(pause);if(j!=0)while(1)if(c=s|c=S) x+;if(c=w|c=W) x-;if(x=6) x=1;if(x=0) x=5;if(c=13) switch(x)case 1:mylean(j);break;case 2:myback(j);break;case 3:myrepair(j);break;case 4:mydel(j);break;case 5:return(1);system(cls);printf(nnnn);printf( n);printf(nn);/*printf( 请输入仪器名称: );scanf(%s,equ_input); printf(nn);*/if(x=1)printf( -仪器仪表借出仪器仪表归还仪器仪表维修仪器仪表报废返回主菜单-n);elseprintf( 返回主菜单 n);printf( n); c=getch();else/*system(cls);printf(nnnn);printf( n);printf(nn);*/printf(nn);printf( 对不起!找不到该仪器n);printf( 可能是由于您输入仪器的名称错误,n);printf( 也可能是由于无此仪器,还没购买。n);开始printf(nn);printf( 修改失败,请按任意键返回主菜单 n);输入仪器仪表名称printf( n);getch();/return; 是否空闲(1) 借出模块首先输入借出的时间,然后在仪器仪表的结构体数组中查是否找该仪器仪表在这个输入的时间点上有无其他状态。若无其他状态则可以借出,否则不可借出。返回主菜单 标记状态为借出【程序】int mylean(int j)int year,month,day;结束system(cls);printf(nnnn);printf( n);printf(nn);printf( 请输入借出时间(年/月/日): );scanf(%d/%d/%d,&year,&month,&day);/system(pause);/printf(%d,equj.timeyearmonthday);if (equj.timeyearmonthday=inlib) /判断仪器是否空闲 printf(nn);printf( 借出成功,请按任意键返回上一级菜单 n);printf(n); printf( n);state(year,month,day,j,lean); /状态改为借出 getch(); return(1);elseprintf(nn);printf( 对不起!n);printf( 此仪器还没有购买或没有归还或正在维修中,n);printf( 故无法借出。n);printf( 借出失败,请按任意键返回上一级菜单 n);printf(nn);printf( n);getch(); return(0); (2) 归还模块首先输入借出的时间,然后在仪器仪表的结构体数组中查找该仪器仪表在这个输入的时间点上有无其他状态。若无其他状态则可以借出,否则不可借出。【程序】int myback(int j)int year,month,day;system(cls);printf(nnnn);printf( n);printf(nn);printf( 请输入归还时间(年/月/日): );scanf(%d/%d/%d,&year,&month,&day);if (equj.timeyearmonthday=lean) /判断状态是否为借出 printf(nnn); printf( 归还成功,请按任意键返回上一级菜单 n);printf(nn); printf( n);state(year,month,day,j,inlib); /改状态为空闲 getch(); return(1);elseprintf(nn);printf( 对不起!n);printf( 此仪器还没有购买或还没有借出n);printf( 或正在维修中,故无法归还。n);printf( 归还失败,请按任意键返回上一级菜单 n);printf(n);printf( n);getch(); return(0); (3)维修模块 同样是首先输入维修开始的时间和维修结束的时间,然后在仪器仪表的结构体数组中查找该仪器仪表在这个归还的时间点上有其他状态。若有为空闲状态则可以维修,否则不可维修。【程序】int myrepair(int j)int year,month,day;system(cls); printf(nnnn);printf( n);printf(nn);printf( 请输入开始维修时间(年/月/日):);scanf(%d/%d/%d,&year,&month,&day);if (equj.timeyearmonthday=inlib)state(year,month,day,j,repair); /改状态为维修 printf(nn);printf( 请输入维修结束时间(年/月/日):);scanf(%d/%d/%d,&year,&month,&day);state(year,month,day,j,inlib);printf(nn);printf( 维修成功,请按任意键返回上一级菜单 n);printf(n); printf( n);getch(); return(1);elseprintf(nn);printf( 对不起!n);printf( 此仪器还没有购买或借出,n);printf( 故无法维修。n);printf(nn);printf( 维修失败,请按任意键返回上一级菜单 n);printf(nn);printf( n);getch(); return(0); (4)删除模块删除模块将删除本仪器仪表,具体删除过程为将需要删除的后一项覆盖至删除的这一项,即需删除以后的每一个结构体元素都向前移一个单位。【程序】int mydel(int j) 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;in;i+)equi=equi-1; n-;system(cls);printf(nnnn);printf( n);printf(nn);printf( 报废仪表已删除!n );printf(nn);printf( 请按任意键返回上一级菜单 n);printf(n); printf( n);getch(); return;else return;printf( n);printf(nn);printf( 请问确定要报废仪器%s吗?n ,);printf(nnnn);if (x=1)printf( -确定要报废仪器我要考虑考虑- n);elseprintf( 我要考虑考虑 n);printf(nn); printf( n);c=getch(); (三)仪器仪表查找模块仪器仪表查找分为按名称查找、按时间点查找、按时间段查找三个模块,通过键盘w s进行选择,分别用三个小模块来表示,通过状态函数condition_p输出仪器仪表状态。【程序】void search()char c=s;int x=0;while(1)if(c=s|c=S) x+;if(c=w|c=W) x-;if(x=6) x=1;if(x=0) x=5;if(c=13) switch(x)case 1:name();break;case 2:time_d();break;case 3:time_p();break;case 4:return; ;system(cls);printf(nnnn);printf( n);printf(nn);if(x=1)printf( -按名称查询按时间段查询按时间点查询返回主菜单-n);elseprintf( 返回主菜单 n);printf(nn);printf( n);c=getch(); 因为不管查找条件是什么,最终都会对应到需查找的仪器仪表上,故补充一个公共函数condition_p();,输出查找一个仪器仪表的结果。【程序】void condition_p(int year,int month,int day,int n,int *bool_repair,int *bool_lean)/printf(%d,equn.timeyearmonthday); /system(pause);if (equn.timeyearmonthday=buy) printf( %4d年%2d月%2d日购买%s仪器仪表n,year,month,day,); /借出/归还if (equn.timeyearmonthday=lean)&(*bool_lean)=0)printf( %4d年%2d月%2d日借出%s仪器仪表n,year,month,day,);(*bool_lean)=1; /printf(%dn,equn.timeyearmonthday=lean); /printf(%dn); if (equn.timeyearmonthday=inlib&(*bool_lean)=1)printf( %4d年%2d月%2d日归还%s仪器仪表n,year,month,day,);(*bool_lean)=0; /printf(%d,equn.timeyearmonthday); /维修/修完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,day,);(*bool_repair)=0; (1)按名称查找首先输入仪器仪表的名称,然后在结构体数组中查找是否存在,这个仪器仪若是则循环该仪器仪表的所有时间点来判断改时间点处于什么状态,并用公共函数condition_p来输出。【程序】int name()char equ_input100;int i; system(cls);printf(nnnn);printf( n);printf(nn);printf( 请输入仪器名字: );scanf(%s,equ_input);i=presence(equ_input);if (i!=0)int j_y,j_d,j_m,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,m);systen(pause)condition_p(j_y,j_m,j_d,i,&bool_lean,&bool_repair);printf(nn);printf( 查询完成,请按任意键返回上一级菜单 n);printf(nn); printf( n);getch(); return(1);elseprintf(nn);printf( 对不起!n);printf( 可能是由于您输入错误,n);printf( 也有可能是由于无此仪器,还未购买。n);printf(nn);printf( 查询失败,请按任意键返回主菜单 n);printf(nn);printf( n);getch(); return(0); (2)按时间点查询【程序】int time_p()int i,year,month,day,equ_tmp,bool_lean101,bool_repair101;for(i=0;i10;i+)bool_leani=0;bool_repairi=0; system(cls);printf(nnnn);printf( n);printf(nn);printf( 请输入时间点(年/月/日): );scanf(%d/%d/%d,&year,&month,&day);printf(nn); for(equ_tmp=1;equ_tmp=n;equ_tmp+)condition_p(year,month,day,equ_tmp,&bool_leanequ_tmp,&bool_repairequ_tmp); /每个仪器printf(nn);printf( 查询完成,请按任意键返回上一级菜单 n);printf(n); printf( n);getch(); return(0); (3)按时间段查询首先输入起始时间点和结束时间点,应为每个月的天数不完全一样,用三重循环来做比较麻烦,故采用模拟法,设三个变量i、j、k,分别对应年,月,日,然后赋予初值为起始时间点,设置一无限循环,循环内设有判断是否i、j、k的值为结束时间点的语句。若是则跳出循环,否则继续循环。同时,在循环内k总是自加,当k自加至当月最大天数时,j就自加,当j自加至当年最大月数时,i自加。【程序】int time_d()int year1,month1,day1,year2,month2,day2,i,j,k,equ_tmp,bool_lean101,bool_repair101;for(i=0;i101;i+)bool_leani=0;bool_repairi=0; system(cls);printf(nnnn);printf( n);printf(n);printf( 请输入起始时间(年/月/日):);scanf(%d/%d/%d,&year1,&month1,&day1);printf(n); printf( 请输入结束时间(年/月/日):);scanf(%d/%d/%d,&year2,&month2,&day2);printf(n);i=year1; j=month1; k=day1;while(1) if(j12)i+;j=1;if(k31)j+;k=1;for(equ_tmp=1;equ_tmp=n;equ_tmp+)condition_p(i,j,k,equ_tmp,&bool_leanequ_tmp,&bool_repairequ_tmp) ; /每个仪器if(i=year2)&(j=month2)&(k=day2) break; /到结束时间时终止输出 k+; printf(nn);printf( 查询完成,请按任意键返回上一级菜单 n);printf(n); printf( n);getch(); return(0); (四)公共函数(1)状态改变函数因为在修改仪器仪表状态时有大量的修改代码,故专门补充一个状态改变函数来改变状态。函数的参数为年、月、日和需改成的状态。【程序】int state(int year,int month,int day,int n,int s)/printf(%d,n); /system(pause);/通过for循环实现time数组的赋值 int i,j,k;for(k=day;k=day_max;k+)equn.timeyearmonthk=s; /当月改状态for(j=month;j=month_max;j+)for(i=1;i=day_max;i+)equn.timeyearjk=s; /当年改状态 for(i=year;i=year_max;i+)for(j=i;j=month_max;j+)for(k=1;k=day_max;k+)equn.timeijk=s; /更改以后所有状态 /以下为调试代码 /*for(i=year;i=year_max;j+)for(j=month;j=month_max;j+)for(k=day;k=day_max;k+)printf(%d %d %d %dn,i,j,k,n); printf(n %d,equn.timeyearmonthk);system(pause);*/ (2)查找仪器仪表函数函数参数为仪器仪表的名称,并返回是否查找到该仪器仪表,若找到则返回该仪器仪表所在的结构体数组下标,否则返回0。 附: strcmp:比较字符串大小,相同时返回0 【程序】int presence(char*equ_input)int i;for(i=0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年学历类自考公共课经济法概论-政治经济学(财)参考题库含答案解析(5卷)
- 2025年学历类自考专业(电子商务)网页设计与制作-电子商务网站设计原理参考题库含答案解析(5卷)
- 2025年学历类自考专业(电子商务)电子商务法概论-经济学(二)参考题库含答案解析(5卷)
- 2025年学历类自考专业(电子商务)电子商务与金融-商务交流(二)参考题库含答案解析(5卷)
- 2025小产权房买卖合同模板
- 2025年学历类自考专业(法律)西方法律思想史-西方法律思想史参考题库含答案解析(5卷)
- 2025年学历类自考专业(法律)票据法-合同法参考题库含答案解析(5卷)
- 2025年学历类自考专业(法律)宪法学-民法学参考题库含答案解析(5卷)
- 2025创新技术专利许可合同协议
- 2025年学历类自考专业(法律)中国法制史-民事诉讼法学参考题库含答案解析(5卷)
- 《企业能源审计》课件
- 工程力学专业大学生职业生涯发展
- 人教版八年级物理上册《第四章光现象》单元测试卷(带答案)
- 学校购买文具用品的供货合同2025年
- 物业保安各岗位培训
- iso28000-2022供应链安全管理手册程序文件表单一整套
- 小学二年级下安全课件
- T-CSEA 25-2022 批量热浸镀锌行业含锌固废资源化利用技术规范
- 继发性肥胖症的临床特征
- DB21∕T 3149-2019 玉米秸秆还田机械化作业技术规程
- 报价函(工程项目招标文件资料)
评论
0/150
提交评论