c++实验设备管理系统程序报告要点Word格式.docx
《c++实验设备管理系统程序报告要点Word格式.docx》由会员分享,可在线阅读,更多相关《c++实验设备管理系统程序报告要点Word格式.docx(53页珍藏版)》请在冰豆网上搜索。
第二章概要设计
2.1总体设计
程序总体共分为4个类:
1、菜单类
2、设备类型类
3、设备类
4、管理员类
由主函数主持整体运行,由菜单类调用其它三类
2.2面向对象设计
1.设备类型类:
(见图2)
voidshuru();
//设备类型的输入
voidtianjia();
//设备类型的添加
voidshanchu();
//设备类型的删除
voidshow();
//设备类型的输出显示
voidxieru();
//设备类型的写入
voidduqu();
//设备类型的读取
2.设备类:
nfom*write()//设备的创建写入(见图3)
Infom*load()//从文档中读取数据(见图4)
voidacquire(Infom*head)//分类查询数据(见图5)
voidacquire2(Infom*head)//查询全部数据(见图5)
voidacqu(charchoose)//分类查询的内容支持(见图5)
voidadd()//添加新内容(见图6)
voidundo(Infom*head)//删除(见图7)
intsave(Infom*head)//将现数据进行保存
voidrevise(Infom*head)//修改数据
voidclassify(Infom*head)//对数据的分类统计(见图8)
voidclasK(Infom*head)//类型的分类统计(见图8)
voidclasP(Infom*head)//价格的分类统计(见图8)
voidclasE(Infom*head)//是否报废的统计(见图8)
3.管理员类:
voidcreate()//创建用户名和密码
intlog()//登陆
voidchange()//修改用户名和密码
2.3运行界面设计
运行界面由菜单类实现;
菜单类:
1.intmenu1(device*p,structShiyanEquip*head,DeviceTipe*a,manager*b)//管理模式主菜单
2.intmenu2(device*p,structShiyanEquip*head,DeviceTipe*a)//游客模式主菜单
3.structShiyanEquip*entering(device*p)//管理模式录入菜单
4.structShiyanEquip*entering2(device*p)//游客模式录入菜单
5.structShiyanEquip*change(device*p)//修改菜单
6.structShiyanEquip*query(device*p)//查询菜单
7.structShiyanEquip*statistic(device*p)//分类统计菜单
8.structShiyanEquip*account(manager*b)//账号菜单
9.structShiyanEquip*type(DeviceTipe*a)//设备类型菜单
第三章详细设计
3.1系统设计与实现
【总体框架、流程设计,模块划分及接口设计等】
总体框架:
图1
接口设计:
1.intmenu1(device*p,structShiyanEquip*head,DeviceTipe*a,manager*b)
[功能]调用管理模式主菜单并指向管理模式各项分菜单
2.intmenu2(device*p,structShiyanEquip*head,DeviceTipe*a)
[功能]调用游客模式主菜单并指向游客模式各项分菜单
3.structShiyanEquip*entering(device*p)
[功能]指向设备类中的新建,载入和添加函数并完成相应函数功能
4.structShiyanEquip*entering2(device*p)
[功能]指向设备类中的载入函数并完成函数功能
5.structShiyanEquip*change(device*p)
[功能]指向设备类中的修改和删除函数并完成相应函数功能
6.structShiyanEquip*query(device*p)
[功能]指向设备类中的分类查询和全部查询函数并完成相应函数功能
7.structShiyanEquip*statistic(device*p)
[功能]指向设备类中的分类统计函数并完成相应三类的统计
8.structShiyanEquip*account(manager*b)
[功能]指向管理员类中的修改函数完成修改账户及密码的功能
9.structShiyanEquip*type(DeviceTipe*a)
[功能]指向设备类型类中的各个函数并完成有关设备类型的全部功能
3.2模块设计
【各模块的具体设计与实现】
设备类型类:
图2
图3
设备类:
图4
图5
图8
图7
图6
第四章测试分析
【程序运行展示】
【测试中发现的问题及解决方案】
1.缺少必要的文字描述(已解决)
2.输出的格式问题(已解决)
3.不能删除唯一一项数据的问题(已解决)
4.设备操作中缺失最后一行的问题(已解决)
5.不能返回上一级菜单的问题(已解决)
6.价格统计时不能确定准确比较的问题(已解决)
【对最终成果的评价】
整体来说比较满意,是最近辛苦努力的伟大成果,但是有如下几点有待改进
1.可以进行汉字输入但是不能进行汉字查询的问题
2.管理员账号不能随意登出的问题
3.设备类中没有使用private导致保密性不强的问题
第五章课程设计总结
【设计初衷、实践过程中遇到的困难及解决方案、课程收获等】
在此次课程中,我们学到了很多东西,复习巩固了C语言的许多知识。
并且在编写程序的过程中,能够把c++中更多功能体现出来。
设计过程中当然也遇到了许多问题,但通过我们的讨论学习,上网查询各种资料,这些问题还是逐一解决了。
这次设计采用了多人组队的模式,也使我们在此次设计中明白了团队合作的重要性,虽然这种小设计单人也能够完成,但是重要的是这种合作使工作效率大大的提高并且能够了解他人的思路,学习他人的方法,并不再是独自闭门造车。
此外这次的编程也使我们对编程设计有了很高的成就感,有了更大的热情。
我们相信在以后我们能够做出更优秀的作品.
#include<
iostream>
fstream>
conio.h>
stdio.h>
iomanip>
windows.h>
usingnamespacestd;
classDeviceTipe//定义设备类型类
{
private:
charsblx[20][20];
//设备类型
public:
};
//==============================================================
classdevice//定义设备类
typedefstructinfom
{
charidnum[10];
//编号
charkind[10];
//类型
charname[10];
//名称
charprice[10];
//价格
charpurda[10];
//购买日期
charexist[10];
//是否报废
chardamda[10];
//报废日期
structinfom*next;
}Infom;
Infom*head;
DeviceTipewcs;
Infom*write()//设备的创建写入
fstreamthe("
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
>
kind
name
>
price
purda
exist
damda;
the<
idnum<
'
'
<
kind<
name<
price<
purda<
exist<
damda<
p1->
next=NULL;
while
(1)
{
if(head==NULL)
head=p1;
if(head!
=NULL)
p2->
next=p1;
p2=p1;
p1=(Infom*)malloc(sizeof(Infom));
idnum;
if(*(p1->
idnum)=='
0'
)
{
free(p1);
break;
}
>
}
p2->
the.close();
写入成功"
load();
returnhead;
}
Infom*load()//从文档中读取数据
intn,a;
chartran[7][80];
intb;
fstreamt("
);
p1=p2=(Infom*)malloc(sizeof(Infom));
if(t.getline(tran[0],80,'
\n'
)==NULL)
cout<
载入失败"
return0;
}
for(n=0,a=0;
tran[0][n]!
='
;
n++)
p1->
idnum[a]=tran[0][n];
a++;
idnum[a]='
\0'
for(a=0,n=n+1;
kind[a]=tran[0][n];
kind[a]='
name[a]=tran[0][n];
name[a]='
price[a]=tran[0][n];
price[a]='
purda[a]=tran[0][n];
purda[a]='
exist[a]=tran[0][n];
exist[a]='
damda[a]=tran[0][n];
damda[a]='
for(b=1;
t.getline(tran[b],80,'
)!
=NULL;
b++)
else
p1=(Infom*)malloc(sizeof(Infom));
for(n=0,a=0;
tran[b][n]!
p1->
idnum[a]=tran[b][n];
}
kind[a]=tran[b][n];
name[a]=tran[b][n];
a++;
{p1->
price[a]=tran[b][n];
purda[a]=tran[b][n];
exist[a]=tran[b][n];
damda[a]=tran[b][n];
if(b==1)
head=p1;
载入成功"
voidacquire(Infom*head)//分类查询数据
charchoose;
请选择查询方式:
1.编号"
2.名称"
3.类型"
4.价格"
5.购买日期"
6.是否报废"
7.报废日期"
0.结束查询"
choose=getch();
switch(choose)
case'
1'
acqu(choose);
break;
2'
3'
case'
4'
5'
6'
7'
voidacquire2(Infom*head)//查询全部数据
Infom*t=head;
if(t==NULL)
对不起,信息不存在"
else
编号种类名称价格购买日期是否报废报废日期"
for(;
t->
next!
cout<
setfill('
)<
setw(10)<
t=t->
next;
voidacqu(charchoose)//分类查询的内容支持
char*s;
inta=0;
charxyz[10];
请输入查询内容:
cin>
xyz;
{
switch(choose)
case'
s=t->
name;
kind;
price;
purda;
case'
exist;
if(strcmp(s,xyz)==0)
if(a==0)
cout<
case'