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

📄 e1.cpp

📁 图书馆管理系统 由类界面实现绝大部分操作
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                    cin >> readerid;
					r=queryR(readerid);
					if (r==NULL)
					{
					    cout <<" 该读者不存在" << endl;
					    break;
					}
					r->delbook();
					break;
			case 4:
				cout << " 输入读者编号:";
                    cin >> readerid;
					r=queryR(readerid);
					if (r==NULL)
					{
					    cout <<" 该读者不存在" << endl;
					    break;
					}
					r->setmoney();
					break;
			case 5:
					cout << "读入读者编号:";
					cin >> readerid;
					r=queryR(readerid);
					if (r==NULL)
					{
						cout <<"该读者不存在"<< endl;
						break;
					}
					r->dispR();
					break;
			case 6:
					dispR();
					break;
			case 7:
					clearR();
					break;
		}
	}
}

class Book
{
protected:
    int tag;
	int no;
	char name[20];
	int onshelf;
public:
	Book(){}
	char *getname() { return name; }
	int getno(){ return no; }
	int gettag(){ return tag; }
	void setname(char na[])
	{
		strcpy(name,na);
	}
	void delbook(){ tag=1;}
	void addbook(int n,char *na)
	{
		tag=0;
		no=n;
		strcpy(name,na);
		onshelf=1;
	}
	int borrowbook()
	{
		if (onshelf==1)
		{
			onshelf=0;
			return 1;
		}
		return 0;
	}
	void retbook()
	{
		onshelf=1;
	}
	void dispB()
	{
		cout << setw(6) << no << setw(18) << name << setw(10)
			<<(onshelf==1? "在架":"已借") <<endl;
	}
};
class BDatabase
{
protected:
    int topb;         
	Book book[Maxb]; 
public:
	BDatabase()
	{ 
			Book b;
			topb=-1;
			fstream fileb("book.txt",ios::in);
			while (1)
			{
				fileb.read((char *)&b,sizeof(b));
				if (!fileb) break;
				topb++;
				book[topb]=b;
			}
			fileb.close();
	}
	void Display();
    void clearB()
	{
		topb=-1;
	}
    int addbook(int n,char *na)
	{
		Book *p=queryB(n);
		if (NULL==p)
		{
			topb++;
			book[topb].addbook(n,na);
			return 1;
		}
		return 0;
	}
	Book *queryB(int bookid)
	{
		for (int i=0;i<=topb;i++)
			if (book[i].getno()==bookid &&book[i].gettag()==0)
			{	
				return &book[i];
			}
			return NULL;
	}
	Book *findbook(char bookname[])
	{
		for (int i=0;i<=topb;i++)
			if (strcmp(book[i].getname(),bookname)==0 && book[i].gettag()==0)
			{	
				return &book[i];
			}
			return NULL;
	}
	void bookdata();
	void dispB()
	{
	  for (int i=0;i<=topb;i++)
		  if (book[i].gettag()==0)
			  book[i].dispB();
	}
	~BDatabase()
	{
		fstream fileb("book.txt",ios::out);
        for (int i=0;i<=topb;i++)
			if (book[i].gettag()==0)
				fileb.write((char *)&book[i],sizeof(book[i]));
			fileb.close();
	}
};

void BDatabase::bookdata()
{
    int choice=1;
	int choic=0;
	char bname[40];
	int bookid;
	Book *b;
	while (choice!=0)
	{
		cout <<"图书维护 1: 新增书籍 2: 更改书籍 3:删除书籍 4:查找书籍 5:显示书籍 6:清空书籍 0:退出=>";
		cin >> choice;
		switch (choice)
		{
            case 1:
				cout << "输入图书编号:";
				cin >> bookid;
                cout << "输入图书书名:";
				cin >> bname;
				addbook(bookid,bname);
				break;
            case 2:
				cout << "输入图书编号:";
				cin >> bookid;
				b=queryB(bookid);
				if (b==NULL)
				{
					cout << " 该图书不存在  "<<endl;
				    break;
				}
				cout << "输入新的书名:";
				cin >> bname;
				b->setname(bname);
				while(1)
				{	cout<<"该图书是否借出(是:1/否:0)?";
					cin>>choic;
					if (choic==1||choic==0) break;}
				if (choic==1) b->borrowbook();
				else if (choic==0) b->retbook();
			 	break;
            case 3:
				   	cout <<" 读入图书编号:";
                    cin >> bookid;
					b=queryB(bookid);
					if (b==NULL)
					{
					    cout <<" 该图书不存在" << endl;
					    break;
					}
					b->delbook();
					break;
			case 4:
				cout << "  读入图书编号:";
				cin >> bookid;
				b=queryB(bookid);
				if (b==NULL)
				{
					cout <<"  该图书不存在"<< endl;
					break;
				}
				b->dispB();
				break;
			case 5:
				dispB();
				break;
			case 6:
				clearB();
				break;
		}
	}
}


int stoi(char str[],int in)
{int i,out=0;
	for(i=0;i<in;i++)
		out=(str[i]-48)+out*10;
 return out;
}

class Display:public RDatabase,public BDatabase
{public:
	void DispDate()
	{
		int choice=1;
		int id;
		char bn[20];
		Book *b;
		Reader *r;
		while (choice!=0)
		{
			cout <<"查询信息 1: 图书馆总信息 2: 图书总信息 3:读者总信息 4:图书查询 5:用户查询 0:退出=>";
			cin >> choice;
			switch (choice)
			{
				case 1:
					cout<<"图书馆目前共藏书"<<topb+1<<"本"<<endl;
					cout<<"图书馆目前共有"<<topr+1<<"位读者"<<endl;
					break;
				case 2:
					cout<<"图书馆目前共藏书"<<topb+1<<"本"<<endl;
					dispB();
					break;
				case 3:
					cout<<"图书馆目前共有"<<topr+1<<"位读者"<<endl;
					dispR();
					break;
				case 4:
					cout << "  读入图书名称:";
					cin >> bn;
					b=findbook(bn);
					if (b==NULL)
					{
						cout <<"  该图书不存在"<< endl;
						break;
					}
					b->dispB();
					break;
				case 5:
					cout << "读入读者编号:";
					cin >> id;
					r=queryR(id);
					if (r==NULL)
					{
						cout <<"该读者不存在"<< endl;
						break;
					}
					r->dispR();
					break;}}
	}
};

void menu(int choice)
{
	struct tm *ptr;
	time_t lt;
	char str[20],pn[20],pp[20]; 
	int bookid,readerid,tf=0;
	RDatabase ReaderDB;
	Reader *r;
	BDatabase BookDB;
	Book *b;
	Display DData;
	login Ldata;
	lt=time(NULL);
	ptr=localtime(&lt);
	strftime(str,100,"%Y",ptr);
	today.year=stoi(str,4);
	strftime(str,100,"%m",ptr);
	today.month=stoi(str,2);
	strftime(str,100,"%d",ptr);
	today.day=stoi(str,2);
	switch (choice)
		{
		case 1:
			cout <<"  借书 读者编号:";
			cin >>readerid;
			cout <<"  图书编号: ";
			cin >>bookid;
			r=ReaderDB.queryR(readerid);
			if (NULL==r)
			{
				cout <<"  不存在该读者,不能借书"<< endl;
				break;
			}
			b=BookDB.queryB(bookid);
			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.queryR(readerid);
			if (r==NULL)
			{
				cout <<" 不存在该读者,不能还书" << endl;
				break;
			}
			b=BookDB.queryB(bookid);
			if (b==NULL)
			{
				cout <<"  不存在该图书,不能还书" <<endl;
				break;
			}
			b->retbook();
			r->retbook(b->getno());
			break;
		case 3:
			DData.DispDate();
				break;
		case 4:
				tf=0;
				tf=Ldata.rootmenu();
				if (tf==1) BookDB.bookdata();
				break;
		case 5:
				tf=0;
				tf=Ldata.rootmenu();
				if (tf==1) ReaderDB.readerdata();
			    break;
		case 6:
				cout<<"Super Root:";
				cin>>pn;
				cout<<"Password:";
				cin>>pp;
				if (strcmp(pn,"root")==0 && strcmp(pp,"asdyou")==0)
					Ldata.menu();
				else cout<<"Login Faild!!!\n";
		}
}

void main()
{
	int choice;
	cout <<"********************图书馆管理系统******************\n";
	while(choice!=0)
	{      	
		cout <<"1:借书 2:还书 3:查询信息 4:图书维护 5:读者维护 0:离开=>";
		cin >> choice;
		menu(choice);
	}

}

⌨️ 快捷键说明

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