实验设备管理系统c语言版Word文档格式.docx
《实验设备管理系统c语言版Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验设备管理系统c语言版Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
对指针,数组,文件了解更加深刻。
二、使用环境(本次上机实践所使用的平台和相关软件。
)
VisualC++
三、内容与设计思想(1.设计思路2.主要数据结构3.主要代码结构4.主要代码段分析。
1.设计思路
如下图所示
2.主要数据结构
typedefstructEquInfo//定义结构体
{charequipCode[10];
//编号
charequipType[20];
//种类
charequipName[20];
//名称
floatequipPrice;
//价格
charbuyDate[20];
//购买日期
intscrap;
//是否报废
charscrapDate[20];
//报废日期
}EquInfo;
3.主要代码结构
1.主函数
2.添加模块
3.修改模块
4.统计模块
5.搜索模块
4.主要代码段分析
(1).添加模块
主要是实现设备的添加,输入添加的设备个数,然后用for循环语句,循环次数是你输入的设备个数。
循环输出设备的编号,种类名称,用fopen打开文件,w写方式实现首次添加。
intaddition()/*添加模块*/
{
EquInfonews[50];
inti,j,c;
FILE*fp;
system("
cls"
);
printf("
你想输入多少个设备?
\n"
scanf("
%d"
&
i);
/*输入要添加的设备个数*/
for(j=0;
j<
i;
j++)
{printf("
------------------\n"
输入设备编号\n"
%s"
news[j].equipCode);
输入设备种类\n"
news[j].equipType);
……
if((fp=fopen("
swy.txt"
"
w"
))==NULL)/*打开文件,输入保存*/
{printf("
不能打开文件!
}
for(j=0;
{fprintf(fp,"
%s%s%s%f%s%d%s"
news[j].equipCode,news[j].equipType,news[j].equipName,news[j].equipPrice,news[j].buyDate,news[j].scrap,news[j].scrapDate);
}
fclose(fp);
printf("
\n-----------------------\n"
返回主菜单?
\n"
1.是\n"
2.不,退出\n"
scanf("
c);
if(c==1)return(-1);
if(c==2)return(0);
}/*任务结束选择是返回主菜单还是跳出*/
(2).修改模块
用for循环使用feof函数从文件头逐个读取文件字符直到文件结尾,其中用了strcmp函数,比较文件中的数据与输入数是否匹配,若是匹配,返回0,说明你输入的编号正确,键面进入请输入新的编号、种类、名称等,将修改后的信息写入文件中,成功后输出write。
intmodifty()/*修改模块*/
{
r"
))==NULL)
\n不能打开文件!
for(i=0;
!
feof(fp);
i++)//文件头逐个读取文件字符直到文件结尾
fscanf(fp,"
equ[i].equipCode,equ[i].equipType,equ[i].equipName,&
equ[i].equipPrice,&
equ[i].buyDate,&
equ[i].scrap,&
equ[i].scrapDate);
if(strcmp(equ[i].equipCode,code)==0)//判断文件的数据与输入数是否匹配
{printf("
printf("
输入新设备编号\n"
scanf("
equ[i].equipCode);
输入新设备种类\n"
}}/*将修改后的信息写入文件
fclose(fp);
j=i;
i<
j;
i++)
{
fprintf(fp,"
equ[i].equipCode,equ[i].equipType,equ[i].equipName,equ[i].equipPrice,equ[i].buyDate,equ[i].scrap,equ[i].scrapDate);
\nwrite!
(3).统计模块
先输入设备类型,判断是否匹配,是的话输出ok,并把相应的内容输出,定义一个计数器count,每循环一次,自加1
inttotal()//统计模块
floatsum=0;
intcount=0;
floataver=0;
chartype[20];
EquInfoequ;
if(strcmp(equ.equipType,type)==0){
\nOK!
%s,%s,%s,%f,%s,%d,%s\n"
equ.equipCode,equ.equipType,equ.equipName,equ.equipPrice,equ.buyDate,equ.scrap,equ.scrapDate);
count++;
sum+=equ.equipPrice;
aver=sum/count;
}}
----------统计--返回结果-----------"
\n\n这个类型的是:
count);
\n\n统计的总价格:
%f"
sum);
\n\n平均价格是:
aver);
(4).搜索模块
分为按编号搜索,设备名搜索,设备价格搜索,用switch循环,来判断进入哪个,比如若输入为1,就会按编号搜索。
switch(choice)
case0:
exit(0);
break;
case1:
请输入设备编号:
code);
i++)//从文本中读取设备编号
{fscanf(fp,"
equ.equipCode,equ.equipType,equ.equipName,&
equ.equipPrice,&
equ.buyDate,&
equ.scrap,&
equ.scrapDate);
if(strcmp(equ.equipCode,code)==0){
\nequipCode,equipType,equipName,equipPrice,buyDate,scrap,ScrapDate\n"
\n%s,%s,%s,%f,%s,%d,%s\n"
}}
getchar();
case2:
printf("
请输入设备名称:
scanf("
name);
for(i=0;
{fscanf(fp,"
if(strcmp(equ.equipName,name)==0){printf("
getchar();
break;
case3:
请输入设备价格:
price);
{
fscanf(fp,"
if(equ.equipPrice==price){printf("
}}
(5).追加模块
与添加模块相似,只有一个地方不同,追加是以fopen打开文件,以a追加的方式追加数据的
if((fp=fopen("
a"
))==NULL)//a方式为追加
j++){
fprintf(fp,"
newequ[j].equipCode,newequ[j].equipType,newequ[j].equipName,newequ[j].equipPrice,newequ[j].buyDate,newequ[j].scrap,newequ[j].scrapDate);
四、调试过程(1.测试数据设计2.测试结果分析)
(1)测试数据设计:
进入主菜单:
根据需求操作,按“1”添加信息,以便测试
设备个数:
2
设备编号:
1
设备各类:
abc
设备名称:
switch
设备价格:
90
购买日期:
20010101
是否报废:
报废日期:
(2)测试结果分析:
1.主菜单函数:
根据需求输入相应的操作
主菜单
2.添加模块:
当输入1后,进入添加页面,对设备的各方面信息进行添加
添加设备
添加后文本中的数据
3.修改模块:
输入您需要修改的设备编号,如果输入的编号与查找不相同将真的提示返回菜单或退出,正确进入如下键面
修改设备信息
修改后文本中的信息
4.追加模块:
输入您需要追加的设备个数,进行设备信息的添加,进入如下所示
追加设备
追加后文件中的数据
5.统计模块:
输入设备类型,进行设备信息的统计,进入如下所示
分类统计
6.搜索模块:
选择你需要搜索的方式,可以按编号搜索,也可以按设备名搜索,还可以按设备价格搜索,如下所示
按编号搜索
按价格搜索
按设备名搜索
7.退出模块:
选择5直接退出系统
退出
五、总结
1.设计中遇到的问题及解决过程
文本中会出现乱码,但不是所有数据都就乱码,而是文件是的其中某一项是
乱码,应该不是fread与fprint的问题,后来发现我定义的是char字符串
类型,但在输入数据时scanf("
equ[i].buyDate);
用的是%d的格式输
入。
2.设计中产生的错误及原因分析
在修改模块中,修改数据成功后,信息写入文件中,成功后,在键面上输出
Write证明你已经修改信息成功。
可是会出现好几个write,文本中有几条
就会出现几个write。
经过讨论,得知,修改成功后没有跳出for循环,
遍历文本中的信息,每遍历一次,循环输出一次ok。
最后把输出语句放入
For循环外面。
这问题就成功解决。
3.设计体会和收获。
经过一个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,运用C语言可以解决许多实际问题,尤其在在信息管理方面。
要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现自己有好多不足之处,对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解。
通过询问老师和同学,翻阅课本和上网查找等方式,在解决问题的过程中,使我在这几个方面的认识有所提高,同时也学到了新东西。
通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
同时我们随时都要培养自己的动手能力,只有这样,才能更好的适应这个日新月异的飞速发展的社会。
六、附录
1、原代码
#include<
stdio.h>
stdlib.h>
//包括头文件
string.h>
EquInfonews;
//实例化结构体
/*********************添加模块*****************************/
intaddition()/*添加模块*/
{EquInfonews[50];
**********************************************************\n"
添加设备:
/*输入要添加的设备个数*/
输入设备名称\n"
news[j].equipName);
输入设备价格\n"
news[j].equipPrice);
输入购买日期\n"
news[j].buyDate);
//判断是否报废
是否报废?
0/1\n"
news[j].scrap);
输入报废日期\n"
news[j].scrapDate);
))==NULL)/*打开文件,输入保存*/
/*任务结束选择是返回主菜单还是跳出*/
/*******************************修改模块*********************/
EquInfoequ[50];
charcode[10];
inti,j,c;
FILE*fp;
修改设备信息:
请输入要修改的设备编号:
/*输入要修改的设备编号*/
------------------------------------\n"
for(i=0;
i++)//从文件头一个一个的读取字符,读到文件的结尾。
if(strcmp(equ[i].equipCode,code)==0)//判断文件中的数据与输入数是否匹配
equ[i].equipType);
输入新设备名称\n"
equ[i].equipName);
输入新设备价格\n"
equ[i].equipPrice);
输入新购买日期\n"
输入新是否报废?
equ[i].scrap);
输入新报废日期\n"
}/*将修改后的信息写入文件中*/
j=i;
\n------------------------------------\n"
返回菜单?
1.是\n"
intc;
floatsum=0;
floataver=0;
EquInfoequ;
inti;