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

📄 2006022008532412933.cpp

📁 是一个比较好的图书管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		}
	}
}

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

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

	~PeriodicalDB()//析构函数,将periodical[]写到issue.dat文件中
	{
		fstream fout("issue.dat",ios::out);
		if(!fout)
		{
			cout<<" File:issue.dat open for Write Failed!"<<endl;
			abort();
		}
        for (int i=0;i<=count-1;i++)
			fout.write((char *)&periodical[i],sizeof(periodical[i]));
		fout.close();
	}
	
	bool borrowPeriodical(long id,int number)
	{
		if(query(id))
		{
			if(queryRec(id,number))
			{
				if(periodical[recPoint].getStatus()=='A')
				{
					periodical[recPoint].setStatus('I');
					return true;
				}
				return false;
			}
			return false;
		}
		return false;
	}
	
	bool returnPeriodical(long id,int number)
	{
		if(query(id))
		{
			if(queryRec(id,number))
			{
				if(periodical[recPoint].getStatus()=='I')
				{
					periodical[recPoint].setStatus('A');
					return true;
				}
				return false;
			}
			return false;
		}
		return false;
	}

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

	bool query(long id)//查找特定ID的单期期刊记录
	{
		for (int i=0;i<=count-1;i++)
			if (periodical[i].getID()==id)
			{	
				recPoint=i;
				return true;
			}
		return false;
	}

	bool queryRec(long id,int number)//查找单期期刊记录
	{
		for (int i=0;i<=count-1;i++)
			if (periodical[i].getID()==id && periodical[i].getNumber()==number)
			{	
				recPoint=i;
				return true;
			}
		return false;
	}
	
	bool search(long id,int number)//搜索单期期刊记录
	{
		for (int i=0;i<=count-1;i++)
			if (periodical[i].getID()==id && periodical[i].getNumber()<number)
			{	
				recPoint=i;
				return true;
			}
		return false;
	}

	void addPeriodical(MagazineDB &mzdb)//添加单期期刊记录
	{
		long id;
		int number;
		cout<<"\t\t\tAdd New Book/Periodical Details"<<endl;
		cout<<"\nEnter Periodical Code:";
		cin>>id;
		if(mzdb.queryRec(id))
		{
			do
			{
				cout<<"\nPlease Enter Number:";
				cin>>number;
				if(number<=0)
					cout<<"Periodical Number Is Less Than Zero,Please Input Again!"<<endl;
				else
				{
					if(queryRec(id,number))
					{
						cout<<"This Number Periodical is already exist!Add Failed!"<<endl;
						cout<<"Press any key to continue..."<<endl;
						getch();
					}
					else
					{
						periodical[count].setID(id);
						periodical[count].setNumber(number);
						periodical[count].setStatus('A');
						cin>>periodical[count];
						count++;
					}
				}
			}while(number<=0);
		}
		else
		{
			cout<<"The Periodical ID is not Exist!Add Periodical Failed!"<<endl;
			cout<<"Press any key to continue..."<<endl;
			getch();
		}
	}
	
	void delPeriodical(int id,int number)  //删除单期期刊记录
	{
		while(search(id,number))
		{
			for(int i=recPoint+1;i<=count-1;i++)
			{
				periodical[i-1]=periodical[i];
			}
			count--;
		}
	}
	
	void dispRec()  //显示全部单期期刊记录
	{
	  for (int i=0;i<=count-1;i++)
		periodical[i].disp();
	}
	
	void display(MagazineDB &mzdb)  //显示全部单期期刊记录
	{
		for(int i=0;i<=count-1;i++)
		{
			if(periodical[i].getStatus()=='A')
			{
				mzdb.queryRec(periodical[i].getID());
				cout<<"Code:"<<setw(3)<<periodical[i].getID()<<" Name:"<<setw(20)<<mzdb.getCurRecTitle()<<" Number:"<<setw(3)<<periodical[i].getNumber()<<" Issue Date:";
				periodical[i].getIssue();
			}
		}
	}

	void Datebase(MagazineDB &mzdb);//单期期刊库维护
};

void PeriodicalDB::Datebase(MagazineDB &mzdb)
{
	long id;
	int number;
	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:
				addPeriodical(mzdb);
				break;
			case 2:
				cout<<"Please Input Periodical ID:";
				cin>>id;
				cout<<"Please Input Periodical Number:"<<endl;
				cin>>number;
				cin.get();  //缓冲选择输入的回车.
				if (!queryRec(id,number))
				{
					cout << "The Periodical is not exist!"<<endl;
					cout<<"Press any key to continue..."<<endl;
					getch();
					break;
				}
				cin>>periodical[recPoint];
				break;
			case 3:
				cout<<"Please Input Periodical ID:";
				cin>>id;
				if (!query(id))
				{
					cout <<"The Periodical is not exist!" << endl;
					cout<<"Press any key to continue..."<<endl;
					getch();
					break;
				}
				cout<<"Please Input Periodical Number:";
				cin>>number;
				delPeriodical(id,number);
				break;
			case 4:
				cout<<"Please Input Periodical ID:";
				cin>>id;
				cout<<"Please Input Periodical Number:"<<endl;
				cin>>number;
				if (!queryRec(id,number))
				{
					cout <<"The Periodical is not exist!"<< endl;
					cout<<"Press any key to continue..."<<endl;
					getch();
					break;
				}
				periodical[recPoint].disp();
				cout<<"Press any key to continue..."<<endl;
				getch();
				break;
			case 5:
				display(mzdb);
				cout<<"Press any key to continue..."<<endl;
				getch();
				break;
			case 6:
				clearRec();
				break;
			
		}
	}
}

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

void mainInterface(BookDB &bkdb,MagazineDB &mzdb,PeriodicalDB &pddb)
{
	int choice=0;
	char select;
	char flage;
	long id;
	int number;
	while(choice!=6)
	{
		system("cls");
		cout<<"\t\t\tLibrary Management Syetem"<<endl;
		cout<<"1. Add New Book Details"<<endl;
		cout<<"2. Add New Periodical Details"<<endl;
		cout<<"3. Record Issue/Return Details"<<endl;
		cout<<"4. Delete Old Periodical Issue Details"<<endl;
		cout<<"5. View Available Books/Periodicals"<<endl;
		cout<<"6. Exit"<<endl;
		cout<<"\n\tPlease Enter Choice:";
		cin>>choice;
		cin.get();
		system("cls");
		switch (choice)
		{
		case 1:
			bkdb.addBook();
			break;
		case 2:
			do
			{
				system("cls");
				cout<<"Add Periodical Details or Issue Details?(P/I):";
				cin>>select;
				cin.get();
				if(toupper(select)!='P' && toupper(select)!='I')
				{
					cout<<"Select Invalidation,Please Select Again..."<<endl;
					getch();
				}
			}while(toupper(select)!='P' && toupper(select)!='I');
			if(toupper(select)=='P')
				mzdb.addMagazine();
			else
				pddb.addPeriodical(mzdb);
			break;
		case 3:
			do
			{
				system("cls");
				cout<<"Record Issus/Return"<<endl;
				cout<<"Issue or Return?(I/R):";
				cin>>flage;
				if(toupper(flage)!='I' && toupper(flage)!='R')
				{
					cout<<"Select Invalidation,Please Select Again..."<<endl;
					getch();
				}
			}while(toupper(flage)!='I' && toupper(flage)!='R');

			do
			{
				cout<<"Issue Book or Periodical?(B/P):";
				cin>>select;
				if(toupper(select)!='B' && toupper(select)!='P')
				{
					cout<<"Select Invalidation,Please Select Again..."<<endl;
					getch();
				}
			}while(toupper(select)!='B' && toupper(select)!='P');
			
			if(toupper(flage)=='I' && toupper(select)=='B')  //借阅图书
			{
				cout<<"Please Enter Book Code:";
				cin>>id;
				if(!bkdb.queryRec(id))
				{
					cout<<"The Book is not exist!"<<endl;
					getch();
					break;
				}
				if(!bkdb.borrowBook(id))
				{
					cout<<"The Book is already Issue!"<<endl;
					getch();
					break;
				}
				cout<<"The Book:"<<id<<"Issue Succeed!"<<endl;
				getch();
				break;
			}
			else if(toupper(flage)=='I' && toupper(select)=='P')  //借阅月刊
			{
				cout<<"Please Enter Periodical Code:";
				cin>>id;
				if(!pddb.query(id))
				{
					cout<<"The Periodical is not exist!"<<endl;
					getch();
					break;
				}
				cout<<"Please Input Issue Number:";
				cin>>number;
				if(!pddb.queryRec(id,number))
				{
					cout<<"The Periodical is not exist!"<<endl;
					getch();
					break;
				}
				if(!pddb.borrowPeriodical(id,number))
				{
					cout<<"The Book is already Issue!"<<endl;
					getch();
					break;
				}
				cout<<"The Periodical:"<<id<<"Issue Succeed!"<<endl;
				getch();
				break;
			}
			else if(toupper(flage)=='R' && toupper(select)=='B')  //归还图书
			{
				cout<<"Please Enter Book Code:";
				cin>>id;
				if(!bkdb.queryRec(id))
				{
					cout<<"The Book is not exist!"<<endl;
					getch();
					break;
				}
				if(!bkdb.returnBook(id))
				{
					cout<<"The Book:"<<id<<"Return Failed!"<<endl;
					getch();
					break;
				}
				cout<<"The Book:"<<id<<"Return Succeed!"<<endl;
				getch();
				break;
			}
			else  //归还月刊
			{
				cout<<"Please Enter Periodical Code:";
				cin>>id;
				if(!pddb.query(id))
				{
					cout<<"The Periodical is not exist!"<<endl;
					getch();
					break;
				}
				cout<<"Please Input Issue Number:";
				cin>>number;
				if(!pddb.queryRec(id,number))
				{
					cout<<"The Periodical is not exist!"<<endl;
					getch();
					break;
				}
				if(!pddb.returnPeriodical(id,number))
				{
					cout<<"The Periodical:"<<id<<"Return Failed!"<<endl;
					getch();
					break;
				}
				cout<<"The Periodical:"<<id<<"Return Succeed!"<<endl;
				getch();
				break;
			}
			break;
		case 4:
			system("cls");
			cout<<"Delete Old Periodical Issue"<<endl;
			cout<<"Please Enter Periodical Code:";
			cin>>id;
			if(!pddb.query(id))
			{
				cout<<"The Periodical is not exist!"<<endl;
				getch();
				break;
			}
			cout<<"Please Input Issue Number:";
			cin>>number;
			if(!pddb.search(id,number))
			{
				cout<<"The Periodical is not exist!"<<endl;
				getch();
				break;
			}
			pddb.delPeriodical(id,number);
			getch();
			break;
		case 5:
			do
			{
				system("cls");
				cout<<"Issue Book or Periodical?(B/P):";
				cin>>select;
				if(toupper(select)!='B' && toupper(select)!='P')
				{
					cout<<"Select Invalidation,Please Select Again..."<<endl;
					getch();
				}
			}while(toupper(select)!='B' && toupper(select)!='P');
			if(toupper(select)=='B')
			{
				bkdb.display();
				cout<<"Press any key to continue..."<<endl;
				getch();
				break;
			}
			else
			{
				pddb.display(mzdb);
				cout<<"Press any key to continue..."<<endl;
				getch();
				break;
			}
			break;
		case 6:
			break;
		default:
			cout<<"Select Invalidation,Please Select Again..."<<endl;
			getch();
			break;
		}
	}
}

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

void main()
{
	BookDB bkDB;
	MagazineDB mzDB;
	PeriodicalDB pdDB;
	mainInterface(bkDB,mzDB,pdDB);
}

⌨️ 快捷键说明

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