把处理空行的方式变得更优雅

This commit is contained in:
2023-12-15 10:25:15 +00:00
parent d2e6f2ca29
commit da2c61089b
2 changed files with 29 additions and 70 deletions

View File

@ -117,6 +117,7 @@ void BookStoreMain(bool is_server, std::string config_dir) {
std::getline(std::cin, cmd); std::getline(std::cin, cmd);
auto ret = std::move( auto ret = std::move(
engine.Execute(cmd, session_map[session_token].login_stack)); engine.Execute(cmd, session_map[session_token].login_stack));
if(ret.empty()) ret.push_back("[empty]");
std::cout << session_token << ' ' << operation_token << " " std::cout << session_token << ' ' << operation_token << " "
<< ret.size() << std::endl; << ret.size() << std::endl;
for (auto &line : ret) std::cout << line << std::endl; for (auto &line : ret) std::cout << line << std::endl;

View File

@ -61,14 +61,12 @@ std::vector<std::string> BookStoreEngineClass::Execute(
login_stack.pop(); login_stack.pop();
} }
if (!is_server) BookStore_ZYM::shut_down = true; if (!is_server) BookStore_ZYM::shut_down = true;
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
if (operation_map.find(head) == operation_map.end()) { if (operation_map.find(head) == operation_map.end()) {
for (int i = 0; i < cmd.length(); i++) for (int i = 0; i < cmd.length(); i++)
if (cmd[i] != ' ') return std::vector<std::string>({"Invalid"}); if (cmd[i] != ' ') return std::vector<std::string>({"Invalid"});
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
if (!login_stack.empty()) if (!login_stack.empty())
log_data_base.AddOperationRecord(login_stack.top().first, cmd, log_data_base.AddOperationRecord(login_stack.top().first, cmd,
@ -77,79 +75,51 @@ std::vector<std::string> BookStoreEngineClass::Execute(
log_data_base.AddOperationRecord("[nobody]", cmd, user_data_base); log_data_base.AddOperationRecord("[nobody]", cmd, user_data_base);
switch (operation_map[head]) { switch (operation_map[head]) {
case OperationType::__Ksu: { case OperationType::__Ksu: {
auto ret = std::move(ExecuteSu(cmd, login_stack)); return ExecuteSu(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Klogout: { case OperationType::__Klogout: {
auto ret = std::move(ExecuteLogout(cmd, login_stack)); return ExecuteLogout(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Kuseradd: { case OperationType::__Kuseradd: {
auto ret = std::move(ExecuteUserAdd(cmd, login_stack)); return ExecuteUserAdd(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Kregister: { case OperationType::__Kregister: {
auto ret = std::move(ExecuteRegister(cmd, login_stack)); return ExecuteRegister(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Kdelete: { case OperationType::__Kdelete: {
auto ret = std::move(ExecuteDelete(cmd, login_stack)); return ExecuteDelete(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Kpasswd: { case OperationType::__Kpasswd: {
auto ret = std::move(ExecutePasswd(cmd, login_stack)); return ExecutePasswd(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Kselect: { case OperationType::__Kselect: {
auto ret = std::move(ExecuteSelect(cmd, login_stack)); return ExecuteSelect(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Kmodify: { case OperationType::__Kmodify: {
auto ret = std::move(ExecuteMOdify(cmd, login_stack)); return ExecuteMOdify(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Kimport: { case OperationType::__Kimport: {
auto ret = std::move(ExecuteImport(cmd, login_stack)); return ExecuteImport(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Kshow: { case OperationType::__Kshow: {
ss >> head; ss >> head;
if (head == "finance") goto dst_showfinance; if (head == "finance") goto dst_showfinance;
auto ret = std::move(ExecuteShow(cmd, login_stack)); return ExecuteShow(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Kshowfinance: { case OperationType::__Kshowfinance: {
dst_showfinance:; dst_showfinance:;
auto ret = std::move(ExecuteShowFinance(cmd, login_stack)); return ExecuteShowFinance(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Kbuy: { case OperationType::__Kbuy: {
auto ret = std::move(ExecuteBuy(cmd, login_stack)); return ExecuteBuy(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Kreport: { case OperationType::__Kreport: {
// return std::vector<std::string>({"Invalid"}); // return std::vector<std::string>({"Invalid"});
auto ret = std::move(ExecuteReport(cmd, login_stack)); return ExecuteReport(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
case OperationType::__Klog: { case OperationType::__Klog: {
// return std::vector<std::string>({"Invalid"}); // return std::vector<std::string>({"Invalid"});
auto ret = std::move(ExecuteLog(cmd, login_stack)); return ExecuteLog(cmd, login_stack);
if (is_server && ret.size() == 0) return std::vector<std::string>({""});
return ret;
} }
} }
throw FatalError("Unknown Command", 5); throw FatalError("Unknown Command", 5);
@ -173,15 +143,13 @@ std::vector<std::string> BookStoreEngineClass::ExecuteSu(
// debugPrint("has root previlege"); // debugPrint("has root previlege");
login_stack.push(std::make_pair(user_id, 0)); login_stack.push(std::make_pair(user_id, 0));
login_count[user_id]++; login_count[user_id]++;
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
// debugPrint("Examining", user_id, password); // debugPrint("Examining", user_id, password);
if (user_data_base.PAM(user_id, password)) { if (user_data_base.PAM(user_id, password)) {
login_stack.push(std::make_pair(user_id, 0)); login_stack.push(std::make_pair(user_id, 0));
login_count[user_id]++; login_count[user_id]++;
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
return std::vector<std::string>({"Invalid"}); return std::vector<std::string>({"Invalid"});
} }
@ -195,8 +163,7 @@ std::vector<std::string> BookStoreEngineClass::ExecuteLogout(
} }
login_count[login_stack.top().first]--; login_count[login_stack.top().first]--;
login_stack.pop(); login_stack.pop();
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
std::vector<std::string> BookStoreEngineClass::ExecuteRegister( std::vector<std::string> BookStoreEngineClass::ExecuteRegister(
@ -208,8 +175,7 @@ std::vector<std::string> BookStoreEngineClass::ExecuteRegister(
if (user_data_base.GetPrevilege(user_id) != -1) if (user_data_base.GetPrevilege(user_id) != -1)
return std::vector<std::string>({"Invalid"}); return std::vector<std::string>({"Invalid"});
user_data_base.AddUser(user_id, password, user_name, 1); user_data_base.AddUser(user_id, password, user_name, 1);
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
std::vector<std::string> BookStoreEngineClass::ExecutePasswd( std::vector<std::string> BookStoreEngineClass::ExecutePasswd(
@ -232,14 +198,12 @@ std::vector<std::string> BookStoreEngineClass::ExecutePasswd(
return std::vector<std::string>({"Invalid"}); return std::vector<std::string>({"Invalid"});
} }
user_data_base.ChangePassword(user_id, new_password); user_data_base.ChangePassword(user_id, new_password);
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
if (!user_data_base.PAM(user_id, current_password)) if (!user_data_base.PAM(user_id, current_password))
return std::vector<std::string>({"Invalid"}); return std::vector<std::string>({"Invalid"});
user_data_base.ChangePassword(user_id, new_password); user_data_base.ChangePassword(user_id, new_password);
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
std::vector<std::string> BookStoreEngineClass::ExecuteUserAdd( std::vector<std::string> BookStoreEngineClass::ExecuteUserAdd(
@ -258,8 +222,7 @@ std::vector<std::string> BookStoreEngineClass::ExecuteUserAdd(
if (user_data_base.GetPrevilege(user_id) != -1) if (user_data_base.GetPrevilege(user_id) != -1)
return std::vector<std::string>({"Invalid"}); return std::vector<std::string>({"Invalid"});
user_data_base.AddUser(user_id, password, user_name, privilege); user_data_base.AddUser(user_id, password, user_name, privilege);
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
std::vector<std::string> BookStoreEngineClass::ExecuteDelete( std::vector<std::string> BookStoreEngineClass::ExecuteDelete(
@ -275,8 +238,7 @@ std::vector<std::string> BookStoreEngineClass::ExecuteDelete(
if (user_data_base.GetPrevilege(user_id) == -1) if (user_data_base.GetPrevilege(user_id) == -1)
return std::vector<std::string>({"Invalid"}); return std::vector<std::string>({"Invalid"});
user_data_base.DeleteUser(user_id); user_data_base.DeleteUser(user_id);
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
std::vector<std::string> BookStoreEngineClass::ExecuteShow( std::vector<std::string> BookStoreEngineClass::ExecuteShow(
@ -362,8 +324,7 @@ std::vector<std::string> BookStoreEngineClass::ExecuteSelect(
tmp.second = BI_tmp.bid; tmp.second = BI_tmp.bid;
// debugPrint("selected bid=", tmp.second); // debugPrint("selected bid=", tmp.second);
login_stack.push(tmp); login_stack.push(tmp);
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
std::vector<std::string> BookStoreEngineClass::ExecuteMOdify( std::vector<std::string> BookStoreEngineClass::ExecuteMOdify(
@ -401,8 +362,7 @@ std::vector<std::string> BookStoreEngineClass::ExecuteMOdify(
// debugPrint("successfully checked keyword"); // debugPrint("successfully checked keyword");
book_data_base.ModifyInfo(book_data_base.GetISBN(login_stack.top().second), book_data_base.ModifyInfo(book_data_base.GetISBN(login_stack.top().second),
new_ISBN, name, author, keyword, price, -1); new_ISBN, name, author, keyword, price, -1);
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
std::vector<std::string> BookStoreEngineClass::ExecuteImport( std::vector<std::string> BookStoreEngineClass::ExecuteImport(
@ -425,8 +385,7 @@ std::vector<std::string> BookStoreEngineClass::ExecuteImport(
book_data_base.ModifyInfo(book_data_base.GetISBN(login_stack.top().second), book_data_base.ModifyInfo(book_data_base.GetISBN(login_stack.top().second),
"", "", "", "", -1, tmp.quantity_remain + quantity); "", "", "", "", -1, tmp.quantity_remain + quantity);
log_data_base.AddImport(tmp.bid, quantity, total_cost); log_data_base.AddImport(tmp.bid, quantity, total_cost);
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
std::vector<std::string> BookStoreEngineClass::ExecuteShowFinance( std::vector<std::string> BookStoreEngineClass::ExecuteShowFinance(
@ -491,8 +450,7 @@ std::vector<std::string> BookStoreEngineClass::ExecuteReport(
log_data_base.FetchOperationRecord(ret, true); log_data_base.FetchOperationRecord(ret, true);
return ret; return ret;
} }
return is_server ? std::vector<std::string>({""}) return std::vector<std::string>();
: std::vector<std::string>();
} }
std::string BookStoreEngineClass::QueryUserInfo(const std::string &user_name) { std::string BookStoreEngineClass::QueryUserInfo(const std::string &user_name) {