数据库课程设计 图书馆管理系统

数据库课程设计 图书馆管理系统,第1张

①建立Access数据库

先新建一个数据库(access):建立Microsoft Access->命名为Text->否->打开->设计(添加学生所需信息)->表保存命名为lm(information)->否

②进行ADO配置

“开始” ->“程序” ->“Borland Delphi 7” ->“File” ->“Open Project” ->“Project1” ->Ctrl+F12选择“Main” ,按F12后出现MainForm窗体:

1)在程序主窗体MainForm上放置一个 “ADOConnection1”在Properties里LoginPrompt的属性设为false;ConnectionString ->Use ConnectionString 点Build” ->“Microsoft Jet 4.0 OLE DB Provider”后点“下一步”,选择创建的Access 2003 数据库的路径->“测试连接”出现成功后点“确定”->ok;Connected属性设为True

2)在主窗体上放一个“ADOTable1”属性Connection->ADOConnection1,属性TableName->lm,属性Active->T(简称阀门)

3) 在主窗体上放DataSource1->DataSet->ADOTable14)在主窗体上放一个-DBGrid1-->DataSource->DataSource1

①splashForm在工程文件(.dpr)中核心代码

SplashForm := TSplashForm.Create(Application) //启动屏创建

Application.CreateForm(TMainForm, MainForm) //创建主窗体

Application.CreateForm(TLoginForm, LoginForm) //创建用户验证窗体

SplashForm.Close //关闭启动屏窗体

SplashForm.Free //释放启动屏窗体所占的内存

②loginForm核心代码

LoginForm.ModalResult := mrOK//确定按钮,可以进入主界面

LoginForm.ModalResult := mrCancel //取消按钮

③mainForm 核心代码

1) 在Onshow中的核心代码:

LoginForm.ShowModal

if LoginForm.ModalResult = mrCancel then

Application.Terminate//(登陆界面进入主界面的过程中只要用户名密码都对时,登陆界面自动消失)

2) 在录入按钮的核心代码:

ADOQuery1.SQL.Clear

ADOQuery1.SQL.Add('Insert Into lm(num, name, sex,

shijian,class,zhuzhi,link,gs,yy,jsj)')

ADOQuery1.SQL.Add('Values (:snum,:sname,:ssex,:sshijian,

:sclass,:szhuzhi,:slink,:sgs,:syy,:sjsj)')

ADOQuery1.Parameters.ParamByName('sNum').Value := Edit1.Text

(输入学生的基本信息跟各科成绩后,点“录入”,便可在DBGrid1中添加所输入的信息)。

3) 在修改按钮的核心代码:

ADOQuery1.SQL.Clear

ADOQuery1.SQL.Add(‘Update lm')

ADOQuery1.SQL.Add(‘set num=:snum, name=:sname sex=:ssex,shijian=:sshijian,class=:sclass,zhuzhi=:szhuzhi,link=:slink,gs=:sgsyy=:syy,jsj=:sjsj')

ADOQuery1.SQL.Add(‘ Where Num = :sNum2')

ADOQuery1.Parameters.ParamByName(‘snum').Value := Edit11.Text

(在“输入要修改的学号”处输入某学号,再重新输入该基本信息与各科成绩,点击即可)。

4) 在删除按钮的核心代码:

ADOQuery1.SQL.Clear

ADOQuery1.SQL.Add(‘Delete From lm Where num = :snum')

ADOQuery1.Parameters.ParamByName(‘snum').Value := Edit1.Text

ADOQuery1.ExecSQL

showmessage(‘ok')//d出对话框,提示 *** 作成功

(输入学号,即可删除该学号的全部信息)。

5) 在查询按钮的核心代码:

ADOQuery2.Close

ADOQuery2.SQL.Clear

ADOQuery2.SQL.Add(‘Select * From lm Where num = :snum')

ADOQuery2.Parameters.ParamByName(‘snum').Value :=Edit1.Text

ADOQuery2.Open

(通过输入学号,点击“查询”按钮后即可查询该学号对应的信息)。

6) 刷新核心代码:

ADOTable1.Close

ADOTable1.Open//对录入,修改,删除,查询的 *** 作数据进行刷新。

1.开发背景

数据库技术和Internet的飞速发展,使它们已经成为现代信息技术的重要组成部分,是现在计算机信息系统和计算机应用系统的基础和核心。对于任何一个企业来说,数据是企业重要的资产,如何有效利用这些数据,对于企业发展起着极其重要的作用。随着我国市场经济的迅速发展和人们生活水平的不断提高,图书馆藏书的树木逐渐增大,这也挑战了图书管理方面的技术,以前的人工管理方式已经不再适应现在的环境,取而代之的是先进的图书管理系统,通过使用PowerBuilder创建的图书管理系统可以让管理人员方便而快捷的进行管理、查询、借阅、录入等工作。

2.需求分析

2.1系统目标

图书管理信息系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强.数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。

系统开发的总体任务是实现各种信息的系统化,规范化和自动化。

2.2需求定义

图书馆管理系统开发。系统开发的总的设计目标是实现图书管理的系统化、规范化和自动化,实现对图书资料的集中统一的管理。

本系统主要实现对图书馆信息的管理,主要功能为管理有关读者、图书、借阅、查询、删除和管理员的信息等。本系统结构分为读者类别管理、读者档案管理、图书类型管理、图书档案管理以及图书流程管理,读者管理可以浏览读者的信息,可以对读者信息进行维护。图书管理可以浏览图书的信息,可以对图书信息进行维护。借阅管理可以显示当前数据库中书籍借阅情况,可以对借阅信息进行维护。本系统主要解决的问题是利用关键字对数据库进行查询。

其系统的功能模块图如下:

图2-1 系统功能模块图

针对一般图书管理信息系统的需求,通过对图书管理工作过程的内容和数据流程分析,设计如下面所示的数据项:

读者信息

属性:读者学号,读者姓名,读者性别,联系电话,所在院系,生效日期,失效日期,违章状况,累计借书

主键:读者学号

书籍信息

属性:ISBN,书名,作者,出版社,出版日期,简介

主键:ISBN

管理员信息

属性:工作号,姓名,性别,电话,家庭住址

主键:工作号

2.3数据流程

2.3.1 读者

作为学生对图书管理系统的要求有:

1. 能按各种方式(比如书名、编号、作者)查询图书馆的藏书情况。

2. 能够方便地借阅图书、续借图书、归还图书。

3. 能够查询自己的基本资料、借阅图书情况。

4. 能够熟悉图书管理系统的使用。

读者进入系统工作的流程图为:

2-1进入系统工作的流程图

2.3.2 图书管理员

作为图书管理员,他们对图书管理系统的要求有:

1. 能方便的对图书进行录入登记,注销陈旧的书籍。

2. 能够方便地对新生进行登记,或注销已经毕业的学生信息(基本信息,借阅信息)。

3. 能够随时发布一些诸如各学院学生借阅图书超期情况、馆内藏书情况、借情况等信息,以便各学院能够随时获知本院学生的一些借书信息。

图书管理员工作的流程图为:

2-2图书管理员工作流程图

3.功能描述

系统功能分析是在系统开发的总体任务的基础上完成。本系统需要完成的功能主要有5部分:

(1) 图书基本情况的录入,修改,删除等基本 *** 作。

1.书籍类别标准的制定,类别信息的输入,包括类别编号,类别名称,关键词,备注信息等。

2.书籍类别信息的查询,修改,包括类别编号,类别名称,关键词,备注信息等。

3.书籍信息的输入,包括书籍编号,书籍名称,书籍类别,作者名称,出版社名称,出版日期,书籍页数,关键词,登记日期,备注信息等。

(2) 办理借书卡模块。

1.新生办理借书证。

2.丢失办理借书证。

(3) 实现借书功能。

1.借书信息的输入,包括借书信息编号,读书编号,读者姓名,书籍编号,书籍名称,借书日期,备注信息等。

2.借书信息的查询,修改,包括借书信息编号,读者编号,读者姓名,书籍编号,书籍名称,借书日期,备注信息等。

(4) 实现还书功能。

1.还书信息的输入,包括还书信息编号,读者编号,读者姓名,书籍编号,书籍名称,借书日期,还书日期,备注信息等。

2.还书信息的查询和修改,包括还书信息编号,读书编号,读者姓名,书籍编号,书籍名称,借书日期,还书日期,备注信息等。

(5) 能方便的对图书进行查询。对超期的情况能自动给出提示信息

4.概念模型设计

各部分E-R图如下:

(1)读者信息类别实体E-R图

4-1 读者类别实体E-R图

(2)书籍信息类别实体E-R图

4-2 书籍类别实体E-R图

(3)图书借阅实体E-R图:

4-3 图书借阅实体E-R图

(4)投诉管理实体E-R图:

4-4 投诉管理实体E-R图

4-5实体之间关系的E-R图

借阅关系(读者、管理员、书籍三元关系)

图4-6 CDM图

5.逻辑模型设计和优化

从理论‘E-R模型’到理论‘关系模型’的整理转换,通过E-R模型到关系模型的转化,可以得到如下关系模式:

借阅关系

属性:工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注。

主键:工作号,读者学号,ISBN

管理员_书籍关系

属性:工作号,ISBN,添加时间,是否在馆

主键:工作号,ISBN

管理员_学生关系

属性:工作号,读者学号,确认借还

主键:工作号,读者学号

通过由概念模型设计得到CDM图powerdesigner转换成对应的PDM图:

PDM图

5.1图书信息表

列名 数据类型 可否为空

ISBN varchar 否

书名 varchar 否

作者 varchar 否

出版社 varchar 是

出版日期 datetime 是

简介 varchar 是

5.2 读者信息表

列名 数据类型 可否为空

读者学号 varchar 否

读者姓名 varchar 否

读者性别 varchar 否

联系电话 varchar 是

所在院系 varchar 否

5.3 管理员信息表

列名 数据类型 可否为空

工作号 varchar 否

姓名 varchar 否

性别 varchar 否

电话 varchar 是

家庭住址 varchar 是

5.4 借阅表

列名 数据类型 可否为空

工作号 char 否

ISBN char 否

读者学号 char 否

借阅日期 datetime 否

还书日期 datetime 否

是否续借 char 否

5.5 管理员_书籍

列名 数据类型 可否为空

工作号 char 否

ISBN char否

添加时间 datatime 是

是否在馆 char 是

5.6 管理员_学生

列名 数据类型 可否为空

工作号 char 否

读者学号 char 否

借还确认 char 否

6.物理设计和实施

从理论‘关系模型’到实现\实施‘数据库建立’,物理文件的安排和建立索引

6.1 建立索引

为了提高在表中搜索元组的速度,在实际实现的时候应该基于键码建立索引是各表中建立索引的表项:

(1)读者信息(读者学号)

(2)书籍信息(ISBN)

(3)管理员信息(工作号)

(4)借阅(工作号,读者学号,ISBN)

(5)管理员_书籍(工作号,ISBN)

(6)管理员_学生(工作号,读者学号)

6.2 SQL语句

如下所示:

/*==============================================================*/

/* Table: 书籍信息 */

/*==============================================================*/

create table 书籍信息

(

ISBN char(20) not null,

书名 char(20),

作者 char(10),

出版社 char(15),

出版日期 char(30),

简介 char(160),

constraint PK_书籍信息 primary key (ISBN)

)

/*==============================================================*/

/* Index: 书籍信息_PK */

/*==============================================================*/

create unique index 书籍信息_PK on 书籍信息 (

ISBN ASC

)

/*==============================================================*/

/* Table: 投诉*/

/*==============================================================*/

create table 投诉

(

工作号 char(10) not null,

学号 char(10) not null,

投书意见 char(100),

投诉日期 char(30),

受诉日期 char(30),

constraint PK_投诉 primary key (工作号, 学号)

)

/*==============================================================*/

/* Index: 投诉_PK */

/*==============================================================*/

create unique index 投诉_PK on 投诉 (

工作号 ASC,

学号 ASC

)

/*==============================================================*/

/* Index: 投诉_FK */

/*==============================================================*/

create index 投诉_FK on 投诉 (

工作号 ASC

)

/*==============================================================*/

/* Index: 投诉2_FK*/

/*==============================================================*/

create index 投诉2_FK on 投诉 (

学号 ASC

)

/*==============================================================*/

/* Table: 登记*/

/*==============================================================*/

create table 登记

(

工作号 char(10) not null,

学号 char(10) not null,

ISBN char(20) not null,

证书日期 char(30) not null,

还书日期 char(30) not null,

违章状况 char(160),

累计借书 char(160),

备注 char(160),

constraint PK_登记 primary key (工作号, 学号, ISBN)

)

/*==============================================================*/

/* Index: 登记_PK */

/*==============================================================*/

create unique index 登记_PK on 登记 (

工作号 ASC,

学号 ASC,

ISBN ASC

)

/*==============================================================*/

/* Index: 登记_FK */

/*==============================================================*/

create index 登记_FK on 登记 (

工作号 ASC

)

/*==============================================================*/

/* Index: 登记2_FK*/

/*==============================================================*/

create index 登记2_FK on 登记 (

学号 ASC

)

/*==============================================================*/

/* Index: 登记3_FK*/

/*==============================================================*/

create index 登记3_FK on 登记 (

ISBN ASC

)

/*==============================================================*/

/* Table: 管理员信息 */

/*==============================================================*/

create table 管理员信息

(

工作号 char(10) not null,

姓名 char(10),

性别 char(5),

电话 char(15),

所在院系 char(25),

constraint PK_管理员信息 primary key (工作号)

)

/*==============================================================*/

/* Index: 管理员信息_PK */

/*==============================================================*/

create unique index 管理员信息_PK on 管理员信息 (

工作号 ASC

)

/*==============================================================*/

/* Table: 读者信息 */

/*==============================================================*/

create table 读者信息

(

学号 char(10) not null,

姓名 char(10),

性别 char(5),

电话 char(15),

所在院系 char(25),

constraint PK_读者信息 primary key (学号)

)

/*==============================================================*/

/* Index: 读者信息_PK */

/*==============================================================*/

create unique index 读者信息_PK on 读者信息 (

学号 ASC

)

7.主要数据 *** 纵语句

7.1管理员 *** 作

(1)注册(register)

INSERT INTO 管理员 (工作号,姓名,性别,电话,家庭住址,备注)

VALUES(#工作号,#姓名,#性别,#电话,#家庭住址,#备注)

说明:在登记 *** 作后,管理员得到一个唯一的工作号,可以根据这个工作号采查询和修改数据。

(2)注销(unregister)

DELETE

FROM Provider

WHERE(工作号=#工作号);

(3)修改个人信息(update)

UPdate 管理员

Set (工作号=#工作号,姓名=#姓名,性别=#性别,电话=#电话,家庭住址=#家庭住址)

WHERE(工作号=#工作号)

(4)增加书籍(addbooks)

INSERT INTO 图书 (ISBN,书名,作者,出版社,出版日期,简介,)

VALUES(#ISBN,#书名,#作者,#出版社,#出版日期,#简介,#备注) INSERT INTO

管理员_书籍表(工作号,ISBN,添加时间,是否在馆)

VALUES(#工作号,#ISBN,#添加时间,#是否在馆)

(5)删除书籍(deletebooks)

DELETE 图书

WHERE(ISBN =# ISBN)

(6)修改书籍(updatebooks)

UPDATE 图书(书名=#书名, 作者=#作者, 出版社=#出版社, 出版日期=

#出版日期, 简介=#简介)

WHERE(ISBN =# ISBN)

7.2读者 *** 作

(1)注册(register)

INSERT INTO 读者(读者学号,读者姓名,读者性别,联系电话,所在系,

生效日期,失效日期,违章状况,累计借书,备注)

VALUES(#读者学号,#读者姓名,#读者性别,#联系电话,#所在系,

#生效日期,#失效日期,#违章状况,#累计借书,#备注)

说明:在登记 *** 作后,读者得到一个唯一的ID,可以根据这个ID来查询和修改自己的信息。

(2)注销(unregister)

DELETE 读者

WHERE(读者学号=#读者学号)

(3)修改个人信息(update)

UPDATE 读者 Set(读者姓名=#读者姓名,联系电话=#联系电话,

所在系=#所在系,生效日期=#生效日期,失效日期=#失效日期,

违章状况=#违章状况,累计借书=#累计借书,备注=#备注)

WHERE(读者学号=#读者学号)

(4)查询(select)

SELECT ISBN,书名,作者,出版社

FROM图书

WHERE ISBN=#ISBN OR书名=#书名

7.3管理员对借阅关系的 *** 作

(1)插入读者的信息(insert)

INSERT INTO 借阅(工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注)

VALUES(#工作号,#读者学号,#ISBN,#是否续借,#借书日期,

#还书日期,#备注)

(2)更新信息(update)

①更新借出信息

UPDATE借阅

SET(借书日期=#借书日期,还书日期=借书日期+30,是否续借=0)

WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN =#ISBN)

UPDATE管理员_图书

SET(是否在馆=0)

WHERE(ISBN=#ISBN)

UPDATA 学生

SET (累积借书=累积借书+1)

WHERE(读者学号=#读者学号)

INSERT INTO管理员_学生(工作号,读者学号,确认借还,ISBN)

VALUES(#工作号,#读者学号,”0”, #ISBN))

②更新续借信息

UPDATE 借阅

SET(是否续借=#是否续借)

WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN =#ISBN)

③更新还书信息

UPDATE管理员_图书

SET(是否在馆=1)

WHERE(ISBN=#ISBN)

UPDATE管理员_学生

SET(确认借还=”1”)

WHERE(工作号=#工作号 AND 读者学号=#读者学号 AND ISBN=#ISBN)

#include <string.h>

#include <iostream.h>

class Book{ // 书籍基类

protected:

char Title[40]// 书名

long Code// 条码

int Type// 0表示书,1表示杂志

public:

Book()

Book(char *title,long code)

void SetCode(long code){ Code = code}

void SetTitle(char* tl){ strcpy(Title,tl)}

void SetType(bool type){Type = type}

int GetType(){ return Type}

long GetCode(){ return Code}

virtual void Show()// 显示书的信息

friend ostream&operator<<(ostream&, Book&)// 重载插入运算符

friend istream&operator>>(istream&is, Book&)// 重载提取运算符

Book *Next// 为创建每个读者所借书链表而定义指针

}

class Item :public Book{ //书的款目

// char Title[40]// 书名

char Author[20]// 著者名

char IndexCode[10]// 分类号

// long Code// 条码

public:

Item()

Item(char *author,char *title,char *index,int code)

Item(Item &)

void SetAuthor(char*)

void SetIndexCode(char*)

virtual void Show()// 显示书的信息

friend ostream&operator<<(ostream&os, Item&)// 重载插入运算符

friend istream&operator>>(istream&is, Item&)// 重载提取运算符

public:

}

class Magazine:public Book { //杂志类

int Volume

enum LANG {CHINESE=1,ENGLISH} Lang// 枚举变量,确定语言类别

public:

Magazine():Book(){Volume = 0Lang = CHINESEType = 1}

Magazine(char *title,int vol,LANG lang,int code)

Magazine(Magazine&)

void SetVolume(int vol){Volume = vol}

void SetLang(int lang){Lang = (LANG)lang}

virtual void Show()// 显示杂志的信息

friend ostream&operator<<(ostream&os, Magazine&)// 重载插入运算符

friend istream&operator>>(istream&is, Magazine&)// 重载提取运算符

}

class Reader{ // 读者信息类

char Name[20]// 姓名

char Position[20]// 职务

int Age// 年龄

long Code// 借书证号

Book* items// 所借书链表

public:

Reader()

Reader(char *name,char *posi,int age,int code)

// Reader(Reader&)

~Reader()

long GetCode(){return Code}

void SetName(char*)

void SetPosition(char*)

void SetAge(int)

void SetCode(long)

void AddBook(Item)// 添加所借书

void AddBook(Magazine)// 添加所借杂志

void DelBook(Book it)// 还书后减少所借书

void ShowBooks()// 显示所借书

void Show()// 显示读者信息

friend ostream&operator<<(ostream&os, Reader&)// 重载插入运算符

friend istream&operator>>(istream&is, Reader&)// 重载提取运算符

public:

int Counter//计数器,统计所借书数目

}

class Manager{ // 管理员类

char Name[20]// 姓名

int Age// 年龄

int Code// 工号

friend class Library// 将图书馆类声明为友元

public:

Manager(){}

Manager(char*,int,int)

long GetCode(){ return Code}

void Show()

friend ostream&operator<<(ostream&os, Manager&)// 重载插入运算符

friend istream&operator>>(istream&is, Manager&)// 重载提取运算符

}

class Loan { // 借阅信息类

int Type// 0表示书,1表示杂志

Item item// 借阅书

Magazine mag// 借阅杂志

Reader reader// 借阅者

Manager manager// 借书 *** 作员

int Code

friend class Library// 将图书馆类声明为友元

public:

Loan(){ }

Loan(Loan &l)

int GetCode(){ return Code}

void Show()

friend ostream&operator<<(ostream&os, Loan&)// 重载插入运算符

friend istream&operator>>(istream&is, Loan&)// 重载提取运算符

}

、、、、、、、、、、、、、、、、、、、、、、、

#include<iostream.h>

#include<string.h>

class Reader

template<typename T>class DblList

template<typename T>class DblNode{

public:

T Info//数据域

DblNode<T>*llink,*rlink//前驱(左链)、后继(右链)指针

public:

DblNode(T data)//一般结点

DblNode()//头结点

T GetInfo(){return Info}

friend class DblList<T>

friend class Library

}

template<typename T>class DblList{

DblNode<T>*head,*current

public:

DblList()

~DblList()

void Insert(const T&data)

DblNode<T>* Remove(DblNode<T>* p)

void Print()

int Length()//计算链表长度

DblNode<T>*Find(T data)//搜索数据与定值相同的结点

DblNode<T>* Find(int data)//按某个关键字查找

void MakeEmpty()//清空链表

void ShowList()//显示链表各结点

friend istream&operator>>(istream&, DblList<typename T>&)// 重载输入流运算符

friend ostream&operator<<(ostream&os, DblList<typename T>&dlist)// 重载输出流运算符

friend class Library

//其它 *** 作

}

template<typename T>DblNode<T>::DblNode(){

llink=rlink=NULL

}

template<typename T>DblNode<T>::DblNode(T data){

info=data

llink=NULL

rlink=NULL

}

template<typename T>DblList<T>::DblList(){//建立表头结点

head=new DblNode<T>()

head->rlink=head->llink=head

current=NULL

}

template<typename T>DblList<T>::~DblList(){

MakeEmpty()//清空链表

delete head

}

template<typename T>void DblList<T>::MakeEmpty(){

DblNode<T>*tempP

while(head->rlink!=head){

tempP=head->rlink

head->rlink=tempP->rlink//把头结点后的第一个节点从链中脱离

tempP->rlink->llink=head//处理左指针

delete tempP//删除(释放)脱离下来的结点

}

current=NULL//current指针恢复

}

template<typename T>void DblList<T>::Insert(const T &data){//新节点在链尾

current=new DblNode<T>

current->Info=data

current->rlink=head//注意次序

current->llink=head->llink

head->llink->rlink=current

head->llink=current//最后做

}

template<typename T>DblNode<T>* DblList<T>::Remove(DblNode<T>* p){ // 删除结点

current=head->rlink

while(current!=head&¤t!=p) current=current->rlink

if(current==head) current=NULL

else{//结点摘下

p->llink->rlink=p->rlink

p->rlink->llink=p->llink

p->rlink=p->llink=NULL

}

return current

}

template<typename T>DblNode<T>* DblList<T>::Find(T data){ // 按结点查找

current=head->rlink

while(current!=head&¤t->Info!=data) current=current->rlink

if(current==head) current=NULL

return current

}

template<typename T>DblNode<T>* DblList<T>::Find(int data){ // 按数据值查找结点

current=head->rlink

int temp =current->Info.GetCode()

while(current!=head&&temp!=data){

current=current->rlink

temp = current->Info.GetCode()

}

if(current==head) current=NULL

return current

}

template<typename T>void DblList<T>::Print(){ // 输出链表

current=head->rlink

while(current!=head){

cout<<current->Info<<'\t'

current=current->rlink

}

cout<<endl

}

template<typename T>int DblList<T>::Length(){ // 取得链表长度

int count=0

current=head->rlink

while(current!=head){

count++

current=current->rlink

}

return count

}

template<typename T>void DblList<T>::ShowList(){ // 输出链表各结点

int count=0

current=head->rlink

while(current!=head){

current->GetInfo().Show()

current=current->rlink

}

return

}

template<typename T>

istream&operator>>(istream&is, DblList<typename T>&dlist){

int len

T tt// 定义局部变量读入一个结点

is>>len

for(int i= 0 i<leni++){ // 循环读入链表各结点

is>>tt

dlist.Insert(tt)

}

return is

}

template<typename T>

ostream&operator<<(ostream&os, DblList<typename T>&dlist){

DblNode<T>*tempP

int len = dlist.Length()

os<<len<<' '

tempP=dlist.head->rlink

while(tempP!=dlist.head){ // 循环输出链表各结点

os<<tempP->Info

tempP = tempP->rlink

}

return os

}

#include "class.h"

#include "dblist.h"

#include <fstream.h>

class Library{ // 封装图书馆流通业务的类

DblList<Item>item// 在馆图书链表

DblList<Magazine>mag// 在馆杂志链表

DblList<Reader>reader// 读者链表

DblList<Loan>loan// 借阅信息链表

DblList<Manager>manager// 管理员信息链表

int itemNum// 记录在馆图书数目

int magNum// 记录在馆杂志数目

int readerNum// 记录读者数目

int loanNum// 记录借阅信息数目

int managerNum// 记录管理员数目

ofstream itemFileOut// 文件流对象,保存图书馆书籍数据

ifstream itemFileIn// 文件流对象,读入图书馆书籍数据

ofstream magFileOut// 文件流对象,保存图书馆杂志数据

ifstream magFileIn// 文件流对象,读入图书馆杂志数据

ofstream readerFileOut// 文件流对象,保存图书馆读者数据

ifstream readerFileIn// 文件流对象,读入图书馆读者数据

ofstream loanFileOut// 文件流对象,保存图书馆借阅信息数据

ifstream loanFileIn// 文件流对象,读入图书馆借阅信息

ofstream managerFileOut// 文件流对象,保存图书馆管理员数据

ifstream managerFileIn// 文件流对象,读入图书馆管理员数据

public:

Library()// 构造函数

~Library()//析构函数

void Run()// 图书馆类的运行函数

void CreateBibliotheca()// 创建书目

void CreateReader()// 创建读者库

void CreateManager()// 创建管理员信息

int ShowMainMenu()// 显示主菜单函数

void Borrow()// 借书 *** 作

void Return()// 还书 *** 作

void Require()// 查询 *** 作

void SaveInfo()// 保存图书馆信息

void OpenInfo()// 读入图书馆信息

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9922920.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存