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

📄 book.cpp

📁 自己的操作系统课程设计~~图书管理系统
💻 CPP
字号:
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<fstream.h>
#include<time.h>
#include<stdlib.h>

const int Maxr=30;
const int Maxb=1000;
const int Maxbor=5;

class Book
{
	int tag;
	int no;
	char name[30];
	int num;
	char publish[30];
	float danjia;
public:  
	char *getname() {return name ;}
	int getno() {return no;}
	int gettag() {return tag;}
	int getnum(){return num;}
	void setname(char na[])
	{
		strcpy(name,na);
	}
	void setnum(int bnum)
	{
		num=bnum;
	}
	void setpublish(char bpublish[])
	{
		strcpy(publish,bpublish);
	}
	void setdanjia(float bdanjia)
	{
		danjia=bdanjia;
	}
	void delbook() {tag=1;}
	void addbook(int n,char *na,int nu,char *pub,float dj)
	{
		tag=0;
		no=n;
		strcpy(name,na);
		num=nu;
		strcpy(publish,pub);
		danjia=dj;
	}
	int borrowbook()
	{
		if (num!=0)
		{
			num--;
			return num;
		}
		else
			return 0;
	}
	void retbook()
	{
		num++;
	}
	void disp()
	{
		cout<<setw(6)<<no<<setw(21)<<name<<setw(18)<<(num!=0?"在书架数量":"已全数借出!");
		if(num!=0)
			cout<<num;
		cout<<setw(18)<<publish<<setw(8)<<danjia<<endl;
	}
};

class Reader:public Book
{
	int tag;
	int no;
	char name[20];
	int borbook[Maxbor];
	char bortime[10];
	time_t tempTime;
	struct tm *nowTime;
public:
	char *getname() {return name;}
	int gettag() {return tag;}
	int getno() {return no;}
	void setname (char na[])
	{
		strcpy (name,na);
	}
	void delbook() {tag=1;}
	void addreader (int n,char *na);
	void borrowbook(int bookid);
	int retbook(int bookid);
	void disp();
};

void Reader::addreader (int n,char *na)
{
	tag=0;
	no=n;
	strcpy(name,na);
	for (int i=0;i<Maxbor;i++)
		borbook[i]=0;
}

void Reader::borrowbook(int bookid)
{
	int k=0;
	time(&tempTime);
	for(int i=0;i<Maxbor;i++)
	{
		if (borbook[i]==0)
		{
			borbook[i]=bookid;
			k++;
			cout<<"借书成功!"<<endl;
			nowTime=localtime(&tempTime);
			strftime(bortime,20,"20%y-%m-%d",nowTime);
			break;
		}
	}
	if(k==0)
		cout<<"抱歉!你所借阅的图书数量已达到限定的5本,如需借阅,请先归还一些!"<<endl;
}

int Reader::retbook(int bookid)
{
	for(int i=0;i<Maxbor;i++)
	{
		if(borbook[i]=bookid)
		{
			borbook[i]=0;
			cout<<"还书成功!"<<endl;
			return 1;
		}
	}
	return 0;
}

void Reader::disp()
{
	int h=1;
	if(gettag()==0)
	{
		cout<<setw(7)<<no<<setw(16)<<name;
		for(int i=0;i<Maxbor;i++)
			if(borbook[i]!=0)
			{
				cout<<setw(16)<<borbook[i]<<setw(20)<<bortime<<endl;
				h=0;
				if(borbook[i+1]!=0)
					cout<<"                       ";
			}
		if(h==1)
			cout<<endl;
	}
}

class BDatabase
{
	int top;
	Book book[Maxb];
public:
	BDatabase()
	{
		top=-1;
		fstream file;
		file.open("book.txt",ios::in|ios::binary);
			while(1)
			{
				if(!file) break;
				top++;
				file.read((char*)&book[top],sizeof(book[top]));
			}
		file.close();
		top++;
	}
	int addbook(int n,char *na,int nu,char *pub,float dj);
	Book * query(int bookid)
	{
			for(int i=0;i<top;i++)
				if (book[i].getno()==bookid&&book[i].gettag()==0)
					return &book[i];
				return NULL;
	}
	void bookdata();
	void disp();
	~BDatabase()
	{
		fstream file("book.txt",ios::out|ios::binary);
		for (int i=0;i<top;i++)
				file.write((char *)&book[i],sizeof(book[i]));
			file.close();
	}
};

int BDatabase::addbook(int n,char *na,int nu,char *pub,float dj)
{
	Book *p=query(n);
	if (p==NULL)
	{
		book[top].addbook(n,na,nu,pub,dj);
		top++;
		return 1;
	}
	return 0;
}

void BDatabase::disp()
{
	cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
	cout<<"图书编号            书名            在架情况          出版社          单价(元)"<<endl;
	for (int i=0;i<top;i++)
		if (book[i].gettag()==0)
			book[i].disp();
}

void BDatabase::bookdata()
{
	int choice=1;
	char YN;
	char bname[30];
	int bookid;
	int bnum;
	char bpublish[30];
	float bdanjia;
	Book *b;
	while (choice!=0)
	{
		cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆图书管理☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
		cout<<"        1:新增图书                          2:更改图书信息"<<endl;
		cout<<"        3:删除图书                          4:查找图书"<<endl;
		cout<<"        5:显示所有图书                      0:返回上层操作"<<endl;
		cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
		cin>>choice;
		switch(choice)
		{
		case 1:
			cout<<"请输入你要新加图书编号:";
			cin>>bookid;
			cout<<"请输入新的图书名:";
			cin>>bname;
			cout<<"请输入新书入库数量:";
			cin>>bnum;
			cout<<"请输入入库新书的出版社:";
			cin>>bpublish;
			cout<<"请输入入库新书的单价:";
			cin>>bdanjia;
			addbook(bookid,bname,bnum,bpublish,bdanjia);
			break;
		case 2:
			cout<<"请输入图书编号:";
			cin>>bookid;
			b=query(bookid);
			if(b==NULL)
			{
				cout<<"抱歉!书库内无匹配该图书编号的图书!"<<endl;
				break;
			}
			cout<<"是否需要更改书名?(Y/N):";
			cin>>YN;
			if(YN=='Y'||YN=='y')
			{
				cout<<"请输入新的书名:";
				cin>>bname;
				b->setname(bname);
			}
			cout<<"是否需要更改库存量?(Y/N):";
			cin>>YN;
			if(YN=='Y'||YN=='y')
			{
				cout<<"请输入新的库存量:";
				cin>>bnum;
				b->setnum(bnum);
			}
			cout<<"是否需要更改出版社?(Y/N):";
			cin>>YN;
			if(YN=='Y'||YN=='y')
			{
				cout<<"请输入新的出版社:";
				cin>>bpublish;
				b->setpublish(bpublish);
			}
			cout<<"是否需要更改单价?(Y/N):";
			cin>>YN;
			if(YN=='Y'||YN=='y')
			{
				cout<<"请输入新的单价:";
				cin>>bdanjia;
				b->setdanjia(bdanjia);
			}
			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->disp();
			break;
		case 5:
			disp();
			break;
		}
	}
}

class RDatabase
{
	int top;
	Reader read[Maxr];
public:
	RDatabase()
	{
		top=-1;
		fstream file;
		file.open("reader.txt",ios::in|ios::binary);
		while(1)
		{
			if(!file) break;
			top++;
			file.read((char *)&read[top],sizeof(read[top]));
		}
		file.close();
		top++;
	}
	int addreader(int n,char *na);
	Reader * query (int readerid)
	{
		for(int i=0;i<top;i++)
			if(read[i].getno()==readerid&&read[i].gettag()==0)
			{
				return &read[i];				
			}
		return NULL;
	}
	void disp()
	{
		for(int i=1;i<top;i++)
			read[i].disp();
	}
	void readerdata();
	~RDatabase()
	{
		fstream file;
		file.open("reader.txt",ios::out|ios::binary);
		for(int i=0;i<top;i++)
				file.write((char *)&read[i],sizeof(read[i]));
		file.close();
	}
};


int RDatabase::addreader(int n,char *na)
{
	Reader *p=query(n);
	if(p==NULL)
	{
		read[top].addreader(n,na);
		top++;
		return 1;
	}
	return 0;
}

void RDatabase::readerdata()
{
	int choice=1;
	char rname[20];
	int readerid;
	Reader *r;
	while(choice!=0)
	{
		cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆借阅者管理☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
		cout<<"        1:新增借阅者                        2:更改借阅者名"<<endl;
		cout<<"        3:删除借阅者                        4:查找借阅者"<<endl;
		cout<<"        5:显示所有借阅者信息                0:返回上层操作"<<endl;
		cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
		cin>>choice;
		switch(choice)
		{
		case 1:cout<<"请输入新借阅者的编号:";
			cin>>readerid;
			cout<<"请输入新借阅者的姓名:";
			cin>>rname;
			addreader(readerid,rname);
			break;
		case 2:cout<<"请输入你的借阅者编号:";
			cin>>readerid;
			r=query(readerid);
				if(r==NULL)
				{
					cout<<"对不起!您的编号有误,请核实后在再输!"<<endl;
					break;
				}
				cout<<"请输入该编号借阅者的新姓名:";
				cin>>rname;
				r->setname(rname);
				break;
		case 3:cout<<"请输入所要删除的借阅者编号:";
			cin>>readerid;
			r=query(readerid);
			if(r==NULL)
			{
				cout<<"无与该编号匹配的借阅者编号!请核实后再操作!"<<endl;
				break;
			}
			r->delbook();
			break;
		case 4:cout<<"请输入你想查找的借阅者编号:";
			cin>>readerid;
			r=query(readerid);
			if(r==NULL)
			{
				cout<<"无与该编号匹配的借阅者编号!请核实后再操作!"<<endl;
				break;
			}
			r->disp();
			break;
		case 5:
			cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
			cout<<"借阅者编号     借阅者姓名     所借阅图书编号     借出时间"<<endl;
			disp();
			break;
		}
	}
}

int checkin()
{
	char admin[5];
	int scri;
	char choice;
	int k=0;
	cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
	cout<<"                    欢迎来到图书馆管理系统"<<endl;
	cout<<"                    在进入该系统前,请输入"<<endl;
	cout<<"                    管理员帐号:";
	cin>>admin;
	if(strcmp(admin,"EVA")!=0)
	{
		cout<<"                    抱歉!非管理员无法进入该系统!"<<endl;
		cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
		return 1;
	}
	
	while(1)
	{
		cout<<"                    管理员密码:";
		cin>>scri;
		if(scri!=123)
		{
			cout<<"                    密码不正确!是否要重新输入密码?(Y/N):";
			cin>>choice;
			k++;
			if(choice=='Y'||choice=='y')
			{
				if(k==3)
				{
					cout<<"      你的密码输入错误已达限定次数,系统将自动退出!"<<endl;
					cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
					return 1;
				}
				continue;
			}
			else
			{
				cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
				cout<<"                    友情提醒:"<<endl;
				cout<<"                    管理员同志,找到密码后请一定要牢记呀~~"<<endl;
				cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
				return 1;
			}
		}
		else
		{
			cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
			return 0;
		}
	}
}

void getin()
{
	int choice=1;
	int bookid;
	int readerid;
	RDatabase ReaderDB;
	Reader *r;
	BDatabase BookDB;
	Book *b;
	while (choice!=0)
	{
		cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆图书管理系统☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
		cout<<"        1:借书                               2:还书"<<endl;
		cout<<"        3:图书管理                           4:读者管理"<<endl;
		cout<<"        0:离开"<<endl;
		cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
		cin>>choice;
		switch(choice)
		{
		case 1:
			cout<<"借书者编号:";
			cin>>readerid;
			cout<<"图书编号:";
			cin>>bookid;
	                r=ReaderDB.query(readerid);
			b=BookDB.query(bookid);
			if (r==NULL)
			{
				cout<<"读者不存在,不能借书!"<<endl;
					break;
			}
			if (b==NULL)
			{
				cout<<"不存在图书,不能借书!"<<endl;
					break;
			}
			if(b->borrowbook()<0)
			{
			cout<<"该图书已全数借出!"<<endl;
			break;
			}
			r->borrowbook(b->getno());
			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->getno());
			break;
		case 3:
			BookDB.bookdata();
			break;
		case 4:
			ReaderDB.readerdata();
			break;
		}
	}
}

void main()
{
	if(checkin()==0)
	{
		cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
		cout<<"                  欢迎进入图书馆管理员系统^-^"<<endl;
		cout<<"                        祝你一天的工作愉快"<<endl;
		cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
		getin();
		cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
		cout<<"                        一天的工作结束了"<<endl;
		cout<<"                           好好休息下"<<endl;
		cout<<"                      咱们明天继续合作吧^-^"<<endl;
		cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
	}		
}

⌨️ 快捷键说明

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