资源描述
C++面向对象程序设计
课 程 设 计 报 告
课程名称 C++面向对象程序设计
课题名称 媒体库管理系统
专 业 网络工程
班 级 551
学 号
姓 名 高慧鹏
指导老师
12 月 22 日
(一)、课程设计题目:
媒体库管理系统
(二)、目标和要求:
1、目标:
(1)要求学生达成熟练掌握C++语言基础知识和技能;
(2)基础掌握面向对象程序设计基础思绪和方法;
(3)能够利用所学基础知识和技能,处理简单面向对象程序设计问题。
2、基础要求:
(1)要求利用面向对象方法和C++编程思想来完成系统设计;
(2)要求在设计过程中,建立清楚类层次;
(3)在系统中最少要定义四个类,每个类中要有各自属性和方法;
(4)在系统设计中,最少要用到面向对象一个机制。
3、创新要求:
在基础要求达成后,可进行创新设计,如依据查找结果进行修改功效。
(三)、设计方法和基础原理:
功效要求:
1) 添加物品
程序关键完成图书馆三类物品信息添加,要求编号唯一。假如添加了反复编号物品时,则提醒用户数据添加反复并取消添加;假如物品库已满,则提醒不能再添加新物品。
2) 查询物品
可根据三种方法进行物品查询。
·按标题查询:
·按编号查询:
·按类别查询:
假如未找到,给出对应提醒信息,假如找到,则显示对应统计信息。
3) 显示物品库
可显示目前物品库中全部物品信息。
4) 修改物品
可依据查询结果对对应统计进行修改,修改时注意编号唯一性。
5)删除物品
对已添加物品信息进行删除。假如目前物品库为空,则提醒“物品库为空!”并返回操作;不然输入要删除编号,依据编号删除该物品信息,假如没有找到该物品信息,则提醒“该编号不存在”。
6)统计功效
输出目前物品库中总物品数,和按物品类别,统计出目前物品中各类别物品数并显示。
7) 保留物品
将目前系统中物品信息存入文件中。
8) 读取物品
将保留在文件中物品信息读入到目前系统中,以供用户使用。
在完成以上基础功效基础上,可自行进行扩展或完善。
3、问题处理方案:
依据系统功效要求,能够将问题处理分为以下步骤:
(1)应用系统分析,建立该系统功效模块框图和界面组织和设计;
(2)分析系统中各个实体及它们之间关系包含属性和行为;
(3)依据问题描述,设计系统类层次;
(4)完成类层次中各个类描述(包含属性和方法);
(5)完成类中各个组员函数定义;
(6)完成系统应用模块;
(7)功效调试;
(8)完成系统总结汇报和系统使用说明书
目 录
1. 系统需求分析 1
2. 总体设计 2
3. 具体设计及实现 3
4. 系统调试 42
5. 结论 43
6. 心得体会 43
1. 系统需求分析
1.1系统设计目标和意义:
图书馆中资料很多,假如能分类对其资料流通进行管理,将会带来很多方便,所以需要有一个媒体库管理系统。
1.2 系统功效需求:
本系统有四个类:Base类、Book类、CD类、Draw类,存放资料信息、编号、标题、作者、评级。Base 为父类,其它三个为子类,每个子类含有自己特点。
1.基础信息添加功效
程序能够任意添加图书、CD视频光盘、图画信息和各自对应相关信息。
2.修改功效
对已添加统计(图书、CD视频光盘、图画信息和各自对应相关信息)进行查找和修改。
3.删除功效
对已添加统计(图书、CD视频光盘、图画信息和各自对应相关信息)进行查找和删除。
假如目前系统中没有对应统计,则提醒“统计为空!”并返回操作;不然输入要删除编号对该统计进行删除,假如没有找到,则提醒对应统计不存在。
4.查询功效
① 可依据资料编号查询资料及其内容。
② 可依据标题查找。
③ 依据类别查询
假如未找到,给出对应提醒信息,假如找到,则显示对应统计信息。
5.保留功效
将目前系统中各类统计存入文件中。
6.读取功效
将保留在文件中信息读入到目前系统中,以供用户使用。
2. 总体设计
2.1 系统功效分析:
系统经过调用函数来实现信息录入、信息修改、信息删除、信息查询和数据保留文件等功效。add()函数用于添加信息;modify()函数用来修改信息;del()函数用来修改信息;refer()函数用来查询数据信息;read()函数用于将文件中数据读取到内存中;save()函数用于将内存中信息存入文件内;主函数main()用于调用这些函数。
2.2系统功效模块划分和设计:
系统定义了Base基类、Book类、CD类、Draw类这四个类,定义了add()、modify()、del()、read()、save()、refer()等函数来实现系统所需功效。
2.3 系统功效模块图:
媒体库管理系统
Library类
图书
图画
视频光盘
图画信息查询
视频光盘信息添加
图书信息查询
图书信息添加
图书信息统计
图画信息统计
图书信息修改
图书信息删除
视频光盘信息删除
视频光盘信息修改
视频光盘信息查询
视频光盘信息统计
图画信息修改
图画信息删除
图画信息添加
2.4 类设计
(1)Base类(抽象类)设计:
Base
void mainmenu();
virtual void add(){};
virtual void refer(){};
virtual void display(){}
virtual void modify(){};
virtual void del(){};
virtual void Info(){};
virtual void save(){};
virtual void read(){};
int No;
char headline[200];
char write[200];
char rating[200];
图 3.1 Base类
(2)图书类设计:
Book
void Book_manage();
void Book_menu();
void add();
void refer();
void display();
void modify();
void del();
void Info();
void save();
void read();
char publisher[20];
char ISBN_No[20];
int pages;
图 3.2班级类
(3)CD类设计:
CD
void CD_manage();
void add();
void refer();
void display();
void modify();
void del();
void Info();
void save();
void read();
void cd_menu();
char name[20];
char year[20];
char time[20];
图 3.3学生类
(4)图片类设计:
Draw
void Draw_manage();
void Draw_menu();
void add();
void refer();
void display();
void modify();
void del();
void Info();
void save();
void read();
char nationality[20];
int length;
int width;
图 3.4 课程类
(6)各个类关系描述:
3. 具体设计及实现
3.1 Base类(抽象类)实现
class Base
{
public:
void mainmenu();
virtual void add(){}; //添加物品
virtual void refer(){}; //查询物品
virtual void display(){}; //显示物品库
virtual void modify(){}; //修改物品
virtual void del(){}; //删除物品
virtual void Info(){}; //统计功效
virtual void save(){}; //保留物品
virtual void read(){}; //读取物品
int No; //编号
char headline[200]; //标题
char write[200]; //作者
char rating[200]; //评级
};
3.2 班级类实现
Book.h
class Book:public Base
{
public:
void Book_manage(); //管理
void Book_menu(); //菜单显示
void add(); //添加物品
void refer(); //查询物品
void display(); //显示物品库
void modify(); //修改物品
void del(); //删除物品
void Info(); //统计功效
void save(); //保留物品
void read(); //读取物品
char publisher[20]; //出版社
char ISBN_No[20]; //ISBN号
int pages; //页数
};
Book.cpp
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include"windows.h" //暂停头文件
#include"Book.h"
const int maxsize_book=100; //图书数据最大长度
Book b_[maxsize_book];
int count_book=1;
Book b,b1;
Base *p1;
int i,j,num1,num2;
void Book::Book_manage()
{
int flag=1;
int k;
p1=&b;
p1->read();
b.Book_menu();
loop4: cout<<"请输入所要操作编号:\n";
cin>>k;
while(flag==1)
{
if(k>=0&&k<7)
{
switch(k) //菜单选择
{
case 1:p1->add();break;
case 2:p1->refer();break;
case 3:p1->display();break;
case 4:p1->modify();break;
case 5:p1->del();break;
case 6:p1->Info();break;
case 0:break;
}
}
else
{
cout<<"输入有误,请重新输入:\n";
goto loop4;
}
loop: flag=0;
if(flag==0)
{
cout<<"\n请选择接下来操作? \n1.返回图书信息管理菜单. \n2.返回主菜单. \n";
cin>>flag;
}
if(flag==1)
{
b.Book_menu();
cout<<"请选择\n:";
cin>>k;
}
else if(flag==2)
{
break;
}
else
{
cout<<"选择错误,请重新输入。\n";
goto loop;
}
}
};
void Book::add() //添加图书数据
{
cout<<"请输入要添加数据个数:"<<endl;
cin>>num1;
for(j=0;j<num1;j++)
{
cout<<"请输入图书编号:"<<endl;
cin>>b.No;
i=b.No;
b_[i].No=i;
cout<<"请依次输入数据标题、作者、评级(未评级、通常、成人、儿童)、出版社、ISBN号、页数:"<<endl;
cin>>b_[i].headline>>b_[i].write>>b_[i].rating>>b_[i].publisher>>b_[i].ISBN_No>>b_[i].pages;
}
p1->save();
};
void Book::refer() //查找子菜单
{
loop1:cout
<<" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl
<<" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl
<<" ┃ ┃"<<endl
<<" ┃◆ 按标题查询-------------① ◆┃"<<endl
<<" ┃◆ 按标题查询-------------② ◆┃"<<endl
<<" ┃◆ 按标题查询-------------③ ◆┃"<<endl
<<" ┃◆ 退出子菜单-------------④ ◆┃"<<endl
<<" ┃ ┃"<<endl
<<" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl
<<" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ "<<endl
<<endl;
cout<<"请输入你要查询方法编号:\n"<<endl;
cin>>num2;
switch(num2) //三种情况用选择语句
{
case 1:
{
cout<<"请输入要查找图书标题:\n"<<endl;
cin>>b1.headline;
for(j=0;j<maxsize_book;j++)
{
if(strcmp(b1.headline,b_[j].headline)==0)
cout<<"图书编号:"<<b_[j].No<<" "<<"标题:"<<b_[j].headline<<" "<<"作者:"<<b_[j].write<<" "<<"评级:"<<b_[j].rating<<"出版社:"<<b_[i].publisher<<
" "<<"ISBN号:"<<b_[j].ISBN_No<<" "<<"页数:"<<" "<<b_[j].pages<<endl;
Sleep(10);
}
}
break;
case 2:
{
cout<<"请输入要查找图书编号"<<endl;
cin>>b1.No;
for(j=0;j<maxsize_book;j++)
{
if(b1.No==b_[j].No)
cout<<"图书编号:"<<b_[j].No<<" "<<"标题:"<<b_[j].headline<<" "<<"作者:"<<b_[j].write<<" "<<"评级:"<<b_[j].rating<<"出版社:"<<b_[i].publisher<<
" "<<"ISBN号:"<<b_[j].ISBN_No<<" "<<"页数:"<<" "<<b_[j].pages<<endl;
Sleep(10);
}
}
break;
case 3:
{
loop2: cout<<"请输入要查找图书类别(未评级、通常、成人、儿童)"<<endl;
cin>>b1.rating;
if(b1.rating=="未评级"||"通常"||"成人"||"儿童")
{
for(j=0;j<maxsize_book;j++)
{
if(strcmp(b1.rating,b_[j].rating)==0)
cout<<"图书编号:"<<b_[j].No<<" "<<"标题:"<<b_[j].headline<<" "<<"作者:"<<b_[j].write<<" "<<"评级:"<<b_[j].rating<<"出版社:"<<b_[j].publisher<<
" "<<"ISBN号:"<<b_[j].ISBN_No<<" "<<"页数:"<<" "<<b_[j].pages<<endl;
Sleep(10);
}
}
else
{
cout<<"输入有误请重新输入:\n";
goto loop2;
}
}
break;
case 4:break;
default:
{
cout<<"选择错误,请重新选择:\n";
goto loop1;
}
break;
}
};
void Book::display()
{
for(j=1;j<num1+1;j++)
{
cout<<"图书编号:"<<b_[j].No<<" "<<"标题:"<<b_[j].headline<<" "<<"作者:"<<b_[j].write<<" "<<"评级:"<<b_[j].rating<<"出版社:"<<b_[j].publisher<<
" "<<"ISBN号:"<<b_[j].ISBN_No<<" "<<"页数:"<<" "<<b_[j].pages<<endl;
Sleep(10);
}
};
void Book::modify()
{
int k;
cout<<"请输入要修改图书编号"<<endl;
cin>>b1.No;
loop3:cout<<endl<<endl;
cout
<<" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl
<<" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl
<<" ┃ ┃"<<endl
<<" ┃◇ 修改标题-----------① ◇┃"<<endl
<<" ┃◇ 修改作者-----------② ◇┃"<<endl
<<" ┃◇ 修改评级-----------③ ◇┃"<<endl
<<" ┃◇ 修改出版社---------④ ◇┃"<<endl
<<" ┃◇ 修改ISBN号---------⑤ ◇┃"<<endl
<<" ┃◇ 修改页数-----------⑥ ◇┃"<<endl
<<" ┃◇ 返回菜单-----------0 ◇┃"<<endl
<<" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl
<<" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ "<<endl
<<endl;
cout<<endl<<endl;
cout<<" 请选择要修改内容编号:\n";
cin>>k;
if(k>=0&&k<7){
switch(k)
{
case 1:
{
char mheadline[20];
cout<<"请输入修改后标题:"<<endl;
cin>>mheadline;
strcpy(b_[b1.No].headline,mheadline);
}
break;
case 2:
{
char mwrite[20];
cout<<"请输入修改后作者:"<<endl;
cin>>mwrite;
strcpy(b_[b1.No].write,mwrite);
}
break;
case 3:
{
char mrating[20];
cout<<"请输入修改后分级:(未评级、通常、成人、儿童)"<<endl;
cin>>mrating;
strcpy(b_[b1.No].rating,mrating);
}
break;
case 4:
{
char mpublishe[20];
cout<<"请输入修改后出版社:"<<endl;
cin>>mpublishe;
strcpy(b_[b1.No].publisher,mpublishe);
}
break;
case 5:
{
char mISBN_No[20];
cout<<"请输入修改后ISBN号:"<<endl;
cin>>mISBN_No;
strcpy(b_[b1.No].ISBN_No,mISBN_No);
}
break;
case 6:
{
int mpages;
cout<<"请输入修改后页数:"<<endl;
cin>> mpages;
b_[b1.No].pages=mpages;
}
break;
case 0:break;
};}
else
{
cout<<"选择错误,请重新输入:\n";
goto loop3;
}
};
void Book::del()
{
cout<<"请输入要删除图书编号"<<endl;
cin>>b1.No;
for(j=b1.No;j<num1;j++)
{
b_[j].No=b_[j+1].No;
strcpy(b_[j].headline,b_[j+1].headline);
strcpy(b_[j].write,b_[j+1].write);
strcpy(b_[j].rating,b_[j+1].rating);
strcpy(b_[j].publisher,b_[j+1].publisher);
strcpy(b_[j].ISBN_No,b_[j+1].ISBN_No);
b_[j].pages=b_[j+1].pages;
num1--;
}
};
void Book::Info()
{
cout<<"目前物品库中总物品数:"<<num1<<endl;
};
void Book::save()
{
ofstream out;
out.open("图书信息.txt");
out<<num1<<endl;
for(int k=1;k<=num1;k++)
{
out<<b_[k].No<<" "<<b_[k].headline<<" "<<b_[k].write<<" "<<b_[k].rating<<" "<<b_[k].publisher<<" "<<b_[k].ISBN_No<<" "<<b_[k].pages<<endl;
}
out.close();
};
void Book::read()
{
ifstream in;
in.open("图书信息.txt");
in>>num1;
while(num1>=count_book)
{
in>>b_[count_book].No>>b_[count_book].headline>>b_[count_book].write>>b_[count_book].rating>>b_[count_book].publisher>>b_[count_book].ISBN_No>>b_[count_book].pages;
count_book++;
}
in.close();
}
void Book::Book_menu()
{
cout<<"\n\n ----------☆ 欢迎使用媒体库管理系统 ☆---------- "<<endl<<endl;
cout<<"\n\n ----------☆ 图书信息管理 ☆---------- "<<endl<<endl;
cout
<<" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl
<<" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl
<<" ┃ ┃"<<endl
<<" ┃◆ 添加图书-----------① ◆┃"<<endl
<<" ┃◆ 查询图书-----------② ◆┃"<<endl
<<" ┃◆ 显示图书-----------③ ◆┃"<<endl
<<" ┃◆ 修改图书-----------④ ◆┃"<<endl
<<" ┃◆ 删除图书-----------⑤ ◆┃"<<endl
<<" ┃◆ 统计图书-----------⑥ ◆┃"<<endl
<<" ┃◆ 退出系统-----------0 ◆┃"<<endl
<<" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl
<<" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ "<<endl
<<endl;
};
3.3 CD类实现
CD.h
class CD:public Base
{
public:
void CD_manage(); //管理子菜单
void add(); //添加物品
void refer(); //查询物品
void display(); //显示物品库
void modify(); //修改物品
void del(); //删除物品
void Info(); //统计功效
void save(); //保留物品
void read(); //读取物品
void cd_menu(); //菜单
char name[20]; //作者名
char year[20]; //出版年份
char time[20]; //播放时长
};
CD.cpp
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include"windows.h" //暂停头文件
#include"CD.h"
const int maxsize_video=100; //储存最大值
CD v_[maxsize_video];
int count_video=1;
CD v,v1;
Base *p3;
int i3,j3,vnum1,vnum2;
void CD::CD_manage() //Cd管理选择
{
int flag=1;
int k;
p3=&v;
p3->read();
v.cd_menu();
loop5: cout<<"请输入所要操作编号:";
cin>>k;
while(flag==1)
{
if(k>=0&&k<7)
{
switch(k) //第二菜单选择
{
case 1:p3->add();break;
case 2:p3->refer();break;
case 3:p3->display();break;
case 4:p3->modify();break;
case 5:p3->del();break;
case 6:p3->Info();break;
case 0:break;
}
}
else
{
cout<<"输入有误请重新输入:\n";
goto loop5;
}
loop6: flag=0;
if(flag==0)
{
cout<<"\n请选择接下来操作: \n1.返回CD信息管理菜单. \n2.返回主菜单. \n";
cin>>flag;
}
if(flag==1)
{
v.cd_menu();
cout<<"请选择\n:";
cin>>k;
}
else if(flag==2)
{
break;
}
else
{
cout<<"选择错误,请重新输入:\n";
goto loop6;
}
}
};
void CD::add() //添加CD
{
cout<<"请输入要添加编号个数:"<<endl;
cin>>vnum1;
for(j3=0;j3<vnum1;j3++)
{
cout<<"请输入视频编号:"<<endl;
cin>>v.No;
i3=v.No;
v_[i3].No=i3;
cout<<"请分别输入标题、作者、评级(未评级、通常、成人、儿童)、出品人姓名、出品年份、视频时长"<<endl;
cin>>v_[i3].headline>>v_[i3].write>>v_[i3].rating>>v_[i3].name>>v_[i3].year>>v_[i3].time;
Sleep(10);
}
p3->save();
};
void CD::refer() //CD查找
{
loop7: cout
<<" ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl
<<" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl
<<" ┃
展开阅读全文