《C语言课程设计-实验室设备信息管理系统.doc》由会员分享,可在线阅读,更多相关《C语言课程设计-实验室设备信息管理系统.doc(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 程序设计基础课程设计实验室设备信息管理系统 * * *大学二一五 二一六 学年第一学期电子与信息工程系课程设计报告书课程名称: 程序设计基础实践 班 级: 学 号: 姓 名: 指导教师: 二一五年十二月 实验室设备信息管理系统 1. 实验室设备信息管理系统功能(1). 每一条记录包括实验室的设备编号、设备名称、设备型号、设备价格、设备购买日期信息。(2). 实验设备信息录入:可以一次完成诸多条记录的录入。(3). 实验设备信息更改:可实现对实验设备信息更改的信息进行适当的修改。 (4). 报废设备信息删除:对实验损毁设备信息予以删除。(5). 实验设备信息查询:本系统提供两种查询实验设备的方
2、法:1.按器材名称查询.2.按器材编号查询.从而完成按实验设备的查找查找功能,并显示。(6). 实验设备信息排序:根据实验设备的编号进行排序,以实现实验设备的有序全局查看。实验设备信息显示功能:完成全部学生记录的显示。(7). 简单帮助:提供实验室负责人简单的信息。(8). 保存功能:将学生记录保存在任何自定义的文件中,如保存在:c:score。(9). 读取功能:将保存在文件中的学生记录读取出来。(10). 有一个清晰美观界面来调用各个功能2.设计内容2.1 程序的总体设计实验室设备信息管理系统实验设备信息录 入实验设备信息更 改报废设备信息删 除实验设备信息查 询实验设备信息排 序整个系统
3、除了主函数外,另外还有11个函数,实现以下功能:实验室设备录入功能、显示功能、查找功能、排序功能、读出与写入取功能。各个函数的详细设计说明分别如下:2.2 数据结构根据系统要求,系统中设计实验器材具体信息,其结构如下:数据项名称数据项系统表示数据类型数据长度备注编号bianhao字符串名称name字符串20型号model字符串20购入时间buy_date字符串20价格price字符串20使用C语言创建的结构体如下:typedef Equipment /*定义数据结构*/char bianhao; /编号 char name20; /名称 char model20; /型号 bnm char p
4、rice20; /价格 char buy_date20; /购买日期;3 详细设计3.1实验设备管理系统主程序模块设计控制整个程序的运行,通过主函数模块分别调用各个模块,实现各项功能,流程如图1所示。通过switch进入分支结构从而调用执行不同的函数,以实现菜单选择的功能。程序如下:void main() int choice; int choice2; IO_ReadInfo(); system(cls); while(1) /*主菜单*/ printf(nnnnntt- 苏州科技学院实验器材管理系统-nn); printf(ttt 1. 实验设备信息录入n); printf(ttt 2.
5、实验设备信息更改n); printf(ttt 3. 报废设备信息删除n); printf(ttt 4. 实验设备信息查询n); printf(ttt 5. 实验设备信息排序n); printf(ttt 6. 帮 助n); printf(ttt 7. 退 出n); printf(ntt-*-*-*-*-*-*-n); printf(nnn 请选择(1-7):); scanf(%d,&choice); getchar(); system(cls); switch(choice) case 1: Equipment_Insert(); break; case 2: Equipment_Modify(
6、); break; case 3: Equipment_Delete(); break; case 4: printf(nnnnnt请选择(1/2) 1.按器材名称查询n); printf( 2.按器材编号查询nnn); scanf(%d,&choice2); switch(choice2) case 1: Equipment_nameSelect(); break;case 2: Equipment_bianhaoSelect();break; break; case 5: void Equipment_paixu(); Equipment_Display(); break; case 6:
7、 printf(nnnnnnttt-*-电子与通信工程学院实验室-*-nn); printf(tttt 负责人:sdiwen nn); printf(tttt 办公室:A-201 nn); printf(tttt Tel:0514-12345678 nn); printf(ttt-*-*-*-*-*-*-*-nn); printf(ttttt| made by wangluoyangnn); break; case 7: exit(0); break; system(Pause); system(cls); IO_WriteInfo(); 开始显示系统所提供的全部功能选择输入0-7,通过swi
8、tch判断 N据n值调用各功能模块函数 结束图1.主模块流程图其运行界面如下:3.2一些辅助函数l 通过设备编号返回数组下标(int Equipment_SearchByIndex(char id))通过(strcmp(equipmenti.bianhao,id)=0) 进行比较,从而反馈回对应设备的数组下标。以方便查询函数,与显示函数的执行。程序如下:int Equipment_SearchByIndex(char id) int i; for (i=0;inum;i+) if (strcmp(equipmenti.bianhao,id)=0) return i; return -1;l 通
9、过设备名称返回数组下标(int Equipment_SearchByName(char name ))通过(strcmp(equipmenti.name, name)进行比较,从而反馈回对应设备的数组下标。以方便查询函数,与显示函数的执行。程序如下:int Equipment_SearchByName(char name) int i; for (i=0;inum;i+) if (strcmp(equipmenti.name,name)=0) return i; return -1;l 显示单条设备记录(void Equipment_DisplaySingle(int index))为报废设备
10、删除提供信息的显示。如下所示,即是调用单条显示函数。void Equipment_DisplaySingle(int index) printf(nnn设备编号 设备名称 设备型号 设备价格 设备购买日期n); printf(-n); printf(%5s%12s%10s%12s%15sn,equipmentindex.bianhao,equipmentindex.name, equipmentindex.model,equipmentindex.price,equipmentindex.buy_date); l 显示在库设备信息 ( void Equipment_Display( ) )通过
11、for循环语句将结构体数组中所有的内容显示出来,为排序函数提供显示提出,排序函数最后显示即需要调用显示函数。void Equipment_Display() int i; printf(设备编号 设备名称 设备型号 设备价格 设备购买日期n); printf(-n); for (i=0;inum;i+) printf(%5s%12s%10s%12s%15sn,equipmenti.bianhao,equipmenti.name, equipmenti.model,equipmenti.price,equipmenti.buy_date); l 将设备信息从文件读出void IO_ReadInf
12、o()将设备信息写入文件 void IO_WriteInfo()这两条函数即是将所录入系统的信息保存在database.txt中,以便下次使用时信息的读取与保存。void IO_ReadInfo() FILE *fp; int i; if (fp=fopen(Database.txt,rb)=NULL) printf(不能打开文件!n); return; if (fread(&num,sizeof(int),1,fp)!=1) num=-1; else for(i=0;inum;i+) fread(&equipmenti,sizeof(struct Equipment),1,fp); fclo
13、se(fp);/*将设备信息写入文件 */void IO_WriteInfo() FILE *fp; int i; if (fp=fopen(Database.txt,wb)=NULL) printf(不能打开文件!n); return; if (fwrite(&num,sizeof(int),1,fp)!=1) printf(写入文件错误!n); for (i=0;inum;i+) if (fwrite(&equipmenti,sizeof(struct Equipment),1,fp)!=1) printf(写入文件错误!n); fclose(fp);3.3 实验设备信息录入模块设计(Vo
14、id Equipment_Insert( ))信息输入时,设计思想为通过while(1)死循环,不断输入字符串的值保存在结构体数组中,通过 if (getchar()=n) break; 来判定是否跳出循环。在系统中输入相关信息流程图如图2所示。开始功能选择信息输入根据提示 依次输入实验室设备信息录入成功(保存在结构体数组中)结束提示是否继续输入YN图2. 实验设备信息录入模块流程图程序如下:void Equipment_Insert() while(1) printf(nnn请输入 实验设备编号 ); scanf(%s,&equipmentnum.bianhao); printf(请输入 实
15、验设备名称 ); scanf(%s,&equipmentnum.name); printf(请输入 实验设备型号 ); scanf(%s,&equipmentnum.model); printf(请输入 实验设备采购价格 ); scanf(%s,&equipmentnum.price); printf(请输入 实验设备购买日期 ); scanf(%s,&equipmentnum.buy_date); num+; printf(n是否继续信息录入? (y/n) );getchar() if (getchar()=n) break; 程序运行如下:3.4实验设备信息更改模块设计(Void Equi
16、pment_Modify( )) 修改信息,系统要求用户输入要修改的设备编号,用户只需将设备新的信息按要求输入即可对信息进行修改,流程图如图3.其调用index=Equipment_SearchByIndex(id);通过编号返回其下标,并对结构体对应的数组进行重新赋值从而达到修改的效果。开始功能选择设备信息更改输入编号,判断是否存在提示没有设备!NY输入新值修改数据结束图3. 实验设备信息更改模块流程图程序如下:void Equipment_Modify() while(1) char id20; int index; printf(nnnnn请输入 需要修改的实验设备编号 ); scanf
17、(%s,&id); index=Equipment_SearchByIndex(id); if (index=-1) printf(*该设备不存在! 抱歉*n); else printf(你需要修改的设备信息为 n); Equipment_DisplaySingle(index); printf(-* 请输入修改新值 *-n); printf(nnn* 请输入 设备编号 *:); scanf(%s,&equipmentindex.bianhao); printf(请输入 设备名称 ); scanf(%s,&equipmentindex.name); printf(请输入 设备型号 ); sca
18、nf(%s,&equipmentindex.model); printf(请输入 设备价格 ); scanf(%s,&equipmentindex.price); printf(请输入 设备购买日期 ); scanf(%s,&equipmentindex.buy_date); printf( 是否继续? (y/n); getchar(); if (getchar()=n) break; 程序运行如下:3.5报废设备信息删除模块设计( void Equipment_Delete( ) )删除报废设备信息,系统要求用户输入要删除的设备编号,输入后即可删除设备信息,设计思想:流程图如图3.开始输入要
19、删除的设备编号(将结构体数组的后一项赋值给该项) 提示删除成功!结束输入编号,判断是否存在N图3. 报废设备信息删除模块流程图程序如下:void Equipment_Delete() int i; while(1) char id20; int index; printf(nnnn请输入 要删除的设备编号 ); scanf(%s,&id); index=Equipment_SearchByIndex(id); if (index=-1) printf(设备不存在! 抱歉n); else printf(你要删除的设备信息为 n); Equipment_DisplaySingle(index);
20、printf(是否真的要删除该设备? (y/n); if (getchar()=y) for (i=index;inum-1;i+) equipmenti=equipmenti+1; num-; getchar(); printf(是否继续? (y/n); getchar(); if (getchar()=n) break; 3.6 实验设备信息查询模块设计按器材名称查询: Equipment_nameSelect();按器材编号查询: Equipment_bianhaoSelect();设备信息的查找,系统要求用户输入要查找的设备编号,输入后即可得到设备信息,流程图如图4.开始通过输入信息调
21、用对应的函数,判断是否存在NY显示所查找的设备信息提示查找失败,没有找到设备编号!结束输入1按名称查询输入2按编号查询功能选择设备查找12 图4. 实验设备查找模块流程图3.7实验设备信息排序模块设计(void Equipment_paixu( ) )设备信息显示,可显示所有设备信息,流程图如图5.开始冒泡排序后调用在库显示函数显示所有设备信息结束图7. 设备信息排序模块流程图程序如下:void Equipment_paixu() int i,j; struct Equipment paixu; for (i=0;inum;i+) for (j=1;j0) paixu=equipmentj-1
22、; equipmentj-1=equipmentj; equipmentj=paixu; 4. 调试分析与总结经过一周的调查、学习、研究和设计,实验室器材管理系统的设计接近了尾声。程序设计之初在for循环的初值没有安排好,导致输出结果与预期相差甚远。还有一些中英文状态等问题,漏输分号。最主要的就是程序的逻辑结构没有把握好导致程序并不是所想的那样执行下去。在这里我将本次设计做如下总结: 本系统的功能已经达到设计的要求。系统中各个模块的功能均已实现,为整体系统的构建奠定了基础。 系统模块的功能可以被进一步扩展。 系统中模块划分明确,模块功能设计有较强的针对性。 系统的设计遵循软件开发的全过程,使我
23、对软件系统的开发过程有了更深刻的认识。 当然系统的设计没有完美无缺的,本次系统在某些地方可能存在不足,囿于时间的原因在许多方面还需做出进一步的改进和完善。还有一些想法没能很好的体现在本次设计上。在课后还将进一步的思考整合所学知识做出创新。在最后感谢严迪新老师精彩的授课,使我对C语言以及C+有了更深层次的认知,有了入门编程的思维。附录:源代码#include stdio.h#includestring/*定义实验器材 结构体*/struct Equipment char bianhao20; /设备编号 char name20; /设备名称 char model20; /设备型号 char pr
24、ice20; /设备价格 char buy_date20; /设备购买日期;/*声明实验器材数组及实验器材数量*/struct Equipment equipment1000;int num=0;/*通过设备编号返回数组下标*/int Equipment_SearchByIndex(char id) int i; for (i=0;inum;i+) if (strcmp(equipmenti.bianhao,id)=0) return i; return -1; /*通过设备名称返回数组下标*/int Equipment_SearchByName(char name) int i; for (
25、i=0;inum;i+) if (strcmp(equipmenti.name,name)=0) return i; return -1; /*显示单条设备记录*/void Equipment_DisplaySingle(int index) printf(nnn设备编号 设备名称 设备型号 设备价格 设备购买日期n); printf(-n); printf(%5s%12s%10s%12s%15sn,equipmentindex.bianhao,equipmentindex.name, equipmentindex.model,equipmentindex.price,equipmentind
26、ex.buy_date); /*插入设备信息*/void Equipment_Insert() while(1) printf(nnn请输入 实验设备编号 ); scanf(%s,&equipmentnum.bianhao); printf(请输入 实验设备名称 ); scanf(%s,&equipmentnum.name); /getchar(); printf(请输入 实验设备型号 ); scanf(%s,&equipmentnum.model); /getchar(); printf(请输入 实验设备采购价格 ); scanf(%s,&equipmentnum.price); /getc
27、har(); printf(请输入 实验设备购买日期 ); scanf(%s,&equipmentnum.buy_date); /getchar(); num+; printf(n是否继续信息录入? (y/n) ); getchar(); if (getchar()=n) break; /*修改设备信息*/void Equipment_Modify() while(1) char id20; int index; printf(nnnnn请输入 需要修改的实验设备编号 ); scanf(%s,&id); index=Equipment_SearchByIndex(id); if (index=
28、-1) printf(*该设备不存在! 抱歉*n); else printf(你需要修改的设备信息为 n); Equipment_DisplaySingle(index); printf(-* 请输入修改新值 *-n); printf(nnn* 请输入 设备编号 *:); scanf(%s,&equipmentindex.bianhao); /getchar(); printf(请输入 设备名称 ); scanf(%s,&equipmentindex.name); /getchar(); printf(请输入 设备型号 ); scanf(%s,&equipmentindex.model); /
29、 getchar(); printf(请输入 设备价格 ); scanf(%s,&equipmentindex.price); /getchar(); printf(请输入 设备购买日期 ); scanf(%s,&equipmentindex.buy_date); printf( 是否继续? (y/n); getchar(); if (getchar()=n) break; /*删除设备信息*/void Equipment_Delete() int i; while(1) char id20; int index; printf(nnnn请输入 要删除的设备编号 ); scanf(%s,&id); index=Equipment_SearchByIndex(id); if (index=-1) printf(设备不存在! 抱歉n); else printf(你要删除的设备信息为 n); Equipment_DisplaySingle(index); printf(是否真的要删除该设备? (y/n); getchar(); if (getchar()=y) for (i=index;inum-1;i+) equipmenti=equipmenti+1; /把后边的对象都向