收藏 分销(赏)

实验设备管理系统c语言版.doc

上传人:二*** 文档编号:4519301 上传时间:2024-09-26 格式:DOC 页数:31 大小:1.61MB 下载积分:5 金币
下载 相关 举报
实验设备管理系统c语言版.doc_第1页
第1页 / 共31页
本文档共31页,全文阅读请下载到手机保存,查看更方便
资源描述
C语言课程设计实验报告 班级 姓名 学号 11130730 实验课程 C 实验名称 实验设备管理系统 实验成绩 实验日期 2023.3.5 任课教师 一、 目的(本次课程设计 所涉及并规定掌握的知识点。) 课程设计 在学校实验室的设备管理工作中,设备的编排是一项十分复杂、棘手的工作。在编排过程中,由于数量多容易犯错。运用计算机辅助进行设备编排工作,既提高了编排的科学性,又可大大减轻管理人员的工作强度,提高工作效率,从而教学设备管理现代化迈上了一个新台阶。 实验室设备信息用文献存储,故要提供文献的输入输出操作;要可以完毕设备的录入和修改,需要提供设备添加和修改操作;实现对设备进行分类记录,需要提供排序操作;实现对设备的查询需要提供查找操作;此外还要提供键盘式选择菜单以实现功能选择总体设计 整个系统被设计为实验设备信息输入模块、实验设备信息添加模块、实验设备信息修改模块、实验设备分类记录模块和实验设备查询模块。 知识点 1.对于结构体数组的定义使用 2.指针变量的使用 3.以文献方式输入输出,纯熟掌握文献的各种方式 4.对于循环的应用格式 5.一些函数的应用,如strcmp函数 总结:提高程序设计能力与课堂知识内容的应用,掌握程序设计的基本方法和调 试技能。对指针,数组,文献了解更加深刻。 二、使用环境 (本次上机实践所使用的平台和相关软件。 ) Visual C++ 三、内容与设计思想 (1 .设计思绪 2 .重要数据结构 3 .重要代码结构 4 .重要代码段分析 。 ) 1 .设计思绪 如下图所示 实验设备管理系统 添加 追加 修改 记录 搜索 按编号 按名称 按价格 2 .重要数据结构 typedef struct EquInfo //定义结构体 { char equipCode[10]; //编号 char equipType[20]; //种类 char equipName[20]; //名称 float equipPrice; //价格 char buyDate[20]; //购买日期 int scrap; //是否报废 char scrapDate[20]; //报废日期 }EquInfo; 3 .重要代码结构 1.主函数 开 始 显 示 一 系 列 功 能 选 项 输入n,判断n是否是0~5? 调 用 与 n 相 应 的 模 块 N Y 输入用户要输入设备的个数i 2.添加模块 输入设备的各项具体信息 退出 将输入的信息存储到文献的中 2 1 返回主菜单 3.修改模块 输入要修改的设备编号 是否找到该设备资料 显示找到的记录,调用修改函数 显示没有找到 对该设备的信息进行修改 返回主菜单 返回主菜单 y n 输入设备类型 退出 2 1 返回主菜单 输出记录结果 文献中的设备信息进行记录 4.记录模块 5.搜索模块 询问用户想要选择的搜索方式 4 .重要代码段分析 (1).添加模块 重要是实现设备的添加,输入添加的设备个数,然后用for循环语句,循环次数是你输入的设备个数。循环输出设备的编号,种类名称,用fopen打开文献,w写方式实现初次添加。 int addition() /*添加模块*/ { EquInfo news[50]; int i,j,c; FILE *fp; system("cls"); printf("你想输入多少个设备?\n"); scanf("%d",&i); /*输入要添加的设备个数*/ for(j=0;j<i;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<i;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。 int 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 ",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<j;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 int total()//记录模块 { float sum=0;int count=0; float aver=0;char type[20]; EquInfo equ; 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) { 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) { 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; 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.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; 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,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<i;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 购买日期:20230101 是否报废: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<stdio.h> #include<stdlib.h> //涉及头文献 #include<string.h> typedef struct EquInfo //定义结构体 { char equipCode[10]; //编号 char equipType[20]; //种类 char equipName[20]; //名称 float equipPrice; //价格 char buyDate[20]; //购买日期 int scrap; //是否报废 char scrapDate[20]; //报废日期 }EquInfo; EquInfo news; //实例化结构体 /*********************添加模块*****************************/ int addition() /*添加模块*/ { EquInfo news[50]; int i,j,c; FILE *fp; system("cls"); printf("**********************************************************\n"); printf("添加设备:\n"); printf("**********************************************************\n"); printf("你想输入多少个设备?\n"); scanf("%d",&i); /*输入要添加的设备个数*/ for(j=0;j<i;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<i;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); /*任务结束选择是返回主菜单还是跳出*/ } /*******************************修改模块*********************/ int modifty() /*修改模块*/ { EquInfo equ[50]; char code[10]; 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++) //从文献头一个一个的读取字符,读到文献的结尾。 { 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<j;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); } int total()//记录模块 { int c; float sum=0; int count=0; float aver=0; char type[20]; 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.buyDate,&equ.scrap,&equ.scrapDate); 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); 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 code[10]; char name[20]; float price; int choice; int c; FILE *fp; EquInfo equ; int i; system("cls"); fp=fopen("swy.txt","r"); if(fp==NULL)exit(0); printf("选一种方式搜索:\n\n"); printf("1.编号搜索\n\n"); printf("2.设备名搜索 \n\n"); printf("3.设备价格搜索\n\n"); printf("0.返回\n\n"); 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=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,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; 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.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; 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,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; } 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 newequ[50]; int i,j; int c; FILE *fp; system("cls"); printf("**********************************************************\n"); printf("追加设备:\n"); printf("*******************************MENU***********************\n"); printf("你想追加多少个设备?\n"); scanf("%d",&i); /*追加要添加的设备个数*/ for(j=0;j<i;j++) { printf("------------------\n"); printf("输入设备编号\n"); scanf("%s",&newequ[j].equipCode); printf("输入设备种类\n"); scanf("%s",newequ[j].equipType); printf("输入设备名称\n"); scanf("%s",newequ[j].equipName); printf("输入设备价格\n"); scanf("%f",&newequ[j].equipPrice); printf("输入购买日期\n"); scanf("%s",&newequ[j].bu
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服