C语言课程设计报告仪器仪表管理系统报告.docx
《C语言课程设计报告仪器仪表管理系统报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告仪器仪表管理系统报告.docx(36页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告仪器仪表管理系统报告
C
学院:
自动化学院
专业:
自动化
班级:
231XXX
姓名:
XXX
学号:
231XXX-XX
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;获得所按下的键值,用函数的局部静态变量储存键值对应的其他功能函数。
voidmenu(charc)/*菜单函数*/
{staticintn=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)
{case1:
if(insert()==0)insert();break;//录入
case2:
change();break;//修改
case3:
serch();break;//查询
case4:
exit(0);//退出程序};
}
system("cls");
printf("\n\n");
printf("仪器仪表管理系统\n");
printf("\n");
printf("姓名:
xxx");
printf("班级231xxx");
根据选择的功能调用功能模块函数
结束
printf("\n\n");
if(n=1)
printf("-->仪器仪表录入<--\n");
else
printf("仪器仪表录入\n");
printf("\n");
if(n=2)
printf("-->仪器仪表借还/删除<--\n");
else
printf("仪器仪表借还/删除\n");
printf("\n");
if(n=3)
printf("-->仪器仪表查询<--\n");
else
printf("仪器仪表查询\n");
printf("\n");
if(n=4)
printf("-->退出程序<--\n");
else
printf("退出程序\n");
printf("\n");
//主函数
voidmain()
{system("cls");
printf("\n\n\n\n");
printf("-->仪器仪表管理系统<--\n");
printf("\n");
printf("-->按W向上选择<--\n");
printf("-->按S向下选择<--\n");
printf("-->按回车确定选择<--\n");
printf("\n");
printf("\n");
printf("-->按任意键进入系统<--\n");
printf("<----------------->\n");
getch();
menu('s');
while
(1)menu(getch());}
(二)各功能模块设计
[数据结构]
数据结构选用结构体数组。
这里只简单的给仪器仪表两个部分,一个为仪器仪表的名称、字符串函数,一个为仪器仪表的各个时间点的状态(定义一个time的三维数组,数组下标表示年月日,数组的值表示仪器的状态)。
#definebuy1//购买
#definelean2//借出
#definerepair3//维修
#defineinlib4//空闲
#defineyear_max3000
#definemonth_max12
#defineday_max31
#defineN100//预设仪器最大数
intn;//仪器数
structequment
{charname[100];inttime[year_max+1][month_max+1][day_max+1];}equ[N];
(1) 录入模块
是
开始
输入仪器仪表名称
否
是否已录入入
返回主菜单
输入买入时间
结束
通过strcpy函数实现仪器名称的录入,state函数实现仪器状态的更改。
【程序】
voidinsert()
{inti,j_year,j_month,j_day,year,month,day;
charequ_input[100];
system("cls");
printf("\n\n\n\n");
printf("-->仪器仪表管理系统<--\n");
printf("\n\n\n\n");
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();
}
else
{intstate(intyear,intmonth,intday,intn,ints);
n++;
strcpy(equ[n].name,equ_input);//将equ_input复制给equ[equ_num].name
printf("\n");
printf("请输入购买时间(年/月/日)(例如1998/2/15):
");
scanf("%d/%d/%d",&year,&month,&day);
state(year,month,day,n,inlib);//equ[n]将当天状态改为空闲
equ[n].time[year][month][day]=buy;//equ[n]将该天以后状态改为购入
//printf("%d",equ[n].time[year][month][day]);
printf("\n");
printf("\n");
printf("录入成功,请按任意键返回主菜单\n");
printf("\n");
printf("\n");
printf("<----------------------------->\n");
getch();}}
(2)状态改变模块
该模块包括对仪器仪表的借出、归还、维修、报废等小模块的操作,仍然用getch();函数获取键值来做上下选择。
本函数只考虑对一种仪器仪表的修改,故先要输入该仪器仪表的名称并查找是否已经购买。
开始
输入仪器仪表名称
返回主菜单
是
结束
否
是否已购买
选择需要进行的操作
【程序】
intchange()
{charequ_input[100],c='s';
intj,x=0;
system("cls");
printf("\n\n\n\n");
printf("<----仪器仪表管理系统--->\n");
printf("\n\n");
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)
{case1:
mylean(j);break;
case2:
myback(j);break;
case3:
myrepair(j);break;
case4:
mydel(j);break;
case5:
return
(1);
}
}
system("cls");
printf("\n\n\n\n");
printf("<----仪器仪表管理系统--->\n");
printf("\n\n");
/*printf("请输入仪器名称:
");scanf("%s",equ_input);printf("\n\n");*/
if(x==1)
printf("--->仪器仪表借出<------\n");
else
printf("仪器仪表借出\n");
printf("\n\n");
if(x==2)
printf("--->仪器仪表归还<------\n");
else
printf("仪器仪表归还\n");
printf("\n\n");
if(x==3)
printf("--->仪器仪表维修<------\n");
else
printf("仪器仪表维修\n");
printf("\n\n");
if(x==4)
printf("--->仪器仪表报废<------\n");
else
printf("仪器仪表报废\n");
printf("\n\n");
if(x==5)
printf("--->返回主菜单<------\n");
else
printf("返回主菜单\n");
printf("<----------------------------------->\n");
c=getch();
}
}
else
{
/*system("cls");
printf("\n\n\n\n");
printf("<----仪器仪表管理系统--->\n");
printf("\n\n");*/
printf("\n\n");
printf("对不起!
找不到该仪器\n");
printf("可能是由于您输入仪器的名称错误,\n");
printf("也可能是由于无此仪器,还没购买。
\n");
printf("\n\n");
printf("修改失败,请按任意键返回主菜单\n");
printf("<----------------------------------->\n");
getch();
//return;}}
(1)借出模块
首先输入借出的时间,然后在仪器仪表的结构体数组中查
找该仪器仪表在这个输入的时间点上有无其他状态。
若无
其他状态则可以借出,否则不可借出。
【程序】
intmylean(intj)
{intyear,month,day;
system("cls");
printf("\n\n\n\n");
printf("<----仪器仪表借出系统--->\n");
printf("\n\n");
printf("请输入借出时间(年/月/日):
");
scanf("%d/%d/%d",&year,&month,&day);
//system("pause");
//printf("%d",equ[j].time[year][month][day]);
if(equ[j].time[year][month][day]==inlib)//判断仪器是否空闲
{printf("\n\n");
printf("借出成功,请按任意键返回上一级菜单\n");
printf("\n");
printf("<----------------------------------->\n");
state(year,month,day,j,lean);//状态改为借出
getch();return
(1);
}
else
{printf("\n\n");
printf("对不起!
\n");
printf("此仪器还没有购买或没有归还或正在维修中,\n");
printf("故无法借出。
\n");
printf("借出失败,请按任意键返回上一级菜单\n");
printf("\n\n");
printf("<----------------------------------->\n");
getch();return(0);}}
(2)归还模块
首先输入借出的时间,然后在仪器仪表的结构体数组中查找该仪器仪表在这个输入的时间点上有无其他状态。
若无其他状态则可以借出,否则不可借出。
【程序】
intmyback(intj)
{intyear,month,day;
system("cls");
printf("\n\n\n\n");
printf("<----仪器仪表归还系统--->\n");
printf("\n\n");
printf("请输入归还时间(年/月/日):
");
scanf("%d/%d/%d",&year,&month,&day);
if(equ[j].time[year][month][day]==lean)//判断状态是否为借出
开始
输入仪器仪表名称
是
是否借出
标记状态为空闲
返回主菜单
否
结束
{printf("\n\nn");
printf("归还成功,请按任意键返回上一级菜单\n");
printf("\n\n");
printf("<----------------------------------->\n");
state(year,month,day,j,inlib);//改状态为空闲
getch();return
(1);
}
else
{printf("\n\n");
printf("对不起!
\n");
printf("此仪器还没有购买或还没有借出\n");
printf("或正在维修中,故无法归还。
\n");
printf("归还失败,请按任意键返回上一级菜单\n");
printf("\n");
printf("<----------------------------------->\n");
getch();return(0);}}
(3)维修模块
同样是首先输入维修开始的时间和维修结束的时间,然后在仪器仪表的结构体数组中查找该仪器仪表在这个归还的时间点上有其他状态。
若有为空闲状态则可以维修,否则不可维修。
【程序】
intmyrepair(intj)
{intyear,month,day;
system("cls");
printf("\n\n\n\n");
printf("<----仪器仪表管理系统--->\n");
printf("\n\n");
printf("请输入开始维修时间(年/月/日):
");
scanf("%d/%d/%d",&year,&month,&day);
if(equ[j].time[year][month][day]==inlib)
{state(year,month,day,j,repair);//改状态为维修
printf("\n\n");
printf("请输入维修结束时间(年/月/日):
");
scanf("%d/%d/%d",&year,&month,&day);
state(year,month,day,j,inlib);
printf("\n\n");
printf("维修成功,请按任意键返回上一级菜单\n");
printf("\n");
printf("<----------------------------------->\n");
getch();return
(1);
}
else
{printf("\n\n");
printf("对不起!
\n");
printf("此仪器还没有购买或借出,\n");
printf("故无法维修。
\n");
printf("\n\n");
printf("维修失败,请按任意键返回上一级菜单\n");
printf("\n\n");
printf("<----------------------------------->\n");
getch();return(0);}}
(4)删除模块
删除模块将删除本仪器仪表,具体删除过程为将需要删除的后一项覆盖至删除的这一项,即需删除以后的每一个结构体元素都向前移一个单位。
【程序】
intmydel(intj)
{charc='s';
intx=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)
{inti;
for(i=n;iequ[i]=equ[i-1];n--;
system("cls");
printf("\n\n\n\n");
printf("<----仪器仪表管理系统--->\n");
printf("\n\n");
printf("报废仪表已删除!
\n");
printf("\n\n");
printf("请按任意键返回上一级菜单\n");
printf("\n");
printf("<----------------------------------->\n");
getch();return;
}
else
return;
}
printf("<----仪器仪表管理系统--->\n");
printf("\n\n");
printf("请问确定要报废仪器%s吗?
\n",equ[j].name);
printf("\n\n\n\n");
if(x==1)
printf("--->确定要报废仪器<---\n");
else
printf("确定要报废仪器\n");
printf("\n\n");
if(x==2)
printf("--->我要考虑考虑<---\n");
else
printf("我要考虑考虑\n");
printf("\n\n");
printf("<----------------------------------->\n");
c=getch();}}
(三)仪器仪表查找模块
仪器仪表查找分为按名称查找、按时间点查找、按时间段查找三个模块,通过键盘ws进行选择,分别用三个小模块来表示,通过状态函数condition_p输出仪器仪表状态。
【程序】
voidsearch()
{charc='s';
intx=0;
wh