版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 目 录2014程序设计实训任务书I目 录II第一章 需求分析31.1引言31.2任务概述31.3数据描述31.4功能需求31.5运行需求31.6任务计划4第二章 概要设计52.1总体设计5 2.2面向对象设计52.3运行界面设计6第三章 详细设计73.1 系统设计与实现73.2 模块设计8第四章 测试分析10第五章 课程设计总结10附录:程序代码(仅电子版需要、纸质版不需要)52第1章 需求分析1.1 引言为了方便管理校内各种实验设备,能够翻遍快捷的录入查询各个实验设备的基本信息而编写了此程序1.2 任务概述实验设备管理系统设计实验设备信息包括:设备编号,设备种类(如:微机、打印机、扫描仪等
2、等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。主要功能:1、能够完成对设备的录入和修改。2、对设备进行分类统计。3、设备的破损耗费和遗损处理。4、设备的查询。1.3 数据描述输入实验设备的信息:设备编号最多为10个字符;设备名称最多为10个字符;设备购入价格最多为10个字符;设备购入时间最多为10个字符;设备报废时间最多为10个字符;设备是否可用,yes为不可用,no为可用;设备类型最多为10个字符;1.4 功能需求1、 可实现管理员登陆管理系统,游客查询系统。2、 对实验设备类型的管理。3、 对实验设备各项信息的录入和修改。4、 对实验设备的分类查询统计。5、 对实验设备的遗
3、损处理 1.5 运行需求开发环境:VC6.0运行环境:Windows系统第二章 概要设计2.1 总体设计程序总体共分为4个类:1、 菜单类2、 设备类型类3、 设备类4、 管理员类 由主函数主持整体运行,由菜单类调用其它三类2.2 面向对象设计1.设备类型类: (见图2) void shuru(); /设备类型的输入void tianjia(); /设备类型的添加void shanchu(); /设备类型的删除void show(); /设备类型的输出显示void xieru(); /设备类型的写入void duqu(); /设备类型的读取2. 设备类: nfom* write() /设备的创
4、建写入 (见图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* hea
5、d) /对数据的分类统计 (见图8)void clasK(Infom* head) /类型的分类统计 (见图8)void clasP(Infom* head) /价格的分类统计 (见图8)void clasE(Infom* head) /是否报废的统计 (见图8)3. 管理员类: void create() /创建用户名和密码int log() /登陆void change() /修改用户名和密码2.3 运行界面设计运行界面由菜单类实现;菜单类:1.int menu1(device *p,struct ShiyanEquip *head,DeviceTipe *a,manager *b) /管
6、理模式主菜单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(
7、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,De
8、viceTipe *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 * cha
9、nge(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) 功能
10、 指向设备类型类中的各个函数并完成有关设备类型的全部功能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结束输入储
11、存否是删除结束输入Undo判断匹配是否为0是否否是第四章 测试分析【程序运行展示】【测试中发现的问题及解决方案】1. 缺少必要的文字描述(已解决)2. 输出的格式问题(已解决)3. 不能删除唯一一项数据的问题(已解决)4. 设备操作中缺失最后一行的问题(已解决)5. 不能返回上一级菜单的问题(已解决)6. 价格统计时不能确定准确比较的问题(已解决)【对最终成果的评价】整体来说比较满意,是最近辛苦努力的伟大成果,但是有如下几点有待改进1. 可以进行汉字输入但是不能进行汉字查询的问题2. 管理员账号不能随意登出的问题3.设备类中没有使用private导致保密性不强的问题 第五章 课程设计总结【设计
12、初衷、实践过程中遇到的困难及解决方案、课程收获等】在此次课程中,我们学到了很多东西,复习巩固了C语言的许多知识。并且在编写程序的过程中,能够把c+中更多功能体现出来。设计过程中当然也遇到了许多问题,但通过我们的讨论学习,上网查询各种资料,这些问题还是逐一解决了。这次设计采用了多人组队的模式,也使我们在此次设计中明白了团队合作的重要性,虽然这种小设计单人也能够完成,但是重要的是这种合作使工作效率大大的提高并且能够了解他人的思路,学习他人的方法,并不再是独自闭门造车。此外这次的编程也使我们对编程设计有了很高的成就感,有了更大的热情。我们相信在以后我们能够做出更优秀的作品.#include<i
13、ostream>#include<fstream>#include<conio.h>#include<stdio.h>#include<iomanip>#include<windows.h>using namespace std;class DeviceTipe /定义设备类型类private: char sblx2020; /设备类型public: void shuru(); /设备类型的输入void tianjia(); /设备类型的添加void shanchu(); /设备类型的删除void show(); /设备类型的输
14、出显示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() /设备的创建写入fstre
15、am the("aaa.txt",ios:out|ios:app);Infom *p1,*p2;head=NULL; wcs.duqu();wcs.show();p1=p2=(Infom *)malloc(sizeof(Infom);cout<<"请输入编号 种类 名称 价格 购买日期 是否报废 报废日期(空格键断开/按0键结束输入):"<<endl; cin>>p1->idnum >>p1->kind >>p1->name >>p1->price >&
16、gt;p1->purda >>p1->exist >>p1->damda;the<<p1->idnum<<' ' <<p1->kind<<' ' <<p1->name<<' ' <<p1->price<<' ' <<p1->purda<<' ' <<p1->exist<<' ' &
17、lt;<p1->damda<<endl;p1->next=NULL;while(1)if(head=NULL)head=p1;if(head!=NULL)p2->next=p1;p2=p1;p1=(Infom *)malloc(sizeof(Infom);cin>>p1->idnum;if(*(p1->idnum)='0')free(p1);break;cin>>p1->kind >>p1->name >>p1->price >>p1->purda
18、 >>p1->exist >>p1->damda; the<<p1->idnum<<' ' <<p1->kind<<' ' <<p1->name<<' ' <<p1->price<<' ' <<p1->purda<<' ' <<p1->exist<<' ' <<p1->
19、damda<<endl; p2->next=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<&
20、lt;"载入失败"<<endl;return 0;for(n=0,a=0;tran0n!=' 'n+)p1->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=
21、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=tran0
22、n;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-&g
23、t;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
24、9; 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*
25、head) /分类查询数据char choose;cout<<"请选择查询方式:"<<endl;cout<<"1. 编号"<<endl;cout<<"2. 名称"<<endl;cout<<"3. 类型"<<endl;cout<<"4. 价格"<<endl;cout<<"5. 购买日期"<<endl;cout<<"
26、6. 是否报废"<<endl;cout<<"7. 报废日期"<<endl;cout<<"0. 结束查询"<<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
27、':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<<" 编号 种类 名称 价格 购买日期 是否报废 报废日期"<<endl; for(;
28、t->next!=NULL;)cout<<setfill(' ')<<setw(10)<<t->idnum<<' ' <<setfill(' ')<<setw(10)<<t->kind<<' ' <<setfill(' ')<<setw(10)<<t->name<<' ' <<setfill(' ')<
29、;<setw(10)<<t->price<<' ' <<setfill(' ')<<setw(10)<<t->purda<<' ' <<setfill(' ')<<setw(10)<<t->exist<<' ' <<setfill(' ')<<setw(10)<<t->damda<<endl; t=t-&
30、gt;next;cout<<setfill(' ')<<setw(10)<<t->idnum<<' ' <<setfill(' ')<<setw(10)<<t->kind<<' ' <<setfill(' ')<<setw(10)<<t->name<<' ' <<setfill(' ')<<setw(
31、10)<<t->price<<' ' <<setfill(' ')<<setw(10)<<t->purda<<' ' <<setfill(' ')<<setw(10)<<t->exist<<' ' <<setfill(' ')<<setw(10)<<t->damda<<endl;void acqu(char c
32、hoose) /分类查询的内容支持Infom* t=head;char *s;int a=0;char xyz10;cout<<"请输入查询内容:"cin>>xyz;for(;t->next!=NULL;)switch(choose)case'1':s=t->idnum;break;case'2':s=t->name;break;case'3':s=t->kind;break; case'4':s=t->price;break; case'5'
33、;:s=t->purda;break; case'6':s=t->exist;break; case'7':s=t->damda;break;if(strcmp(s,xyz)=0)if(a=0)cout<<" 编号 种类 名称 价格 购买日期 是否报废 报废日期"<<endl;cout<<setfill(' ')<<setw(10)<<t->idnum<<' ' <<setfill(' '
34、)<<setw(10)<<t->kind<<' ' <<setfill(' ')<<setw(10)<<t->name<<' ' <<setfill(' ')<<setw(10)<<t->price<<' ' <<setfill(' ')<<setw(10)<<t->purda<<'
35、9; <<setfill(' ')<<setw(10)<<t->exist<<' ' <<setfill(' ')<<setw(10)<<t->damda<<endl;a+;t=t->next;switch(choose)case'1':s=t->idnum;break;case'2':s=t->name;break; case'3':s=t->kind;break;
36、case'4':s=t->price;break; case'5':s=t->purda;break; case'6':s=t->exist;break; case'7':s=t->damda;break;if(strcmp(s,xyz)=0)if(a=0)cout<<" 编号 种类 名称 价格 购买日期 是否报废 报废日期"<<endl;cout<<setfill(' ')<<setw(10)<<t->i
37、dnum<<' ' <<setfill(' ')<<setw(10)<<t->kind<<' ' <<setfill(' ')<<setw(10)<<t->name<<' ' <<setfill(' ')<<setw(10)<<t->price<<' ' <<setfill(' ')&
38、lt;<setw(10)<<t->purda<<' ' <<setfill(' ')<<setw(10)<<t->exist<<' ' <<setfill(' ')<<setw(10)<<t->damda<<endl;a+;if(a=0)cout<<"对不起,您查询的信息不存在"<<endl;/=void add() /添加新内容fstream
39、the("aaa.txt",ios:out|ios:app);Infom *p1,*p2;head=NULL; wcs.duqu();wcs.show();p1=p2=(Infom *)malloc(sizeof(Infom);cout<<"请输入编号 种类 名称 价格 购买日期 是否报废 报废日期(空格键断开/按0键结束输入):"<<endl; cin>>p1->idnum >>p1->kind >>p1->name >>p1->price >>
40、p1->purda >>p1->exist >>p1->damda;the<<p1->idnum<<' ' <<p1->kind<<' ' <<p1->name<<' ' <<p1->price<<' ' <<p1->purda<<' ' <<p1->exist<<' ' <
41、<p1->damda<<endl;p1->next=NULL;while(1)if(head=NULL)head=p1;if(head!=NULL)p2->next=p1;p2=p1;p1=(Infom *)malloc(sizeof(Infom);cin>>p1->idnum;if(*(p1->idnum)='0')free(p1);break;cin>>p1->kind >>p1->name >>p1->price >>p1->purda &g
42、t;>p1->exist >>p1->damda; the<<p1->idnum<<' ' <<p1->kind<<' ' <<p1->name<<' ' <<p1->price<<' ' <<p1->purda<<' ' <<p1->exist<<' ' <<p1->dam
43、da<<endl; p2->next=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键结束):"<<endl; while(1)cin>>num;if(str
44、cmp(num,aaa)=0)break; if(head=NULL) cout<<"您使用的地址不存在"<<endl;else p1=head; for(;strcmp(p1->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(
45、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<<&qu
46、ot;删除成功"<<endl;load();/=int save(Infom* head) /将现数据进行保存unlink("aaa.txt");fstream The("aaa.txt",ios:out|ios:app);Infom *p1;p1=head;if(p1=NULL)return 0;for(;p1->next!=NULL;)The<<p1->idnum<<' ' <<p1->kind<<' ' <<p1-&g
47、t;name<<' ' <<p1->price<<' ' <<p1->purda<<' ' <<p1->exist<<' ' <<p1->damda<<endl;p1=p1->next;The<<p1->idnum<<' ' <<p1->kind<<' ' <<p1->name<&
48、lt;' ' <<p1->price<<' ' <<p1->purda<<' ' <<p1->exist<<' ' <<p1->damda<<endl;The.close();return 0;/=void revise(Infom* head) /修改数据char num10;Infom *p1;char choose;char x; wcs.duqu();wcs.show();cout<<&quo
49、t;请输入更改项目的编号:"<<endl;cin>>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; cout<<"1
50、. 编号"<<endl; cout<<"2. 名称"<<endl; cout<<"3. 类型"<<endl; cout<<"4. 价格"<<endl; cout<<"5. 购买日期"<<endl; cout<<"6. 是否报废"<<endl; cout<<"7. 报废日期"<<endl; cout<<
51、"0. 结束修改"<<endl;choose=getch();cout<<"请输入修改内容:"<<endl;switch(choose)case '1':cin>>p1->idnum;break; case '2':cin>>p1->name;break; case '3':cin>>p1->kind;break; case '4':cin>>p1->price;break; case
52、 '5':cin>>p1->purda;break; case '6':cin>>p1->exist;break; case '7':cin>>p1->damda;break; case '0':break;cout<<"输入'1'储存,输入'0'放弃"<<endl;x=getch();switch(x)case '1':save(head);break;case '0'
53、:break;/=void classify(Infom* head) /对数据的分类统计char choose;cout<<"请选择统计内容:"<<endl;cout<<"1. 类型"<<endl;cout<<"2. 价格"<<endl;cout<<"3. 是否报废"<<endl;cout<<"0. 结束统计"<<endl;choose=getch();switch(choo
54、se)case '1':clasK(head) ;break;case '2':clasP(head) ;break; case '3':clasE(head) ;break; case '0':break;void clasK(Infom* head) /类型的分类统计char a2010;int b20=1;int x;int y;int i;Infom *p1;p1=head;for(x=0,strcpy(a0,p1->kind);p1->next!=NULL;)p1=p1->next;for(y=0;y<=x;y+)if(strcmp(p1->kind,ay)=0)by+;break;if(y=x+1)x+;bx+;strcpy(ax,p1->kind);for(i=0;i<=x;i+)cout<<"类型:"<<ai<<' '<<"数量:&q
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年版:供应链管理服务合同
- 2024年特种门采购合同范本3篇
- 2024年某企业关于知识产权许可的合同
- 马鞍山职业技术学院《安装工程计量计价实训》2023-2024学年第一学期期末试卷
- 2024年文化产业融资借款合同范本大全6篇
- 2025年货运从业资格证模拟试题题库及答案解析
- 2025年货运从业资格证考试题目和答案
- 2025年昆明考货运从业资格证考试题目
- 2024事业单位聘用合同教师(附教育质量监控与管理)3篇
- 2025建筑工程民工劳动合同范文
- 刑法分论:总体国家安全观的刑法保护智慧树知到期末考试答案章节答案2024年湘潭大学
- 2024年精麻药品培训考试题题库及答案(完整版)
- 2024-2034年中国飞机拆解行业市场现状分析及竞争格局与投资发展研究报告
- 30道计量员岗位常见面试问题含HR问题考察点及参考回答
- 2024年长沙民政职业技术学院单招职业技能测试题库及答案解析
- 电力安全工器具预防性试验规程2023版
- 汉字与中国古代文化常识智慧树知到期末考试答案2024年
- 广东省普通高中学生档案
- 化学-福建厦门第一中学2023-2024学年高一上学期12月月考带答案
- 全国古建筑行业现状分析
- 广东省深圳市2022-2023学年四年级上学期科学期末测试卷
评论
0/150
提交评论