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

📄 2006022008532412933.cpp

📁 是一个比较好的图书管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			in>>magazine.period;
			magazine.period=toupper(magazine.period);
			if(magazine.period!='F' && magazine.period!='M' && magazine.period!='S' && magazine.period!='Y')
				cout<<"Magazine Periodicity is Wrong,Please Input Again!"<<endl;
		}while(magazine.period!='F' && magazine.period!='M' && magazine.period!='S' && magazine.period!='Y');

		return in;

	}

	friend fstream & operator>>(fstream & in,Magazine & magazine) {}  //期刊类从文件输入

};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class Periodical //单期期刊类
{
private:  //单期期刊类成员属性
	long id;  //期刊代码
	int number;  //期刊发行期数
	Date issue;  //期刊出版日期
	double price;  //期刊价格
	char status;   //期刊状态("A"代表可借阅,"I"代表已被借阅)

public:
	Periodical()
	{
		id=0;
		number=0;
		issue=Date();
		price=0.0;
		status='X';
	}

	Periodical(long id,int number,int year,int month,int day,double price,char status='A')
	{
		this->id=id;
		this->number=number;
		this->issue=Date(year,month,day);
		this->price=price;
		if(status!='A' && status!='I')
		{
			cout<<"Book Status Set Error!"<<endl;
			this->status='X';
		}
		else
		{
			this->status=status;
		}
	}

	virtual ~Periodical() {}

	void setID(long id) { this->id=id; }
	void setNumber(int number) { this->number=number; }
	void setIssue(int year,int month,int day) { issue=Date(year,month,day); }
	void setPrice(double) { this->price=price; }
	void setStatus(char status) { this->status=toupper(status); }
	void setInfo(long id,int quantity,int year,int month,int day,double price,char status='A')
	{
		this->id=id;
		this->number=number;
		this->issue=Date(year,month,day);
		this->price=price;
		if(status!='A' && status!='I')
		{
			cout<<"Book Status Set Error!"<<endl;
			this->status='X';
		}
		else
		{
			this->status=status;
		}
	}

	long getID() { return this->id; }
	int getNumber() { return this->number; }
	void getIssue() { issue.getDate(); }
	double getPrice() { return this->price; } 
	char getStatus() { return this->status; }
	void getInfo() {}
	void disp()
	{
		cout<<"Code:"<<setw(3)<<id<<" Number:"<<setw(3)<<number<<" Issue Date:"<<issue<<" Status:"<<setw(2)<<status<<endl;
	}

	bool borrowPeriodical()
	{
		if (status=='A')
		{
			status='I';
			return true;
		}
		return false;
	}

	void returnPeriodical()
	{
		status='A';
	}

	void toSave(fstream &fout)  //保存对象属性值到文件
	{
		fout.write((char *)this,sizeof(Periodical));
	}

	void toLoad(fstream &fin)  //从文件当前位置读取数据到对象
	{
		fin.read((char *)this,sizeof(Periodical));
	}

	friend ostream & operator<<(ostream & out,Periodical & periodical)  //单期期刊类输出到屏幕
	{
		cout<<periodical.id<<" "<<periodical.number<<" "<<periodical.issue<<" "<<periodical.price<<" "<<periodical.status;
		return out;
	}

	friend fstream & operator<<(fstream & out,Periodical & periodical)  //单期期刊类输出到文件
	{
		cout<<periodical.id<<" "<<periodical.number<<" "<<periodical.issue<<" "<<periodical.price<<" "<<periodical.status;
		return out;
	}

	friend istream & operator>>(istream & in,Periodical & periodical) //单期期刊类从键盘输入
	{
		cout<<"\nPlease Enter Publishing Date(Separate By Blank):";
		cin>>periodical.issue;

		do
		{
			cout<<"\nPlease Enter Price:";
			cin>>periodical.price;
			if(periodical.price<=0)
				cout<<"Book Price Is Less Than Zero,Please Input Again!"<<endl;
		}while(periodical.price<=0);

		return in;
	} 

	friend fstream & operator>>(fstream & in,Periodical & periodical) {} //单期期刊类从文件输入
	
};

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class BookDB  //图书数据库类
{
private:  //图书数据库类成员属性
	int count;  //图书记录总数
	int recPoint;   //查询记录指针
	Book book[MaxNumber];  //图书记录
public:
	BookDB()//构造函数,将book.dat读到book[]中
	{ 
		Book b;
		count=0;
		recPoint=0;
		fstream fin("book.dat",ios::in);
		if(!fin)
		{
			cout<<" File:book.dat open for Read Failed!"<<endl;
			abort();
		}
		while (true)
		{
			fin.read((char *)&b,sizeof(b));
			if (!fin) break;
			book[count++]=b;
		}
		fin.close();
	}

	~BookDB()//析构函数,将book[]写到book.dat文件中
	{
		fstream fout("book.dat",ios::out);
		if(!fout)
		{
			cout<<" File:book.dat open for Write Failed!"<<endl;
			abort();
		}
        for (int i=0;i<=count-1;i++)
			fout.write((char *)&book[i],sizeof(book[i]));
		fout.close();
	}

	bool borrowBook(long id)
	{
		if(queryRec(id))
		{
			if (book[recPoint].getStatus()=='A')
			{
				book[recPoint].setStatus('I');
				return true;
			}
			return false;
		}
		return false;

	}

	bool returnBook(long id)
	{
		if(queryRec(id))
		{
			if(book[recPoint].getStatus()=='I')
			{
				book[recPoint].setStatus('A');
				return true;
			}
			return false;
		}
		return false;
	}

	void clearRec()//记录全部删除
	{
		count=0;
	}

	bool queryRec(long id)//查找图书记录
	{
		for (int i=0;i<=count-1;i++)
			if (book[i].getID()==id)
			{	
				recPoint=i;
				return true;
			}
		return false;
	}

	void addBook()//添加图书记录
	{
		cout<<"\t\t\tAdd New Book/Periodical Details"<<endl;
		if(count==0)
		{
			cout<<"\nBook Code:"<<1<<endl;
			book[count].setID(1);
			book[count].setStatus('A');
			cin>>book[count];
			count++;
		}
		else
		{
			cout<<"\nBook Code:"<<book[count-1].getID()+1<<endl;
			book[count].setID(book[count-1].getID()+1);
			book[count].setStatus('A');
			cin>>book[count];
			count++;
		}
	}

	void delBook()//删除图书记录
	{
		for(int i=recPoint+1;i<=count-1;i++)
		{
			book[i-1]=book[i];
		}
		count--;
	}

	void dispRec()//显示全部图示记录
	{
	  for (int i=0;i<=count-1;i++)
		book[i].disp();
	}

	void display()//显示可以借阅的图书信息
	{
	  for (int i=0;i<=count-1;i++)
		  if(book[i].getStatus()=='A')
				book[i].disp();
	}

	void Datebase();//图书库维护

};

void BookDB::Datebase()
{
	long id;
	int choice=1;
	while (choice!=0)
	{
		system("cls");
		cout <<"Book Maintenance 1: Add 2: Modify 3: Delete 4: Find 5: Display 6: Clear 0: Exit=>";
		cin >> choice;
		cin.get();  //缓冲选择输入的回车.
		switch (choice)
		{
			case 1:
				addBook();
				break;
			case 2:
				cout<<"Please Input Book ID:";
				cin>>id;
				cin.get();  //缓冲选择输入的回车.
				if (!queryRec(id))
				{
					cout << "The Book is not exist!"<<endl;
					cout<<"Press any key to continue..."<<endl;
					getch();
					break;
				}
				cin>>book[recPoint];
				break;
			case 3:
				cout<<"Please Input Book ID:";
				cin>>id;
				if (!queryRec(id))
				{
		 			cout <<"The Book is not exist!" << endl;
					cout<<"Press any key to continue..."<<endl;
					getch();
					break;
				}
				delBook();
				break;
			case 4:
				cout<<"Please Input Book ID:";
				cin>>id;
				if (!queryRec(id))
				{
					cout <<"The Book is not exist!"<< endl;
					cout<<"Press any key to continue..."<<endl;
					getch();
					break;
				}
				book[recPoint].disp();
				cout<<"Press any key to continue..."<<endl;
				getch();
				break;
			case 5:
				dispRec();
				cout<<"Press any key to continue..."<<endl;
				getch();
				break;
			case 6:
				clearRec();
				break;
		}
	}
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class MagazineDB  //期刊数据库类
{
private:  //期刊类成员属性
	int count;  //期刊记录总数
	int recPoint;  //查询记录指针
	Magazine magazine[MaxNumber];  //期刊记录
public:
	MagazineDB()//构造函数,将periodical.dat读到magazine[]中
	{ 
		Magazine m;
		count=0;
		recPoint=0;
		fstream fin("periodical.dat",ios::in);
		if(!fin)
		{
			cout<<" File:periodical.dat open for Read Failed!"<<endl;
			abort();
		}
		while (true)
		{
			fin.read((char *)&m,sizeof(m));
			if (!fin) break;
			magazine[count++]=m;
		}
		fin.close();
	}

	~MagazineDB()//析构函数,将magazine[]写到periodical.dat文件中
	{
		fstream fout("periodical.dat",ios::out);
		if(!fout)
		{
			cout<<" File:periodical.dat open for Write Failed!"<<endl;
			abort();
		}
        for (int i=0;i<=count-1;i++)
			fout.write((char *)&magazine[i],sizeof(magazine[i]));
		fout.close();
	}
	
	void clearRec()//删除全部期刊记录
	{
		count=0;
	}

	bool queryRec(long id)//查找期刊记录
	{
		for (int i=0;i<=count-1;i++)
			if (magazine[i].getID()==id)
			{	
				recPoint=i;
				return true;
			}
			return false;
	}
	
	void addMagazine()//添加期刊记录
	{
		cout<<"\t\t\tAdd New Book/Periodical Details"<<endl;
		if(count==0)
		{
			cout<<"\nMagazine Code:"<<1<<endl;
			magazine[count].setID(1);
			cin>>magazine[count];
			count++;
		}
		else
		{
			cout<<"\nMagazine Code:"<<magazine[count-1].getID()+1<<endl;
			magazine[count].setID(magazine[count-1].getID()+1);
			cin>>magazine[count];
			count++;
		}
	}
	
	void delMagazine()//删除期刊记录
	{
		for(int i=recPoint+1;i<=count-1;i++)
		{
			magazine[i-1]=magazine[i];
		}
		count--;
	}

	char* getCurRecTitle()
	{
		return magazine[recPoint].getTitle();
	}

	void dispRec()//显示全部期刊记录
	{
	  for (int i=0;i<=count-1;i++)
		magazine[i].disp();
	}
	
	void Datebase();//期刊库维护
};

void MagazineDB::Datebase()
{
	long id;
	int choice=1;
	while (choice!=0)
	{
		system("cls");
		cout <<"Magazine Maintenance 1: Add 2: Modify 3: Delete 4: Find 5: Display 6: Clear 0: Exit=>";
		cin >> choice;
		cin.get();  //缓冲选择输入的回车.
		switch (choice)
		{
			case 1:
				addMagazine();
				break;
			case 2:
				cout<<"Please Input Magazine ID:";
				cin>>id;
				cin.get();  //缓冲选择输入的回车.
				if (!queryRec(id))
				{
					cout << "The Magazine is not exist!"<<endl;
					cout<<"Press any key to continue..."<<endl;
					getch();
					break;
				}
				cin>>magazine[recPoint];
				break;
			case 3:
		  		cout<<"Please Input Magazine ID:";
				cin>>id;
				if (!queryRec(id))
				{
					cout <<"The Magazine is not exist!" << endl;
					cout<<"Press any key to continue..."<<endl;
					getch();
					break;
				}
				delMagazine();
				break;
			case 4:
				cout<<"Please Input Magazine ID:";
				cin>>id;
				if (!queryRec(id))
				{
					cout <<"The Magazine is not exist!"<< endl;
					cout<<"Press any key to continue..."<<endl;
					getch();
					break;
				}
				magazine[recPoint].disp();
				cout<<"Press any key to continue..."<<endl;
				getch();
				break;
			case 5:
				dispRec();
				cout<<"Press any key to continue..."<<endl;
				getch();
				break;
			case 6:
				clearRec();
				break;

⌨️ 快捷键说明

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