完整word版仪器仪表管理系统设计C语言.docx
《完整word版仪器仪表管理系统设计C语言.docx》由会员分享,可在线阅读,更多相关《完整word版仪器仪表管理系统设计C语言.docx(36页珍藏版)》请在冰点文库上搜索。
![完整word版仪器仪表管理系统设计C语言.docx](https://file1.bingdoc.com/fileroot1/2023-5/2/59f62696-9698-46a1-b2eb-5de754a67715/59f62696-9698-46a1-b2eb-5de754a677151.gif)
完整word版仪器仪表管理系统设计C语言
仪器仪表管理系统
【要求】
系统功能的基本要求:
(1)新的仪器仪表信息的录入;
(2)在借出、归还、维修时对仪器仪表信息的修改;
(3)对报废仪器仪表信息的删除;
(4)按照一定的条件查询符合条件的仪器仪表信息;查询功能至少应该包括仪器仪表基本信息(如仪器仪表名字、仪器仪表编等)的查询、按时间点(借入时间、借出时间、归还时间)查询等
(5)对查询结果的输出。
【提示】
数据结构采用结构体。
仪器仪表信息包括仪器仪表名、仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时间、状态信息(0代表可借出,1代表已借出,2代表正在维修)等。
二、需求分析
根据题目要求,需要把仪器仪表信息的的数据存储在文件里,所以需要提供文件的输入输出等操作;在程序中要提供修改,删除,查找等操作;另外还应该提供键盘式选择菜单实现功能选择。
三、总体设计
系统功能模块图
四、详细设计
1.主函数
主函数一般设计得比较简洁,只提供输入输出和功能处理的函数调用。
其各功能模块用菜单方式选择。
本题将main()函数体内的界面选择部分语句单独抽取出来作为一独立函数,目的在于系统执行完每部分功能模块后能够方便返回到系统界面.
【程序】
main()
{menu();
}
菜单部分设计如下:
【流程图】
N
Y
主函数的菜单流程图
【程序】
menu()
{
intn,w;
/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/
do
{puts("\t\t**************MENU********************\n\n");
puts(”\t\t\t\t1。
enter");
puts(”\t\t\t\t2。
modify”);
puts(”\t\t\t\t3.search");
puts("\t\t\t\t4.delete”);
puts("\t\t\t\t5.exit");
puts("\n\n\t\t******************************************\n”);
printf(”Choiceyournumber(1—5):
[]\b\b");
scanf(”%d”,&n);
if(n〈1||n>5)/*对选择的数字作判断*/
{w=1;
getchar();
}
elsew=0;
}
while(w==1);
switch(n)
{case1:
enter();break;/*输入模块*/
case2:
modify();break;/*修改模块*/
case3:
search();break;/*查找模块*/
case4:
delete();break;/*删除模块*/
case5:
exit(0);/*退出*/
}
}
2.各功能模块设计
(1)输入模块
【数据结构】
【分析】
单独看各数据信息,仪器仪表名是字符型,可采用字符型数组;仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时间应采用实型;状态信息是整数,采用整型。
实际上操作时发现只有字符型的数据可以在文件中成功被保存,所以本题所有数据一律采用字符型。
structmachine
{charname[5];
charnumber[5];
charbuy_time[5];
charborrowin_time[5];
charborrowout_time[5];
charreturn_time[5];
charrepair_time[5];
charsta[5];
chartime[5];/*time为下面程序中按时间查找和修改时记录输入的时间*/
}mac[N];/*mac[N]中每个数组元素对应一个仪表仪器*/
【注意】
mac[N]中的N是仪表仪器个数,程序中采用宏定义的方式,可以随时在源程序宏定义中改,本程序宏定义#defineN50.
【流程图】
Y
输入模块流程图
【程序】
/*************************输入模块***********************/
enter()/*输入模块*/
{inti,n;
printf("录入机器数量(0—%d)?
:
",N-1);
scanf("%d”,&n);/*要输入的记录个数*/
printf("\n录入日期\n");
printf("\n名称号码购买时间借入时间借出时间归还时间维修时间状态\n");
for(i=0;i〈n;i++)
{input(i);/*调用输入函数*/
}
if(i!
=0)save(n);/*调用保存函数*/
printf_back();/*一个任务结束时让用户选择是浏览还是返回*/
}
(2)修改模块
[需求分析]
该模块的功能是显示所有仪器仪表信息,考虑到记录较多,建议采用分屏显示。
显示完所有记录后,用户输入要修改的仪器仪表编号,根据编号查找仪器仪表记录,并提示用户修改该记录的哪部分信息,是仪器仪表的借出时间、归还时间、修理时间还是状态,根据用户选择修改相应信息。
[流程图]
YN
Y
N
修改模块流程图
[程序]
/*************************修改模块***********************/
modify()/*修改模块*/
{structmachinem;
FILE*fp;
inti,n,k,w0=1,w1,w2=0;
n=load();
do
{k=-1;/*给用户看全部记录以便确认要修改的记录*/
printf_face();/*调用显示数据结构项目函数*/
for(i=0;i{if((i!
=0)&&(i%10==0))/*分屏显示*/
{printf("\n\n按键继续。
。
。
”);
getch();
puts("\n\n");
}
printf_one(i);/*调用显示一个记录的函数*/
}
do
{printf(”\n情输入机器号码:
”);
scanf(”%s",m.number);/*输入要修改的仪器仪表的编号*/
for(i=0;iif(strcmp(m.number,mac[i].number)==0)
{k=i;/*找到要修改的记录*/
m=mac[i];/*把mac[i]备份给m,以便用户后悔时恢复*/
}
if(k==-1)printf(”\n\n不存在!
重试");
}while(k==-1);/*k==-1时表示没有找到*/
printf_face();/*调用显示数据结构项目函数*/
printf_one(k);/*调用显示一个记录的函数*/
w1=modify_data(k);
/*修改仪器仪表记录并且返回保存控制值w1,w1=1则表示用户以确认修改*/
if(w1==1)/*w1==1表示用户确定这次修改*/
{printf(”\n成功。
\n\n还要修改其它吗?
\n\n\t1)。
是2}。
保存退出\t[]\b\b");
scanf("%d”,&w0);
w2=1;/*控制保存,使w2=1是标记已有过修改*/
}
else
{w0=0;
if(w2==1)
mac[k]=m;
}/*走到这里是由于用户没有确认这次修改(在调用修改函数w1=modify_data(k)时没有确认),使w0=0,为了终止循环;mac[k]=m则把备份的m恢复给mac[k],这样的好处是确保在此之前修改过的成功保存,而本次不修改*/
if(w0!
=1&&w2==1)/*w0!
=1则表示正常返回,w2=1表示在此之前有过修改,此时就保存用户已经确认修改的并返回*/
save(n);/*w2!
=1表示在此次之前没有修改过,而又反悔这次修改,则不保存返回*/
}
while(w0==1);
printf_back();
}
说明:
调用w1=modify_data(k)修改函数时,若返回值为1则表示用户在修改函数里面确认了这次修改,其中i表示第i个记录(要修改的);若返回值不为1则不保存这次修改,但保存这次之前的修改,这由w2来控制,w2=1则表示有过用户修改确认史.
(3)查找模块
[流程图]
N
Y
查找模块流程图
[程序]
/*查找模块*/
intsearch()
{intm;
puts(”\t\t*********************************\n\n”);
puts(”\t\t\t\tmon_search”);
puts(”\t\t\t\t2.point_search");
puts("\t\t\t\t3。
exit”);
puts("\n\n\t\t***************************\n");
printf("情选择号码r(1—3):
[]\b\b”);
scanf(”%d",&m);
switch(m)
{case1:
common_search();break;
case2:
point_search();break;
case3:
exit(0);
}
}
(1.1)基本查找
[分析]
基本信息查找包括了仪器仪表的名称以及编号的查找,所以该子功能模块的功能是先让用户选择是按仪器仪表名称还是按仪器仪表编号查找,根据用户选择的进行查找,找到以后增加删除和修改功能。
[流程图]
12
YN
YN
基本查找模块流程图
[程序]
/*************************基本查找模块***********************/
intcommon_search()/*基本查找模块*/
{inti,n,k,w1=1,w2,w3,w4;
structmachinem;
n=load();
printf(”通过名称还是号码搜索?
1-名称,2—号码:
”);
scanf(”%d",&i);
if(i==1)
{do
{do
{k=-1;
printf(”\n\n情输入名称!
名称:
");
scanf(”%s”,m。
name);/*输入要查找的仪器仪表的名称*/
printf_face();/*调用显示数据结构项目函数*/
for(i=0;i〈n;i++)/*查找想要的记录*/
if(strcmp(m.name,mac[i].name)==0)
{k=i;/*找到要查找的记录*/
printf_one(k);/*调用显示一个记录的函数*/
}
if(k==-1)
{printf("\n\n不存在!
”);
printf(”\n\n重试?
\n\t1)。
是2)返回[]\b\b");
scanf(”%d”,&w1);
while(w1==1)menu();/*保证第一次查找的基础上再查找找不到时能退出*/
}
}
while(k==—1&&w1==1);/*如果w1!
=1则直接返回*/
w4=0;w3=0;
if(k!
=—1)/*k!
=-1表示找到,如果找到则选择操作*/
{printf("\n\n操作?
\n\t1)。
重新搜索2}.修改3)。
删除4).返回[]\b\b");
scanf("%d”,&w2);
switch(w2)
{case2:
w3=modify_data(k);break;/*调用修改数据函数*/
case3:
{printf(”\n确定?
\n\t1).是2}.返回[]\b\b”);
scanf("%d”,&w4);
}
}
if(w3==1||w4==1)
{save(n);
printf(”\n\n成功。
");
printf(”\n\n操作?
\n\t1).重新搜索2)。
返回[]\b\b");
scanf(”%d”,&w2);
}
}
}
while(w2==1);
}
if(i==2)
{do
{do
{k=-1;
printf("\n\n请输入号码!
号码:
”);
scanf(”%s”,m.number);/*输入要查找的仪器仪表编号*/
printf_face();/*调用显示数据结构项目函数*/
for(i=0;i〈n;i++)/*查找想要的记录*/
if(strcmp(m。
number,mac[i].number)==0)
{k=i;/*找到要查找的记录*/
printf_one(k);/*调用显示一个记录的函数*/
}
if(k==—1)
{printf(”\n\n不存在!
”);
printf(”\n\n重试?
\n\t1).是2).返回[]\b\b”);
scanf(”%d”,&w1);
while(w1==1)menu();/*保证第一次查找的基础上再查找找不到时能退出*/
}
}
while(k==—1&&w1==1);/*如果w1!
=1则直接返回*/
w4=0;w3=0;
if(k!
=-1)/*k!
=-1表示找到,如果找到则选择操作*/
{printf(”\n\n操作?
\n\t1)。
重新搜索2}.修改3).删除4)。
返回[]\b\b");
scanf(”%d”,&w2);
switch(w2)
{case2:
w3=modify_data(k);break;/*调用修改数据函数*/
case3:
{printf(”\n确定?
\n\t1).是2}。
返回[]\b\b”);
scanf(”%d",&w4);
}
}
if(w3==1||w4==1)
{save(n);
printf("\n\n成功.”);
printf("\n\n操作?
\n\t1)。
重新搜索2)。
返回[]\b\b”);
scanf("%d",&w2);
}
}
}
while(w2==1);
}
menu();/*调用菜单函数*/
}
(1.2)按时间点查找
[流程图]
12
3
YN
YN
时间点查找模块流程图
[程序]
/*************************时间点查找模块***********************/
intpoint_search()/*时间点查找模块*/
{inti,n,k,w1=1,w2,w3,w4;
structmachinem;
n=load();
printf(”选择1—借入时间2—借出时间or3—归还时间”);
scanf(”%d”,&i);/*选择要查找的是哪个时间点*/
if(i==1)
{do
{do
{k=—1;
printf(”\n\n请输入时间!
借入时间:
”);
scanf("%s",m.time);/*输入要查找的仪器仪表的借入时间*/
printf_face();/*调用显示数据结构项目函数*/
for(i=0;iif(strcmp(m.time,mac[i]。
borrowin_time)==0)
{k=i;/*查找想要的记录*/
printf_one(k);/*调用显示一个记录的函数*/
}
if(k==-1)
{printf(”\n\n不存在!
”);
printf(”\n\n重试?
\n\t1)。
是2)。
返回[]\b\b");
scanf(”%d",&w1);
while(w1==1)menu();/*保证第一次查找的基础上再查找找不到时能退出*/
}
}
while(k==—1&&w1==1);/*如果w1!
=1则直接返回*/
w4=0;w3=0;
if(k!
=—1)/*k!
=—1表示找到,如果找到则选择操作*/
{printf("\n\n操作?
\n\t1).重新搜索2}.修改3).删除4)。
返回[]\b\b”);
scanf(”%d",&w2);
switch(w2)
{case2:
w3=modify_data(k);break;/*调用修改数据函数*/
case3:
{printf(”\n确定?
\n\t1).是2}。
返回[]\b\b");
scanf("%d”,&w4);
}
}
if(w3==1||w4==1)
{save(n);
printf("\n\nSuccessful。
^_^。
");
printf(”\n\n操作?
\n\t1)。
重新搜索2)。
返回[]\b\b”);
scanf(”%d",&w2);
}
}
}
while(w2==1);
}
if(i==2)
{do
{do
{k=—1;
printf("\n\n输入借出时间:
");
scanf("%s",m。
time);/*输入要查找的仪器仪表的借出时间*/
printf_face();/*调用显示数据结构项目函数*/
for(i=0;iif(strcmp(m。
time,mac[i].borrowout_time)==0)
{k=i;/*找到要查找的记录*/
printf_one(k);/*调用显示一个记录的函数*/
}
if(k==—1)
{printf(”\n\n不存在!
”);
printf("\n\n重试?
\n\t1).是2)。
返回[]\b\b");
scanf(”%d",&w1);
while(w1==1)menu();/*保证第一次查找的基础上再查找找不到时能退出*/
}
}
while(k==-1&&w1==1);/*如果w1!
=1则直接返回*/
w4=0;w3=0;
if(k!
=—1)/*k!
=—1表示找到,如果找到则选择操作*/
{printf(”\n\n操作?
\n\t1).重新搜索2}。
修改3)。
删除4)。
返回[]\b\b");
scanf("%d”,&w2);
switch(w2)
{case2:
w3=modify_data(k);break;/*调用修改数据函数*/
case3:
{printf(”\n确定?
\n\t1)。
是2}。
返回[]\b\b");
scanf(”%d",&w4);
}
}
if(w3==1||w4==1)
{save(n);
printf(”\n\n成功。
");
printf("\n\n操作?
\n\t1).重新搜索2)。
返回[]\b\b");
scanf(”%d",&w2);
}
}
}
while(w2==1);
}
if(i==3)
{do
{do
{k=—1;
printf(”\n\n输入归还时间:
”);
scanf("%s",m.time);/*输入要查找的仪器仪表的归还时间*/
printf_face();/*调用显示数据结构项目函数*/
for(i=0;iif(strcmp(m。
time,mac[i]。
return_time)==0)
{k=i;/*找到要查找的记录*/
printf_one(k);/*调用显示一个记录的函数*/
}
if(k==—1)
{printf(”\n\n不存在!
”);
printf("\n\n确定?
\n\t1).是2).返回[]\b\b”);
scanf("%d”,&w1);
while(w1==1)menu();/*保证第一次查找的基础上再查找找不到时能退出*/
}
}
while(k==—1&&w1==1);/*如果w1!
=1则直接返回*/
w4=0;w3=0;
if(k!
=—1)/*k!
=-1表示找到,如果找到则选择操作*/
{printf(”\n\n操作?
\n\t1).重新搜索2}。
修改3)。
删除4).返回[]\b\b”);
scanf("%d”,&w2);
switch(w2)
{case2:
w3=modify_data(k);break;/*调用修改数据函数*/
case3:
{printf("\n确定?
\n\t1).是2}.返回[]\b\b");
scanf("%d”,&w4);
}
}
if(w3==1||w4==1)
{save(n);
printf("\n\n成功.");
printf("\n\n操作o?
\n\t1)。
搜索2).返回[]\b\b”);
scanf("%d",&w2);
}
}
}
while(w2==1);
}
menu();/*调用菜单函数*/
}
(4)删除模块
[需求分析]
该模块的功能与修改模块一样先显示所有仪器仪表信息,同样考虑到记录较多,建议采用分屏显示。
显示完所有记录后,用户输入要修改的仪器仪表编号,根据编号查找仪器仪表记录,并提示用户是否确定要删除.
[流程图]
YN
Y
N
删除模块流程图
[程序]
/*************************删除模块***********************/
delete()/*删除模块*/
{structmachinem;
FILE*fp;
inti,n,k,w0=1,w1,w2=0;
n=load();/*给用户看全部记录以便确认要删除的记录*/
do
{k=—1;
printf_face();/*调用显示数据结构项目函数*/
for(i=0;i〈n;i++)
{if((i!
=0)&&(i%10==0))/*分屏显示*/
{printf("\n\n按键继续。
。
.");
getch();
puts("\n\n”);
}
printf_one(i);/*调用显示一个记录的函数*/
}
do
{printf(”\n请输入要删除的号码:
”);
scanf("%s",m。
number);/*输入要删除的仪器仪表的编号*/
for(i=0;iif(strcmp(m.number,mac[i]。
number)==0)
{