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

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