中南大学c++课程设计.docx
《中南大学c++课程设计.docx》由会员分享,可在线阅读,更多相关《中南大学c++课程设计.docx(24页珍藏版)》请在冰豆网上搜索。
![中南大学c++课程设计.docx](https://file1.bdocx.com/fileroot1/2023-1/28/832a4242-1f29-46df-87e1-492083c7a557/832a4242-1f29-46df-87e1-492083c7a5571.gif)
中南大学c++课程设计
中南大学
高级程序设计实践(C++)
课程设计报告
设计题目:
教学设备管理系统
指导老师:
设计者:
专业班级:
时间日期:
一课题的基本要求和内容
二程序功能简介
三主体内容:
1设计分析
2程序结构
3相关源程序
4操作方法
5制作模块
6试验结果
7设计体会
8参考文献
一基本内容和要求
(一)基本要求
本设计采用教师指导、学生自学和独立编程操作方式,先由学生查阅与本设计有关的书籍和资料,利用VisualC++6.0设计环境与开发工具,在两周时间内,完成课程设计内容中的一个管理系统,具体要求如下:
1、独立思考:
独立完成课程设计中各任务的设计和调试。
2、上机准备:
每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。
3、数据管理:
管理系统中的数据可用数据库(如Access数据库)的形式保存,也可用普通文件(文本文件或二进制文件)的形式保存。
4、程序要求:
界面美观、可操作性强、稳定性好。
(二)基本内容:
教学设备管理系统
为方便管理学校教学设备,编写一个教学设备管理系统软件。
系统记录必须包括设备编号、设备名称、生产厂家、购置日期、台数、单价、及备注等。
二程序功能简介
(1)添加:
增加一台设备的记录到管理系统中。
(2)查询:
可以根据设备编号查找某台设备的相关信息,若找到则显示其信息。
(3)修改:
在管理系统中修改一台设备的记录。
(4)保存:
将所有教学设备信息保存在一个文件中(数据库文件或普通的文本文件)。
(5)读取:
从文件中读取已保存了数据。
(6)删除:
从管理系统中删除一条记录。
(7)恢复:
能恢复被删除的记录。
(8)统计:
(A)统计每页合计台数及金额;(B)累计设备的总台数及总金额;(C)统计单价在:
200元以下、200~800元之间和800元以上的设备总台数及总金额。
(D)以表格形式打印教学设备明细表。
(9)其他:
可以根据自己的思路设计其他功能。
三主体内容
1设计分析
根据问题描述和要求,系统要求能够添加设备,按设备编号查询,修改,保存,读取,删除,恢复设备的信息。
系统既然具有“数据存盘”功能,设备数据可以保存到磁盘文件,那么也就意味着今后可以从磁盘文件读出人员数据,所以系统增加了“人员数据装入”模块,以方便用户使用,避免数据重新录入。
考虑到系统实现简捷,人员数据文件采用文本文件,人员数据文件名.
使用面向对象的程序设计思想进行分析,整个系统涉及两个类的信息和操作,设备和购置日期。
所以系统主要涉及两个大类:
设备类Equipment,日期Date。
系统的主体框架就是设备类,考虑系统操作的设备信息的数量具有不确定性,所以考虑使用链表保存,处理设备信息。
设备类包含所以设备信息的一个不带头结点的链表,可以对设备信息进行增,删,改,查询,基础数据设置,数据存盘,数据装入等操作的相关模块(Add,Delete,Modify,Find,Save,Recover,Read,Statistic)作为成员函数。
2程序结构
系统功能模块
教学设备管理系统
添加设备信息
查找设备信息
修改设备信息
保存设备信息
读取设备信息
删除设备信息
恢复设备信息
统计设备信息
3相关源程序
#include
#include
#include
#include
usingnamespacestd;
classDate
{
private:
intyear;
intmonth;
intday;
public:
Date(inty=0,intm=0,intd=0);
Date&operator=(Date&a);
voidfoutput(ofstream&fout);
voidoutput();
voidalloutput();
};
voidDate:
:
alloutput()
{
cout<"<"<}
voidDate:
:
foutput(ofstream&fout)
{
fout<}
Date:
:
Date(inty,intm,intd)
{
year=y;
month=m;
day=d;
}
Date&Date:
:
operator=(Date&a)
{
year=a.year;
month=a.month;
day=a.day;
return*this;
}
voidDate:
:
output()
{
cout<}
classEquipment
{
private:
intnum;//设备编号
charname[20];//设备名称
charfactory[30];//生产厂家
Datedate;//购置日期
intamount;//台数
doubleprrice;//单价
charnotes[101];//备注
public:
Equipment(intnum_=0,char*name_=NULL,
intamount_=0,doubleprrice_=0);
Equipment&operator=(Equipment&a)
{
num=a.num;
strcpy(name,a.name);
strcpy(factory,a.factory);
date=a.date;
return*this;
}
voidgive(char*factory_,Datedate_,char*notes);
voidoutput();
voidalloutput();
intgetNum();
intgetAmount();
doublegetPrrice();
voidsetNum();
voidsetName();
voidsetFactory();
voidsetDate();
voidsetAmount();
voidsetPrrice();
voidsetNotes();
voidfoutput(ofstream&fout);
};
voidEquipment:
:
alloutput()
{
cout<<<date.alloutput();
cout<<'\t'<<<'\t'<<<'\t'<}
voidEquipment:
:
give(char*factory_,Datedate_,char*notes_)
{
strcpy(factory,factory_);
date=date_;
strcpy(notes,notes_);
}
Equipment:
:
Equipment(intnum_,char*name_,intamount_,doubleprrice_)
{
num=num_;
strcpy(name,name_);
amount=amount_;
prrice=prrice_;
strcpy(factory,"未设置");
strcpy(notes,"无");
}
voidEquipment:
:
output()
{
cout<<"1.设备编号:
"<cout<<"2.设备名称:
"<cout<<"3.生产厂家:
"<cout<<"4.购置日期:
";date.output();
cout<<"5.台数:
"<cout<<"6.单价:
"<cout<<"7.备注:
"<}
intEquipment:
:
getNum()
{
returnnum;
}
intEquipment:
:
getAmount()
{
returnamount;
}
doubleEquipment:
:
getPrrice()
{
returnprrice;
}
voidEquipment:
:
setNum()
{
cout<<"请输入设备编号:
";
cin>>num;
}
voidEquipment:
:
setName()
{
cout<<"请输入设备名称:
";
cin>>name;
}
voidEquipment:
:
setFactory()
{
cout<<"请输入生产厂家的名称:
";
cin>>factory;
}
voidEquipment:
:
setDate()
{
inty,m,d;
cout<<"请输入年、月、日,用空格隔开:
";
cin>>y>>m>>d;
Datea(y,m,d);
date=a;
}
voidEquipment:
:
setAmount()
{
cout<<"请输入设备台数:
";
cin>>amount;
}
voidEquipment:
:
setPrrice()
{
cout<<"请输入设备单价:
";
cin>>prrice;
}
voidEquipment:
:
setNotes()
{
cout<<"请输入备注内容:
";
cin>>notes;
}
voidEquipment:
:
foutput(ofstream&fout)
{
fout<fout<fout<date.foutput(fout);
fout<fout<fout<}
classList
{
private:
intn,capacity;
Equipment**elem;
public:
List();
~List();
booladd();//添加
boolfind();//查询
voidmodify();//修改
boolSave();//设备保存
boolRead();//读取
voidDelete();//删除设备记录
voidRecover();//恢复被删除的记录
voidStatistic();//统计
};
List:
:
List()
{
n=0;
capacity=1000;
elem=newEquipment*[capacity];
for(inti=0;i}
List:
:
~List()
{
for(inti=0;i{
delete[]elem[i];
elem[i]=NULL;
}
if(elem)delete[]elem;
elem=NULL;
}
boolList:
:
add()
{
if(n{
intnum_;
charname_[20];
intamount_;
doubleprrice_;
cout<<"请输入设备编号:
";
cin>>num_;
cout<<"请输入设备名称:
";
cin>>name_;
cout<<"请输入购置台数:
";
cin>>amount_;
cout<<"请输入设备单价:
";
cin>>prrice_;
elem[n]=newEquipment(num_,name_,amount_,prrice_);
n++;
returntrue;
}
returnfalse;
}
boolList:
:
find()
{
intnum_;
cout<<"请输入您需要查找的设备编号:
";
cin>>num_;
for(inti=0;i{
if(num_==elem[i]->getNum())
{
cout<<"查找成功!
设备信息如下:
"<elem[i]->output();
returntrue;
}
}
cout<<"查找失败!
无此设备信息。
"<returnfalse;
}
voidList:
:
modify()
{
system("cls");
if(n>0)
{
inti,num_;
boolok=false;
cout<<"现有的设备编号如下:
"<for(i=0;i{
cout<getNum()<<"";
}
cout<cout<<"请输入您需要修改的设备编号:
";
cin>>num_;
for(i=0;i{
if(elem[i]->getNum()==num_)
{
ok=true;
intchoice=1;
do
{
system("cls");
elem[i]->output();
cout<<"8.退出修改。
"<cout<<"请输入您需要修改的选项:
";
cin>>choice;
if(choice<1||choice>8)
{
cout<<"输入错误,请重新输入!
"<choice=1;
continue;
}
switch(choice)
{
case1:
elem[i]->setNum();
break;
case2:
elem[i]->setName();
break;
case3:
elem[i]->setFactory();
break;
case4:
elem[i]->setDate();
break;
case5:
elem[i]->setAmount();
break;
case6:
elem[i]->setPrrice();
break;
case7:
elem[i]->setNotes();
break;
case8:
break;
}
}while(choice!
=8);
}
}
if(!
ok)cout<<"您的输入有误!
"<}
elsecout<<"现无任何设备!
"<}
boolList:
:
Save()
{
ofstreamfout;
fout.open("save.txt");
fout.put(0);//清楚txt文档的数据
fout.seekp(-1,ios:
:
end);//在txt文档中光标退格
if(fout.fail())
{
cout<<"找不到文件,保存失败!
"<returnfalse;
}
else
{
for(inti=0;i{
elem[i]->foutput(fout);
}
}
cout<<"保存成功!
"<fout.close();
returntrue;
}
boolList:
:
Read()
{
intsize;
ifstreamfin;
fin.open("save.txt");
streampospos=fin.tellg();
fin.seekg(0,ios:
:
end);
size=fin.tellg();
fin.seekg(pos);
if(fin.fail())
{
cout<<"找不到文件,读取失败!
"<returnfalse;
}
else
{
intnum_,amount_,y,m,d;
doubleprrice_;
charname_[20],factory_[30],notes_[101];
n=0;
while(size!
=1)
{
fin>>num_;
fin>>name_;
fin>>factory_;
fin>>y>>m>>d;
if(fin.eof())break;
Datedate_(y,m,d);
fin>>amount_;
fin>>prrice_;
fin>>notes_;
elem[n]=newEquipment(num_,name_,amount_,prrice_);
elem[n]->give(factory_,date_,notes_);
n++;
}
}
cout<<"读取成功!
"<fin.close();
returntrue;
}
voidList:
:
Delete()
{
system("cls");
if(n>0)
{
inti,num_;
boolok=false;
cout<<"现有的设备编号如下:
"<for(i=0;i{
cout<getNum()<<"";
}
cout<cout<<"请选择您要删除的设备编号:
";
cin>>num_;
for(i=0;i{
if(elem[i]->getNum()==num_)
{
ok=true;
system("cls");
elem[i]->output();
cout<<"您确定要删除此设备?
(YorN)"<charstr;
do
{
cin>>str;
if(str!
='Y'&&str!
='N')
{
cout<<"输入错误,请重新输入:
";
}
}while(str!
='Y'&&str!
='N');
if(str=='Y')
{
ofstreamfout;
fout.open("recover.txt");
fout.app;
elem[i]->foutput(fout);
fout.close();
if(i==n-1)
{
delete[]elem[i];
elem[i]=NULL;
}
else
{
Equipment*tem;
tem=elem[i];
elem[i]=elem[n-1];
elem[n-1]=tem;
delete[]elem[n-1];
elem[n-1]=NULL;
}
n--;
cout<<"删除成功!
"<}
elsecout<<"删除失败!
"<}
}
if(!
ok)cout<<"您的输入有误!
"<}
elsecout<<"现无任何设备!
"<}
voidList:
:
Recover()
{
intsize;
ifstreamfin;
fin.open("recover.txt");
streampospos=fin.tellg();
fin.seekg(0,ios:
:
end);
size=fin.tellg();
fin.seekg(pos);
if(fin.fail())
{
cout<<"找不到文件,恢复失败!
"<}
else
{
intnum_,amount_,y,m,d;
doubleprrice_;
charname_[20],factory_[30],notes_[101];
while(!
fin.eof()&&size!
=1)
{
fin>>num_;
fin>>name_;
fin>>factory_;
fin>>y>>m>>d;
if(fin.eof())break;
Datedate_(y,m,d);
fin>>amount_;
fin>>prrice_;
fin>>notes_;
elem[n]=newEquipment(num_,name_,amount_,prrice_);
elem[n]->give(factory_,date_,notes_);
n++;
}
cout<<"恢复成功!
"<fin.close();
ofstreamfout;
fout.open("recover.txt");
fout.put(0);
fout.seekp(-1,ios:
:
end