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

📄 action.cpp

📁 一个图书馆管理系统,是用C++编写的,大一时的作业!
💻 CPP
字号:
#include "Action.hpp"
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <string>
using namespace std;


string        tname;
unsigned long tnum;


bool Tbook :: operator < (const Tbook &other)
{
	return book_label < other.book_label;
}


bool judge_label(Tbook &n)
{
	return (n.Getlabel() == tnum);
}


bool judge_name(Tbook &n)
{
	return (n.Getname() == tname);
}


void OPERATION :: ADD_BOOK ()					                                // 向内存储器添加数据 
{
	book_list.push_back(now);  
}


OPERATION :: OPERATION ()                                                       // OPERATION构造函数 
{
	string        tmp;															// 用以读取数据库的标识行 
	unsigned long i;

	strcpy(database_address, "database.txt");									// 图书馆数据库文件名,实际应用中需要加密保存 

	ifstream fin(database_address);
	if (!fin)
	{
		cout << "对不起,数据库文件未找到,请修复!" << endl;
		exit(1); 
	}

	getline(fin, administrator_name);
	getline(fin, administrator_pwd);
	fin >> book_total;

	for (i = 1; i <= book_total; i++)
	{
		fin.get();
		getline(fin, tmp);
		fin >> now.book_label;
		fin.get();
		getline(fin, now.name);
		getline(fin, now.author);
		getline(fin, now.concern);
		getline(fin, now.key);
		fin >> now.status;
		if (now.status)
		{
			fin.get();
			getline(fin, now.borrower.name);
			fin >> now.borrower.phone_number;
			fin >> now.borrower.year >> now.borrower.month >> now.borrower.day;
		}
	
		ADD_BOOK();

	}
	fin.close();
}


void OPERATION :: QUERY ()					                                               // 查询图书 
{
	string keyword[5];
	int	   i, n, j, p;

	do
	{
		system("cls");
		cout << "1、按书名查询" << endl;
		cout << "2、按书号查询" << endl;
		cout << "3、按关键字查询" << endl;
		cout << "0、退出查询" << endl;
		cout << "请输入您需要的选项(1 -- 3,0):";
		cin >> n;
		switch (n)
		{
			case 1: 
				{
					cout << "请输入需要查询的书名: ";
					cin.get();
					getline(cin, tname);

					bp = find_if(book_list.begin(), book_list.end(), judge_name);
					
					if (bp == book_list.end())
					{
							cout << "对不起,书籍未找到!" << endl;
							system("pause");
							continue;
					}
					(*bp).prn();
					cout << "状态  :";
					if ((*bp).status) cout << "借出" << endl;
							else cout << "在馆" << endl;
					cout << endl;

					system("pause");
				} break;

			case 2: 
				{
					cout << "请输入你需要借阅图书的书号: ";
					cin >> tnum;

					bp = find_if(book_list.begin(), book_list.end(), judge_label);
					
					if (bp == book_list.end())
					{
							cout << "对不起,书籍未找到" << endl;
							system("pause");
							continue;
					}
					(*bp).prn();
					cout << "状态  :";
					if ((*bp).status) cout << "借出" << endl;
							else cout << "在馆" << endl;
					cout << endl;
					
					system("pause");
				} break;
			
			case 3: 
				{
					cin.get();			
					for (p = 0; p <= 4; p++)
					{
						cout << "请输入关键词 " << p + 1 << " (Enter即结束输入):";
						getline(cin, keyword[p]);
						if (!keyword[p].size()) 
						{
							p--;
							break;
						}
					};
					if (!p) continue;
					for (bp = book_list.begin(); bp != book_list.end(); bp++)
					{
						j = 0;
						for (i = 0; i <= p; i++)
							if ((*bp).key.find(keyword[i]) != -1) j++;
						if (j + j > p + 1)
						{
							(*bp).prn();
							cout << "状态  :";
							if ((*bp).status) cout << "借出" << endl;
									else cout << "在馆" << endl;
							cout << endl;
						}
					}
					system("pause");
				} break;
			
			case 0: break;
			
			default:
				{
					cout << "对不起,您的输入不合法!" << endl;
					cin.clear();
				}
		}
	} while (n);
}


void OPERATION :: LEND ()					                                               // 借阅图书 
{
	char tch;

	cout << "请输入需要借阅的书号: ";
	cin >> tnum;

	bp = find_if(book_list.begin(), book_list.end(), judge_label);

	if (bp == book_list.end()) 
	{
		cout << "对不起,书籍未找到" << endl;
		system("pause");
		return;
	}
	if ((*bp).status)
	{
		cout << "对不起,此书已被借出" << endl;
		system("pause");
		return;
	}
	(*bp).prn();
	do
	{
		cout << "确认 Yes / 取消 No:";
		cin >> tch;
	} while (tch != 'Y' && tch != 'y' && tch != 'N' && tch != 'n');
	if (tch == 'n' || tch == 'N') return;
	
	cin.get();
	cout << "请登记姓名:";
	getline(cin, (*bp).borrower.name);
	cout << "请登记电话:";
	cin >> (*bp).borrower.phone_number;
	cout << "请登记借阅日期(年 月 日):";
	cin >> (*bp).borrower.year >> (*bp).borrower.month >> (*bp).borrower.day;
	(*bp).status = 1;
	cout << "借阅成功!" << endl;

	system("pause");
}


void OPERATION :: KEY_ADD ()								                              // 键盘追加图书 
{
	char   tch;
	string ts;
	int    p;
    
	do
	{
		cout << "请输入需要追加的书号(输入0则结束追加):";
		cin >> now.book_label;
		if (!now.book_label) return;

		cin.get();
		cout << "请输入书名:";
		getline(cin, now.name);
		cout << "请输入作者名:";
		getline(cin, now.author);
		cout << "请输入出版社:";
		getline(cin, now.concern);

		now.status = 0;
		now.key = "";
		for (p = 1; p <= 5; p++)
		{
			cout << "请输入关键词 " << p << " (Enter即结束输入):";
			getline(cin, ts);
			if (!ts.size()) break;
			now.key = now.key + ts + "/";
		}

		do
		{
			cout << "确认添加 Yes / 重新添加 No:";
			cin >> tch;
		} while (tch != 'y' && tch != 'Y' && tch != 'n' & tch != 'N');
		if (tch == 'y' || tch == 'Y') 
		{
			ADD_BOOK ();
			book_total++;
		}
	} while (1);
}


void OPERATION :: GIVEBACK()
{
	char tch;

	cout << "请输入需要归还的书号: ";
	cin >> tnum;

	bp = find_if(book_list.begin(), book_list.end(), judge_label);

	if (bp == book_list.end()) 
	{
		cout << "对不起,书籍未找到" << endl;
		system("pause");
		return;
	}
	if (!(*bp).status)
	{
		cout << "此书在库!" << endl;
		system("pause");
		return;
	}
	(*bp).borrower.prn();
	do
	{
		cout << "确认 Yes / 取消 No:";
		cin >> tch;
	} while (tch != 'Y' && tch != 'y' && tch != 'N' && tch != 'n');
	if (tch == 'n' || tch == 'N') return;

	(*bp).borrower.name = "";
	(*bp).borrower.phone_number = 0;
	(*bp).borrower.year = 0;
	(*bp).borrower.month = 0;
	(*bp).borrower.day = 0;
	(*bp).status = 0;
	cout << "归还成功!" << endl;

	system("pause");
}


void OPERATION :: MANAGE ()
{
	string adn, adp;
	int	   n;
	
	cin.get();
	cout << "请输入管理员账号:";
	getline(cin, adn);
	cout << "请输入管理员密码:";
	getline(cin, adp);

  	if (adn != administrator_name || adp != administrator_pwd)
	{
		cout << "账号或密码错误!" << endl;
		system("pause");
		return;
	}

	do
	{
		system("cls");
		cout << "管理员登陆:" << endl;
		cout << "1、列出所有在库图书" << endl;
		cout << "2、列出所有借出图书" << endl;
		cout << "3、查询借阅资料" << endl;
		cout << "0、退出" << endl;
		cout << "请输入您需要的选项(1 -- 3,0):";
		
		cin >> n;
		switch (n)
		{
			case 1: 
				{
					for (bp = book_list.begin(); bp != book_list.end(); bp++)
						if (!(*bp).status) 
						{
							(*bp).prn();
							cout << endl;
						}
					system("pause");
				} break;

			case 2: 
				{
					for (bp = book_list.begin(); bp != book_list.end(); bp++)
						if ((*bp).status) 
						{
							(*bp).prn();
							cout << endl;
						}
					system("pause");
				} break;

			case 3:
				{
					for (bp = book_list.begin(); bp != book_list.end(); bp++)
						if ((*bp).status) 
						{
							cout << "书号:" << (*bp).book_label << endl;
							(*bp).borrower.prn();
							cout << endl;
						}
					system("pause");
				} break;

			case 0: return;

			default:
			{
				cout << "对不起,您的输入不合法!" << endl;
				cin.clear();
			}

		}
	} while (1);
}  


OPERATION :: ~OPERATION ()
{
      unsigned long p = 0;
                       
      ofstream fout(database_address);
      
      fout << administrator_name << endl;
      fout << administrator_pwd << endl;
      fout << book_total << endl;
      
      sort (book_list.begin(), book_list.end());
      
      for (bp = book_list.begin(); bp != book_list.end(); bp++)
      {
		  p++;
		  fout << "Book No." << p << endl;
		  fout << (*bp).book_label << endl;
		  fout << (*bp).name << endl;
		  fout << (*bp).author << endl;
		  fout << (*bp).concern << endl;
		  fout << (*bp).key << endl;
		  fout << (*bp).status << endl;
		  if ((*bp).status)
		  {
			  fout << (*bp).borrower.name << endl;
			  fout << (*bp).borrower.phone_number << endl;
			  fout << (*bp).borrower.year << " " << (*bp).borrower.month << " " << (*bp).borrower.day << endl;
		  }
	  }
	  fout.close();
}

⌨️ 快捷键说明

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