信控学院专业课实验报告
专业 软件工程 班级 1 姓名 孙嘉成 学号 1806050127
2019 年 11 月 20 日
图书管理系统的控制台实现
目录
一、实验名称..............................................................................................1
二、实验目的..............................................................................................1
三、实验平台..............................................................................................1
四、问题分析..............................................................................................1
①问题描述与需求分析....................................................................... 1
②程序功能抽象................................................................................... 1
五、设计/开发解决方案............................................................................ 1
1.class Data 数据基类.......................................................................... 2
2.class Book 书籍派生类.......................................................................2
3.class Journal 派生期刊类...................................................................3
4.class Reader 借书人类....................................................................... 3
六、实验结果..............................................................................................8
图 3-2 借书人用户创建与信息显示..................................................8
图 3-3 借书数量超过限制(5 本).........................................................8
图 3-4 借书人当前借阅书籍信息展示..............................................8
七、实验分析及结论................................................................................. 8
一、实验名称
模拟图书管理系统的控制台指令实现
二、实验目的
本次实验旨在主要对前期学习的有关 C++面向对象部分的有关类的继承
(inheritance)相关知识的实践与应用。
在理论方面主要体现了:
1. 提升由面向过程向面向对象的思维转变;
2. 对继承关系的分析和实践应用;
3. 对函数参数列表(parameter list)的实践应用;
4. 加强对对象的创建和成员函数的书写能力;
在实际操作方面,本次试验重点训练了:
1. 继承关系的创建,与相关成员函数之间的调用关系;
2. 函数参数列表的赋值方式;
3. 对字符数组(Character array)的创建和使用;
三、实验平台
IDE :CodeBlocks16.1 (Core:VC++6.0)
Language Standard : C++14
四、问题分析
①问题描述与需求分析
在图书馆的日常使用当中,每天都会发生类似"借阅""归还"和"借阅信息管理"
等操作,且随着规模的扩大,每天产生的信息流相当巨大。因此,我们需要利用相关
的软件进行对应信息的管理,"图书管理系统"应运而生。
此次的"图书管理系统",是基于当前学习的有关 C++面向对象中的类的继承
知识基础上构建的,其中需要完成对图书馆运营过程中的部分基础操作进行实现,
并做到对相关信息的查阅和管理。具体包括:
1.对各类书籍进行分类存储,并能做到对书籍进行"增,删,改,查";
2.对借阅人的相关信息进行管理,包括借阅人个人的信息,以及当前所借阅的
书籍,并同时能对人员进行"增,删,改,查"
3.能加入对人员借阅书籍的数量进行一定的限制;
②程序功能抽象
对于图书管理系统在实现部分功能时,通过需求分析可知,我们需要多个类去
管理和存储对应的相关信息,从大体上分为:书籍类(Books)与借阅人类(Reader)。
1.对于类的设计
对于"对各类书籍进行分类存储",我们可以首先设立一个信息量相对较少的
基类数据类(Data),之后利用相关的继承知识,对多个不同书籍种类设置派生类,如
普通书籍类(Books),而对于类似报纸杂志等具有特殊属性的书籍种类,我们可以继
续派生,如派生出的期刊类(Journal),以用来简化相关的代码冗余。
在借阅人类(Reader)中,我们可以实现需求中的有关人员管理的相关功能,例
如"姓名","借书卡号"以及"当前借阅书籍"等相关内容。
2.对于类之间的联系
在相关类设计完成之后,我们应该考虑通过某种机制将两个类即书籍类
(Books)与借阅人类(Reader)关联起来,处于不破坏面向对象的封装性的特点,特别
的使用在 Reader 类中创建 Books 类对象的方式,是两个类中的成员函数和数据成
员进行交互访问。
五、设计/开发解决方案
1
根据需求的分析,首先得到图书管理系统的程序类关系,类图表示如下:
并参考需求分析中的要求,并结合相关内容,确定出上图类中的成员函数和数
据成员,图书管理系统代码片段如下:
图 2-1
//数据基类
备注:已将部分代码数量较少的函数直接写入类中,未在外部进行编写。
1.class Data 数据基类
1.classData
2.{
3.public:
4. Data()
5. {
6.
7.
8. }
strcpy(Name,"");
Id=0;
//初始化数据
returnId;
strcpy(Name,name);
Id=id;
9. Data(char*name,longid)
10. {
11.
12.
13. }
14. longGetCode()
15. {
16.
17. }
18. voidShow()
19. {
20.
21. }
22.protected:
23. charName[40];
24. longId;
25.};
2.class Book 书籍派生类
26.classBook:publicData
27.{
cout<<"数据:"<
//初始化书籍信息
strcpy(Writer,"");
strcpy(IndexId,"");
28.public:
29. Book()
30. {
31.
32.
33. }
34. Book(char*writer,char*name,char*index,longid);//增加书籍
35. voidShow()//显示书籍信息
36. {
37. cout<<"书籍:"<
//显示所借期刊
//添加所借书
//添加所借期刊
63. voidShow_Journal();
64. voidAdd_Book(Bookobj);
65. voidAdd_Journal(Journalobj);
66. voidDel_Book(Bookobj);
67. voidDel_Journal(Journalobj);
68.private:
69. charName[20];
70. longId;
71. Book*books;
72. intCounter_Book;
73. Journal*journals;
74. intCounter_Journal;
75.};
对于部分实现功能的成员函数,具体代码如下:
//归还所借书
//归还所借期刊
//借书人姓名
//借书证号
//所借书籍
//已借书数目
//所借期刊
//已借期刊数目
1. 增加书籍
1.Book::Book(char*writer,char*name,char*index,longid):
2. Data(name,id)
3.{
4. strcpy(Writer,writer);
5. strcpy(IndexId,index);
6.}
2.增加期刊
1.Journal::Journal(char*name,intnum,longid):
2. Data(name,id)
3.{
4. Number=num;
5.}
3.显示期刊
1.voidJournal::Show()
2.{
3. cout<<"期刊:"<
8. Counter_Journal=0;
}
5.设置借书人信息
1.Reader::Reader(char*name,longid)
2.{
3. strcpy(Name,name);
4. Id=id;
5. books=newBook[5];
6. Counter_Book=0;
7. journals=newJournal[10];
8. Counter_Journal=0;
9.}
6.展示借阅书籍情况
1.voidReader::Show_Book()
2.{
3. if(Counter_Book==0)
4. {
5.
6.
7. }
8. for(inti=0;i
books[Counter_Book]=obj;
Counter_Book++;
cout<<"您已经借阅5本书籍,请归还后继续借阅!"<0;i--)
4.
if(books[i].GetCode()==obj.GetCode())break;
5. for(intj=i;j0;i--)
4.
if(journals[i].GetCode()==obj.GetCode())break;
6
5. for(intj=i;j