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