当前位置:文档之家› 仪器仪表管理系统—C语言课程设计

仪器仪表管理系统—C语言课程设计

仪器仪表管理1.题目要求Ⅰ.【要求】系统功能的基本要求:(1)新的仪器仪表信息的录入;(2)在借出、归还、维修时对仪器仪表信息的修改;(3)对报废仪器仪表信息的删除;(4)按照一定的条件查询符合条件的仪器仪表信息;查询功能至少应该包括仪器仪表基本信息(如仪器仪表名字、仪器仪表编等)的查询、按时间点(借入时间、借出时间、归还时间)查询等(5)对查询结果的输出。

【提示】数据结构采用结构体。

仪器仪表信息包括仪器仪表名、仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时间、状态信息(0代表可借出,1代表已借出,2代表正在维修)等。

Ⅱ.需求分析根据题目要求,需要把仪器仪表信息的的数据存储在文件里,所以需要提供文件的输入输出等操作;在程序中要提供修改,删除,查找等操作;另外还应该提供键盘式选择菜单实现功能选择。

2.功能实现设计2.1总体设计系统功能模块图2.2详细设计1.主函数主函数一般设计得比较简洁,只提供输入输出和功能处理的函数调用。

其各功能模块用菜单方式选择。

本题将main()函数体内的界面选择部分语句单独抽取出来作为一独立函数,目的在于系统执行完每部分功能模块后能够方便返回到系统界面。

【程序】main(){menu();}菜单部分设计如下:【流程图】N【程序】main(){menu();}void menu(){int w,n;do{system("cls");printf("\t\t WELCOME TO THE EQUIPMENT MANAGEMENTSYSTEM\n\n\n");printf("\n\n\t\t====================******====================\ n\n\n");printf("\t\t\t1:Add message of new equipmen\n\n");printf("\t\t\t2:Load the message of all equipment\n\n");printf("\t\t\t3:Correct the message of equipment\n\n");printf("\t\t\t4:Ddlete the message of broken equipment\n\n");printf("\t\t\t5:Search the message of equipment\n\n");printf("\t\t\t6:Search of all the equipment\n\n");printf("\t\t\t7:Exit\n");printf("\n\n\t\t====================******==================== \n\n\n");printf("Please choice your number:[ ]\b\b");scanf("%d",&n);if(n<1||n>7) w=1;else w=0;}while (w==1);/****************选择功能****************/switch(n){case 1:add_new_message();break;/*添加模块*/case 2:load_record();break;/*显示模块*/case 3:modify();break;/*修改模块*/case 4:delete();break;/*删除模块*/case 5:search();break;/*查询模块*/case 6:statistic();break;/*统计模块*/case 7:exit(0);break;/*退出模块*/}}2.各功能模块设计(1)添加模块【数据结构】【分析】单独看各数据信息,仪器仪表名是字符型,可采用字符型数组;仪器仪表编号、购买时间、借入时间、借出时间、归还时间、维修时间应采用实型;状态信息是整数,采用整型。

实际上操作时发现只有字符型的数据可以在文件中成功被保存,所以本题所有数据一律采用字符型。

struct equip{char number[4];char name[11];char b_time[11];char bin_time[11];char bout_time[11];char giveb_time[11];char repair_time[11]; /*time为下面程序中按时间查找和修改时记录输入的时间*/int state;}equ[M];【注意】equ[M]中的M是仪表仪器个数,程序中采用宏定义的方式,可以随时在源程序宏定义中改,本程序宏定义#define M 50。

【流程图】输入模块流程图【程序】/****************添加模块****************/void add_new_message(){int t,i,m;system("cls");t=load_equ();printf("How many groups datas do you want to add?\n");printf("input the number:[ ]\b\b\b");scanf("%d",&m);for(i=0;i<m;i++){printf("\nInput %dth equipment record.\n",i+1);input(t+i);/*调用输入函数*/}save(t+m,0);/*调用保存函数保存t+m组数据*/system("cls");menu();/*返回登陆界面*/}/****************输入函数****************/void input(int i){printf("Please input:\nnumber name b_time b_in_time b_out_time g_back_time repair_time state\n");scanf("%s %s %s %s %s %s %s %d",&equ[i].number,&equ[i].name,&equ[i].b_time,&equ[i].bin _time,&equ[i].bout_time,&equ[i].giveb_time,&equ[i].repair_time,&equ[i].state);}/*显示记录模块*/void load_record(){int t;t=load_equ();printf_n(t);printf("\n\n\nPress any key to go back...\n\n");getchar();menu();}/*显示一个仪器记录的函数*/void printf_one(int i){printf("%-3s %-10s %-10s %-10s %-10s %-10s %-10s %d.\n\n",equ[i].number,equ[ i].name,equ[i].b_time,equ[i].bin_time,equ[i].bout_time,equ[i].giveb_time,equ[i].repair_time,equ[ i].state);}/**显示n个仪器记录的函数*/void printf_n(int n){int j;system("cls");/*清屏*/printf("number name b_time b_in_time b_out_time g_back_time repair_time s\n");for(j=0;j<n;j++){if((j+1)%10==0)/*控制显示,每屏显示10行*/{printf("\n\nPass any key to continue ...");getchar();puts("\n\n");}printf_one(j);/*调用显示一个仪器记录的函数*/}}(2)修改模块[需求分析]该模块的功能是显示所有仪器仪表信息,考虑到记录较多,建议采用分屏显示。

显示完所有记录后,用户输入要修改的仪器仪表编号,根据编号查找仪器仪表记录,并提示用户修改该记录的哪部分信息,是仪器仪表的借出时间、归还时间、修理时间还是状态,根据用户选择修改相应信息。

[流程图][程序]/*************************修改模块***********************/void modify(){struct equip mod;int t,i,m,w,addr=-1;char number[4]={' '}, name[11]={' '};system("cls");/*清屏*/t=load_equ();do{printf("\nInput the equipment'number or name ( 1:the number 2:the name ):\n\n"); printf("What is your choice:[ ]\b\b");scanf("%d",&m);if(m==1||m==2) w=0;else w=1;}while(w==1);switch(m){case 1:printf("\n\nPlease input the equipment's number:[___]\b\b\b\b");scanf("%s",number);break;case 2:printf("Please input the equipment's name:[__________]\b\b\b\b\b\b\b\b\b\b\b");scanf("%s",name);break;}for(i=0;i<t;i++)/*查找要修改的仪器*/{if(strcmp(equ[i].name,name)==0||strcmp(equ[i].number,number)==0){addr=i;printf("\n\nPlease input the new information:\n\n");printf("number name b_time b_in_time b_out_time g_back_time repair_time s\n");scanf("%s%s%s%s%s%s%s%d",mod.number,,mod.b_time,mod.bin_time,mod.bout_time,mod.giveb_time,mod.repair_time,&mod.state);strcpy(equ[i].number,mod.number);strcpy(equ[i].name,);strcpy(equ[i].b_time,mod.b_time);strcpy(equ[i].bin_time,mod.bin_time);strcpy(equ[i].bout_time,mod.bout_time);strcpy(equ[i].giveb_time,mod.giveb_time);strcpy(equ[i].repair_time,mod.repair_time); equ[i].state=mod.state;printf("%-3s %-10s %-10s %-10s %-10s %-10s %-10s %d.\n\n",equ[i].number,e qu[i].name,equ[i].b_time,equ[i].bin_time,equ[i].bout_time,equ[i].giveb_time,equ[i].repair_time,eq u[i].state);break;}}if(addr==-1){printf(" Cannot find the equipment which you want to modify!\n\n");printf(" Press any key to go back...\n\n");getchar();menu();}save(t,0);/*修改后的信息保存*/printf(" Press any key to go back...\n\n");getchar();menu();}(3)查询模块[流程图]N查询模块流程图[程序]/****************查询模块****************/void search(){int w,n;do{system("cls");printf("\n\t\t*********************************************\n\n"); printf("\t\tby b_time quantum to search? Input[1]\n");printf("\t\tby give_back_time quantum to search? Input[2]\n");printf("\t\tby number to search? Input[3]\n");printf("\t\tby name to search? Input[4]\n");printf("\t\t*********************************************\n\n");printf(" Choice your number(1-4):[ ]\b\b\b");scanf("%d",&n);if(n<1||n>4) w=1;else w=0;}while (w==1);/*选择功能*/switch(n){case 1:sb_buy_tq();break;/*按购买时间段查询函数*/case 2:sb_gb_tq();break;/*按归还时间段查询*/case 3:sb_par_number();break;/*按指定编号查询*/case 4:sb_name();break;/*按仪器名称查询*/}}void sb_buy_tq()/*按购买时间段查询函数*/{char year1[11],year2[11];int t,i,sum=0;t=load_equ();system("cls");printf("Please input the start time:[____.__.__]\b\b\b\b\b\b\b\b\b\b\b");scanf("%s",year1);printf("\n");printf("Please input the finish time:[____.__.__]\b\b\b\b\b\b\b\b\b\b\b");scanf("%s",year2);printf("\n");system("cls");for(i=0;i<t;i++){if((strcmp(equ[i].b_time,year1)>=0)&&(strcmp(equ[i].b_time,year2)<=0)){printf_one(i);/*把符合条件的记录显示出来*/sum++;save_search_record(i);/*把符合条件的记录保存在查询记事本里*/}}getch();if(sum==0){system("cls");printf("Sorry! Cannot find the equipment which you want to.\n\n");getch();}printf("Press any key to go back the former step...\n");getchar();menu();}void sb_gb_tq()/*按购买时间段查询函数*/{char year1[11],year2[11];int t,i,sum=0;t=load_equ();system("cls");printf("Please input the start time:[____.__.__]\b\b\b\b\b\b\b\b\b\b\b");scanf("%s",year1);printf("\n");printf("Please input the finish time:[____.__.__]\b\b\b\b\b\b\b\b\b\b\b");scanf("%s",year2);printf("\n");system("cls");for(i=0;i<t;i++){if((strcmp(equ[i].giveb_time,year1)>=0)&&(strcmp(equ[i].b_time,year2)<=0)){printf_one(i);/*把符合条件的记录显示出来*/sum++;save_search_record(i);/*把符合条件的记录保存在查询记事本里*/}}getch();if(sum==0){system("cls");printf("***************************************************\n\n");printf("Sorry! Cannot find the equipment which you want to.\n\n");printf("***************************************************\n\n");getch();}printf("Press any key to go back the former step...\n");getchar();menu();}void sb_par_number()/*按指定编号查询*/{char number[4];int t,i,sum=0;t=load_equ();system("cls");printf("Please input the equipment number(000~999):[___]\b\b\b\b");scanf("%s",number);printf("\n");system("cls");for(i=0;i<t;i++){if(strcmp(equ[i].number,number)==0){printf_one(i);/*把符合条件的记录显示出来*/sum++;save_search_record(i);/*把符合条件的记录保存在查询记事本里*/}}getch();if(sum==0){system("cls");printf("Sorry! Cannot find the equipment which you want to.\n\n");getch();}printf("Press any key to go back the former step...\n");getchar();menu();}void sb_name()/*按仪器名称查询*/{char name[11];int t,i,sum=0;t=load_equ();system("cls");printf("Please input the equipment name:[__________]\b\b\b\b\b\b\b\b\b\b\b");scanf("%s",name);printf("\n");system("cls");for(i=0;i<t;i++){if(strcmp(equ[i].name,name)==0){printf_one(i);/*把符合条件的记录显示出来*/sum++;save_search_record(i);/*把符合条件的记录保存在查询记事本里*/}}getch();if(sum==0){system("cls");printf("Sorry! Cannot find the equipment which you want to.\n\n");getch();}printf("Press any key to go back the former step...\n");getchar();menu();}(4)删除模块[需求分析]该模块的功能与修改模块一样先显示所有仪器仪表信息,同样考虑到记录较多,建议采用分屏显示。

相关主题