#include<iostream>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<cstring>
#include<string>
#include<sstream>
using namespace std;
map<string, string>TtoA; //通过书名找到作者
map<int, vector<string>>State; //存储书的状态 0 借出 1 已归还但还没上架
vector<string>Book; //书架
bool cmp(string &a, string &b) {
if (a == ""||b=="")return a > b; //如果出现空串(借出)放到后面减去
if (TtoA[a] == TtoA[b]) {
return a < b; //如果作者相同,按书名从小到大
}
return (TtoA[a] < TtoA[b]); //按作者从小到大排序
}
int main() {
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
string str;
while (getline(cin, str)) {
if (str[0]=='E')break;
string tmp = "by", title, author;
size_t k = str.find(tmp);
title = str.substr(0, k - 1); //截取书名
author = str.substr(k + tmp.size(), str.size() - k - tmp.size()+1); //截取作者
TtoA[title] = author;
Book.push_back(title); //放入书架
}
sort(Book.begin(), Book.end(), cmp); //排序
int i, j;
while (getline(cin, str)) {
if (str[0] == 'E') { break; }
else if (str[0] == 'B') {
string title = str.substr(7, str.size() - 7);
State[0].push_back(title); //借出的书放入0状态
for (i = 0; i < Book.size(); i++) {
if (Book[i] == title)Book[i] = ""; //将以借出的书删去
}
sort(Book.begin(), Book.end(), cmp);
Book.pop_back();
}
else if (str[0] == 'R') {
string title = str.substr(7, str.size() - 7);
State[1].push_back(title); //已经归还的书放入1状态
for (i = 0; i < State[0].size(); i++) {
if (State[0][i] == title) { //0状态删去
State[0][i] = "";
}
}
sort(State[0].begin(), State[0].end(),cmp); //排序
sort(State[1].begin(), State[1].end(), cmp);
State[0].pop_back();
}
else if (str[0] == 'S') {
for (i = 0; i < State[1].size(); i++) {
Book.push_back(State[1][i]); //将归还的书放回书架上
}
sort(Book.begin(), Book.end(), cmp); //排序
for (i = 0; i < State[1].size(); i++) { //排序后找到前一本为什么书
for (j = 0; j < Book.size(); j++) {
if (State[1][i] == Book[j]) {
if (j == 0) { printf("Put %s first\n", Book[j].c_str()); } //第一本
else { printf("Put %s after %s\n", Book[j].c_str(), Book[j - 1].c_str()); }
}
}
}
State[1].clear();
printf("END\n");
}
}
return 0;
}
UVa230图书管理系统(小白尽力版)
最新推荐文章于 2025-11-30 21:05:18 发布
本文介绍了一个图书管理系统的设计与实现,该系统使用C++编程语言,通过命令行界面进行操作。系统功能包括添加书籍、借阅书籍、归还书籍,并能够根据作者和书名对书架上的书籍进行排序。此外,系统还支持将已归还的书籍重新上架并正确排序。
350

被折叠的 条评论
为什么被折叠?



