实验室设备管理系统
作者简介
我是中国地质大学(武汉)计算机学院网络工程专业193131班的甘甜,于大一才开始学习c 语言,在学习c 语言之前未接触相关语言,对如此抽象的一门学问没什么认识,经过一学期学习,对c 语言有了从无到有从浅到深的认识,从理论学习到上机实践,一步步深入了解,但由于学习时间短,难以对这门高深的学问有很深刻的认识,也很难熟练掌握程序设计的技巧,所以编程过程中产生疏漏甚至错误在所难免,望老师谅解, 并希望老师批评指正。
摘要
本题主要是要求编一个程序来管理实验室设备,包括增加、修改和查询设备信息。
增加设备就是在原有的文件中写入一个新的信息,修改信息就是把原有信息进行更改,而查询信息就是把文件中的设备信息进行统计,并输出。
本程序有一个主函数、菜单主页面和三个被调函数,三个被调函数分别解觉增加设备、修改设备、查询设备这三个问题。
。
作者简介 摘要
第一章 题目与概要设计
1.1题目要求 1.2需求分析 1.3概要设计
第二章 详细设计
2.1主函数 2.2功能模块设计 2.2-1信息添加模块 2.2-2信息修改模块 2.2-3信息查询模块
第三章 调试分析与执行结果
3.1主要页面截图 3.2编程中困难及解决办法
第四章 总结与心得 附 录(程序清单)
2
目录
第一章 题目与概要设计
1. 题目要求
实验室设备管理系统
实验设备信息包括:设备编号、设备种类(如:微机 打印机 扫描仪 等等)、设备名称、设备价格、设备购入日期、是否报废、报废日期等。试设计一个实验设备信息管理系统,使之能提供以下功能: (1)能够完成对设备的录入和修改 (2)对设备进行分类统计 (3)设备的查询
2. 需求分析
实验室设备信息用文件存储,提供文件的输入输出操作;要能够完成设备的录入和修改,需要提供设备添加和修改操作;实现对设备进行分类统计,需要提供排序操作;实现对设备查询需要提供查找操作,设备的查询可根据设备编号 设备种类 设备购入日期 正常设备(未报废的)等多种方式查询;另外还要根据键盘式选择菜单以实现功能选择。
3. 概要设计
(1)整个系统可设计为实验设备信息添加模块、实验设备信息修改模块、实验设备查询模块。
(2)实验室设备信息结构体,结构体成员包括设备编号 设备种类 设备名称 设备价格 设备购入日期 是否报废 报废日期。 (3)功能模块图
1. 主要的结构体为laboratory 包括设备的基本信息:编号 种类 名称 价格 购买日期 是否报废 报
废日期。主函数用的是switch 语句,4个结果分别对应3个函数和退出,便于操作。
2. 被调函数1,解决增加新设备的问题。先打开文件,然后将新的用户信息写入文件中,依次写入设
备编号 设备种类 设备名称 设备价格 设备购入日期 是否报废 报废日期。
3. 被调函数2,解决设备信息错误的问题。进行文件的读出操作,先根据设备名称或编号,利用if
语句找到并输出原有信息,然后再用switch 语句选择要修改的选项。
4. 被调函数3,查询设备信息并输出运算结果。这里主要是进行文件的读和写,运用if 语句完成,查
询是根据设备名称和编号分类进行,利用strcmp 语句查找相同名称类。然后输出所有相关结果。
第二章 详细设计
一、主模块 1. 主函数
void main() {
FILE *fp;
fp=fopen("LABORATORY.txt","r");
while(fscanf(fp,"%d %s %s %s %s %s %s",&s[N].num,s[N].type,
s[N].devicename,s[N].price,s[N].buytime,s[N].condition,s[N].worthlesstime)!=EOF)N++; fclose(fp); menu(); }
2. 菜单
void menu() {int sele,t; sele=1; while(sele) {system("cls"); printf("\n\n");
printf(" ************************************************\n"); printf(" * *\n"); printf(" * 欢迎来到实验室设备管理系统! *\n");
printf(" * *\n"); printf(" * 1. 添加信息 *\n"); printf(" * *\n"); printf(" * 2. 修改信息 *\n"); printf(" * *\n"); printf(" * 3. 查询信息 *\n"); printf(" * *\n"); printf(" * 4. 退出 *\n"); printf(" ************************************************\n"); printf("请选择功能序号:"); scanf("%d",&t); switch(t)
{ case 1:Append();break; case 2:Modify();break; case 3:Query();break; case 4:sele=0;break; }
printf("\n\n按任意键继续\n"); getch(); }
}
3. 添加模块
void Append()
{
int n,i;
printf("可输入增加的设备数:"); scanf("%d",&n);N=n+N;
printf("现在,请输入相关信息:\n"); for (i=1;i
scanf("%d",&s[N-n-1+i].num); printf("种类:");
scanf("%s",&s[N-n-1+i].type); printf("名称:");
scanf("%s",&s[N-n-1+i].devicename);
printf("价格:");
scanf("%s",&s[N-n-1+i].price); printf("购买日期:");
scanf("%s",&s[N-n-1+i].buytime); printf("是否报废:");
scanf("%s",&s[N-n-1+i].condition); printf("报废日期:");
scanf("%s",&s[N-n-1+i].worthlesstime); }
}
4. 修改模块
{ int i,j=-1,d,t;char m[20]; N=M;
printf("\n\n\n");
printf(" ************************************************\n"); printf(" * *\n");
printf(" * *\n"); printf(" * *\n"); printf(" * 1. 名称 2. 编号 *\n"); printf(" * *\n"); printf(" * *\n"); printf(" * *\n"); printf(" ************************************************\n"); printf("请输入修改选项:"); scanf("%d",&i); if(i==1) { printf("请输入名称:"); scanf("%s",&m); for(i=0;i
else if(i==2) { printf("请输入编号:"); scanf("%d",&d); for(i=0;i
printf("没有找到!\n"); else{ printf("编号 种类 名称 价格 购买日期 是否报废 报废日期\n"); printf("%-4d %-4s %-4s %-5s %-5s %-8s %-5s ",s[j].num,s[j].type, s[j].devicename,s[j].price,s[j].buytime,s[j].condition,s[j].worthlesstime); }
printf("\n\n\n");
printf(" ************************************************\n"); printf(" * *\n"); printf(" * 1. 编号 2. 种类 *\n"); printf(" * *\n"); printf(" * 3. 名称 4. 价格 *\n"); printf(" * *\n"); printf(" * 5. 购买日期 6. 是否报废 *\n"); printf(" * *\n"); printf(" * 7. 报废日期 *\n"); printf(" * *\n"); printf(" ************************************************\n");
printf("\n\n请输入要修改的选项: "); scanf("%d",&t); switch(t) {
case 1:printf("编号改为:");scanf("%d",&s[j].num);break; case 2:printf("种类改为:");scanf("%s",s[j].type);break;
case 3:printf("名称改为:");scanf("%s",s[j].devicename);break; case 4:printf("价格改为:");scanf("%s",s[j].price);break;
case 5:printf("购买日期改为:");scanf("%s",s[j].buytime);break; case 6:printf("是否报废改为:");scanf("%s",s[j].condition);break; case 7:printf("报废日期改为:");scanf("%s",s[j].worthlesstime);break; } }
5. 查询模块
void Query() char m[20]; N=M;
printf("查询模块:"); printf("\n\n\n");
printf(" ************************************************\n"); printf(" * *\n"); printf(" * *\n"); printf(" * *\n"); printf(" * 1. 名称 2. 编号 *\n"); printf(" * *\n"); printf(" * *\n"); printf(" * *\n"); printf(" ************************************************\n"); printf("\n\n请输入查询选项: "); scanf("%d",&k);
if(k==1)
{printf("请输入名称:"); scanf("%s",m); for(i=0;i
if(strcmp(m,s[i].devicename)==0) j=i; }
if(k==2) { printf("请输入编号:"); scanf("%d",&d); for(i=0;i
if(j==-1)
{ printf("没有找到!\n");} if(j!=-1) {printf("编号 种类 名称 价格 购买日期 是否报废 报废日期\n"); printf("%-4d %-4s %-4s %-5s %-7s %-5s %-5s",s[j].num,s[j].type, s[j].devicename,s[j].price,s[j].buytime,s[j].condition,s[j].worthlesstime); }
printf("\n");
system("pause"); menu(); }
第三章 调试分析
一、主要页面截图
1. 菜单
6. 添加信息
3. 修改信息
(1)修改主页面
(2)按名称
4. 查询信息
(1)查询主页面
(3)按编号
二、编程中困难及解决办法
到大学才开始接触C 语言,加之第一次面对这样系统性的大题,我有点束手无策了。后来在老师和同学们的提点下,我参阅了相关书籍,才慢慢理清思路,编好这个程序。
在设计程序的过程中,遇到以下几点问题
1. 结构体定义的时候,把字符型定义成了整型,且未规定长度,导致输入数据超过长度,文件因内存原因而无法读,后来通过同学的指正以及参考同学编出的类似系统,问题才得到解决。
2. 编译主函数的时候,粗心的少了输入文件fscanf, 使文件打开之后又直接关闭,而不能写入。好在后来还是检查出来并改正了。
3. 编写查询模块时,错误的将字符赋值比较,导致编译时就出错。后来用strcmp 语句让输入名与设备名称比较,从而查找相关信息。
4. 在运用scanf 输入时,错误的将数组前面也带了&,后来又查看书籍温习相关知识,才改正过来。 5. 在写完程序后,出现了很多个错误,让人感到非常泄气,后来经同学提点帮助,自己又从头到尾一遍一遍的检查,才逐次改正。
第四章 总结与心得
短短几天的课程设计,真的有让我学到很多,从开始的茫然不知所措,到后来的有点头绪,再到一点点编出各个部分函数,最终拼成一个完整的函数,并一点点解决程序中出现的问题。当看到程序最终成功的做完时,心中真的有一种成功的幸福感,那是属于自己的第一件作品,它见证了自己的成长,见证了自己的辛勤与汗水。
最难忘怀的是改程序的时候,程序因为一点点小问题就会运行不了,之前只是因为少了一半括号,让我一遍又一遍地找,很考验耐性。由此可见,严谨真的很重要。学习和练习C 程序的设计是一个漫长的过程,这几天的学习只是让我们接触到了C 语言程序设计,只是肤浅的了解了它的一些基本操作,我们学习C 语言需要不断的练习积累才能使我们的水平提高,虽然学习C 语言有时很枯燥,我们需要认真的对待它,虽然编写一个程序需要很长的时间,因此我们需要耐心,最重要的是,我们需要独立的思考和编写程序。这样才能提高我们的C 语言设计的能力,更好的运用它解决一些问题。 最后,非常感谢在编程过程中给我批评指正的老师和同学们。
附录(程序清单)
#include #include #include "stdlib.h" #define M 20 int N=0;
struct laboratory { int num; /*编号*/ char type[20]; /*种类*/ char devicename[20]; /*名称*/ char price[20]; /*价格*/
char buytime[20]; /*购买日期*/ char condition[6]; /*是否报废*/ char worthlesstime[20]; /*报废日期*/ }s[M];
void Re_file(); void Append(); void Modify(); void Query();
void menu(); /* s[M]中的每个数组元素对应一个设备*/ /*******************************主函数*******************************/ void main() {
FILE *fp;
fp=fopen("LABORATORY.txt","r");
while(fscanf(fp,"%d %s %s %s %s %s %s",&s[N].num,s[N].type, s[N].devicename,s[N].price,s[N].buytime,s[N].condition,s[N].worthlesstime)!=EOF)N++; fclose(fp); menu(); }
void menu() {int sele,t; sele=1; while(sele) {system("cls"); printf("\n\n");
printf(" ************************************************\n"); printf(" * *\n"); printf(" * 欢迎来到实验室设备管理系统! *\n"); printf(" * *\n"); printf(" * 1. 添加信息 *\n");
printf(" * *\n"); printf(" * 2. 修改信息 *\n"); printf(" * *\n"); printf(" * 3. 查询信息 *\n"); printf(" * *\n"); printf(" * 4. 退出 *\n"); printf(" ************************************************\n"); printf("请选择功能序号:"); scanf("%d",&t); switch(t)
{ case 1:Append();break; case 2:Modify();break; case 3:Query();break; case 4:sele=0;break; }
printf("\n\n按任意键继续\n"); getch(); } }
/*******************************添加模块*******************************/ void Append() { int n,i;
printf("可输入增加的设备数:"); scanf("%d",&n);N=n+N;
printf("现在,请输入相关信息:\n"); for (i=1;i
printf("编号:");
scanf("%d",&s[N-n-1+i].num); printf("种类:");
scanf("%s",&s[N-n-1+i].type); printf("名称:");
scanf("%s",&s[N-n-1+i].devicename); printf("价格:");
scanf("%s",&s[N-n-1+i].price); printf("购买日期:");
scanf("%s",&s[N-n-1+i].buytime); printf("是否报废:");
scanf("%s",&s[N-n-1+i].condition); printf("报废日期:");
scanf("%s",&s[N-n-1+i].worthlesstime); } }
/*******************************修改模块*******************************/ void Modify()
{ int i,j=-1,d,t;char m[20]; N=M;
printf("\n\n\n");
printf(" ************************************************\n"); printf(" * *\n"); printf(" * *\n"); printf(" * *\n"); printf(" * 1. 名称 2. 编号 *\n"); printf(" * *\n"); printf(" * *\n"); printf(" * *\n"); printf(" ************************************************\n"); printf("请输入修改选项:"); scanf("%d",&i); if(i==1) { printf("请输入名称:"); scanf("%s",&m); for(i=0;i
else if(i==2) { printf("请输入编号:"); scanf("%d",&d); for(i=0;i
printf("没有找到!\n"); else{
printf("编号 种类 名称 价格 购买日期 是否报废 报废日期\n"); printf("%-4d %-4s %-4s %-5s %-5s %-8s %-5s ",s[j].num,s[j].type, s[j].devicename,s[j].price,s[j].buytime,s[j].condition,s[j].worthlesstime); }
printf("\n\n\n");
printf(" ************************************************\n"); printf(" * *\n"); printf(" * 1. 编号 2. 种类 *\n"); printf(" * *\n");
printf(" * 3. 名称 4. 价格 *\n"); printf(" * *\n"); printf(" * 5. 购买日期 6. 是否报废 *\n"); printf(" * *\n"); printf(" * 7. 报废日期 *\n"); printf(" * *\n"); printf(" ************************************************\n"); printf("\n\n请输入要修改的选项: "); scanf("%d",&t); switch(t) {
case 1:printf("编号改为:");scanf("%d",&s[j].num);break; case 2:printf("种类改为:");scanf("%s",s[j].type);break;
case 3:printf("名称改为:");scanf("%s",s[j].devicename);break; case 4:printf("价格改为:");scanf("%s",s[j].price);break;
case 5:printf("购买日期改为:");scanf("%s",s[j].buytime);break; case 6:printf("是否报废改为:");scanf("%s",s[j].condition);break; case 7:printf("报废日期改为:");scanf("%s",s[j].worthlesstime);break; } }
/*******************************查询模块*******************************/ void Query() {int i,j=-1,d,k,t=0; char m[20]; N=M;
printf("查询模块:"); printf("\n\n\n");
printf(" ************************************************\n"); printf(" * *\n"); printf(" * *\n"); printf(" * *\n"); printf(" * 1. 名称 2. 编号 *\n"); printf(" * *\n"); printf(" * *\n"); printf(" * *\n"); printf(" ************************************************\n"); printf("\n\n请输入查询选项: "); scanf("%d",&k); if(k==1)
{printf("请输入名称:"); scanf("%s",m); for(i=0;i
if(strcmp(m,s[i].devicename)==0) j=i;
}
if(k==2) { printf("请输入编号:"); scanf("%d",&d); for(i=0;i
if(j==-1)
{ printf("没有找到!\n");} if(j!=-1)
{printf("编号 种类 名称 价格 购买日期 是否报废 报废日期\n"); printf("%-4d %-4s %-4s %-5s %-7s %-5s %-5s",s[j].num,s[j].type, s[j].devicename,s[j].price,s[j].buytime,s[j].condition,s[j].worthlesstime); }
printf("\n");
system("pause"); menu(); }