c语言实习报告 仪器仪表的管理.docx
- 文档编号:11004841
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:39
- 大小:275.12KB
c语言实习报告 仪器仪表的管理.docx
《c语言实习报告 仪器仪表的管理.docx》由会员分享,可在线阅读,更多相关《c语言实习报告 仪器仪表的管理.docx(39页珍藏版)》请在冰点文库上搜索。
c语言实习报告仪器仪表的管理
C语言课程实习报告
学院:
工程
专业:
土木工程
班级:
05205217
学号:
20051000916
姓名:
唐铭
题目要求
仪器仪表管理
【要求】
系统功能的基本要求:
(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("Howmanymachinesdoyouwanttoenter(0-%d)?
:
",N-1);
scanf("%d",&n);/*要输入的记录个数*/
printf("\nEnterdatanow\n");
printf("\nnamenumberbuy_timeborrowin_timeborrowout_timereturn_timerepair_timestate\n");
for(i=0;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\npassanykeytocontinue..."); getch(); puts("\n\n"); } printf_one(i);/*调用显示一个记录的函数*/ } do {printf("\npleaseentermachinenumber: "); scanf("%s",m.number);/*输入要修改的仪器仪表的编号*/ for(i=0;i if(strcmp(m.number,mac[i].number)==0) {k=i;/*找到要修改的记录*/ m=mac[i];/*把mac[i]备份给m,以便用户后悔时恢复*/ } if(k==-1)printf("\n\nNOexist! Tryagain"); }while(k==-1);/*k==-1时表示没有找到*/ printf_face();/*调用显示数据结构项目函数*/ printf_one(k);/*调用显示一个记录的函数*/ w1=modify_data(k); /*修改仪器仪表记录并且返回保存控制值w1,w1=1则表示用户以确认修改*/ if(w1==1)/*w1==1表示用户确定这次修改*/ {printf("\nSuccessful^_^.\n\nAreyoumodifyanother? \n\n\t1).Yes2).Backwithsave\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("Pleasechoiceyournumber(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("Searchthemachinebynameornumber? 1-name,2-number: "); scanf("%d",&i); if(i==1) {do {do {k=-1; printf("\n\nEnterthemachinenamethatyouwanttosearch! name: "); scanf("%s",m.name);/*输入要查找的仪器仪表的名称*/ printf_face();/*调用显示数据结构项目函数*/ for(i=0;i if(strcmp(m.name,mac[i].name)==0) {k=i;/*找到要查找的记录*/ printf_one(k);/*调用显示一个记录的函数*/ } if(k==-1) {printf("\n\nNOexist! please"); printf("\n\nAreyouagain? \n\t1).again2).NOandback[]\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\nWhatdoyouwanttodo? \n\t1).Searchanother2).Modify3).Delete4).Backmenu[]\b\b"); scanf("%d",&w2); switch(w2) {case2: w3=modify_data(k);break;/*调用修改数据函数*/ case3: {printf("\nAreyousure? \n\t1).Sure2).Noandback[]\b\b"); scanf("%d",&w4); } } if(w3==1||w4==1) {save(n); printf("\n\nSuccessful.^_^."); printf("\n\nWhatdoyouwanttodo? \n\t1).Searchanother2).Back[]\b\b"); scanf("%d",&w2); } } } while(w2==1); } if(i==2) {do {do {k=-1; printf("\n\nEnterthemachinenumberthatyouwanttosearch! number: "); scanf("%s",m.number);/*输入要查找的仪器仪表编号*/ printf_face();/*调用显示数据结构项目函数*/ for(i=0;i if(strcmp(m.number,mac[i].number)==0) {k=i;/*找到要查找的记录*/ printf_one(k);/*调用显示一个记录的函数*/ } if(k==-1) {printf("\n\nNOexist! please"); printf("\n\nAreyouagain? \n\t1).again2).NOandback[]\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\nWhatdoyouwanttodo? \n\t1).Searchanother2).Modify3).Delete4).Backmenu[]\b\b"); scanf("%d",&w2); switch(w2) {case2: w3=modify_data(k);break;/*调用修改数据函数*/ case3: {printf("\nAreyousure? \n\t1).Sure2).Noandback[]\b\b"); scanf("%d",&w4); } } if(w3==1||w4==1) {save(n); printf("\n\nSuccessful.^_^."); printf("\n\nWhatdoyouwanttodo? \n\t1).Searchanother2).Back[]\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("Press1-borrowin_time2-borrowout_timeor3-return_time"); scanf("%d",&i);/*选择要查找的是哪个时间点*/ if(i==1) {do {do {k=-1; printf("\n\nEnterthemachineborrowintimethatyouwanttosearch! borrowintime: "); scanf("%s",m.time);/*输入要查找的仪器仪表的借入时间*/ printf_face();/*调用显示数据结构项目函数*/ for(i=0;i if(strcmp(m.time,mac[i].borrowin_time)==0) {k=i;/*找到要查找的记录*/ printf_one(k);/*调用显示一个记录的函数*/ } if(k==-1) {printf("\n\nNOexist! please"); printf("\n\nAreyouagain? \n\t1).again2).NOandback[]\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\nWhatdoyouwanttodo? \n\t1).Searchanother2).Modify3).Delete4).Backmenu[]\b\b"); scanf("%d",&w2); switch(w2) {case2: w3=modify_data(k);break;/*调用修改数据函数*/ case3: {printf("\nAreyousure? \n\t1).Sure2).Noandback[]\b\b"); scanf("%d",&w4); } } if(w3==1||w4==1) {save(n); printf("\n\nSuccessful.^_^."); printf("\n\nWhatdoyouwanttodo? \n\t1).Searchanother2).Back[]\b\b"); scanf("%d",&w2); } } } while(w2==1); } if(i==2) {do {do {k=-1; printf("\n\nEnterborrowouttime: "); scanf("%s",m.time);/*输入要查找的仪器仪表的借出时间*/ printf_face();/*调用显示数据结构项目函数*/ for(i=0;i if(strcmp(m.time,mac[i].borrowout_time)==0) {k=i;/*找到要查找的记录*/ printf_one(k);/*调用显示一个记录的函数*/ } if(k==-1) {printf("\n\nNOexist! please"); printf("\n\nAreyouagain? \n\t1).again2).NOandback[]\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\nWhatdoyouwanttodo? \n\t1).Searchanother2).Modify3).Delete4).Backmenu[]\b\b"); scanf("%d",&w2); switch(w2) {case2: w3=modify_data(k);break;/*调用修改数据函数*/ case3: {printf("\nAreyousure? \n\t1).Sure2).Noandback[]\b\b"); scanf("%d",&w4); } } if(w3==1||w4==1) {save(n); printf("\n\nSuccessful.^_^."); printf("\n\nWhatdoyouwanttodo? \n\t1).Searchanother2).Back[]\b\b"); scanf("%d",&w2); } } } while(w2==1); } if(i==3) {do {do {k=-1; printf("\n\nEnterreturntime: "); scanf("%s",m.time);/*输入要查找的仪器仪表的归还时间*/ printf_face();/*调用显示数据结构项目函数*/ for(i=0;i if(strcmp(m.time,mac[i].return_time)==0) {k=i;/*找到要查找的记录*/ printf_one(k);/*调用显示一个记录的函数*/ } if(k==-1) {printf("\n\nNOexist! please"); printf("\n\nAreyouag
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言实习报告 仪器仪表的管理 语言 实习 报告 仪器仪表 管理