一.题目要求
实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,
设备价格,设备购入日期等。试设计一实验设备信息管理系统,使之能提供以下功能: (1) 能够完成对设备的录入和修改 (2) 对设备进行分类统计 (3) 设备的查询
二.需求分析
实验室设备信息用文件存储,提供文件的输入输出操作;要能够完成设备的录入和修改,
需要提供设备添加和修改操作;实现对设备进行分类统计,需要提供排序操作;实现对设备的插叙需要提供查找操作,设备的查询可根据设备编号、设备种类、设备名称、设备购入日期、正常设备(未报废的)等多种方式查询;另外还要提供键盘式选择菜单以实现功能选择。
三.总体设计
根据上面的需求分析,可以将这个系统的设计分为以下模块
实验设备管理系统 信息输入 信息添加 信息修改 信息统计 信息搜索 四.详细设计
1.主函数
[流程图]
显示一系列功能选项 输入n,判断n是否是0-6 N Y 根据n的值调用各功能模块函数 [程序]
main() /*********************主函数***********************************/ {
int n,w,t; for(t=0;t<1;t++) {
do {
puts(\"\\*******MENU*******\\n\\n\"); puts(\"\\ 1.Enter new data\"); puts(\"\\ 2.Addition data\"); puts(\"\\ 3.Modify data\"); puts(\"\\ 4.Statist \"); puts(\"\\ 5.Search\"); puts(\"\\ 6.Exit\");
puts(\"\\n\\n\\*****************\\n\"); printf(\"What do you want to do(1-6):\"); scanf(\"%d\
if(n<1||n>6) /*对选择的数字作出判断*/ { w=1;
getchar(); }
else w=0; }
while(w==1);
switch(n)
{case 1:t=enter();break; /*输入模块*/ case 2:t=enter(); break; /*追加模块*/ case 3:t=modifty();break; /*修改模块*/ case 4:t=total();break; /*统计模块*/ case 5:t=search();break; /*搜索模块*/ case 6:exit(0); /*退出*/ } }
2.各功能模块设计 (1)输入模块
[流程图]
输入用户要输入设备的个数i 输入设备的各项详细信息 将输入的信息存储到文件的中
[程序]
/*********************输入模块*****************************/ int enter() /*输入模块*/
{
FILE *fp; EQ newequ; int i,j; int c;
printf(\"**************************************\\n\"); printf(\"Add new equiment\\n\");
printf(\"**************************************\\n\"); printf(\"How many equiments do you want to add?\\n\");
scanf(\"%d\ /*输入要输入的设备个数*/ for(j=0;jprintf(\"------------------\\n\"); printf(\"Input equipcode\\n\"); scanf(\"%s\printf(\"Input equiptype\\n\"); scanf(\"%s\printf(\"Input equipname\\n\"); scanf(\"%s\
printf(\"Input equipPrice\\n\");
scanf(\"%f\printf(\"Input buyYear\\n\");
scanf(\"%d\printf(\"Input buyMonth\\n\");
scanf(\"%d\printf(\"Input buyDay\\n\");
scanf(\"%d\
printf(\"Input scrap\\n\");
scanf(\"%d\printf(\"Input scrapYear\\n\");
scanf(\"%d\printf(\"Input scrapMonth\\n\");
scanf(\"%d\printf(\"Input scrapDay\\n\");
scanf(\"%d\
if((fp=fopen(\"test.txt\ /*打开文件,输入保存*/ {printf(\"Can not open file!\\n\"); }
fprintf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\equ.equipName,newequ.equipPrice,newequ.buyYear,newequ.buyMonth,newequ.buyDay,newequ.scrap,newequ.scrapYear,newequ.scrapMonth,newequ.scrapDay);
fclose(fp);
printf(\"\\n-----------------------\\n\"); printf(\"Return to main menu? \\n\"); printf(\"1.YES \\n\");
printf(\"2.NO,I want to quit now\\n\"); scanf(\"%d\if(c==1)return(-1);
if(c==2)return(0); /*任务结束选择是返回主菜单还是跳出*/ } }
(4)修改模块 [需求分析]
此模块可以根据客户需要对以记录在文件中的信息进行修改 [流程图]
输入要修改的设备编号 是否找到该设备资料 y 显示找到的记录,调用修改函数 n 显示没有找到 返回主菜单 对该设备的信息进行修改 返回主菜单
[程序]
/*******************************修改模块*********************/
int modifty() /*修改模块*/ {
EQ equ[50]; char code[10]; int i,j,c; FILE *fp;
printf(\"*************************************\\n\"); printf(\"Modifty for the equiment\\n\");
printf(\"*************************************\\n\"); printf(\"Please input the equipcode for modiftying\\n\");
scanf(\"%s\ /*输入要修改的设备编号*/ printf(\"------------------------------------\\n\");
if((fp=fopen(\"test.txt\{ printf(\"\\nCan not open test!\\n\"); }
for(i=0;!feof(fp);i++) {
fscanf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\uipName,&equ[i].equipPrice,&equ[i].buyYear,&equ[i].buyMonth,&equ[i].buyDay,&equ[i].scrap,&equ[i].scrapYear,&equ[i].scrapMonth,&equ[i].scrapDay);
if(strcmp(equ[i].equipCode,code)==0) {
printf(\"------------------\\n\");
printf(\"Input new equipcode\\n\"); scanf(\"%s\printf(\"Input new equiptype\\n\"); scanf(\"%s\printf(\"Input new equipname\\n\"); scanf(\"%s\printf(\"Input equipPrice\\n\"); scanf(\"%f\
printf(\"Input new buyYear\\n\"); scanf(\"%d\printf(\"Input new buyMonth\\n\"); scanf(\"%d\printf(\"Input new buyDay\\n\"); scanf(\"%d\
printf(\"Input new scrap\\n\"); scanf(\"%d\
printf(\"Input new scrapYear\\n\"); scanf(\"%d\printf(\"Input new scrapMonth\\n\"); scanf(\"%d\
printf(\"Input new scrapDay\\n\"); scanf(\"%d\}
} /*将修改后的信息写如文件中*/ fclose(fp); j=i;
if((fp=fopen(\"test.txt\{ printf(\"\\nCan not open test!\\n\"); }
for(i=0;i fclose(fp); printf(\"\\n-----------------------\\n\"); printf(\"Return to main menu? \\n\"); printf(\"1.YES \\n\"); printf(\"2.NO,I want to quit now\\n\"); scanf(\"%d\if(c==1)return(-1); if(c==2)return(0); } (4)统计模块 [需求分析] 将已经输入的设备信息进行统计,并显示设备总数、价格总额等信息 [流程图] 打开文件,并对文件中的设备信息进行统计计算 [程序] int total() { int c; 输出统计结果 返回主菜单 float sum=0; int count=0; float aver=0; char type[20]; EQ equ; int i; FILE *fp; if((fp=fopen(\"test.txt\{ printf(\"\\nWrong\\n\"); } printf(\"please input equipType:\\n\"); scanf(\"%s\ for(i=0;!feof(fp);i++) { fscanf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\&equ.buyYear,&equ.buyMonth,&equ.buyDay,&equ.scrap,&equ.scrapYear,&equ.scrapMonth,&equ.scrapDay); printf(\"\\nOK!\\n\"); printf(\"%s,%s,%s,%f,%d,%d,%d,%d,%d,%d,%d\\n\buyYear,equ.buyMonth,equ.buyDay,equ.scrap,equ.scrapYear,equ.scrapMonth,equ.scrapDay); if(strcmp(equ.equipType,type)==0) { count++; sum+=equ.equipPrice; aver=sum/count; } } fclose(fp); printf(\"----------Statist--Result-----------\"); printf(\"\\n\\nthe number of this type is:%d\printf(\"\\n\\nthe total sum of price is:%f\printf(\"\\n\\nthe aver of total price is:%f\printf(\"\\nPress any key to exit......\"); getch(); printf(\"\\n-----------------------\\n\"); printf(\"Return to main menu? \\n\"); printf(\"1.YES \\n\"); printf(\"2.NO,I want to quit now\\n\"); scanf(\"%d\if(c==1)return(-1); if(c==2)return(0); } (5)搜索模块 [需求分析] 该模块的功能是查找用户需要的对应记录,可以分别根据设备编号、设备种类、设备名称、设备购入日期、正常设备(未报废的)等多种方式查询。 [流程图] y 询问用户想要选择的搜索方式 设备编号 设备种类 设备名称 设备购入日期 是否报废 y 显示找到的文件 n 提示没有找到 让用户选择1)返回主菜单2)跳出系统 [程序] /***********************************搜索模块******************************/ int search() /*搜索模块*/ { char code[10]; char name[20]; float price; int choice; int c; FILE *fp; EQ equ; int i; fp=fopen(\"test.txt\if(fp==NULL)exit(0); printf(\"please choose the way of search:\\n\\n\"); printf(\"1.search by equipCode\\n\\n\"); printf(\"2.search by equipName \\n\\n\"); printf(\"3.search by equipPrice\\n\\n\"); printf(\"0.return\\n\\n\"); printf(\"please input number 0-5:\"); scanf(\"%d\ if(choice==0)exit(0); switch(choice) { case 0:exit(0);break; case 1: printf(\"please input equipCode:\\n\"); scanf(\"%s\ for(i=0;!feof(fp);i++) { fscanf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\qu.equipName,&equ.equipPrice,&equ.buyYear,&equ.buyMonth,&equ.buyDay,&equ.scrap,&equ.scrapYear,&equ.scrapMonth,&equ.scrapDay); if(strcmp(equ.equipCode,code)==0) { printf(\"\\nequipCode,equipType,equipName,equipPrice,buyYear,buyMonth,buyDay,scrap,scrapYear,scrapMonth,ScrapDay\\n\"); printf(\"\\n%s,%s,%s,%f,%d,%d,%d,%d,%d,%d,%d\\n\equ.equipName,equ.equipPrice,equ.buyYear,equ.buyMonth,equ.buyDay,equ.scrap,equ.scrapYear,equ.scrapMonth,equ.scrapDay); } } getch(); break; case 2: printf(\"please input equipName:\\n\"); scanf(\"%s\ for(i=0;!feof(fp);i++) { fscanf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\ qu.equipName,&equ.equipPrice,&equ.buyYear,&equ.buyMonth,&equ.buyDay,&equ.scrap,&equ.scrapYear,&equ.scrapMonth,&equ.scrapDay); if(strcmp(equ.equipName,code)==0) { printf(\"\\nequipCode,equipType,equipName,equipPrice,buyYear,buyMonth,buyDay,scrap,scrapYear,scrapMonth,ScrapDay\\n\"); printf(\"\\n%s,%s,%s,%f,%d,%d,%d,%d,%d,%d,%d\\n\equ.equipName,equ.equipPrice,equ.buyYear,equ.buyMonth,equ.buyDay,equ.scrap,equ.scrapYear,equ.scrapMonth,equ.scrapDay); } } getch(); break; case 3: printf(\"please input equipPrice:\\n\"); scanf(\"%d\ for(i=0;!feof(fp);i++) { fscanf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\qu.equipName,&equ.equipPrice,&equ.buyYear,&equ.buyMonth,&equ.buyDay,&equ.scrap,&equ.scrapYear,&equ.scrapMonth,&equ.scrapDay); if(equ.equipPrice==price) { printf(\"\\nequipCode,equipType,equipName,equipPrice,buyYear,buyMonth,buyDay,scrap,scrapYear,scrapMonth,ScrapDay\\n\"); printf(\"\\n%s,%s,%s,%f,%d,%d,%d,%d,%d,%d,%d\\n\equ.equipName,equ.equipPrice,equ.buyYear,equ.buyMonth,equ.buyDay,equ.scrap,equ.scrapYear,equ.scrapMonth,equ.scrapDay); } } getch(); break; } fclose(fp); printf(\"\\n-----------------------\\n\"); printf(\"Return to main menu? \\n\"); printf(\"1.YES \\n\"); printf(\"2.NO,I want to quit now\\n\"); scanf(\"%d\ if(c==1)return(-1); if(c==2)return(0); } 五.完整程序 #include typedef struct epuipmentInfo { char equipCode[10]; char equipType[20]; char equipName[20]; float equipPrice; int buyYear; int buyMonth; int buyDay; int scrap; int scrapYear; int scrapMonth; int scrapDay; }EQ; int enter() { FILE *fp; EQ newequ; int i,j; int c; printf(\"**************************************\\n\"); printf(\"Add new equiment\\n\"); printf(\"**************************************\\n\"); printf(\"How many equiments do you want to add?\\n\"); scanf(\"%d\for(j=0;jprintf(\"------------------\\n\"); printf(\"Input equipcode\\n\"); scanf(\"%s\printf(\"Input equiptype\\n\"); scanf(\"%s\ printf(\"Input equipname\\n\"); scanf(\"%s\ printf(\"Input equipPrice\\n\"); scanf(\"%f\printf(\"Input buyYear\\n\"); scanf(\"%d\printf(\"Input buyMonth\\n\"); scanf(\"%d\printf(\"Input buyDay\\n\"); scanf(\"%d\ printf(\"Input scrap\\n\"); scanf(\"%d\printf(\"Input scrapYear\\n\"); scanf(\"%d\printf(\"Input scrapMonth\\n\"); scanf(\"%d\printf(\"Input scrapDay\\n\"); scanf(\"%d\ if((fp=fopen(\"test.txt\{printf(\"Can not open file!\\n\"); } fprintf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\newequ.equipName,newequ.equipPrice,newequ.buyYear,newequ.buyMonth,newequ.buyDay,newequ.scrap,newequ.scrapYear,newequ.scrapMonth,newequ.scrapDay); fclose(fp); printf(\"\\n-----------------------\\n\"); printf(\"Return to main menu? \\n\"); printf(\"1.YES \\n\"); printf(\"2.NO,I want to quit now\\n\"); scanf(\"%d\if(c==1)return(-1); if(c==2)return(0); } } int modifty() { EQ equ[50]; char code[10]; int i; int j; int c; FILE *fp; printf(\"*************************************\\n\"); printf(\"Modifty for the equiment\\n\"); printf(\"*************************************\\n\"); printf(\"Please input the equipcode for modiftying\\n\"); scanf(\"%s\ printf(\"------------------------------------\\n\"); if((fp=fopen(\"test.txt\{ printf(\"\\nCan not open test!\\n\"); } for(i=0;!feof(fp);i++) { fscanf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\i].equipName,&equ[i].equipPrice,&equ[i].buyYear,&equ[i].buyMonth,&equ[i].buyDay,&equ[i].scrap,&equ[i].scrapYear,&equ[i].scrapMonth,&equ[i].scrapDay); if(strcmp(equ[i].equipCode,code)==0) { printf(\"------------------\\n\"); printf(\"Input new equipcode\\n\"); scanf(\"%s\printf(\"Input new equiptype\\n\"); scanf(\"%s\printf(\"Input new equipname\\n\"); scanf(\"%s\printf(\"Input equipPrice\\n\"); scanf(\"%f\ printf(\"Input new buyYear\\n\"); scanf(\"%d\printf(\"Input new buyMonth\\n\"); scanf(\"%d\printf(\"Input new buyDay\\n\"); scanf(\"%d\ printf(\"Input new scrap\\n\"); scanf(\"%d\ printf(\"Input new scrapYear\\n\"); scanf(\"%d\printf(\"Input new scrapMonth\\n\"); scanf(\"%d\printf(\"Input new scrapDay\\n\"); scanf(\"%d\} } fclose(fp); j=i; if((fp=fopen(\"test.txt\{ printf(\"\\nCan not open test!\\n\"); } for(i=0;i fclose(fp); printf(\"\\n-----------------------\\n\"); printf(\"Return to main menu? \\n\"); printf(\"1.YES \\n\"); printf(\"2.NO,I want to quit now\\n\"); scanf(\"%d\if(c==1)return(-1); if(c==2)return(0); } int search() { char code[10]; char name[20]; float price; int choice; int c; FILE *fp; EQ equ; int i; fp=fopen(\"test.txt\if(fp==NULL)exit(0); printf(\"please choose the way of search:\\n\\n\"); printf(\"1.search by equipCode\\n\\n\"); printf(\"2.search by equipName \\n\\n\"); printf(\"3.search by equipPrice\\n\\n\"); printf(\"0.return\\n\\n\"); printf(\"please input number 0-5:\"); scanf(\"%d\ if(choice==0)exit(0); switch(choice) { case 0:exit(0);break; case 1: printf(\"please input equipCode:\\n\"); scanf(\"%s\ for(i=0;!feof(fp);i++) { fscanf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\pName,&equ.equipPrice,&equ.buyYear,&equ.buyMonth,&equ.buyDay,&equ.scrap,&equ.scrapYear,&equ.scrapMonth,&equ.scrapDay); if(strcmp(equ.equipCode,code)==0) { printf(\"\\nequipCode,equipType,equipName,equipPrice,buyYear,buyMonth,buyDay,scrap,scrapYear,scrapMonth,ScrapDay\\n\"); printf(\"\\n%s,%s,%s,%f,%d,%d,%d,%d,%d,%d,%d\\n\pName,equ.equipPrice,equ.buyYear,equ.buyMonth,equ.buyDay,equ.scrap,equ.scrapYear,equ.scrapMonth,equ.scrapDay); } } getch(); break; case 2: printf(\"please input equipName:\\n\"); scanf(\"%s\ for(i=0;!feof(fp);i++) { fscanf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\pName,&equ.equipPrice,&equ.buyYear,&equ.buyMonth,&equ.buyDay,&equ.scrap,&equ.scrapYear,&equ.scrapMonth,&equ.scrapDay); if(strcmp(equ.equipName,code)==0) { printf(\"\\nequipCode,equipType,equipName,equipPrice,buyYear,buyMonth,buyDay,scrap,scrapYear,scrapMonth,ScrapDay\\n\"); printf(\"\\n%s,%s,%s,%f,%d,%d,%d,%d,%d,%d,%d\\n\pName,equ.equipPrice,equ.buyYear,equ.buyMonth,equ.buyDay,equ.scrap,equ.scrapYear,equ.scrapMonth,equ.scrapDay); } } getch(); break; case 3: printf(\"please input equipPrice:\\n\"); scanf(\"%d\ for(i=0;!feof(fp);i++) { fscanf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\pName,&equ.equipPrice,&equ.buyYear,&equ.buyMonth,&equ.buyDay,&equ.scrap,&equ.scrapYear,&equ.scrapMonth,&equ.scrapDay); if(equ.equipPrice==price) { printf(\"\\nequipCode,equipType,equipName,equipPrice,buyYear,buyMonth,buyDay,scrap,scrapYear,scrapMonth,ScrapDay\\n\"); printf(\"\\n%s,%s,%s,%f,%d,%d,%d,%d,%d,%d,%d\\n\pName,equ.equipPrice,equ.buyYear,equ.buyMonth,equ.buyDay,equ.scrap,equ.scrapYear,equ.scrapMonth,equ.scrapDay); } } getch(); break; } fclose(fp); printf(\"\\n-----------------------\\n\"); printf(\"Return to main menu? \\n\"); printf(\"1.YES \\n\"); printf(\"2.NO,I want to quit now\\n\"); scanf(\"%d\if(c==1)return(-1); if(c==2)return(0); } int total() { int c; float sum=0; int count=0; float aver=0; char type[20]; EQ equ; int i; FILE *fp; if((fp=fopen(\"test.txt\{ printf(\"\\nWrong\\n\"); } printf(\"please input equipType:\\n\"); scanf(\"%s\ for(i=0;!feof(fp);i++) { fscanf(fp,\"%s %s %s %f %d %d %d %d %d %d %d\ar,&equ.buyMonth,&equ.buyDay,&equ.scrap,&equ.scrapYear,&equ.scrapMonth,&equ.scrapDay); printf(\"\\nOK!\\n\"); printf(\"%s,%s,%s,%f,%d,%d,%d,%d,%d,%d,%d\\n\.buyMonth,equ.buyDay,equ.scrap,equ.scrapYear,equ.scrapMonth,equ.scrapDay); { count++; sum+=equ.equipPrice; aver=sum/count; } } fclose(fp); printf(\"----------Statist--Result-----------\"); printf(\"\\n\\nthe number of this type is:%d\printf(\"\\n\\nthe total sum of price is:%f\printf(\"\\n\\nthe aver of total price is:%f\printf(\"\\nPress any key to exit......\"); getch(); printf(\"\\n-----------------------\\n\"); printf(\"Return to main menu? \\n\"); printf(\"1.YES \\n\"); printf(\"2.NO,I want to quit now\\n\"); scanf(\"%d\if(c==1)return(-1); if(c==2)return(0); } main() { int n; int w; int t; for(t=0;t<1;t++) { do { puts(\"\\*******MENU*******\\n\\n\"); puts(\"\\ 1.Enter new data\"); puts(\"\\ 2.Addition data\"); puts(\"\\ 3.Modify data\"); puts(\"\\ 4.Statist \"); puts(\"\\ 5.Search\"); puts(\"\\ 6.Exit\"); if(strcmp(equ.equipType,type)==0) puts(\"\\n\\n\\*****************\\n\"); printf(\"What do you want to do(1-6):\"); scanf(\"%d\if(n<1||n>6) { w=1; getchar(); } else w=0; } while(w==1); switch(n) {case 1:t=enter();break; case 2:t=enter(); break; case 3:t=modifty();break; case 4:t=total();break; case 5:t=search();break; case 6:exit(0); } } } 六.上机操作 运行结果如下 (1) 主菜单函数 (2) 输入模块 键入1后显示如下界面 接着键入需要输入的设备数量,出现提示后依次输入各项具体信息 选择1后返回主菜单。 (3) 追加模块 在主菜单输入2后进入追加模块,操作同输入模块。 (4) 修改模块 在主菜单输入3后进入修改模块,系统提示输入要修改的设备编号 输入编号,如果找到该编号对应的设备信息则进行新信息的输入 (5) 统计模块 在主菜单输入4后进入统计模块,对已经输入的设备信息进行统计 按任意键后可选择返回主菜单 (6) 搜索模块 在搜索模块中程序提供了3种搜索方式 例如,我们选择第一种搜索模式,用设备编号进行搜索,输入1,回车。接着在提示下输入要搜索的设备名称,即可得到需要的设备信息。 按任意键后可选择返回主菜单或退出系统。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务