📄 action.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 + -