我是中国地质大学(武汉)计算机学院网络工程专业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编程中困难及解决办法
第四章 总结与心得
附 录(程序清单)
第一章 题目与概要设计
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. 菜单
N
Y
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<=n;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);
}
}
4. 修改模块
N
Y
Y N
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
if(strcmp(m,s[i].devicename)==0)
j=i;
}
else if(i==2)
{
printf("请输入编号:");
scanf("%d",&d);
for(i=0;i
if(d==s[i].num)
j=i;
}
if(j==-1)
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. 查询模块
N
Y
Y N
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<3;i++)
if(strcmp(m,s[i].devicename)==0)
j=i;
}
if(k==2)
{
printf("请输入编号:");
scanf("%d",&d);
for(i=0;i<3;i++)
if(d==s[i].num)
j=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)按名称
(3)按编号
4.查询信息
(1)查询主页面
(2)按名称
(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<=n;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
if(strcmp(m,s[i].devicename)==0)
j=i;
}
else if(i==2)
{
printf("请输入编号:");
scanf("%d",&d);
for(i=0;i
if(d==s[i].num)
j=i;
}
if(j==-1)
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<3;i++)
if(strcmp(m,s[i].devicename)==0)
j=i;
}
if(k==2)
{
printf("请输入编号:");
scanf("%d",&d);
for(i=0;i<3;i++)
if(d==s[i].num)
j=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();
}
本文来源:https://www.2haoxitong.net/k/doc/988c0bbfbceb19e8b8f6ba96.html
文档为doc格式