c++实验设备管理系统程序报告要点.docx
《c++实验设备管理系统程序报告要点.docx》由会员分享,可在线阅读,更多相关《c++实验设备管理系统程序报告要点.docx(53页珍藏版)》请在冰豆网上搜索。
![c++实验设备管理系统程序报告要点.docx](https://file1.bdocx.com/fileroot1/2023-1/9/c8728cea-85b2-4a0c-aa8f-e1775f1468f5/c8728cea-85b2-4a0c-aa8f-e1775f1468f51.gif)
c++实验设备管理系统程序报告要点
3.1系统设计与实现7
3.2模块设计8
第1章需求分析
1.1引言
为了方便管理校内各种实验设备,能够翻遍快捷的录入查询各个实验设备的基本信息而编写了此程序
1.2任务概述
实验设备管理系统设计
实验设备信息包括:
设备编号,设备种类(如:
微机、打印机、扫描仪等等),设备名称,设备价格,设备购入日期,是否报废,报废日期等。
主要功能:
1、能够完成对设备的录入和修改。
2、对设备进行分类统计。
3、设备的破损耗费和遗损处理。
4、设备的查询。
1.3数据描述
输入实验设备的信息:
设备编号最多为10个字符;
设备名称最多为10个字符;
设备购入价格最多为10个字符;
设备购入时间最多为10个字符;
设备报废时间最多为10个字符;
设备是否可用,yes为不可用,no为可用;
设备类型最多为10个字符;
1.4功能需求
1、可实现管理员登陆管理系统,游客查询系统。
2、对实验设备类型的管理。
3、对实验设备各项信息的录入和修改。
4、对实验设备的分类查询统计。
5、对实验设备的遗损处理
1.5运行需求
开发环境:
VC6.0
运行环境:
Windows系统
第二章概要设计
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
#include
#include
#include
#include
#include
usingnamespacestd;
classDeviceTipe//定义设备类型类
{
private:
charsblx[20][20];//设备类型
public:
voidshuru();//设备类型的输入
voidtianjia();//设备类型的添加
voidshanchu();//设备类型的删除
voidshow();//设备类型的输出显示
voidxieru();//设备类型的写入
voidduqu();//设备类型的读取
};
//==============================================================
//==============================================================
classdevice//定义设备类
{
public:
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键结束输入):
"<cin>>p1->idnum
>>p1->kind
>>p1->name
>>p1->price
>>p1->purda
>>p1->exist
>>p1->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));
cin>>p1->idnum;
if(*(p1->idnum)=='0')
{
free(p1);
break;
}
cin>>p1->kind
>>p1->name
>>p1->price
>>p1->purda
>>p1->exist
>>p1->damda;
the<idnum<<''
<kind<<''
<name<<''
<price<<''
<purda<<''
<exist<<''
<damda<}
p2->next=NULL;
the.close();
cout<<"写入成功"<load();
returnhead;
}
//==============================================================
Infom*load()//从文档中读取数据
{
intn,a;
chartran[7][80];
intb;
Infom*p1,*p2;
fstreamt("aaa.txt");
head=NULL;
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++;
}
p1->idnum[a]='\0';
for(a=0,n=n+1;tran[0][n]!
='';n++)
{
p1->kind[a]=tran[0][n];
a++;
}
p1->kind[a]='\0';
for(a=0,n=n+1;tran[0][n]!
='';n++)
{
p1->name[a]=tran[0][n];
a++;
}
p1->name[a]='\0';
for(a=0,n=n+1;tran[0][n]!
='';n++)
{
p1->price[a]=tran[0][n];
a++;
}
p1->price[a]='\0';
for(a=0,n=n+1;tran[0][n]!
='';n++)
{
p1->purda[a]=tran[0][n];
a++;
}
p1->purda[a]='\0';
for(a=0,n=n+1;tran[0][n]!
='';n++)
{
p1->exist[a]=tran[0][n];
a++;
}
p1->exist[a]='\0';
for(a=0,n=n+1;tran[0][n]!
='\0';n++)
{
p1->damda[a]=tran[0][n];
a++;
}
p1->damda[a]='\0';
p1->next=NULL;
for(b=1;t.getline(tran[b],80,'\n')!
=NULL;b++)
{
if(head==NULL)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(Infom*)malloc(sizeof(Infom));
for(n=0,a=0;tran[b][n]!
='';n++)
{
p1->idnum[a]=tran[b][n];
a++;
}
p1->idnum[a]='\0';
for(a=0,n=n+1;tran[b][n]!
='';n++)
{
p1->kind[a]=tran[b][n];
a++;
}
p1->kind[a]='\0';
for(a=0,n=n+1;tran[b][n]!
='';n++)
{
p1->name[a]=tran[b][n];
a++;
}
p1->name[a]='\0';
for(a=0,n=n+1;tran[b][n]!
='';n++)
{p1->price[a]=tran[b][n];
a++;
}
p1->price[a]='\0';
for(a=0,n=n+1;tran[b][n]!
='';n++)
{
p1->purda[a]=tran[b][n];
a++;
}
p1->purda[a]='\0';
for(a=0,n=n+1;tran[b][n]!
='';n++)
{
p1->exist[a]=tran[b][n];
a++;
}
p1->exist[a]='\0';
for(a=0,n=n+1;tran[b][n]!
='\0';n++)
{
p1->damda[a]=tran[b][n];
a++;
}
p1->damda[a]='\0';
}
p2->next=p1;
p1->next=NULL;
if(b==1)
head=p1;
cout<<"载入成功"<returnhead;
}
//==============================================================
voidacquire(Infom*head)//分类查询数据
{
charchoose;
cout<<"请选择查询方式:
"<cout<<"1.编号"<cout<<"2.名称"<cout<<"3.类型"<cout<<"4.价格"<cout<<"5.购买日期"<cout<<"6.是否报废"<cout<<"7.报废日期"<cout<<"0.结束查询"<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;
}
}
voidacquire2(Infom*head)//查询全部数据
{
Infom*t=head;
if(t==NULL)
cout<<"对不起,信息不存在"<else
{
cout<<"编号种类名称价格购买日期是否报废报废日期"<for(;t->next!
=NULL;)
{
cout<idnum<<''
<kind<<''
<name<<''
<price<<''
<purda<<''
<exist<<''
<damda<t=t->next;
}
cout<idnum<<''
<kind<<''
<name<<''
<price<<''
<purda<<''
<exist<<''
<damda<}
}
voidacqu(charchoose)//分类查询的内容支持
{
Infom*t=head;
char*s;
inta=0;
charxyz[10];
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':
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<<"编号种类名称价格购买日期是否报废报废日期"<cout<idnum<<''
<kind<<''
<name<<''
<price<<''
<purda<<''
<exist<<''
<damda<a++;
}
t=t->next;
}
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'