From be33f6f29a70b42afbcb53c7d913a2250cf89d7d Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Fri, 15 Dec 2023 09:28:48 +0000 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=B0=81=E8=A3=85=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/engine.cpp | 98 +++++++++++++++++++++++++++----------- frontend/Web/index.html | 103 +++++++++++++++++++++++----------------- 2 files changed, 130 insertions(+), 71 deletions(-) diff --git a/backend/src/engine.cpp b/backend/src/engine.cpp index 6f7cc8a..2584400 100644 --- a/backend/src/engine.cpp +++ b/backend/src/engine.cpp @@ -61,12 +61,14 @@ std::vector BookStoreEngineClass::Execute( login_stack.pop(); } if (!is_server) BookStore_ZYM::shut_down = true; - return std::vector(); + return is_server ? std::vector({"[Empty]"}) + : std::vector(); } if (operation_map.find(head) == operation_map.end()) { for (int i = 0; i < cmd.length(); i++) if (cmd[i] != ' ') return std::vector({"Invalid"}); - return std::vector(); + return is_server ? std::vector({"[Empty]"}) + : std::vector(); } if (!login_stack.empty()) log_data_base.AddOperationRecord(login_stack.top().first, cmd, @@ -75,51 +77,79 @@ std::vector BookStoreEngineClass::Execute( log_data_base.AddOperationRecord("[nobody]", cmd, user_data_base); switch (operation_map[head]) { case OperationType::__Ksu: { - return ExecuteSu(cmd, login_stack); + auto ret = std::move(ExecuteSu(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Klogout: { - return ExecuteLogout(cmd, login_stack); + auto ret = std::move(ExecuteLogout(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Kuseradd: { - return ExecuteUserAdd(cmd, login_stack); + auto ret = std::move(ExecuteUserAdd(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Kregister: { - return ExecuteRegister(cmd, login_stack); + auto ret = std::move(ExecuteRegister(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Kdelete: { - return ExecuteDelete(cmd, login_stack); + auto ret = std::move(ExecuteDelete(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Kpasswd: { - return ExecutePasswd(cmd, login_stack); + auto ret = std::move(ExecutePasswd(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Kselect: { - return ExecuteSelect(cmd, login_stack); + auto ret = std::move(ExecuteSelect(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Kmodify: { - return ExecuteMOdify(cmd, login_stack); + auto ret = std::move(ExecuteMOdify(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Kimport: { - return ExecuteImport(cmd, login_stack); + auto ret = std::move(ExecuteImport(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Kshow: { ss >> head; if (head == "finance") goto dst_showfinance; - return ExecuteShow(cmd, login_stack); + auto ret = std::move(ExecuteShow(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Kshowfinance: { dst_showfinance:; - return ExecuteShowFinance(cmd, login_stack); + auto ret = std::move(ExecuteShowFinance(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Kbuy: { - return ExecuteBuy(cmd, login_stack); + auto ret = std::move(ExecuteBuy(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Kreport: { // return std::vector({"Invalid"}); - return ExecuteReport(cmd, login_stack); + auto ret = std::move(ExecuteReport(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } case OperationType::__Klog: { // return std::vector({"Invalid"}); - return ExecuteLog(cmd, login_stack); + auto ret = std::move(ExecuteLog(cmd, login_stack)); + if (is_server && ret.size() == 0) return std::vector({"[Empty]"}); + return ret; } } throw FatalError("Unknown Command", 5); @@ -143,13 +173,15 @@ std::vector BookStoreEngineClass::ExecuteSu( // debugPrint("has root previlege"); login_stack.push(std::make_pair(user_id, 0)); login_count[user_id]++; - return std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } // 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 std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } return std::vector({"Invalid"}); } @@ -163,7 +195,8 @@ std::vector BookStoreEngineClass::ExecuteLogout( } login_count[login_stack.top().first]--; login_stack.pop(); - return std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } std::vector BookStoreEngineClass::ExecuteRegister( @@ -175,7 +208,8 @@ std::vector BookStoreEngineClass::ExecuteRegister( if (user_data_base.GetPrevilege(user_id) != -1) return std::vector({"Invalid"}); user_data_base.AddUser(user_id, password, user_name, 1); - return std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } std::vector BookStoreEngineClass::ExecutePasswd( @@ -198,12 +232,14 @@ std::vector BookStoreEngineClass::ExecutePasswd( return std::vector({"Invalid"}); } user_data_base.ChangePassword(user_id, new_password); - return std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } if (!user_data_base.PAM(user_id, current_password)) return std::vector({"Invalid"}); user_data_base.ChangePassword(user_id, new_password); - return std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } std::vector BookStoreEngineClass::ExecuteUserAdd( @@ -222,7 +258,8 @@ std::vector BookStoreEngineClass::ExecuteUserAdd( if (user_data_base.GetPrevilege(user_id) != -1) return std::vector({"Invalid"}); user_data_base.AddUser(user_id, password, user_name, privilege); - return std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } std::vector BookStoreEngineClass::ExecuteDelete( @@ -238,7 +275,8 @@ std::vector BookStoreEngineClass::ExecuteDelete( if (user_data_base.GetPrevilege(user_id) == -1) return std::vector({"Invalid"}); user_data_base.DeleteUser(user_id); - return std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } std::vector BookStoreEngineClass::ExecuteShow( @@ -324,7 +362,8 @@ std::vector BookStoreEngineClass::ExecuteSelect( tmp.second = BI_tmp.bid; // debugPrint("selected bid=", tmp.second); login_stack.push(tmp); - return std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } std::vector BookStoreEngineClass::ExecuteMOdify( @@ -362,7 +401,8 @@ std::vector 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 std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } std::vector BookStoreEngineClass::ExecuteImport( @@ -385,7 +425,8 @@ std::vector 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 std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } std::vector BookStoreEngineClass::ExecuteShowFinance( @@ -450,7 +491,8 @@ std::vector BookStoreEngineClass::ExecuteReport( log_data_base.FetchOperationRecord(ret, true); return ret; } - return std::vector(); + return is_server ? std::vector({""}) + : std::vector(); } std::string BookStoreEngineClass::QueryUserInfo(const std::string &user_name) { diff --git a/frontend/Web/index.html b/frontend/Web/index.html index a1fca12..7c301c2 100644 --- a/frontend/Web/index.html +++ b/frontend/Web/index.html @@ -7,54 +7,71 @@ - \ No newline at end of file