实验设备管理系统c语言版_第1页
实验设备管理系统c语言版_第2页
实验设备管理系统c语言版_第3页
实验设备管理系统c语言版_第4页
实验设备管理系统c语言版_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c语言课程设计实验报告班级 姓名 学号 11130730实验课程 c实验名称 实验设备管理系统实验成绩 实验日期 2014.3.5任课教师一、 目的(本次课程设计 所涉及并要求掌握的知识点。)课程设计在学校实验室的设备管理工作中,设备的编排是一项十分复杂、棘手的工作。在编排过程中,由于数量多容易出错。利用计算机辅助进行设备编排工作,既提高了编排的科学性,又可大大减轻管理人员的工作强度,提高工作效率,从而教学设备管理现代化迈上了一个新台阶。实验室设备信息用文件存储,故要提供文件的输入输出操作;要能够完成设备的录入和修改,需要提供设备添加和修改操作;实现对设备进行分类统计,需要提供排序操作;实现对

2、设备的查询需要提供查找操作;另外还要提供键盘式选择菜单以实现功能选择总体设计整个系统被设计为实验设备信息输入模块、实验设备信息添加模块、实验设备信息修改模块、实验设备分类统计模块和实验设备查询模块。知识点1.对于结构体数组的定义使用2.指针变量的使用3.以文件方式输入输出,熟练掌握文件的各种方式4.对于循环的应用格式5.一些函数的应用,如strcmp函数总结:提高程序设计能力与课堂知识内容的应用,掌握程序设计的基本方法和调 试技能。对指针,数组,文件了解更加深刻。二、使用环境 (本次上机实践所使用的平台和相关软件。 )visual c+三、内容与设计思想 (1 设计思路 2 主要数据结构 3

3、主要代码结构 4 主要代码段分析 。 )1 设计思路 如下图所示实验设备管理系统添加追加修改统计搜索按编号按名称按价格2 主要数据结构typedef struct equinfo /定义结构体 char equipcode10; /编号 char equiptype20; /种类 char equipname20; /名称 float equipprice; /价格 char buydate20; /购买日期 int scrap; /是否报废 char scrapdate20; /报废日期equinfo;3 主要代码结构 1.主函数 开 始显 示 一 系 列 功 能 选 项输入n,判断n是否是

4、05? 调 用 与 n 相 应 的 模 块ny 输入用户要输入设备的个数i2.添加模块输入设备的各项详细信息退出将输入的信息存储到文件的中21返回主菜单3.修改模块输入要修改的设备编号是否找到该设备资料显示找到的记录,调用修改函数显示没有找到对该设备的信息进行修改返回主菜单返回主菜单y n输入设备类型退出21返回主菜单输出统计结果文件中的设备信息进行统计4.统计模块5.搜索模块 询问用户想要选择的搜索方式4 主要代码段分析(1).添加模块主要是实现设备的添加,输入添加的设备个数,然后用for循环语句,循环次数是你输入的设备个数。循环输出设备的编号,种类名称,用fopen打开文件,w写方式实现首

5、次添加。int addition() /*添加模块*/ equinfo news50; int i,j,c; file *fp; system(cls); printf(你想输入多少个设备?n); scanf(%d,&i); /*输入要添加的设备个数*/ for(j=0;ji;j+) printf(-n); printf(输入设备编号n); scanf(%s,&newsj.equipcode); printf(输入设备种类n); scanf(%s,newsj.equiptype); if(fp=fopen(swy.txt,w)=null) /*打开文件,输入保存*/ printf(不能打开文件

6、!n);for (j=0;ji;j+) fprintf(fp,%s %s %s %f %s %d %s ,newsj.equipcode,newsj.equiptype,newsj.equipname,newsj.equipprice,newsj.buydate,newsj.scrap,newsj.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); /*任务结束选择是返回主菜单还是跳出*/(

7、2).修改模块用for循环使用feof函数从文件头逐个读取文件字符直到文件结尾,其中用了strcmp函数,比较文件中的数据与输入数是否匹配,若是匹配,返回0,说明你输入的编号正确,键面进入请输入新的编号、种类、名称等,将修改后的信息写入文件中,成功后输出 modifty() /*修改模块*/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 ,equi.equipcode,equi.equipty

8、pe,equi.equipname,&equi.equipprice,&equi.buydate,&equi.scrap,&equi.scrapdate);if(strcmp(equi.equipcode,code)=0)/判断文件的数据与输入数是否匹配printf(-n);printf(输入新设备编号n);scanf(%s,equi.equipcode);printf(输入新设备种类n); /*将修改后的信息写入文件 fclose(fp);j=i;for(i=0;ij;i+)fprintf(fp,%s %s %s %f %s %d %s ,equi.equipcode,equi.equipt

9、ype,equi.equipname,equi.equipprice,equi.buydate,equi.scrap,equi.scrapdate);printf(nwrite!n);fclose(fp); (3).统计模块先输入设备类型,判断是否匹配,是的话输出ok,并把相应的内容输出,定义一个计数器count,每循环一次,自加1int total()/统计模块 float sum=0;int count=0; float aver=0;char type20; equinfo equ;if(strcmp(equ.equiptype,type)=0) printf(nok!n);printf

10、(%s,%s,%s,%f,%s,%d,%sn,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(nn这个类型的是:%d,count); printf(nn统计的总价格:%f,sum); printf(nn平均价格是:%f,aver);(4).搜索模块分为按编号搜索,设备名搜索,设备价格搜索,用swit

11、ch循环,来判断进入哪个,比如若输入为1 ,就会按编号搜索。switch(choice) case 0:exit(0);break;case 1: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)

12、 printf(nequipcode,equiptype,equipname,equipprice,buydate,scrap,scrapdaten); printf(n%s,%s,%s,%f,%s,%d,%sn,equ.equipcode,equ.equiptype,equ.equipname,equ.equipprice,equ.buydate,equ.scrap,equ.scrapdate);getchar();break;case 2:printf(请输入设备名称:n);scanf(%s,name);for(i=0;!feof(fp);i+)fscanf(fp,%s %s %s %f

13、%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,scrapdaten); printf(n%s,%s,%s,%f,%s,%d,%sn,equ.equipcode,equ.equiptype,equ.equipname,equ.equippr

14、ice,equ.buydate,equ.scrap,equ.scrapdate); getchar(); break; case 3: 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

15、,equiptype,equipname,equipprice,buydate,scrap,scrapdaten);printf(n%s,%s,%s,%f,%s,%d,%sn,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(不能打开文

16、件!n);for (j=0;ji;j+)fprintf(fp,%s %s %s %f %s %d %s ,newequj.equipcode,newequj.equiptype,newequj.equipname,newequj.equipprice,newequj.buydate,newequj.scrap,newequj.scrapdate);fclose(fp);四、调试过程 (1 测试数据设计 2 测试结果分析 )(1)测试数据设计: 进入主菜单:根据需求操作,按“1”添加信息,以便测试设备个数:2设备编号:1设备各类:abc设备名称:switch设备价格:90购买日期:2001010

17、1是否报废:0报废日期:0(2)测试结果分析:1.主菜单函数:根据需求输入相应的操作主菜单2.添加模块:当输入1后,进入添加页面,对设备的各方面信息进行添加添加设备添加后文本中的数据3.修改模块:输入您需要修改的设备编号,如果输入的编号与查找不相同将真的提示返回菜单或退出,正确进入如下键面修改设备信息修改后文本中的信息4.追加模块:输入您需要追加的设备个数,进行设备信息的添加,进入如下所示追加设备追加后文件中的数据5.统计模块:输入设备类型,进行设备信息的统计,进入如下所示分类统计6.搜索模块:选择你需要搜索的方式,可以按编号搜索,也可以按设备名搜索,还可以按设备价格搜索,如下所示按编号搜索按

18、价格搜索按设备名搜索7.退出模块:选择5直接退出系统退出五、总结 1 设计中遇到的问题及解决过程 文本中会出现乱码,但不是所有数据都就乱码,而是文件是的其中某一项是乱码,应该不是fread与fprint的问题,后来发现我定义的是char字符串类型,但在输入数据时scanf(%d,&equi.buydate);用的是%d的格式输入。2 设计中产生的错误及原因分析 在修改模块中,修改数据成功后,信息写入文件中,成功后,在键面上输出write证明你已经修改信息成功。可是会出现好几个write,文本中有几条就会出现几个write。经过讨论,得知,修改成功后没有跳出for循环,遍历文本中的信息,每遍历一

19、次,循环输出一次ok。最后把输出语句放入for循环外面。这问题就成功解决。3 设计体会和收获。经过一个星期的上机实践学习,使我对c语言有了更进一步的认识和了解,运用c语言可以解决许多实际问题,尤其在在信息管理方面。要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现自己有好多不足之处,对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解。通过询问老师和同学,翻阅课本和上网查找等方式,在解决问题的过程中,使我在这几个方面的认识有所提高,同时也学到了新东西。通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习c

20、语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。同时我们随时都要培养自己的动手能力,只有这样,才能更好的适应这个日新月异的飞速发展的社会。六、附录 1、原代码 #include#include /包括头文件#includetypedef struct equinfo /定义结构体 char equipcode10; /编号 char equiptype20; /种类 char equipname20; /名称 float equipprice; /价格 char buydate20; /购买日期 int scrap

21、; /是否报废 char scrapdate20; /报废日期equinfo;equinfo news; /实例化结构体 /*添加模块*/int addition() /*添加模块*/ equinfo news50; int i,j,c; file *fp; system(cls); printf(*n); printf(添加设备:n); printf(*n); printf(你想输入多少个设备?n); scanf(%d,&i); /*输入要添加的设备个数*/ for(j=0;ji;j+) printf(-n); printf(输入设备编号n); scanf(%s,&newsj.equipco

22、de); printf(输入设备种类n); scanf(%s,newsj.equiptype); printf(输入设备名称n); scanf(%s,newsj.equipname); printf(输入设备价格n); scanf(%f,&newsj.equipprice); printf(输入购买日期n); scanf(%s,&newsj.buydate); /判断是否报废 printf(是否报废?0/1n); scanf(%d,&newsj.scrap); printf(输入报废日期n); scanf(%s,&newsj.scrapdate); if(fp=fopen(swy.txt,w)

23、=null) /*打开文件,输入保存*/ printf(不能打开文件!n);for (j=0;ji;j+)fprintf(fp,%s %s %s %f %s %d %s ,newsj.equipcode,newsj.equiptype,newsj.equipname,newsj.equipprice,newsj.buydate,newsj.scrap,newsj.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

24、)return(0); /*任务结束选择是返回主菜单还是跳出*/ /*修改模块*/ int modifty() /*修改模块*/equinfo equ50;char code10;int i,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+) /从文件头一个一

25、个的读取字符,读到文件的结尾。 fscanf(fp,%s %s %s %f %s %d %s ,equi.equipcode,equi.equiptype,equi.equipname,&equi.equipprice,&equi.buydate,&equi.scrap,&equi.scrapdate); if(strcmp(equi.equipcode,code)=0)/判断文件中的数据与输入数是否匹配printf(-n);printf(输入新设备编号n);scanf(%s,equi.equipcode);printf(输入新设备种类n);scanf(%s,equi.equiptype);p

26、rintf(输入新设备名称n);scanf(%s,equi.equipname);printf(输入新设备价格n);scanf(%f,&equi.equipprice);printf(输入新购买日期n);scanf(%s,&equi.buydate); /判断是否报废 printf(输入新是否报废?0/1n); scanf(%d,&equi.scrap); printf(输入新报废日期n); scanf(%s,&equi.scrapdate); /*将修改后的信息写入文件中*/fclose(fp);j=i;if(fp=fopen(swy.txt,w)=null)printf(n不能打开文件!n

27、);for(i=0;ij;i+)printf(nwrite!n); fprintf(fp,%s %s %s %f %s %d %s ,equi.equipcode,equi.equiptype,equi.equipname,equi.equipprice,equi.buydate,equi.scrap,equi.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);int total()/统计

28、模块int c;float sum=0;int count=0;float aver=0;char type20;equinfo equ;int i;file *fp; system(cls);if(fp=fopen(swy.txt,r)=null) printf(n不能打开文件!n);printf(请输入设备类型:n);scanf(%s,type);for(i=0;!feof(fp);i+)fscanf(fp,%s %s %s %f %s %d %s n,equ.equipcode,equ.equiptype,equ.equipname,&equ.equipprice,&equ.buydat

29、e,&equ.scrap,&equ.scrapdate);if(strcmp(equ.equiptype,type)=0) /判断文件中的数据与输入数是否匹配 printf(nok!n);printf(%s,%s,%s,%f,%s,%d,%sn,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

30、n这个类型的是:%d,count);printf(nn统计的总价格:%f,sum);printf(nn平均价格是:%f,aver);printf(n按任意键退出.);getchar();/得到任意一个数printf(n-n);printf(返回主菜单? n);printf(1.是 n);printf(2.否,退出n);scanf(%d,&c);if(c=1)return(-1);if(c=2)return(0); /*搜索模块*/int search() /*搜索模块*/char code10;char name20;float price;int choice;int c;file *fp;

31、equinfo equ; int i;system(cls);fp=fopen(swy.txt,r);if(fp=null)exit(0);printf(选一种方式搜索:nn);printf(1.编号搜索nn);printf(2.设备名搜索 nn);printf(3.设备价格搜索nn);printf(0.返回nn);printf(请输入号码 0-3:);scanf(%d,&choice); if(choice=0)exit(0);switch(choice)case 0:exit(0);break;case 1: printf(请输入设备编号:n); scanf(%s,code); for(i

32、=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)/strcmp函数,两个字符串相等,返回0 printf(nequipcode,equiptype,equipname,equipprice,buydate,scrap,scrapdaten); printf(n%s,%

33、s,%s,%f,%s,%d,%sn,equ.equipcode,equ.equiptype,equ.equipname,equ.equipprice,equ.buydate,equ.scrap,equ.scrapdate);getchar();break;case 2: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.sc

34、rap,&equ.scrapdate);if(strcmp(equ.equipname,name)=0) printf(nequipcode,equiptype,equipname,equipprice,buydate,scrap,scrapdaten); printf(n%s,%s,%s,%f,%s,%d,%sn,equ.equipcode,equ.equiptype,equ.equipname,equ.equipprice,equ.buydate,equ.scrap,equ.scrapdate); getchar();break;case 3: printf(请输入设备价格:n); sca

35、nf(%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,scrapdaten); printf(n%s,%s,%s,%f,%s,%d,%sn,e

36、qu.equipcode,equ.equiptype,equ.equipname,equ.equipprice,equ.buydate,equ.scrap,equ.scrapdate); getchar();break;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);int input() /*追加模块*/ equinfo newequ50; int i,j; int c; file *fp; system(cls); printf(*n); printf(追加设备:n); printf(*menu*n); printf(你想追加多少个设备?n); scanf(%d,&i); /*追加要添加的设备个数*/ for(j=0;ji;j+) printf(-n); printf(输入设备编号n); scanf(%s,&newequ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论