1、中 南 大 学 高级程序设计实践(C++) 课程设计报告 设计题目 : 教学设备管理系统 指导老师 : 设计者 : 专业班级 : 时间日期 : 目 录 一 课题的基本规定和内容 二 程序功能简介 三 主体内容: 1 设计分析 2 程序结构 3 相关源程序 4 操作方法 5 制作模块 6实验结果 7设计体会 8 参考文献 一 基本内容和规定 (一)基本规定 本设计采用教师指导、学生自学和独立编程操作方式,先由学生查阅与本设计有关的书籍和资料
2、运用Visual C++ 6.0设计环境与开发工具,在两周时间内,完毕课程设计内容中的一个管理系统,具体规定如下: 1、 独立思考:独立完毕课程设计中各任务的设计和调试。 2、 上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试环节和有关环境的设立方法,准备好有关的文献。 3、 数据管理:管理系统中的数据可用数据库(如Access数据库)的形式保存,也可用普通文献(文本文献或二进制文献)的形式保存。 4、 程序规定:界面美观、可操作性强、稳定性好。 (二)基本内容: 教学设备管理系统 为方便管理学校教学设备,编写一个教学设备管理系统软件。系统记录必须涉及设备编号、设备
3、名称、生产厂家、购置日期、台数、单价、及备注等。 二 程序功能简介 (1) 添加:增长一台设备的记录到管理系统中。 (2) 查询:可以根据设备编号查找某台设备的相关信息,若找到则显示其信息。 (3) 修改:在管理系统中修改一台设备的记录。 (4) 保存:将所有教学设备信息保存在一个文献中(数据库文献或普通的文本文献)。 (5) 读取:从文献中读取已保存了数据。 (6) 删除:从管理系统中删除一条记录。 (7) 恢复:能恢复被删除的记录。 (8) 记录:(A)记录每页合计台数及金额;(B)累计设备的总台数及总金额;(C)记录单价在:200元以下、200~800元之间和800
4、元以上的设备总台数及总金额。(D)以表格形式打印教学设备明细表。 (9) 其他:可以根据自己的思绪设计其他功能。 三 主体内容 1 设计分析 根据问题描述和规定,系统规定可以添加设备,按设备编号查询,修改,保存,读取,删除,恢复设备的信息。系统既然具有“数据存盘”功能,设备数据可以保存到磁盘文献,那么也就意味着此后可以从磁盘文献读出人员数据,所以系统增长了“人员数据装入”模块,以方便用户使用,避免数据重新录入。考虑到系统实现简捷,人员数据文献采用文本文献,人员数据文献名. 使用面向对象的程序设计思想进行分析,整个系统涉及两个类的信息和操作,设备和购置日期。所以系统重要涉及两
5、个大类:设备类Equipment,日期Date。系统的主体框架就是设备类,考虑系统操作的设备信息的数量具有不拟定性,所以考虑使用链表保存,解决设备信息。设备类包含所以设备信息的一个不带头结点的链表,可以对设备信息进行增,删,改,查询,基础数据设立,数据存盘,数据装入等操作的相关模块(Add,Delete,Modify,Find,Save,Recover,Read,Statistic)作为成员函数。 2 程序结构 记录设备信息 恢复设备信息 删除设备信息 读取设备信息 保存设备信息 修改设备信息 查找设备信息 添加设备信息 教学设备管理系统 系统功能模块
6、
3 相关源程序
#include
7、d output();
void alloutput();
};
void Date::alloutput()
{
cout< 8、
{
year = a.year;
month = a.month;
day = a.day;
return *this;
}
void Date::output()
{
cout< 9、 //单价
char notes[101]; //备注
public:
Equipment(int num_ = 0 , char *name_ = NULL ,
int amount_ = 0, double prrice_ = 0);
Equipment & operator = (Equipment &a)
{
num = a.num;
strcpy(name,a.name);
strcpy(factory,a.factory);
date = a.date;
return *this;
}
void give(char * 10、factory_ , Date date_ , char *notes);
void output();
void alloutput();
int getNum();
int getAmount();
double getPrrice();
void setNum();
void setName();
void setFactory();
void setDate();
void setAmount();
void setPrrice();
void setNotes();
void foutput(ofstream &fout);
}; 11、
void Equipment::alloutput()
{
cout< 12、notes_);
}
Equipment::Equipment(int num_, char *name_,int amount_, double prrice_)
{
num = num_;
strcpy(name,name_);
amount = amount_;
prrice = prrice_;
strcpy(factory,"未设立");
strcpy(notes,"无");
}
void Equipment::output()
{
cout<<"1.设备编号:"< 13、dl;
cout<<"3.生产厂家:"< 14、eturn prrice;
}
void Equipment::setNum()
{
cout<<"请输入设备编号:";
cin>>num;
}
void Equipment::setName()
{
cout<<"请输入设备名称:";
cin>>name;
}
void Equipment::setFactory()
{
cout<<"请输入生产厂家的名称:";
cin>>factory;
}
void Equipment::setDate()
{
int y,m,d;
cout<<"请输入年、月、日,用空格隔开:";
cin>>y 15、>>m>>d;
Date a(y,m,d);
date = a;
}
void Equipment::setAmount()
{
cout<<"请输入设备台数:";
cin>>amount;
}
void Equipment::setPrrice()
{
cout<<"请输入设备单价:";
cin>>prrice;
}
void Equipment::setNotes()
{
cout<<"请输入备注内容:";
cin>>notes;
}
void Equipment::foutput(ofstream &fout)
{
fout<< 16、num< 17、bool Save(); // 设备保存
bool Read(); //读取
void Delete(); //删除设备记录
void Recover(); //恢复被删除的记录
void Statistic(); //记录
};
List::List()
{
n = 0;
capacity = 1000;
elem = new Equipment *[capacity];
for(int i = 0 ; i < capacity ; i++) elem[i] = NULL;
}
List::~List()
{
for (int i = 0 18、 i < n ; i++)
{
delete [] elem[i];
elem[i] = NULL;
}
if(elem) delete [] elem;
elem = NULL;
}
bool List::add()
{
if(n < capacity)
{
int num_;
char name_[20];
int amount_;
double prrice_;
cout<<"请输入设备编号:";
cin>>num_;
cout<<"请输入设备名称:";
cin>>name_;
cout<< 19、"请输入购置台数:";
cin>>amount_;
cout<<"请输入设备单价:";
cin>>prrice_;
elem[n] = new Equipment(num_,name_,amount_,prrice_);
n++;
return true;
}
return false;
}
bool List::find()
{
int num_;
cout<<"请输入您需要查找的设备编号:";
cin>>num_;
for(int i = 0 ; i < n ; i++)
{
if(num_ == elem[i]- 20、>getNum())
{
cout<<"查找成功!设备信息如下:"< 21、{
cout< 22、 cout<<"请输入您需要修改的选项:";
cin>>choice;
if(choice < 1 || choice > 8)
{
cout<<"输入错误,请重新输入!"< 23、reak;
case 3:
elem[i]->setFactory();
break;
case 4:
elem[i]->setDate();
break;
case 5:
elem[i]->setAmount();
break;
case 6:
elem[i]->setPrrice();
break;
case 7:
elem[i]->setNotes();
break;
case 24、8:
break;
}
} while (choice != 8);
}
}
if(!ok) cout<<"您的输入有误!"< 25、
cout<<"找不到文献,保存失败!"< 26、 fin.seekg(0,ios::end);
size = fin.tellg();
fin.seekg(pos);
if(fin.fail())
{
cout<<"找不到文献,读取失败!"< 27、e_;
fin>>factory_;
fin>>y>>m>>d;
if(fin.eof()) break;
Date date_(y,m,d);
fin>>amount_;
fin>>prrice_;
fin>>notes_;
elem[n] = new Equipment(num_,name_,amount_,prrice_);
elem[n]->give(factory_,date_,notes_);
n++;
}
}
cout<<"读取成功!"< 28、eturn true;
}
void List::Delete()
{
system("cls");
if(n > 0)
{
int i,num_;
bool ok = false;
cout<<"现有的设备编号如下:"< 29、 if(elem[i]->getNum()==num_)
{
ok = true;
system("cls");
elem[i]->output();
cout<<"您拟定要删除此设备? (Y or N)"< 30、');
if(str == 'Y')
{
ofstream fout;
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];
31、
elem[i] = elem[n-1];
elem[n-1] = tem;
delete [] elem[n-1];
elem[n-1] = NULL;
}
n--;
cout<<"删除成功!"< 32、int size;
ifstream fin;
fin.open("recover.txt");
streampos pos = fin.tellg();
fin.seekg(0,ios::end);
size = fin.tellg();
fin.seekg(pos);
if(fin.fail())
{
cout<<"找不到文献,恢复失败!"< 33、101];
while(!fin.eof() && size != 1)
{
fin>>num_;
fin>>name_;
fin>>factory_;
fin>>y>>m>>d;
if(fin.eof()) break;
Date date_(y,m,d);
fin>>amount_;
fin>>prrice_;
fin>>notes_;
elem[n] = new Equipment(num_,name_,amount_,prrice_);
elem[n]->give(factory_,da 34、te_,notes_);
n++;
}
cout<<"恢复成功!"< 35、0,p800_ = 0;
Equipment *tem;
for(i = 0 ; i < n ; i++)
{
for(j = 0 ; j < n - 1 - i ; j ++)
{
if(elem[j]->getPrrice() > elem[j+1]->getPrrice())
{
tem = elem[j];
elem[j] = elem[j+1];
elem[j+1] = tem;
}
}
}
cout<<"编号"<<'\t'
<<"名称"<<'\t'
<<"厂家"<<'\t'
36、 <<"日期"<<"\t\t"
<<"数量"<<'\t'
<<"单价"<<'\t'
<<"备注"< 37、>getAmount();
p200_800 += elem[i]->getAmount()*elem[i]->getPrrice();
}
else
{
n800_ += elem[i]->getAmount();
p800_ += elem[i]->getAmount()*elem[i]->getPrrice();
}
elem[i]->alloutput();
}
cout< 38、dl;
cout<<"单价在:200~800元的设备总台数及总金额为:"
<<'\t'< 39、int choice = 1;
system("color 1C");
do
{
cout<<"\t\t\t\t教学设备管理系统"< 40、t\t 4.保存设备记录。\t\t#"< 41、"< 42、
break;
case 2:
list.find();
break;
case 3:
list.modify();
break;
case 4:
list.Save();
break;
case 5:
list.Read();
break;
case 6:
list.Delete();
break;
case 7:
list.Recover();
break;
case 8:
list.Statistic();
break;
c 43、ase 9:
break;
}
system("pause");
system("cls");
} while (choice != 9);
return 0;
}
4 操作方法
main函数do-while循环,选择相应的数字进入相应的函数运营相应功能
5 制作模块
重要负责制作添加功能,查找功能及Equipment类和Date类。添加功能通过if函数拟定适当位置输入相应信息进行添加。查找功能通过if函数搜索所有程序直至找到相符的设备。Equipment类录入相关设备信息。Date类录入设备日期信息,在Equipment中会调用。
6 实验结果
7 设计体会
通过本次设计,进一步体会了c++的语言特点,进一步掌握了类的试用方法,并能更加纯熟地运用所学知识进行程序设计。同时在完毕课程设计的过程中,组里同学通力合作,大家合理分工,认真而有效率地完毕了自己的部分,并最终完毕了本组的设计课题。
8 参考文献
C++程序设计(第2版)
谭浩强 编著
清华大学出版社






