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

📄 library.cpp

📁 小型图书管理系统
💻 CPP
字号:
# include <iostream.h>
# include <iomanip.h>
# include <string.h>
# include <fstream.h>

const int Maxr=100;      // 最大读者数
const int Maxb=100;      // 最大图书数
const int Maxbor=5;      // 最大借阅量

class Reader       // 读者类                       
{
private:
	int note;    // 删除标记(1:已删  0:未删)
	int number;   // 读者编号
	char name[10];   // 读者姓名
	int borbook[Maxbor];    // 所借图书
public:
	Reader(){}         
	char *getname()  //获得姓名
	{
		return name;
	}  
	int getnote()  //获得删除标记
	{
		return note;
	}       
	int getnumber()  //获得读者编号
	{
		return number;
	}
	void setname(char na[])   //设置姓名
	{
		strcpy(name,na);
	}
	void delreader()     //设置删除读者标记
	{
		note=1;
	}
	void addreader(int n,char *na)      //添加读者
	{
		note=0;
		number=n;
		strcpy(name,na);
		for(int i=0;i<Maxbor;i++)
			borbook[i]=0;
	}

	void borrowbook(int bookid)        //借书操作
	{
		for(int i=0;i<Maxbor;i++)
		{
			if(borbook[i]==0)
			{
				borbook[i]=bookid;
				return;
			}
		}
	}


	int retbook(int bookid)       //还书操作
	{
		for(int i=0;i<Maxbor;i++)
		{
			if(borbook[i]==bookid)
			{
				borbook[i]=0;
				return 1;
			}
		}
		return 0;
	}

	void list()               //输出读者信
	{
		cout<<setw(5)<<number<<setw(10)<<name<<"借书编号:[";
		for(int i=0;i<Maxbor;i++)
			if(borbook[i]!=0)
				cout<<borbook[i]<<"|";
			cout<<"]"<<endl;
	}
};


class RDatabase            //读者库类
{
	int top;               //读者记录指针
	Reader read[Maxr];     //读者记录
public:
	RDatabase()            //构造函数初始化:读入文件
	{
		Reader s;
		top=-1;
		fstream file("Reader.txt",ios::in);
		while(1)
		{
			file.read((char *)&s,sizeof(s));
			if(!file)
				break;
			top++;
			read[top]=s;
		}
		file.close();
	}

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

	int addreader(int n,char *na)        //添加读者记录时,先确定它是否已经存在
	{
		Reader *p=query(n);
		if(p==NULL)
		{
			top++;
			read[top].addreader(n,na);
			return 1;
		}
		return 0;
	}

	Reader *query(int readerid)       //按编号查找
	{
		for(int i=0;i<=top;i++)
			if(read[i].getnumber()==readerid && read[i].getnote()==0)
				return &read[i];
			return NULL;
	}

	void list()            //输出所有读者信息
	{
		for(int i=0;i<=top;i++)
			read[i].list();
	}

	void readerdata();        //读者库维护
	~RDatabase()              //析构函数:写文件
	{
		fstream file("Reader.txt",ios::out);
		for(int i=0;i<=top;i++)
			if(read[i].getnote()==0)
				file.write((char *)&read[i],sizeof(read[i]));
			file.close();
	}
};


void RDatabase::readerdata()       //读者库维护的实现
{
	int choice=1;
	char readername[20];
	int readerid;
	Reader *r;
	while(choice!=0)
	{
		cout<<"||===========================================================================||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                读者维护操作                               ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||===========================================================================||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                1、新增读者                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                2、更改读者                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                3、删除读者                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                4、查找读者                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                5、浏览读者                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                6、全删读者                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                0、返回主系统                              ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||===========================================================================||"<<endl;
		cout<<"  ** 请输入您的选择:(0 - 6):";
		cin>>choice;
		switch(choice)
		{
		case 1:
			cout<<"== 请您输入读者编号:";
			cin>>readerid;
			cout<<"== 请您输入读者姓名:";
			cin>>readername;
			addreader(readerid,readername);
			break;
		case 2:
			cout<<"== 请您输入读者编号:";
			cin>>readerid;
			r=query(readerid);
			if(r==NULL)
			{
				cout<<"*** 该读者不存在!"<<endl;
				break;
			}
			cout<<"== 请输入新读者姓名:";
			cin>>readername;
			r->setname(readername);
			break;
		case 3:
			cout<<"== 请输入读者编号:";
			cin>>readerid;
			r=query(readerid);
			if(r==NULL)
			{
				cout<<"** 该读者不存在!"<<endl;
				break;
			}
			r->delreader();
			break;
		case 4:
			cout<<"== 请输入读者编号:";
			cin>>readerid;
			r=query(readerid);
			if(r==NULL)
			{
				cout<<"** 该读者不存在!"<<endl;
				break;
			}
			r->list();
			break;
		case 5:
			list();
			break;
		case 6:
			clear();
			break;
		}
	}
}


class Book            //图书类
{
	int note;
	int number;
	char name[20];    //书名
	int onshelf;      //在架标志
public:
	Book(){}
	char *getname()
	{
		return name;
	}
	int getnumber()
	{
		return number;
	}
    int getnote()
	{
		return note;
	}
	void setname(char na[])      //设置书名
	{
		strcpy(name,na);
	}
	void delbook()        //删除图书
	{
		note=1;
	}
	void addbook(int n,char *na)   //添加图书
	{
		note=0;
		number=n;
		strcpy(name,na);
		onshelf=1;
	}
	int borrowbook()          //借书操作
	{
		if(onshelf==1)
		{
			onshelf=0;
			return 1;
		}
		return 0;
	}
	void retbook()           //还书操作
	{
		onshelf=1;
	}
	void list()            //输出图书
	{
		cout<<setw(6)<<number<<setw(18)<<name<<setw(10)<<(onshelf==1?"在架":"已借")<<endl;
	}
};


class BDatabase          //图书库类
{
	int top;            //图书记录指针
	Book book[Maxb];    //图书记录  
public:
	BDatabase()        //构造函数:读入文件
	{
		Book b;
		top=-1;
		fstream file("Book.txt",ios::in);
		while(1)
		{
			file.read((char *)&b,sizeof(b));
			if(!file)break;
			top++;
			book[top]=b;
		}
		file.close();
	}

	void clear()      //全删
	{
		top=-1;
	}
	int addbook(int n,char *na)     //添加图书
	{
		Book *p=query(n);
		if(p==NULL)
		{
			top++;
			book[top].addbook(n,na);
			return 1;
		}
		return 0;
	}

	Book *query(int bookid)    //查找图书
	{
		for(int i=0;i<=top;i++)
			if(book[i].getnumber()==bookid && book[i].getnote()==0)
				return &book[i];
			return NULL;
	}

	void bookdata();   //图书库维护
	void list()        //图书输出
	{
		for(int i=0;i<=top;i++)
			if(book[i].getnote()==0)
				book[i].list();
	}
	~BDatabase()    //析构函数
	{
		fstream file("Book.txt",ios::out);
		for(int i=0;i<=top;i++)
			if(book[i].getnote()==0)
				file.write((char *)&book[i],sizeof(book[i]));
			file.close();
	}
};


void BDatabase::bookdata()        //书库维护的实现
{
	int choice=1;
	char bookname[40];
	int bookid;
	Book *b;
	while(choice!=0)
	{
		cout<<"||===========================================================================||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                图书维护操作                               ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||===========================================================================||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                1、新增图书                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                2、更改图书                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                3、删除图书                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                4、查找图书                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                5、浏览图书                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                6、全删图书                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                0、返回主系统                              ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||===========================================================================||"<<endl;
		cout<<"  [-]请输入您的选择:(0 - 6):";
		cin>>choice;
		switch(choice)
		{
		case 1:
			cout<<"输入图书编号:";
			cin>>bookid;
			cout<<"输入图书书名:";
			cin>>bookname;
			addbook(bookid,bookname);
			break;
		case 2:
			cout<<"输入图书编号:";
			cin>>bookid;
			b=query(bookid);
			if(b==NULL)
			{
				cout<<"** 系统警告:该图书不存在!"<<endl;
				break;
			}
			cout<<"输入新的书名:";
			cin>>bookname;
			b->setname(bookname);
			break;
		case 3:
			cout<<"输入图书编号:";
			cin>>bookid;
			b=query(bookid);
			if(b==NULL)
			{
				cout<<"** 系统警告:该图书不存在!"<<endl;
				break;
			}
			b->delbook();
			break;
		case 4:
			cout<<"输入图书编号:";
			cin>>bookid;
			b=query(bookid);
			if(b==NULL)
			{
				cout<<"** 系统警告:该图书不存在!"<<endl;
				break;
			}
			b->list();
			break;
		case 5:
			list();
			break;
		case 6:
			clear();
			break;
		}
	}
}


void main()    //主函数
{
	int choice=1,bookid,readerid;
	RDatabase ReaderDB;
	Reader *r;
	BDatabase BookDB;
	Book *b;
	while(choice!=0)
	{
		// 七十五个“=”
		cout<<"||===========================================================================||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                               图书管理系统                                ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||===========================================================================||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                             [1] 读者借书操作                              ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                             [2] 读者还书操作                              ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                             [3] 图书维护操作                              ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                             [4] 读者维护操作                              ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                             [0] 退出系统                                  ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||===========================================================================||"<<endl;
		cout<<"||                                                                           ||"<<endl;
		cout<<"||                                                    2005年9月25日          ||"<<endl;
		cout<<"||===========================================================================||"<<endl;
		cout<<"  [-]请输入您的选择(0 - 4):";
		cin>>choice;
		switch(choice)
		{
		case 1:
			cout<<"** 输入借书读者编号:";
			cin>>readerid;
			cout<<"** 输入所借图书编号:";
			cin>>bookid;
			r=ReaderDB.query(readerid);
			if(r==NULL)
			{
				cout<<"** 系统警告:不存在该读者,不能借书!"<<endl;
				break;
			}
			b=BookDB.query(bookid);
			if(b==NULL)
			{
				cout<<"** 系统警告:不存在该图书,不能借书!"<<endl;
				break;
			}
			if(b->borrowbook==0)
			{
				cout<<"** 系统警告:该书已经借出,不借书!"<<endl;
				break;
			}
			r->borrowbook(b->getnumber());
			break;
		case 2:
			cout<<"** 请你输入还书读者编号:";
			cin>>readerid;
			cout<<"** 请你输入所还图书编号:";
			cin>>bookid;
			r=ReaderDB.query(readerid);
			if(r==NULL)
			{
				cout<<"** 系统警告:不存在该读者,不能还书!"<<endl;
				break;
			}
			b=BookDB.query(bookid);
			if(b==NULL)
			{
				cout<<"** 系统警告:不存在该图书,不能还书!"<<endl;
				break;
			}
			b->retbook();
			r->retbook(b->getnumber());
			break;
		case 3:
			BookDB.bookdata();
			break;
		case 4:
			ReaderDB.readerdata();
			break;
		}
	}
}

⌨️ 快捷键说明

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