⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 book.txt

📁 这是一个小型图书管理系统
💻 TXT
字号:
c++图书管理系统
 悬赏分:100 - 解决时间:2007-10-9 21:53
1、功能描述 
新进图书基本信息的输入。 
2. 图书基本信息的查询。 
3. 对撤消图书信息的删除。 
4. 为借书人办理注册。 
5.办理借书手续(非注册会员不能借书)。 
6.办理还书手续 
信息描述:有关该系统基本信息的描述,如:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等


#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 = 0; Lang = CHINESE; Type = 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<len; i++){ // 循环读入链表各结点 
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(); // 读入图书馆信息 
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -