设备管理_实验设备管理系统程序报告_第1页
设备管理_实验设备管理系统程序报告_第2页
设备管理_实验设备管理系统程序报告_第3页
设备管理_实验设备管理系统程序报告_第4页
设备管理_实验设备管理系统程序报告_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

目 录一、需求与功能分析第二章 概要设计52.1总体设计5 2.2面向对象设计52.3运行界面设计6第三章 详细设计73.1 系统设计与实现73.2 模块设计8第四章 测试分析10第五章 课程设计总结10附录:程序代码(仅电子版需要、纸质版不需要)一、需求与功能分析1.1需求为了方便管理校内各种实验设备,能够翻遍快捷的录入查询各个实验设备的基本信息而编写了此程序实验设备管理系统设计实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。1.2主要功能:1、能够完成对设备的录入和修改。2、对设备进行分类统计。4、 设备的破损耗费和遗损处理。4、设备的查询。1.3功能需求1、 可实现管理员登陆管理系统,游客查询系统。2、 对实验设备类型的管理。3、 对实验设备各项信息的录入和修改。4、 对实验设备的分类查询统计。5、 对实验设备的遗损处理二、 概要设计2.1总体设计程序总体共分为4个类:1、 菜单类2、 设备类型类3、 设备类4、 管理员类 由主函数主持整体运行,由菜单类调用其它三类2.1 面向对象设计1.设备类型类: (见图2) void shuru(); /设备类型的输入void tianjia(); /设备类型的添加void shanchu(); /设备类型的删除void show(); /设备类型的输出显示void xieru(); /设备类型的写入void duqu(); /设备类型的读取2. 设备类: nfom* write() /设备的创建写入 (见图3) Infom* load() /从文档中读取数据 (见图4) void acquire(Infom* head) /分类查询数据 (见图5) void acquire2(Infom* head) /查询全部数据 (见图5)void acqu(char choose) /分类查询的内容支持 (见图5)void add() /添加新内容 (见图6)void undo(Infom* head) /删除 (见图7)int save(Infom* head) /将现数据进行保存void revise(Infom* head) /修改数据 void classify(Infom* head) /对数据的分类统计 (见图8)void clasK(Infom* head) /类型的分类统计 (见图8)void clasP(Infom* head) /价格的分类统计 (见图8)void clasE(Infom* head) /是否报废的统计 (见图8)3. 管理员类: void create() /创建用户名和密码int log() /登陆void change() /修改用户名和密码2.2 运行界面设计运行界面由菜单类实现;菜单类:1.int menu1(device *p,struct ShiyanEquip *head,DeviceTipe *a,manager *b) /管理模式主菜单2.int menu2(device *p,struct ShiyanEquip *head,DeviceTipe *a) /游客模式主菜单3.struct ShiyanEquip * entering(device *p)/管理模式录入菜单4.struct ShiyanEquip *entering2(device *p)/游客模式录入菜单5.struct ShiyanEquip * change(device *p)/修改菜单6.struct ShiyanEquip * query(device *p)/查询菜单7.struct ShiyanEquip * statistic(device *p)/分类统计菜单8.struct ShiyanEquip * account(manager *b)/账号菜单9.struct ShiyanEquip * type(DeviceTipe *a)/设备类型菜单三、 详细设计3.1 系统设计与实现登陆创建开始录入主菜单2全部查询创建查询主菜单1分类查询录入载入添加统计分类查询全部查询删除修改添加载入查询修改设备类型修改账号类型统计输入报废统计载入价格统计显示删除【总体框架、流程设计,模块划分及接口设计等】总体框架:图1接口设计:1. int menu1(device *p,struct ShiyanEquip *head,DeviceTipe *a,manager *b) 功能 调用管理模式主菜单并指向管理模式各项分菜单2. int menu2(device *p,struct ShiyanEquip *head,DeviceTipe *a) 功能 调用游客模式主菜单并指向游客模式各项分菜单3. struct ShiyanEquip * entering(device *p) 功能 指向设备类中的新建,载入和添加函数并完成相应函数功能4. struct ShiyanEquip *entering2(device *p) 功能 指向设备类中的载入函数并完成函数功能5. struct ShiyanEquip * change(device *p) 功能 指向设备类中的修改和删除函数并完成相应函数功能6. struct ShiyanEquip * query(device *p) 功能 指向设备类中的分类查询和全部查询函数并完成相应函数功能7. struct ShiyanEquip * statistic(device *p) 功能 指向设备类中的分类统计函数并完成相应三类的统计8. struct ShiyanEquip * account(manager *b) 功能 指向管理员类中的修改函数完成修改账户及密码的功能9. struct ShiyanEquip * type(DeviceTipe *a) 功能 指向设备类型类中的各个函数并完成有关设备类型的全部功能3.2 模块设计设备类型0载入1输入2添加3删除输入要输入的类型4显示存在删除输入要添加的类型1重输 输入要删除的类型 不存在0 返回【各模块的具体设计与实现】 设备类型类: 图2 图3赋予读入结束结束load是否为空是否为空否是 write 输入load储存 是否为0结束否是设备类:图4图5选择分类是否为空选择查询方式读取匹配全部显示显示结束Acquire2选择否是全部分类ClassifyEClassifyClassifyPClassifyK匹配2匹配3匹配1读取b2+b1+b0+是否为空输出结束否是图8图7图6add是否为0结束输入储存否是删除结束输入Undo判断匹配是否为0是否否是四 、 测试分析【测试中发现的问题及解决方案】1. 缺少必要的文字描述(已解决)2. 输出的格式问题(已解决)3. 不能删除唯一一项数据的问题(已解决)4. 设备操作中缺失最后一行的问题(已解决)5. 不能返回上一级菜单的问题(已解决)6. 价格统计时不能确定准确比较的问题(已解决)【对最终成果的评价】整体来说比较满意,是最近辛苦努力的伟大成果,但是有如下几点有待改进1. 可以进行汉字输入但是不能进行汉字查询的问题2. 管理员账号不能随意登出的问题3. 设备类中没有使用private导致保密性不强的问题五、源程序#include#include#include#include#include#includeusing namespace std;class DeviceTipe /定义设备类型类private: char sblx2020; /设备类型public: void shuru(); /设备类型的输入void tianjia(); /设备类型的添加void shanchu(); /设备类型的删除void show(); /设备类型的输出显示void xieru(); /设备类型的写入void duqu(); /设备类型的读取;/=/=class device /定义设备类public:typedef struct infomchar idnum10; /编号char kind10; /类型char name10; /名称char price10; /价格char purda10; /购买日期char exist10; /是否报废char damda10; /报废日期struct infom *next;Infom;Infom* head;DeviceTipe wcs;Infom* write() /设备的创建写入fstream the(aaa.txt,ios:out|ios:app);Infom *p1,*p2;head=NULL; wcs.duqu();wcs.show();p1=p2=(Infom *)malloc(sizeof(Infom);cout请输入编号 种类 名称 价格 购买日期 是否报废 报废日期(空格键断开/按0键结束输入):p1-idnum p1-kind p1-name p1-price p1-purda p1-exist p1-damda;theidnum kind name price purda exist damdanext=NULL;while(1)if(head=NULL)head=p1;if(head!=NULL)p2-next=p1;p2=p1;p1=(Infom *)malloc(sizeof(Infom);cinp1-idnum;if(*(p1-idnum)=0)free(p1);break;cinp1-kind p1-name p1-price p1-purda p1-exist p1-damda; theidnum kind name price purda exist damdanext=NULL;the.close();cout写入成功endl;load();return head;/=Infom* load() /从文档中读取数据int n,a;char tran780;int b;Infom *p1,*p2;fstream t(aaa.txt);head=NULL;p1=p2=(Infom*)malloc(sizeof(Infom); if(t.getline(tran0,80,n)=NULL)cout载入失败idnuma=tran0n;a+;p1-idnuma=0;for(a=0,n=n+1;tran0n!= ;n+)p1-kinda=tran0n;a+;p1-kinda=0;for(a=0,n=n+1;tran0n!= ;n+)p1-namea=tran0n;a+;p1-namea=0;for(a=0,n=n+1;tran0n!= ;n+)p1-pricea=tran0n;a+;p1-pricea=0;for(a=0,n=n+1;tran0n!= ;n+)p1-purdaa=tran0n;a+;p1-purdaa=0;for(a=0,n=n+1;tran0n!= ;n+)p1-exista=tran0n;a+;p1-exista=0;for(a=0,n=n+1;tran0n!=0;n+)p1-damdaa=tran0n;a+;p1-damdaa=0;p1-next=NULL;for(b=1;t.getline(tranb,80,n)!=NULL;b+)if(head=NULL)head=p1;elsep2-next=p1;p2=p1;p1=(Infom*)malloc(sizeof(Infom);for(n=0,a=0;tranbn!= ;n+)p1-idnuma=tranbn; a+;p1-idnuma=0; for(a=0,n=n+1;tranbn!= ;n+)p1-kinda=tranbn; a+;p1-kinda=0; for(a=0,n=n+1;tranbn!= ;n+)p1-namea=tranbn;a+;p1-namea=0; for(a=0,n=n+1;tranbn!= ;n+)p1-pricea=tranbn; a+;p1-pricea=0; for(a=0,n=n+1;tranbn!= ;n+) p1-purdaa=tranbn; a+;p1-purdaa=0; for(a=0,n=n+1;tranbn!= ;n+) p1-exista=tranbn; a+;p1-exista=0; for(a=0,n=n+1;tranbn!=0;n+) p1-damdaa=tranbn; a+;p1-damdaa=0;p2-next=p1;p1-next=NULL;if(b=1)head=p1;cout载入成功endl;return head;/=void acquire(Infom* head) /分类查询数据char choose;cout请选择查询方式:endl;cout1. 编号endl;cout2. 名称endl;cout3. 类型endl;cout4. 价格endl;cout5. 购买日期endl;cout6. 是否报废endl;cout7. 报废日期endl;cout0. 结束查询endl;choose=getch();switch(choose)case 1:acqu(choose);break;case 2:acqu(choose);break;case 3:acqu(choose);break; case 4:acqu(choose);break; case 5:acqu(choose);break; case 6:acqu(choose);break; case 7:acqu(choose);break;case 0:break;void acquire2(Infom* head) /查询全部数据Infom* t=head;if(t=NULL)cout对不起,信息不存在endl;elsecout 编号 种类 名称 价格 购买日期 是否报废 报废日期next!=NULL;)coutsetfill( )setw(10)idnum setfill( )setw(10)kind setfill( )setw(10)name setfill( )setw(10)price setfill( )setw(10)purda setfill( )setw(10)exist setfill( )setw(10)damdanext;coutsetfill( )setw(10)idnum setfill( )setw(10)kind setfill( )setw(10)name setfill( )setw(10)price setfill( )setw(10)purda setfill( )setw(10)exist setfill( )setw(10)damdaendl;void acqu(char choose) /分类查询的内容支持Infom* t=head;char *s;int a=0;char xyz10;coutxyz;for(;t-next!=NULL;)switch(choose)case1:s=t-idnum;break;case2:s=t-name;break;case3:s=t-kind;break; case4:s=t-price;break; case5:s=t-purda;break; case6:s=t-exist;break; case7:s=t-damda;break;if(strcmp(s,xyz)=0)if(a=0)cout 编号 种类 名称 价格 购买日期 是否报废 报废日期endl;coutsetfill( )setw(10)idnum setfill( )setw(10)kind setfill( )setw(10)name setfill( )setw(10)price setfill( )setw(10)purda setfill( )setw(10)exist setfill( )setw(10)damdanext;switch(choose)case1:s=t-idnum;break;case2:s=t-name;break; case3:s=t-kind;break; case4:s=t-price;break; case5:s=t-purda;break; case6:s=t-exist;break; case7:s=t-damda;break;if(strcmp(s,xyz)=0)if(a=0)cout 编号 种类 名称 价格 购买日期 是否报废 报废日期endl;coutsetfill( )setw(10)idnum setfill( )setw(10)kind setfill( )setw(10)name setfill( )setw(10)price setfill( )setw(10)purda setfill( )setw(10)exist setfill( )setw(10)damdaendl;a+;if(a=0)cout对不起,您查询的信息不存在endl;/=void add() /添加新内容fstream the(aaa.txt,ios:out|ios:app);Infom *p1,*p2;head=NULL; wcs.duqu();wcs.show();p1=p2=(Infom *)malloc(sizeof(Infom);cout请输入编号 种类 名称 价格 购买日期 是否报废 报废日期(空格键断开/按0键结束输入):p1-idnum p1-kind p1-name p1-price p1-purda p1-exist p1-damda;theidnum kind name price purda exist damdanext=NULL;while(1)if(head=NULL)head=p1;if(head!=NULL)p2-next=p1;p2=p1;p1=(Infom *)malloc(sizeof(Infom);cinp1-idnum;if(*(p1-idnum)=0)free(p1);break;cinp1-kind p1-name p1-price p1-purda p1-exist p1-damda; theidnum kind name price purda exist damdanext=NULL;the.close();cout添加成功endl;load();/=void undo(Infom* head) /删除struct infom *p1,*p2;char num10;char aaa10=0;char choose;wcs.duqu();wcs.show();cout请输入要删除的编号(空格键断开按0键结束):num;if(strcmp(num,aaa)=0)break; if(head=NULL) cout您使用的地址不存在idnum,num)!=0&p1-next!=NULL;)p2=p1; p1=p1-next; if(strcmp(p1-idnum,num)=0)if(p1=head)head=p1-next; free(p1);elsep2-next=p1-next; p1-next=NULL; free(p1); elseif(strcmp(p1-idnum,num)!=0&p1-next=NULL)cout该内容不存在endl;cout输入1储存,输入0放弃endl;choose=getch();switch(choose)case 1:save(head);break;case 0:break;if(choose=1)cout删除成功next!=NULL;)Theidnum kind name price purda exist damdanext;Theidnum kind name price purda exist damdaendl;The.close();return 0;/=void revise(Infom* head) /修改数据char num10;Infom *p1;char choose;char x; wcs.duqu();wcs.show();cout请输入更改项目的编号:num;p1=head;for(;strcmp(p1-idnum,num)!=0&p1-next!=NULL;)p1=p1-next;if(p1-next=NULL&strcmp(p1-idnum,num)!=0)cout不存在此编号endl;elsecout请选择修改内容:endl; cout1. 编号endl; cout2. 名称endl; cout3. 类型endl; cout4. 价格endl; cout5. 购买日期endl; cout6. 是否报废endl; cout7. 报废日期endl; cout0. 结束修改endl;choose=getch();cout请输入修改内容:p1-idnum;break; case 2:cinp1-name;break; case 3:cinp1-kind;break; case 4:cinp1-price;break; case 5:cinp1-purda;break; case 6:cinp1-exist;break; case 7:cinp1-damda;break; case 0:break;cout输入1储存,输入0放弃endl;x=getch();switch(x)case 1:save(head);break;case 0:break;/=void classify(Infom* head) /对数据的分类统计char choose;cout请选择统计内容:endl;cout1. 类型endl;cout2. 价格endl;cout3. 是否报废endl;cout0. 结束统计kind);p1-next!=NULL;)p1=p1-next;for(y=0;ykind,ay)=0)by+;break;if(y=x+1)x+;bx+;strcpy(ax,p1-kind);for(i=0;i=x;i+)cout类型:ai 数量:binext!=NULL;

温馨提示

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

评论

0/150

提交评论