小小图书馆《程序设计基础—C++》实验报告_第1页
小小图书馆《程序设计基础—C++》实验报告_第2页
小小图书馆《程序设计基础—C++》实验报告_第3页
小小图书馆《程序设计基础—C++》实验报告_第4页
小小图书馆《程序设计基础—C++》实验报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、程序设计基础C+实验报告实验项目: 小小图书馆 实验人姓名: 实验人学号: 200724133 实验地点: 实验楼214 一、 目标与要求要求程序是一个简单的图书管理系统。主要完成的工作:借书还书图书管理读者维护其中,图书管理和读者维护功能中可以进行日常的数据添加、删除、查找、显示等功能,使日常图书借阅工作能正常进行。二、 分析根据该系统的需求分析,程序所处理的对象主要有图书和读者,还要存储图书和读者的信息,可抽象出读者信息库类和图书信息库类。程序主要由4个类组成,如表3.13所示。 表3.13 “小小图书馆”程序中的类类基类说明Reader无读者类Rdatabase无读者信息库类Book无图

2、书类Bdatabase无图书信息库类读者类和读者信息类库以及图书类和图书信息库类使用类的嵌套方式,读者类和图书类对象分别作为读者信息类库和图书信息库类的成员,库类中使用数组存储读者和图书对象。读者类包括一个读者基本的管理功能,它和图书类结构相仿,功能相似。而读者信息库类和图书信息库类具有相似的结构,执行的功能也有类似的部分,都是数据的添加、删除、查找、显示等功能。在这两个库类中都可以使用构造函数从文件中读取记录,处理完毕后使用析构函数写文件。各类关系简单,为了简便起见,将各类的数据成员声明成类的私有成员,函数成员声明为类的公有成员。各类的成员如表3.143.17所示。表3.14 Reader类

3、成员说明int note删除标记(1:已删,0:未删)int number读者编号char name10读者姓名int borbookMaxbor所借图书Reader( )构造函数char *getname()取得姓名int getnote()取得删除标记int getnumber() 取得读者编号void setname(char na )设置读者姓名void delbook() 设置删除标记void addreader(int n, char *na) 添加读者void borrowbook(int bookid) 借书操作int retbook(int bookid) 还书操作void

4、list() 输出读者信息表3.15 Rdatabase类成员说明int top 读者记录指针Reader readMaxr读者记录RDatabase() 构造函数:读入数据文件void clear()删除所有读者信息int addreader(int n, char *na)添加读者记录。添加时先确定读者是否已经存在Reader *query(int readerid)按编号查找读者void list()输出所有读者信息void readerdata()读者库维护RDatabase()析构函数:写数据文件表3.16 Book类成员说明int note删除标记(1:已删,2:未删)int nu

5、mber图书编号char name10书名int onshelf上架标志Book( )构造函数char *getname()取得书名int getnote()取得删除标记int getnumber() 取得图书编号void setname(char na )设置书名void delbook() 删除图书void addbook(int n, char *na) 添加图书void borrowbook(int bookid) 借书操作int retbook(int bookid) 还书操作void list() 输出图书信息表3.17 Bdatabase类成员说明int top 图书记录指针Bo

6、ok bookMaxr图书记录BDatabase() 构造函数:读入数据文件void clear()删除所有图书信息int addbook(int n, char *na)添加图书记录Book *query(int bookid)按编号查找图书void list()输出图书信息void bookdata()图书库维护BDatabase()析构函数:写数据文件 读者信息类库和图书信息库类的构造函数以及析构函数都要从文件中读写数据。假定读者信息记录在reader.txt文件中, 而图书信息记录在book.txt文件中。使用程序的“新增”功能,可添加读者和图书。当结束运行时,由RDatabase类和

7、BDatabase类的析构函数把各处管理的读者信息和图书信息写入到相应的文本文件中。三、 系统实现步骤 根据以上3.1的分析和设计,下面实现程序。1. 新建控制台项目,保存项目名为library.2. 新建头文件reader.h,定义读者类Reader. #ifndef _reader_h_#define _reader_h_#include using namespace std;const int Maxbor = 5; / 最大借阅量class Reader / 读者类private:int note; / 删除标号(1:已删,0:未删)int number; / 读者编号char na

8、me10; / 读者姓名int borbookMaxbor; / 所借图书public:Reader() char *getname(); / 获得姓名int getnote(); /获得删除标记int getnumber(); / 获得读者编号void setname(char na); / 设置姓名void delbook(); / 设置删除标记void addreader(int n, char *na); / 添加读者void borrowbook(int bookid); / 借书操作int retbook(int bookid); / 还书操作void list(); / 输出读者

9、信息;#endif3. 新建cpp文件reader.cpp,实现Reader类。 #include #include reader.hchar *Reader:getname()return name;int Reader:getnote()return note;int Reader:getnumber()return number;void Reader:setname(char na)strcpy(name, na);void Reader:delbook()note = 1;void Reader:addreader(int n, char *na)note = 0;number =

10、n;strcpy(name, na);for (int i = 0; i Maxbor; i+)borbooki = 0;void Reader:borrowbook(int bookid)for (int i = 0; i Maxbor; i+)if (borbooki = 0)borbooki = bookid;return;int Reader:retbook(int bookid)for (int i = 0; i Maxbor; i+)if (borbooki = bookid)borbooki = 0; return 1;return 0;void Reader:list()if

11、(note = 0)cout setw(5) number setw(10) name 借书编号:;for (int i = 0; i Maxbor; i+)if (borbooki != 0)cout borbooki |;cout endl;4. 新建头文件rdatabase.h, 定义读者信息库类Rdatabase。/#ifdef _rdatabase_h_ /#define _rdatabase_h_#include #include reader.husing namespace std;const int Maxr = 100; / 最大读者数class RDatabasepriv

12、ate:int top; / 读者记录指针Reader readMaxr; / 读者记录public:RDatabase(); / 构造函数初始化:读入文件void clear(); / 删除所有读者信息int addreader(int n, char *na); / 添加读者记录时,先确定它是否已经存在Reader *query(int readerid); / 按编号查找void list(); / 输出所有读者信息void readerdata(); / 读者库维护RDatabase(); / 析构函数:写文件;/#endif5. 新建cpp文件rdatabase.cpp, 实现Rda

13、tabase类。#include #include #include reader.h#include rdatabase.husing namespace std;RDatabase:RDatabase()Reader s;top = -1;fstream file(reader.txt, ios:in);while (1)file.read(char *)&s, sizeof(s);if (!file)break;top+;readtop = s;file.close();void RDatabase:clear()top = -1;int RDatabase:addreader(int

14、n, char *na)Reader *p = query(n);if (p = NULL)top+;readtop.addreader(n, na);return 1;return 0;Reader *RDatabase:query(int readerid)for (int i = 0; i = top; i+)if (readi.getnumber() = readerid & readi.getnote() = 0)return & readi;return NULL;void RDatabase:list() / 输出所有读者信息for (int i = 0; i = top; i+

15、)readi.list();RDatabase:RDatabase() / 析构函数,写文件fstream file(reader.txt, ios:out);for (int i = 0; i = top; i+)if (readi.getnote() = 0)file.write(char*)&readi, sizeof(readi);file.close();void RDatabase:readerdata() / 读者库维护的实现int choice = 1;char readername20;int readerid;Reader *r;while (choice != 0)cou

16、t 读者维护: endl;cout - endl;cout 1:新增 2:更改 3:删除 4:查找 5:显示 6:全删 0:退出 endl;cout choice;cout - endl;switch(choice)case 1:cout readerid;cout readername;addreader(readerid, readername);break;case 2:cout readerid;r = query(readerid);if (r = NULL)cout 该读者不存在! endl;break;cout readername;r-setname(readername);b

17、reak;case 3:cout readerid;r = query(readerid);if (r = NULL)cout 该读者不存在! delbook();break;case 4:cout readerid;r=query(readerid);if (r = NULL)cout 该读者不存在! list();break;case 5:list();break;case 6:clear();break; / end switch / end while6. 新建头文件book.h, 实现图书类Book。#ifndef _book_h_#define _book_h_#include u

18、sing namespace std;class Bookprivate:int note; / 删除标记(1: 已删,2: 未删)int number; / 图书编号char name20; / 书名int onshelf; / 上架标志(1: on,0: not on)public:Book()char *getname(); / 获得书名int getnumber(); / 获得图书编号int getnote(); / 获得删除标志void setname(char na); / 设置书名void delbook(); / 删除图书void addbook(int n, char *na

19、); / 添加图书int borrowbook(); /借书操作void retbook(); / 还书操作void list(); / 输出图书;#endif7. 新建cpp文件book.cpp, 实现Book类。#include #include #include book.hchar *Book:getname() / 获得书名return name;int Book:getnote() / 获得删除标志return note;int Book:getnumber() / 获得图书编号return number;void Book:setname(char na)strcpy(name,

20、 na);void Book:delbook() / 删除图书note = 1;void Book:addbook(int n, char *na) / 添加图书note = 2; / 未删number = n;strcpy(name, na);onshelf = 1; int Book:borrowbook() / 借书操作if (onshelf = 1)onshelf = 0;return 1;return 0;void Book:retbook() / 还书操作 /?/onshelf = 1;void Book:list()if (note != 1)cout setw(5) numbe

21、r setw(10) name :;if (onshelf = 0)cout 该书已被借出! endl;elsecout 该书可供借出! endl;8. 新建头文件bdatabase.h, 定义图书信息库类Bdatabase。#ifndef _bdatabase_h_#define _bdatabase_h_#include #include book.husing namespace std;const int Maxb = 100;class BDatabase / 图书库类private:int top; / 图书记录指针Book bookMaxb; / 图书记录public:BData

22、base(); / 构造函数,读入文件void clear(); / 全部删除Book *query(int bookid); / 查找图书int addbook(int n, char *na); / 添加图书void bookdata(); / 图书库维护void list(); / 图书输出BDatabase(); / 析构函数;#endif9. 新建cpp文件bdatabase.cpp, 实现BDatabase类。#include #include bdatabase.husing namespace std;BDatabase:BDatabase() / 构造函数,读入文件Book

23、s;top = -1;fstream file(book.txt, ios:in);while (1)file.read(char*)&s, sizeof(s);if (!file)break;top+;booktop = s;file.close();void BDatabase:clear() / 全部删除top = -1;Book *BDatabase:query(int bookid) / 查找图书for (int i = 0; i = top; i+)if (booki.getnumber() = bookid & booki.getnote() = 2)return & booki

24、;return NULL;int BDatabase:addbook(int n, char *na) / 添加图书Book *p = query(n);if (p = NULL)top+;booktop.addbook(n, na);return 1;return 0;void BDatabase:list() / 图书输出for (int i = 0; i = top; i+)booki.list();BDatabase:BDatabase() / 析构函数fstream file(book.txt, ios:out);for (int i = 0; i = top; i+)if (boo

25、ki.getnote() = 2)file.write(char*)&booki, sizeof(booki);file.close();void BDatabase:bookdata() / 图书库维护int choice = 1;int bookid;Book *b;char bookname20;while (choice != 0)cout 图书维护 endl;cout - endl;cout 1:新增 2:更改 3:删除 4:查找 5:显示 6:全删 0:退出 endl;cout choice;cout - endl;switch (choice)case 1:cout bookid

26、;cout bookname;addbook(bookid, bookname);break;case 2:cout bookid;b = query(bookid);if (b = NULL)cout 该图书不存在! endl;break;cout bookname;b-setname(bookname);break;case 3:cout bookid;b = query(bookid);if (b = NULL)cout 该图书不存在! delbook();break;case 4:cout bookid;b = query(bookid);if (b = NULL)cout 该图书不存

27、在! list();break;case 5:list();break;case 6:clear();break; / end switch / end while10. 新建cpp文件Main.cpp, 编写程序主函数。#include #include reader.h#include book.h#include rdatabase.h#include bdatabase.husing namespace std;void main()int choice = 1;int bookid;int readerid;RDatabase ReaderDB;Reader *r;BDatabase BookDB;Book *b;cout 欢迎进入“小小图书馆”管理软件 endl;cout - endl;while (choice

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论