您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页图书预定系统文档

图书预定系统文档

来源:抵帆知识网


长 沙 学 院

课程设计说明书

题系

(

目 )

图书预定系统 计算机科学与技术系

软件工程 罗利 2010022905

卓琳

2011.5.6-2011.5.16

专业(班级) 姓学指起

名 号

导止

教日

师 期

长沙学院课程设计鉴定表

姓名 罗利 学号 2010022905 专业 软件工程 班级 九班 卓琳 设计题目 图书预定系统 指导教师 指导教师意见: 评定等级: 教师签名: 日期: 答辩小组意见: 评定等级: 答辩小组长签名: 日期: 教研室意见: 教研室主任签名: 日期: 系(部)意见: 系主任签名: 日期: 说明 课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;

课程设计任务书

课程名称:C++程序设计基础

设计题目:1、图书预定系统

设计要求:

问题的描述:

张晨是一位很爱学习的同学,但是他总是为在图书馆借阅不到自己想看的书而烦恼。终于有一天他在图书馆做勤工俭学时突发奇想:“要是有一个包含图书预定的图书借阅系统就好了”。你能够帮助他完成这个系统的编写吗? 系统的大致要求如下:

1. 系统记录图书的主要信息:书名、作者、书号 、出版社 、版次 、出版时间 、馆藏编号 。 2. 系统应该记录读者的信息:姓名、借书证号 、所在系部 、分类(学生?老师?) 、已借

书籍 、超期书籍 、预定书籍 。每本书都应记录其借出日期 和应归还日期 。 3. 借书的规则如下,学生读者可以借5本图书,教师可以借6本,借期都是一个月。一旦超期,

就不可以再借书或预定(原预定的图书取消)。为了简化系统,本题不考虑续借的问题。 4. 预定规则如下:每个学生可以以预定两本,老师可以预定三本图书。被预定的书本一旦重新

入库,则通知前三个预定者,先到的人先借。 5. 如果被预定的图书超过一定人数图书比(比如说某本书被5个人预定,这本书的预定比为5:

1),则将本书加入到下一次的采购清单。

技术要求:

1、菜单:用户需要通过菜单来选择功能。例如,菜单可以设计为下面的样子(菜单和功能可以自己设计,以下界面仅供参考):

########################################

欢迎来到长沙学院图书馆

请按键选择功能

########################################

1、登陆 2注销

2、借书 4、图书预定

3、还书 5、图书检索

7、退出系统

#########################################

2、设计合理的检索功能,要求实现  按名称检索图书   

按书号检索图书 按出版社检索图书 按馆藏编号检索图书

3、设计合理的排序功能,要求实现所借书籍:  按还期排序  

按书号排序 按馆藏编号排序

4、巧妙灵活的运用文件知识,将多个信息写入文件,如读者信息、图书信息等 5、馆藏书目和读者信息事先已经存放在各自的文件中,程序只需读取和处理即可 6、无需设计全面的图书的管理功能和读者的管理功能,这样可以控制程序规模和复杂度

技术提示:

1、分析和设计很重要,设计清楚再动手

2、使用面向对象的方法可以减轻复杂问题的分析难度

3、使用模板可以减少函数的数量

4、文件不要用太多,要注意文件之间(文件中信息之间)的关系

设计工作量:40课时

工作计划:

(1) 2010软件工程(服务外包)1~14班

2课时:课程设计相关知识介绍。多媒体教室。 26课时:上机、调试。计算机系机房。 10课时:答疑。办公室。 2课时:答辩。计算机系机房。

指导教师签名: 日期:

教研室主任签名: 日期:

系主任签名: 日期:

摘要

该程序使用面向对象的方法实现了图书的预定、检索、借书、还书等一系列功能、还包括图书信息和读者信息的增、删、改、查操作,图书管理员通过密码鉴定对图书信息进行入库、修改、删除等图书信息管理。

系统中包括“图书”类,进行的操作有借书、还书、预定、显示图书信息。“图书库”类(和图书类是聚合关系),进行的操作有构造函数(从文件中读取数据写到对象数组中)、析构函数(将对象数组中的数据保存到文件中)、增删改查函数、书库维护函数(调用增删改查的接口)。关于对读者的操作和定义类似于对图书的操作。

在图书管理系统中,管理员要为每个读者建立借阅账户,并給读者发放不同类别的借阅卡(借阅卡可提供卡号、读者姓名),账户内存储读者的个人信息和借阅记录信息。持有借阅卡的读者可以通过管理员借阅、归还图书和预定图书,不同类别的读者可借阅和预定图书的数量不同。

关键词:XML;面向对象; 图书 管理系统 数据库

目录

1 设计内容与要求 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 1 2.设计说明 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 3 2.1 问题描述与功能设计„„„„„„„„„„„„„„„„„„„„„„„„„„„„3 2.2 算法与数据结构„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„5 2.3 函数定义„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„10 2.4 界面设计、测试„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„17 2.5 编码„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„25 2.6 类图„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„31 3 总结„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„33

参考文献 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„34 附录A 源代码„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„35

1设计内容与要求

设计要求与内容:

问题的描述:

张晨是一位很爱学习的同学,但是他总是为在图书馆借阅不到自己想看的书而烦恼。终于有一天他在图书馆做勤工俭学时突发奇想:“要是有一个包含图书预定的图书借阅系统就好了”。你能够帮助他完成这个系统的编写吗? 系统的大致要求如下:

6. 系统记录图书的主要信息:书名(bookName)、作者(author)、书号(ISBN)(bookNum)、出版

社(press)、版次(edition)、出版时间(publishTime)、馆藏编号(code)。 7. 系统应该记录读者的信息:姓名(readerName)、借书证号(rentBookNum)、所在系部

(department)、分类(学生?老师?)(identity)、已借书籍(rentedBook)、超期书籍(overtdueBook)、

预定书籍(bookBook)。每本书都应记录其借出日期(rentDate)和应归还日期( shouldReturnDate)。

8. 借书的规则如下,学生读者可以借5本图书,教师可以借6本,借期都是一个月。一旦超期,就不可以再借书或预定(原预定的图书取消)。为了简化系统,本题不考虑续借的问题。 9. 预定规则如下:每个学生可以以预定两本,老师可以预定三本图书。被预定的书本一旦重新

入库,则通知前三个预定者,先到的人先借。 10. 如果被预定的图书超过一定人数图书比(比如说某本书被5个人预定,这本书的预定比为5:

1),则将本书加入到下一次的采购清单。

技术要求:

1、菜单:用户需要通过菜单来选择功能。例如,菜单可以设计为下面的样子(菜单和功能可以自己设计,以下界面仅供参考):

########################################

欢迎来到长沙学院图书馆

请按键选择功能 ########################################

1、登陆(register) 2注销(cancel) 2、借书(Book_rent) 3、还书(Book_return) 4、图书预定 (Book_book) 5、图书检索(Book_Retrieval)

7、退出系统(System_exit)

#########################################

2、设计合理的检索功能,要求实现  按名称检索图书   

按书号检索图书 按出版社检索图书 按馆藏编号检索图书

1

3、设计合理的排序功能,要求实现所借书籍:  按还期排序  

按书号排序 按馆藏编号排序

4、巧妙灵活的运用文件知识,将多个信息写入文件,如读者信息、图书信息等 5、馆藏书目和读者信息事先已经存放在各自的文件中,程序只需读取和处理即可 6、无需设计全面的图书的管理功能和读者的管理功能,这样可以控制程序规模和复杂度

技术提示:

1、分析和设计很重要,设计清楚再动手

2、使用面向对象的方法可以减轻复杂问题的分析难度 3、使用模板可以减少函数的数量

4、文件不要用太多,要注意文件之间(文件中信息之间)的关

2

2.设计说明

2.1 问题描述与功能设计

1.问题描述 问题的描述:

张晨是一位很爱学习的同学,但是他总是为在图书馆借阅不到自己想看的书而烦恼。终于有一天他在图书馆做勤工俭学时突发奇想:“要是有一个包含图书预定的图书借阅系统就好了”。你能够帮助他完成这个系统的编写吗? 系统的大致要求如下:

11. 系统记录图书的主要信息:书名(bookName)、作者(author)、书号(ISBN)(bookNum)、出版

社(press)、版次(edition)、出版时间(publishTime)、馆藏编号(code)。 12. 系统应该记录读者的信息:姓名(readerName)、借书证号(rentBookNum)、所在系部

(department)、分类(学生?老师?)(identity)、已借书籍(rentedBook)、超期书籍(overtdueBook)、

预定书籍(bookBook)。每本书都应记录其借出日期(rentDate)和应归还日期( shouldReturnDate)。

13. 借书的规则如下,学生读者可以借5本图书,教师可以借6本,借期都是一个月。一旦超期,

就不可以再借书或预定(原预定的图书取消)。为了简化系统,本题不考虑续借的问题。 14. 预定规则如下:每个学生可以以预定两本,老师可以预定三本图书。被预定的书本一旦重新

入库,则通知前三个预定者,先到的人先借。 15. 如果被预定的图书超过一定人数图书比(比如说某本书被5个人预定,这本书的预定比为5:

1),则将本书加入到下一次的采购清单。 2.功能设计 1、总体功能

实现图书信息的全面管理,主要是对图书书名、馆藏编号的管理。通过此程序能够更方便的处理图书信息,如图1所示

3

图书预定系统 输 入 图 书 记 录 删 除 图 书 记 录 修 改 图 书 记 录 查 询 书 籍 记 录 显 示 所 有 图 书 读 者 管 理 模 块 图 书 借 阅 模 块

2、模块功能 (一)输入模块

该模块是实现对图书按照书号、书名、作者、出版日期、出版社、馆藏编号的录入并保存到文件中。 (二)删除模块

该模块实现俺图书馆藏编号对图书信息的删除。 (三)修改模块

该模块实现按图书馆藏编号对图信息的修改。 (四)查询模块

该模块实现按图书馆藏编号查询每种图书的信息。 (五)显示所有图书模块

该模块实现显示所有图书的信息。 (六)读者管理模块

该模块实现对读者信息的增删改查。 (七)借阅模块

该模块实现图书的预定、借阅、归还和检索功能。

4

2.2 算法与数据结构

1.算法

借书、还书、预定、图书信息管理功能的详细描述:

1) 借书

A.输入读者编号

IF 如果读者编号有效且有超期未还的图书

则提示超期未还的借阅记录; ELSE

B.输入图书编号;

If 已借书数>=可借书数 Then 给出相应提示; Else

添加一条借录;

“图书信息表”中“现有库存量”-1; “读者信息表”中“已借书数量”+1; 提示执行情况; Endif

输出读者信息

2) 还书

A.输入读者编号;

提示超期未还的借阅记录;

If 有超期 then 提示,调用“计算超期罚款金额”;

Endif

If 选择“确定” 还书

B.输入图书编号;

If 读者状态无效 或 该图书标号不在借录中then 提示该读者借书证无效或该图书不是该读者借阅的; Else

添加一条还录;

删除该借录; “图书信息表”中“现有库存量”+1; 通知预定该书的前3位同学!!! “读者信息表”中“已借书数量”-1; 提示执行情况; 输出读者信息

5

3) 预定

.输入读者编号;

If 该用户预定图书数目>=2(学生)或者>=3(老师) 提示该读者不能预订; Else

修改该用户的预定记录; 修改图书的预定记录; 图书预定次数+1; 提示执行情况; 输出读者信息

4) 图书信息管理

在系统中增加、修改、删除和查询图书信息纪录。

3、设计系统中的类,画出类图 (1)“图书”类: 私有数据:

书名、作者、书号、出版社、版次、出版时间、馆藏编号 增加:预定次数

公共操作:

借书、还书、预定、显示图书信息

(2)“图书库”类(和图书类是聚合关系)

私有数据:

图录指针

图书对象数组 公共操作:

构造函数(从文件中读取数据写到对象数组中) 析构函数(将对象数组中的数据保存到文件中) 增删改查函数

书库维护函数(调用增删改查的接口)

(3) “读者”类

私有数据

读者编号 读者姓名

读者类别 读者系部 已借图书数量

已借图书编号:数组 已经预定图书数量

已经预定图书编号:数组

公共操作

6

写入读者信息 读取读者信息 增删改查读者信息 显示读者信息 返回借阅数量 返回预定数量 借书 还书

预定图书

。。。。。。

读者类可以派生出:学生读者和老师读者两个类

(4)读者库类(和读者类是聚合关系)

私有数据: 读者记录指针 读者对象数组 公共操作:

构造函数(从文件中读取数据写到对象数组中) 析构函数(将对象数组中的数据保存到文件中) 增删改查读者信息的函数

显示读者信息

读者库维护函数(调用增删改查的接口)

2.数据结构

程序定义了“图书”类Book,其私有数据有书名bookName、作者author、书号bookNum、出版社press、版次edition、出版时间publishTime、馆藏编号code、删除标记tag、再架标记onshelf。 class Book {

private:

string bookName; //书名 string author; //作者 string bookNum; //书号 string press; //出版社 string edition; //版次

7

string publishTime; //出版时间 int code; //馆藏编号

int tag; //删除标记 1:已删 0:未删 int onshelf; //是否再架 1:再架 2:已借 public: ········· };

“图书库”类BDatabase(和图书类是聚合关系),其私有数据有图录指针top,图书对

象数组

book[maxBook],其中maxBook=1000,可重新定义。公有数据有热录hotnum、热书编号hotbook[500]。

const int maxBook=1000; //最大书籍容量 class BDatabase {

private:

int top; //图录指针

Book book[maxBook]; //图书对象数组 public:

int hotnum;//热录 int hotbook[500];//热书编号 ······· };

“读者”类Reader,其私有数据有登陆标记regist、删除标记tag、读者姓名readerName、借书证号rentBookcode、身份identity、所在系部department、已借书籍数量rentedBooknum、已借书籍编号rentedBookcode[6]、借书日期rentbookdata[6]、还书日期backbookdata[6]、超期书籍overtdueBook、

预定书籍数量bookBooknum,、预定书籍日期bookBookdata[3]、预定书籍编号bookBookcode[3]。 class Reader {

8

private:

int regist; //登陆标记 1:已登录 0:未登陆 int tag; //删除标记 1:已删 0:未删 string readerName; //读者姓名 string rentBookcode; //借书证号 string identity; //身份

string department; //所在系部 int rentedBooknum; //已借书籍数量 int rentedBookcode[6]; //已借书籍编号 int rentbookdata[6]; //借书日期 int backbookdata[6]; //还书日期 string overtdueBook; //超期书籍 int bookBooknum; //预定书籍数量 int bookBookdata[3]; //预定书籍日期 int bookBookcode[3]; //预定书籍编号 public:

·········· };

读者库类RDatabase(和读者类是聚合关系),其私有数据有读者记录指针top、读者对象数组read[maxReader],其中maxReader=500,可重新定义。 const int maxReader=500; class RDatabase {

private:

int top; //读者记录指针

Reader read[maxReader];//读者对象数组 public: ···· };

9

2.3 函数定义

借书函数,按图书馆藏编号查找图书,再分别记录到读者信息和图书信息中 void rent_book(string readercode) //借书函数 { int i; string id; int bookcode; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; id3:

cout<<\"身份:\"; cin>>id;

if(id==\"student\"||id==\"teacher\"); else

{ cout<<\"输入有误,请重新输入!\\n\\n\"; goto id3;} bc:

cout<<\"图书编号: \"; cin>>bookcode;

r=ReaderDB.query(readercode);//按编号查找读者 b=BookDB.query(bookcode); //按编号查找书籍

if(b==NULL) {

cout<<\" 不存在该图书,不能借书!(重输请输1,退出请输0)\\n\\n\"; cin>>i; if(i==1) goto bc;

10

else return; }

if(b->borrowbook()==0) {

cout<<\"\该图书已借出,不能借书(重输请输1,退出请输0)\\n\\n\"<>i; if(i==1) goto bc; else return; }

r->borrowbook(b->getcode(),id); //借书 r->show();

cout<<\"\\n继续请输1,退出请输0\\n\\n\"; cin>>i; if(i==1) goto bc; else return; }

还书函数,按图书馆藏编号分别向读者信息和图书信息中查找相关信息,显示提示,并进行还书的相关记录。

void back_book(string readercode) //还书函数 {

int bookcode; RDatabase ReaderDB; Reader *r; BDatabase BookDB;

11

Book *b; int i; b:

cout<<\"图书编号:\"; cin>>bookcode;

r=ReaderDB.query(readercode);//按编号查找读者 b=BookDB.query(bookcode); //按编号查找书籍 if (b==NULL) {

cout<<\"\不存在该图书,不能还书(重输请输1,退出请输0)\\n\"<>i; if(i==1) goto b; else return; }

b->retbook();

r->retbook(b->getcode()); r->show();

r=ReaderDB.FindBybookBookcode(bookcode); //通知预订的的前三位同学 if(r!=NULL) {

cout<<\"********************************************************************************\\n\";

cout<<\"\\\\通知\\n\\n\"; int max[4]={0,0,0,0}; int j=0,i=1; while(j<3)

{ while(r!=NULL)

12

{if(r->getbookBookdate(bookcode)>max[i]&&r->getbookBookdate(bookcode)!=max[i-1]) max[i]=r->getbookBookdate(bookcode); r++; }

cout<getreaderName()<i++; }

cout<<\"\述三位同学可去借书籍<<\"<getbookName()<<\">>,先去先借!\"<cout<<\"********************************************************************************\\n\\n\"; }

cout<<\"\\n继续请输1,退出请输0\\n\"; cin>>i; if(i==1) goto b; else return; }

预定书籍函数 ,按图书馆藏编号对图书信息进行查找,存在且已借出的书籍即可预定,显示相关提示,预定成功时便对读者信息记录

void Book_book(string readercode) //预定书籍函数 {

string id; int bookcode; int i;

RDatabase ReaderDB; Reader *r; BDatabase BookDB;

13

Book *b; cout<<\"身份:\"; cin>>id; bcd:

cout<<\"图书编号:\"; cin>>bookcode;

r=ReaderDB.query(readercode);//按编号查找读者 b=BookDB.query(bookcode); //按编号查找书籍 if(b==NULL) {

cout<<\" 不存在该图书,不能预定书籍(重输请输1,退出请输0)\"; cin>>i; if(i==1) goto bcd; else return; }

if(b->borrowbook()==0) r->bookBook(b->getcode(),id); else

cout<<\"此书未被借,不必预定!\\n\\n\"; r->show(); BookDB.outb(); ReaderDB.outr(); int j=1;

r=ReaderDB.FindBybookBookcode(bookcode); //查找热书 while(r!=NULL) { j++; r++;

14

} if(j>=5)

{BookDB.hotnum++;

BookDB.hotbook[BookDB.hotnum]=bookcode; }

cout<<\"\\n继续请输1,退出请输0\\n\"; cin>>i; if(i==1) goto bcd; else return; }

图书检索函数 ,可按书名、书号、检索、馆藏编号对图书进行查找 void Book_Retrieval() //图书检索函数 {

char choice; string s; int c;

BDatabase BookDB; start:

cout<<\"\\\图书检索\\n\\n\";

printf(\" 1,按书名检索图书 2,按书号检索图书\\n\\n\");

printf(\" 3,按出版社检索图书 4,按馆藏编号检索图书 0, cin>>choice; switch(choice) {

case '0': return; break; case '1':

15

退出\\n\\n\"); cout<<\"请输入书名:\"; cin>>s;

BookDB.FindByname(s); goto start; break; case '2':

cout<<\"请输入书号:\"; cin>>s;

BookDB.FindBynum(s); goto start; break; case '3':

cout<<\"请输入出版社名:\"; cin>>s;

BookDB.FindBypress(s); goto start; break; case '4':

cout<<\"请输入馆藏编号:\"; cin>>c;

BookDB.FindBycode(c); goto start; break; default:

cout<<\"输入有误,请重新输入!\\n\\n\"; } }

16

2.4 界面设计、测试

1、主界面,如图2

图2

使用者可以根据需要选择相应的键进行操作。 2、登陆功能

在图2界面下选择数字1可进入登陆功能界面,通过输入密码可登陆图书管理系统,如图3

图3

17

3、输入功能

在图2界面下选择1可进入图书维护功能界面,屏幕显示提示信息,使用者输入相关信息后,系统将自动将输入的图书信息保存到文件中,如图4 所示。

图4

在图2界面下选择2可进入读者维护功能界面,屏幕显示提示信息,使用者输入相关信息后,系统将自动将输入的读者信息保存到文件中,如图4 所示。

图4

4、删除功能

在图3中选择数字3可进入图书删除功能界面,这时出现删除子菜单,要求使用者输入要删除的馆藏编号,输入馆藏编号后,程序开始执行删除功能,如图5所示。

图5

18

在图4 中选择数字3可进入读者删除功能界面,这时出现删除子菜单,要求使用者输入要删除的读者的借书证号,输入借书证号后,程序开始执行删除功能,如图6所示。

图 6

5、修改功能

在图5中选择数字2进入图书修改功能界面,这时出现修改子菜单,要求使用者输入要修改的馆藏编号,输入馆藏编号后,程序开始执行修改功能,如图7所示。

图7

在图6中选择数字2进入图书修改功能界面,这时出现修改子菜单,要求使用者输入要修改的读者的借书证号,输入借书证号后,程序开始执行修改功能,如图8所示。

图8

19

6、查询功能

在图7中选择数字4进入图书查询功能界面,这时出现查询子菜单,要求使用者输入要查询的馆藏编号,输入馆藏编号后,程序开始执行查询功能,如图9所示。

图9

在图8中选择数字4进入图书查询功能界面,这时出现查询子菜单,要求使用者输入要查询的读者的借书证号,输入借书证号后,程序开始执行修改功能,如图8所示。

图10

7、读者借阅功能

在登陆界面下选择数字2可进入读者借阅系统,读者按照指示进行操作,然后系统将录入的记录自动保存但相应的文件中。

20

借书,在图1中选择数字3进入借书界面,读者根据提示输入相关信息后,程序开始执行借书操作。 如图11所示。

图11

还书,在图1中选择数字4进入借书界面,读者根据提示输入相关信息后,程序开始执行还书操作。 如图12所示

图12

21

预定书籍,在图1中选择数字5进入预定书籍界面,读者根据提示输入相关信息后,程序开始执行预定书籍操作。如图13所示。

图13

图书检索,在图1中选择数字6进入借书界面,读者根据提示输入相关信息后,程序开始执行图书操作。 如下图所示

图14 按书名检索图书

22

图15 按书号检索图书

图16 按出版社检索图书

图17 按馆藏编号检索图书

23

注销,在图1中选择数字2进入注销界面,读者根据提示输入相关信息后,程序开始执行注销操作。如图18所示。

2.5、编码

1、借书:

void rent_book(string readercode) //借书函数 { int i; string id; int bookcode; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; id3:

cout<<\"身份:\"; cin>>id;

if(id==\"student\"||id==\"teacher\"); else

{ cout<<\"输入有误,请重新输入!\\n\\n\";

24

goto id3;} bc:

cout<<\"图书编号: \"; cin>>bookcode;

r=ReaderDB.query(readercode);//按编号查找读者

b=BookDB.query(bookcode); //按编号查找书籍 if(b==NULL)

cout<<\"\不存在该图书,不能借书! \\n\\n\"; if(b->borrowbook()==0)

cout<<\"\该图书已借出,不能借书 \\n\\n\"<{r->borrowbook(b->getcode(),id); //借书 r->show(); return; } }

2、还书:

void back_book(string readercode) //还书函数 { int bookcode; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; int i; b:

cout<<\"图书编号:\"; cin>>bookcode;

25

cout<<\"还书成功!\\n\\n\";

r=ReaderDB.query(readercode);//按编号查找读者 b=BookDB.query(bookcode); //按编号查找书籍 if (b==NULL) {

cout<<\"\不存在该图书,不能还书(重输请输1,退出请输0)\\n\"<>i; if(i==1) goto b; else return; }

b->retbook();

r->retbook(b->getcode()); r->show();

r=ReaderDB.FindBybookBookcode(bookcode); //通知预订的的前三位同学 if(r!=NULL) {

cout<<\"********************************************************************************\\n;

cout<<\"\\\\通知\\n\\n\"; int max[4]={0,0,0,0}; int j=0,i=1; while(j<3)

{ while(r!=NULL)

{if(r->getbookBookdate(bookcode)>max[i]&&r->getbookBookdate(bookcode)!=max[i-1])

26

max[i]=r->getbookBookdate(bookcode); r++; }

cout<getreaderName()<i++; }

cout<<\"\述三位同学可去借书籍<<\"<getbookName()<<\">>,先去先借!\"<cout<<\"********************************************************************************\\n\\n\"; }

cout<<\"\\n继续请输1,退出请输0\\n\"; cin>>i; if(i==1) goto b; else return; }

3、预定书籍:

void Book_book(string readercode) //预定书籍函数 { string id; int bookcode; int i;

RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b;

27

cout<<\"身份:\"; cin>>id; bcd:

cout<<\"图书编号:\"; cin>>bookcode;

r=ReaderDB.query(readercode);//按编号查找读者 b=BookDB.query(bookcode); //按编号查找书籍 if(b==NULL) {

cout<<\" 不存在该图书,不能预定书籍(重输请输1,退出请输0)\"; cin>>i; if(i==1) goto bcd; else return; }

if(b->borrowbook()==0) r->bookBook(b->getcode(),id); else

cout<<\"此书未被借,不必预定!\\n\\n\"; r->show(); BookDB.outb(); ReaderDB.outr(); int j=1;

r=ReaderDB.FindBybookBookcode(bookcode); //查找热书 while(r!=NULL) { j++;

28

r++; } if(j>=5)

{ BookDB.hotnum++;

BookDB.hotbook[BookDB.hotnum]=bookcode; } cout<<\"\\n继续请输1,退出请输0\\n\"; cin>>i; if(i==1) goto bcd; else return; }

4、图书检索:

void Book_Retrieval() //图书检索函数 {

char choice; string s; int c;

BDatabase BookDB; start:

cout<<\"\\\图书检索\\n\\n\";

printf(\" 1,按书名检索图书 2, printf(\" 3,按出版社检索图书 4, cin>>choice; switch(choice) {

case '0': return;

按书号检索图书\\n\\n\");

按馆藏编号检索图书 0,29

退出\\n\\n\"); break; case '1':

cout<<\"请输入书名:\"; cin>>s;

BookDB.FindByname(s); goto start; break; case '2':

cout<<\"请输入书号:\"; cin>>s;

BookDB.FindBynum(s); goto start; break; case '3':

cout<<\"请输入出版社名:\"; cin>>s;

BookDB.FindBypress(s); goto start; break; case '4':

cout<<\"请输入馆藏编号:\"; cin>>c;

BookDB.FindBycode(c); goto start; break; default:

cout<<\"输入有误,请重新输入!\\n\\n\"; } }

30

2.6、类图 1、图书类图

BDatabase top:int BDatabase(); ~BDatabase(); void inb(); void outb(); void addbook(string , string ,string ,string ,string ,string ,int ); void clear(); Book *query(int c); void FindByname(string ); void FindBynum(string); void FindBypress(string ); void FindBycode(int c);

void bookdata(); Book bookName: string author: string bookNum: string press: string edition: string publishTime: string code:int tag:int onshelf:int void in(ifstream &file); void out(ofstream &file); string getbookName(); string getbookNum(); string getpress(); int getcode(); int gettag(); void show(); void addbook(string, string,string,string,string,string,int); void delbook(); int borrowbook(); void retbook();

31

、读者类图

RDatabase top:int RDatabase(); ~RDatabase(); void inr(); void outr() void clear(); void addStudent(string, string,string,string); void changeStudent(string, string,string,string); void addTeacher(string, string,string); void changeTeacher(string, string,string); Reader *query(string c); Reader *FindBybookBookcode(int); void show(); void readerdata();

32

Book regist:int tag:int readerName:string rentBookcode:int identity:string department:string rentedBooknum:int rentedBookcode[6]:int rentbookdata[6]:int backbookdata[6]; overtdueBook:string bookBooknum:int bookBookdata[3]:int bookBookcode[3]:int void in(ifstream &file); void out(ofstream &file); void set1regist(); void set0regist(); void show(); string getreaderName(); int gettag(); string getrentBookcode(); int getbookBookcode(int); int getregist(); int getbookBookdate(int); void delreader(); void addStudent(string, string,string,string); voidchangeStudent(string, string,string); void addTeacher(string, string,string); void changeTeacher(string, string); void borrowbook(int,string); void retbook(int ); void bookBook(int,string ); 2 3 总结

通过本次课程设计,我学到了不少东西,最重要的是:我真正的体会到c++在实际生活中的作用,也深刻体会到它带来的方便快捷。

在此次程序设计中,出现了各种各样的我问题,在完成各自模块建立起程序后运行时,出现了很多错误,经过我长时间的修改,还是不能解决问题,无奈之下去请教老师,老师给我提供了许多帮助,经过仔细的检查和调试我最终吧问题大致都解决了,顺利的完成了程序的运行。

通天这次课程设计,我才体会带自己学到的还远远不够,而且不扎实,所以以后我要更深入的虚心c++;

33

参考文献

[1] 钱能. C++程序设计教程[M]. 北京:清华大学出版社,2005:315-324,415-418,423. [2] 刘瑞新. Visual C++面向对象程序设计教程[M]. 北京:机械工业出版社,2005.

34

附录A 源代码

主函数:

#include #include #include #include using namespace std;

#include \"book.h\" //图书类 #include \"reader.h\" //读者类 #include \"BDatabase.h\" //图书类库 #include \"RDatabase.h\"

void window_display(); //界面窗口 void window_choice(); //功能选择

void rent_book(string readercode); //借书模块 void back_book(string readercode); //还书模块 void Book_book(string readercode); //预定书籍模块 void hotbook(); //热书推荐 void Book_Retrieval(); //书籍检索 int System_exit(); //退出系统

int main(int argc, char *argv[]) //主函数 {

window_display(); //界面 window_choice(); //功能选择 }

void window_display() //界面窗口 {

printf(\" ########################################\\n\\n\"); printf(\" 欢迎来到长沙学院图书馆\\n\\n\");

35

printf(\" 请按键选择功能\\n\\n\");

printf(\" ########################################\\n\\n\"); printf(\" 1、登陆 2注销\\n\\n\"); printf(\" 3、借书

4、还书\\n\\n\");

printf(\" 5、图书预定 6、图书检索\\n\\n\"); printf(\" 7、退出系统\\n\\n\");

printf(\" ########################################\\n\\n\"); }

void window_choice() //功能选择 {

char choice; string secretCode; int bookcode; string readercode; RDatabase ReaderDB; Reader *r=NULL; BDatabase BookDB; Book *b=NULL; loop: cin>>choice; switch(choice)

{case '1': //登陆模块

cout<<\"\\\请输入系统登陆模式\\n\\n\";

cout<<\"\1、图书管理系统 \2、读者借阅系统\\0、退出\\n\\n\";

cin>>choice;

switch(choice) {

case '0':

window_display(); //自动返回主界面 goto loop; break;

36

case '1':

//登陆图书管理系统 start:

cout<<\"请输入密码:\"; cin>>secretCode; if(secretCode==\"1234\") {

cout<<\"登陆成功!\\n\\n\"; wstart:

cout<<\"\\\请选择功能代码\\n\\n\";

cout<<\"\1、图书维护\2、读者维护\\0、退出\\n\";

cin>>choice; switch(choice) { case '0':

window_display(); //界面 goto loop; break; case '1':

BookDB.bookdata(); //图书维护 goto wstart; break; case '2':

ReaderDB.readerdata(); //读者维护 goto wstart; break; default:

cout<<\"\\\输入有误,请重新输入!\\n\\n\"; goto wstart; }

break; }

37

else

{ cout<<\"\\\密码错误,请重新输入!\\n\\n\"; goto start;}

case '2':

//登陆读者借阅系统 start2:

cout<<\"请输入借书证号:\\n\"; cin>>readercode; ReaderDB.inr();

r=ReaderDB.query(readercode);//按编号查找读者 if(NULL==r) {

cout<<\"不存在该读者,请重新输入!(重输请输1,退出请输0)\\n\"; cin>>choice;

if(choice==1) goto start2; else

window_display(); //自动返回主界面 goto loop; break; }

r->set1regist(); //登陆 ReaderDB.outr(); cout<<\"登陆成功!\\n\\n\"; }

window_display(); //自动返回主界面 goto loop; break;

case '2':

cout<<\"请输入借书证号:\\n\";

38

cin>>readercode;

r=ReaderDB.query(readercode); if(r!=NULL)

{r->set0regist(); //注销模块 cout<<\"注销成功!\"<cout<<\"您未登陆,不需要注销!\\n\\n\"; window_display(); //自动返回主界面 goto loop; break; case '3': //借书模块

cout<<\"********************************************************************************\\n\\n\";

cout<<\"\\\\热书推荐 \\n\\n\"; hotbook();

cout<<\"********************************************************************************\\n\\n\";

cout<<\"\\\借书\\n\"; cout<<\"请输入借书证号:\"; cin>>readercode;

r=ReaderDB.query(readercode); if(r!=NULL&&r->getregist()==1) rent_book(readercode); else

cout<<\"请先登陆!\\n\\n\"; //登陆提示 window_display(); //自动返回主界面 goto loop; break; case '4':

cout<<\"\\\还书\\n\"; cout<<\"请输入借书证号:\";

39

cin>>readercode;

r=ReaderDB.query(readercode); //还书模块

if(r!=NULL&&r->getregist()==1) back_book(readercode); else

cout<<\"请先登陆!\\n\\n\"; //登陆提示 window_display(); //自动返回主界面 goto loop; break; case '5':

cout<<\"********************************************************************************\\n\\n\";

cout<<\"\\\\热书推荐 \\n\\n\"; hotbook();

cout<<\"********************************************************************************\\n\\n\";

cout<<\"\\\预定书籍\\n\"; cout<<\"请输入借书证号:\\n\"; cin>>readercode;

r=ReaderDB.query(readercode); //预定书籍模块

if(r!=NULL&&r->getregist()==1) Book_book(readercode); else

cout<<\"请先登陆!\\n\"; //登陆提示 window_display(); //自动返回主界面 goto loop; break; case '6':

//图书检索模块 Book_Retrieval();

40

window_display(); //自动返回主界面 goto loop; break; case '7': //退出系统 System_exit(); } }

void rent_book(string readercode) //借书函数 { int i; string id; int bookcode; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; id3:

cout<<\"身份:\"; cin>>id;

if(id==\"student\"||id==\"teacher\"); else

{ cout<<\"输入有误,请重新输入!\\n\\n\"; goto id3;} bc:

cout<<\"图书编号: \"; cin>>bookcode;

r=ReaderDB.query(readercode);//按编号查找读者 b=BookDB.query(bookcode); //按编号查找书籍

if(b==NULL)

cout<<\"\不存在该图书,不能借书! \\n\\n\";

if(b->borrowbook()==0)

41

cout<<\"\该图书已借出,不能借书 \\n\\n\"<{r->borrowbook(b->getcode(),id); //借书 r->show(); return; } }

void back_book(string readercode) //还书函数 {

int bookcode; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; int i; b:

cout<<\"图书编号:\"; cin>>bookcode;

cout<<\"还书成功!\\n\\n\";

r=ReaderDB.query(readercode);//按编号查找读者 b=BookDB.query(bookcode); //按编号查找书籍 if (b==NULL) {

cout<<\"\不存在该图书,不能还书(重输请输1,退出请输0)\\n\"<>i; if(i==1) goto b; else return; }

b->retbook();

r->retbook(b->getcode());

42

r->show();

r=ReaderDB.FindBybookBookcode(bookcode); //通知预订的的前三位同学 if(r!=NULL) {

cout<<\"********************************************************************************\\n\";

cout<<\"\\\\通知\\n\\n\"; int max[4]={0,0,0,0}; int j=0,i=1; while(j<3)

{ while(r!=NULL)

{if(r->getbookBookdate(bookcode)>max[i]&&r->getbookBookdate(bookcode)!=max[i-1]) max[i]=r->getbookBookdate(bookcode); r++; }

cout<getreaderName()<i++; }

cout<<\"\述三位同学可去借书籍<<\"<getbookName()<<\">>,先去先借!\"<cout<<\"********************************************************************************\\n\\n\"; }

cout<<\"\\n继续请输1,退出请输0\\n\"; cin>>i; if(i==1) goto b; else return; }

void Book_book(string readercode) //预定书籍函数

43

{

string id; int bookcode; int i;

RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; cout<<\"身份:\"; cin>>id; bcd:

cout<<\"图书编号:\"; cin>>bookcode;

r=ReaderDB.query(readercode);//按编号查找读者 b=BookDB.query(bookcode); //按编号查找书籍 if(b==NULL) {

cout<<\" 不存在该图书,不能预定书籍(重输请输1,退出请输0)\"; cin>>i; if(i==1) goto bcd; else return; }

if(b->borrowbook()==0) r->bookBook(b->getcode(),id); else

cout<<\"此书未被借,不必预定!\\n\\n\"; r->show(); BookDB.outb(); ReaderDB.outr(); int j=1;

r=ReaderDB.FindBybookBookcode(bookcode); //查找热书 while(r!=NULL)

44

{ j++; r++; } if(j>=5)

{BookDB.hotnum++;

BookDB.hotbook[BookDB.hotnum]=bookcode; }

cout<<\"\\n继续请输1,退出请输0\\n\"; cin>>i; if(i==1) goto bcd; else return; }

void hotbook() //热书推荐 { BDatabase BookDB;

for(int i=0;i<=BookDB.hotnum;i++) cout<void Book_Retrieval() //图书检索函数 {

char choice; string s; int c;

BDatabase BookDB; start:

cout<<\"\\\图书检索\\n\\n\";

printf(\" 1,按书名检索图书 2,按书号检索图书\\n\\n\");

printf(\" 3,按出版社检索图书 4,按馆藏编号检索图书 0, cin>>choice; switch(choice) {

case '0': return; break;

45

退出\\n\\n\"); case '1':

cout<<\"请输入书名:\"; cin>>s;

BookDB.FindByname(s); goto start; break; case '2':

cout<<\"请输入书号:\"; cin>>s;

BookDB.FindBynum(s); goto start; break; case '3':

cout<<\"请输入出版社名:\"; cin>>s;

BookDB.FindBypress(s); goto start; break; case '4':

cout<<\"请输入馆藏编号:\"; cin>>c;

BookDB.FindBycode(c); goto start; break; default:

cout<<\"输入有误,请重新输入!\\n\\n\"; } }

int System_exit() //退出系统 { system(\"PAUSE\"); return EXIT_SUCCESS; }

文件book.h:

//文件book.h

46

//定义类Book #include using namespace std; #if!defined _BOOK_H_ #define _BOOK_H_ #include \"reader.h\" class Book {

private:

string bookName; //书名 string author; //作者 string bookNum; //书号 string press; //出版社 string edition; //版次

string publishTime; //出版时间 int code; //馆藏编号

int tag; //删除标记 1:已删 0:未删 int onshelf; //是否再架 1:再架 2:已借 public:

void in(ifstream &file); void out(ofstream &file);

string getbookName(); //获取书名 string getbookNum(); //获取书号 string getpress(); //获取出版社名 int getcode(); //获取馆藏编号 int gettag(); //获取删除标记 void show(); //输出书籍信息

void addbook(string n,string a,string b,string p,string e,string pt,int c); //加书籍

void delbook(); //删除书籍 int borrowbook(); //借书 void retbook(); //还书 };

47

增#endif

文件book.cpp:

//文件book.cpp //实现类Book #include #include #include using namespace std; #include \"book.h\"

void Book::in(ifstream &file) {

file>>bookName; //书名 file>>author; //作者 file>>bookNum; //书号 file>>press; //出版社 file>>edition; //版次

file>>publishTime; //出版时间 file>>code; //馆藏编号

file>>tag; //删除标记 1:已删 0:未删 file>>onshelf; //是否再架 1:再架 2:已借 }

void Book::out(ofstream &file) //析构函数,将book[]写到bookfile.txt文件中 {

file<file<48

file<string Book::getbookName() //获取书名 { return bookName;}

string Book::getbookNum() //获取书号 { return bookNum;}

string Book::getpress() //获取出版社名 { return press;}

int Book::getcode() //获取馆藏编号 {return code;}

int Book::gettag() //获取删除标记 { return tag;}

void Book::show() //输出书籍信息

{ cout<<\"\\书籍名称: \"<cout<<\"\\状态:\"<<(onshelf==1?\"未借\":\"已借\")<void Book::addbook(string n,string a,string b,string p,string e,string pt,int c)//增加图书 { tag=0; bookName=n; author=a; bookNum=b; press=p; edition=e; publishTime=pt;

49

code=c; onshelf=1; }

void Book::delbook() { tag=1;}//删除图书

int Book::borrowbook()//借书操作 {

if (onshelf==1) //再架 {

onshelf=2; //已借

return 1; }

return 0; }

void Book::retbook()//还书操作 { onshelf=1; } //再架

文件BDatabase.h:

//文件BDatabase.h //定义类BDatabase #if!defined _BDATABASE_H_ #define _BDATABASE_H_

#include \"reader.h\" #include \"book.h\"

const int maxBook=1000; //最大书籍容量class BDatabase {

private:

int top; //图录指针 Book book[maxBook]; //图录 public:

50

int hotnum;// int hotbook[500]; BDatabase(); ~BDatabase();

void inb();//构造函数,将book.txt读到book[]中 void outb(); //析构函数,将book[]写到book.txt文件中

void addbook(string n,string a,string b,string p,string e,string pt,int c);//增加图书

void clear();//全删

Book *query(int c); //查找图书 void FindByname(string c); //书名检索 void FindBynum(string c); //书号检索 void FindBypress(string c); //出版社检索 void FindBycode(int c); //书籍编号检索 void bookdata();//图书库维护 void show(); //显示书籍信息 }; #endif

文件BDatabase.cpp:

//文件BDatabase.cpp //实现类BDatabase #include #include #include using namespace std; #include \"BDatabase.h\" #include \"reader.h\" #include \"book.h\"

BDatabase::BDatabase()//构造函数,将bookfile.txt读到book[]中 { hotnum=-1; top=-1;

51

ifstream file(\"bookfile.txt\ if(!file) return; while(!file.eof()) { top++;

book[top].in(file); }

file.close(); }

void BDatabase::inb()//构造函数,将bookfile.txt读到book[]中 { top=-1;

ifstream file(\"bookfile.txt\ if(file)

while(!file.eof()) { top++;

book[top].in(file); }

file.close(); }

BDatabase::~BDatabase() {

ofstream file(\"bookfile.txt\ for(int i=0;i<=top;i++) book[i].out(file); file.close(); }

void BDatabase::outb() {

ofstream file(\"bookfile.txt\ for(int i=0;i<=top;i++) book[i].out(file); file.close(); }

52

void BDatabase::clear()//全删 { inb(); top=-1; outb(); }

void BDatabase::addbook(string n,string a,string b,string pr,string e,string pt,int c)//增加图书 { inb();

Book *p=query(c); //查找 if (NULL==p) //无相同编号时 { top++;

book[top].addbook(n,a,b,pr,e,pt,c); //增加图书 } outb(); }

Book *BDatabase::query(int c)//查找图书 { inb();

for (int i=0;i<=top;i++)

if (book[i].getcode()==c&&book[i].gettag()==0) //存在此书且未借 {

return &book[i]; }

return NULL; }

void BDatabase::FindByname(string c)//书名检索 { inb(); int j=0;

for(int i=0;i<=top;i++) if(book[i].getbookName()==c) {book[i].show();//输出相应信息 j++;} if(j==0)

53

cout<<\"本图书馆无此书!\\n\\n\"; }

void BDatabase::FindBynum(string c)//书号检索 { inb(); int j=0;

for(int i=0;i<=top;i++) if(book[i].getbookNum()==c) {book[i].show();//输出相应信息 j++;} if(j==0)

cout<<\"本图书馆无此书!\\n\\n\"; }

void BDatabase::FindBypress(string c)//出版社检索 { inb(); int j=0;

for(int i=0;i<=top;i++) if(book[i].getpress()==c) {book[i].show();//输出相应信息 j++;} if(j==0)

cout<<\"本图书馆无此书!\\n\\n\"; }

void BDatabase::FindBycode(int c)//书籍编号检索 { inb(); int j=0;

for(int i=0;i<=top;i++) if(book[i].getcode()==c) {book[i].show();//输出相应信息 j++;} if(j==0)

cout<<\"本图书馆无此书!\\n\\n\"; }

void BDatabase::bookdata()//图书库维护 {

char choice;

string n; string a; string bu; string pr; string e; string pt; int c; Book *b; start:

cout<<\"\\n\\n\\\图 书 维 护\\n\\n\1,新 增\2,更 改\3,删 除\4,查 找\5,显 示\6,全 删\0,退 出\\n\\n\"; cin>>choice;

switch (choice) {

case '0': return; break; case '1':

cout<<\"请输入书名: \"; cin>>n;

cout<<\"请输入作者: \"; cin>>a;

cout<<\"请输入书号: \"; cin>>bu;

cout<<\"请输入出版社: \"; cin>>pr;

cout<<\"请输入版次: \"; cin>>e;

cout<<\"请输入出版时间(如1999,08,06): \"; cin>>pt;

cout<<\"请输入馆藏编号: \"; cin>>c;

addbook(n,a,bu,pr,e,pt,c); //增加书籍 cout<<\"增加书籍成功!\"<55

goto start; break; case '2':

cout<<\"请输入图书馆藏编号:\"<>c;

b=query(c); //查找 if (b==NULL)

cout<<\"该图书不存在!\"<cout<<\"请输入新书名: \"; cin>>n;

cout<<\"请输入作者: \"; cin>>a;

cout<<\"请输入书号: \"; cin>>bu;

cout<<\"请输入出版社: \"; cin>>pr;

cout<<\"请输入版次: \"; cin>>e;

cout<<\"请输入出版时间(如1999,08,06): \"; cin>>pt;

b->addbook(n,a,bu,pr,e,pt,c); //更改 cout<<\"更改书籍信息成功!\"<goto start; break; case '3':

cout<<\"请输入图书馆藏编号:\"; cin>>c; b=query(c); if (b==NULL)

cout<<\" 该图书不存在\"; else

{ b->delbook(); //删除书籍

56

cout<<\"删除书籍成功!\\n\"; }

goto start; break; case '4':

cout<<\"请输入图书馆藏编号:\"; cin>>c; b=query(c); if (b==NULL)

cout <<\" 该图书不存在\"<< endl; else {

cout<<\"书籍信息:\\n\\n\"; b->show(); //显示书籍信息 }

goto start; break; case '5':

cout<<\"所有书籍信息:\\n\\n\"; show(); //显示所有未借图书信息 goto start; break; case '6':

clear(); //清除书库

cout<<\"清除书库成功!\"<cout<<\"输入错误,请从新输入:\\n\"; } }

void BDatabase::show() //显示所有图书信息 {

57

for (int i=0;i<=top;i++) book[i].show(); }

文件reader.h:

//文件reader.h //定义类reader #if!defined _READER_H_ #define _READER_H_ #include using namespace std; class Reader {

private:

int regist; //登陆标记 1:已登录 0:未登陆 int tag; //删除标记 1:已删 0:未删 string readerName; //读者姓名 string rentBookcode; //借书证号 string identity; //身份

string department; //所在系部 int rentedBooknum; //已借书籍数量 int rentedBookcode[6]; //已借书籍编号 int rentbookdata[6]; //借书日期 int backbookdata[6]; //还书日期 string overtdueBook; //超期书籍 int bookBooknum; //预定书籍数量 int bookBookdata[3]; //预定书籍日期 int bookBookcode[3]; //预定书籍编号 public:

void in(ifstream &file);//读出文件信息 void out(ofstream &file);//写入文件 void set1regist(); //已登录 void set0regist(); //未登陆 void show(); //输出读者信息

58

string getreaderName(); //获取姓名 int gettag(); //获取删除标记

string getrentBookcode(); //获取借书证号 int getbookBookcode(int s); //获取预定书籍 int getregist(); //获取登陆标记

int getbookBookdate(int); //获取预定书籍日期 void delreader(); //删除读者

void addStudent(string n,string num,string id,string d); //增加学生读者 void changeStudent(string,string,string); //更学生信息

void addTeacher(string n,string num,string id); //增加老师读者 void changeTeacher(string,string);//更改老师信息 void borrowbook(int bcode,string id); //借书 void retbook(int bcode); //还书

void bookBook(int bcode,string id); //预订书籍 }; #endif

文件reader.cpp

//文件reader.cpp //实现类reader #include #include #include using namespace std; #include \"reader.h\"

void Reader::in(ifstream &file) {

int n,m;

file>>regist; //登陆标记 1:已登录 0:未登陆 file>>tag; //删除标记 1:已删 0:未删 file>>readerName; //读者姓名 file>>rentBookcode; //借书证号 file>>identity; //身份

file>>department; //所在系部

file>>rentedBooknum; //已借书籍数量

59

if(identity==\"student\") { n=5; m=2;}

else if(identity==\"teacher\") { n=6; m=3;}

while(rentedBooknum>0&&rentedBooknum{file>>rentedBookcode[i]; //已借书籍编号 file>>rentbookdata[i]; //借书日期 }

file>>overtdueBook; //超期书籍 file>>bookBooknum; //预定书籍数量 while(bookBooknum>0&&bookBooknum{ file>>bookBookdata[i]; //预定书籍日期 file>>bookBookcode[i]; } }

void Reader::out(ofstream &file) { int n,m;

file<file<file<60

else if(identity==\"teacher\") { n=6; m=3; }

while(rentedBooknum>0&&rentedBooknumfile<file<0&&bookBooknum{ file<void Reader::set1regist() //已登录 { regist=1; }

void Reader::set0regist() //未登陆 { regist=0; }

void Reader::show()//输出读者信息 {

cout<<\"\\姓名:\"<cout<<\"\\所在系部:\"<{cout<<\"\\已借书籍编号:\"<61

cout<<\"\\借书日期:\"<30) overtdueBook=rentedBookcode[i]; }

cout<<\"\\超期书籍:\"<<(overtdueBook==\"\\0\"?\"无\":overtdueBook)<{cout<<\"\\预定书籍日期\"<string Reader::getreaderName() {return readerName;} //获取姓名

int Reader::gettag()

{return tag;} //获取删除标记

string Reader::getrentBookcode()

{return rentBookcode;} //获取读者借书证号 int Reader::getregist() //获取登陆记录 { return regist; }

int Reader::getbookBookdate(int s) //获取预定书籍日期 { for(int i=0;iint Reader::getbookBookcode(int s) //获取预定书籍 { for(int i=0;ivoid Reader::delreader()

62

{ tag=1;

}//设置删除标记 1:已删 0:未删

void Reader::addStudent(string n,string code,string id,string d)//增加读者 {

tag=0; regist=0; rentedBooknum=0; bookBooknum=0; overtdueBook=\"\\0\"; readerName=n; rentBookcode=code; identity=id; department=d; }

void Reader::changeStudent(string n,string id,string d)//更改学生信息 { tag=0; regist=0; rentedBooknum=0; bookBooknum=0; readerName=n;

identity=id; department=d; }

void Reader::addTeacher(string n,string code,string id)//增加读者 {

regist=0; tag=0;

rentedBooknum=0; bookBooknum=0; readerName=n; rentBookcode=code; identity=id;

63

}

void Reader::changeTeacher(string n,string id)//更改老师信息 { regist=0; tag=0;

rentedBooknum=0; bookBooknum=0; readerName=n; identity=id; }

void Reader::borrowbook(int bcode,string id)//借书操作 { int n;

if(id==\"teacher\") n=6;

else if(id==\"student\") n=5; if(rentedBooknumrentedBookcode[rentedBooknum]=bcode;

cout<<\"请输入借书日期(如19990806):\";

cin>>rentbookdata[rentedBooknum]; rentedBooknum++;

cout<<\"借书成功!\"<else if(overtdueBook!=\"\\0\")

cout<<\"请先归还超期书籍:\"<void Reader::retbook(int bcode)//还书操作 {

for(int i=0;iif(rentedBookcode[i]==bcode)

{ cout<<\"请输入归还日期(如19990806):\";

cin>>backbookdata[i];

for(int j=i;jvoid Reader::bookBook(int bcode,string id)//预订书籍 { int n;

if(id==\"teacher\") n=3; else if(id==\"student\") n=2; if(rentedBooknumbookBookcode[bookBooknum]=bcode; cout<<\"请输入预定书籍日期:\"; cin>>bookBookdata[bookBooknum]; bookBooknum++;

cout<<\"\\\预定书籍成功!\\n\\n\"<cout<<\"预定书籍数量已达到最大,不能再预定!\\n\\n\"; }

文件RDatabase.h

//文件RDatabase.h //定义类RDatabase #include #include using namespace std;

65

#include \"reader.h\" const int maxReader=500; class RDatabase {

private:

int top; //读者记录指针

Reader read[maxReader];//读者记录 public:

RDatabase(); //构造函数,将readerfile.txt读到read[]中 ~RDatabase();//构造函数,将readerfile.txt读到read[]中 void inr();

void outr();//析构函数,将read[]写到readerfile.txt文件中 void clear();//删除所有读者信息

void addStudent(string,string,string,string); //增加学生读者 void changeStudent(string,string,string,string);//更改学生读者 void addTeacher(string,string,string); //增加老师读者 void changeTeacher(string,string,string); Reader *query(string);//按编号查找

Reader *FindBybookBookcode(int c); //按预定书籍查找 void show(); //输出所有读者信息 void readerdata(); //读者库维护 };

文件RDatabase.cpp:

//文件RDatabase.cpp //实现类RDatabase #include #include #include using namespace std; #include \"RDatabase.h\" #include \"book.h\"

66

#include \"reader.h\"

RDatabase::RDatabase() //构造函数,将readerfile.txt读到read[]中 { top=-1;

ifstream file(\"readerfile.txt\打开一个输入文件 if(file)

while(!file.eof()) { top++;

read[top].in(file); }

file.close(); }

RDatabase::~RDatabase() //构造函数,将readerfile.txt读到read[]中 { ofstream file(\"readerfile.txt\打开一个输入文件 if(file)

{for(int i=0;i<=top;i++) read[i].out(file); file.close(); } }

void RDatabase::inr() { top=-1;

ifstream file(\"readerfile.txt\打开一个输入文件 if(file)

while(!file.eof()) { top++;

read[top].in(file); }

file.close(); }

void RDatabase::outr()//析构函数,将read[]写到readerfile.txt文件中 {

ofstream file(\"readerfile.txt\打开一个输入文件 if(file)

67

{ for(int i=0;i<=top;i++) read[i].out(file); file.close(); } }

void RDatabase::clear()//删除所有读者信息 { top=-1; }

void RDatabase::addStudent(string n,string c,string id,string d) //增加学生读者 {

Reader *p=query(c);

if (p==NULL) { top++;

read[top].addStudent(n,c,id,d); } outr(); }

void RDatabase::changeStudent(string n,string c,string id,string d)//更改学生读者 {

Reader *p=query(c); if (p==NULL)

p->changeStudent(n,id,d); }

void RDatabase::addTeacher(string n,string c,string id) //增加老师读者 {

Reader *p=query(c); if (p==NULL) { top++;

read[top].addTeacher(n,c,id);

68

} }

void RDatabase::changeTeacher(string n,string c,string id) {

Reader *p=query(c); if (p==NULL)

p->changeTeacher(n,id); }

Reader *RDatabase::query(string c)//按编号查找 {

for (int i=0;i<=top;i++)

if (read[i].getrentBookcode()==c&&read[i].gettag()==0) return &read[i]; return NULL; }

Reader *RDatabase::FindBybookBookcode(int c) //按预定书籍查找 {

int j=0;

for (int i=0;i<=top;i++)

if (read[i].getbookBookcode(c)==c&&read[i].gettag()==0) j++;

Reader r[j],*p;

for (int i=0;i<=top;i++)

if (read[i].getbookBookcode(c)==c&&read[i].gettag()==0) { j=0;

r[j]=read[i]; j++; } p=r; if(j==0) return NULL; else return p;

69

}

void RDatabase::show() //输出所有读者信息 {

for(int i=0;i<=top;i++) read[i].show(); }

void RDatabase::readerdata() //读者库维护 {

char ch; string rname; string id; string dep;

string readercode; Reader *r; whstart:

cout<<\"\\n\\n\\\读 者 维 护\\n\\n\1,新 增\2,更 改\3,删 除\4,查 找\5,显 示\6,全 删\0,退 出\\n\\n\"; cin>>ch; switch (ch) {

case '0': break; case '1':

cout<<\"请输入读者姓名:\"; cin>>rname;

cout<<\"请输入借书证号:\"; cin>>readercode; id:

cout<<\"请输入身份(student or teacher):\"<>id; if(id==\"student\") {

cout<<\"所在系部:\";

70

cin>>dep;

addStudent(rname,readercode,id,dep); //增加学生读者 }

else if(id==\"teacher\")

addTeacher(rname,readercode,id); //增加老师读者 else {

cout<<\"身份输入有误,请重新输入!\\n\"; goto id; }

cout<<\"添加读者成功!\"<cout<<\"错误信息!请重新输入!\"; case '2':

cout<<\"输入借书证号:\"; cin>>readercode; r=query(readercode); if (r==NULL) {

cout<<\"该读者不存在 \"<cout<<\"输入新的姓名:\"; cin>>rname; id2:

cout<<\"请输入身份(student or teacher):\"; cin>>id; if(id==\"student\") {

cout<<\"所在系部:\"; cin>>dep;

changeStudent(rname,readercode,id,dep); //更改学生读者

71

}

else if(id==\"teacher\")

changeTeacher(rname,readercode,id); //更改老师读者 else {

cout<<\"身份输入有误,请重新输入!\"; goto id2; }

cout<<\"更改读者信息成功!\"<cout<<\" 输入借书证号:\"; cin>>readercode; r=query(readercode); if(r==NULL) {

cout<<\"该读者不存在\"<r->delreader(); //删除读者 cout<<\"删除读者信息成功!\"<cout<<\"借书证号:\"; cin>>readercode; r=query(readercode); if(r==NULL) {

cout<<\"该读者不存在\"<72

cout<<\"读者个人信息:\"<show(); goto whstart; break; case '5':

cout<<\"所有读者信息:\"<clear(); //全删

cout<<\"清除读者库成功!\"; goto whstart; break; default:

cout<<\"输入错误,请从新输入:\"; } }

73

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务