23 条题解
-
0
#include <iostream> #include <fstream> #include <string> #include <stdexcept> #include <ctime> #include <vector> #include <sstream> #include <limits> class MathUtils { public: static int add(int a, int b) { return a + b; } static bool validateInput(int num) { return num >= 0 && num <= 10000; } }; class Logger { private: std::string filename; public: Logger(const std::string& fname) : filename(fname) {} void log(const std::string& message) { std::ofstream file(filename, std::ios::app); if (file.is_open()) { time_t now = time(0); file << "[" << ctime(&now) << "] " << message << "\n"; } } std::vector<std::string> readLogs() { std::vector<std::string> logs; std::ifstream file(filename); if (file.is_open()) { std::string line; while (getline(file, line)) { logs.push_back(line); } } return logs; } }; class InputHandler { public: static int getInteger(const std::string& prompt) { int value; while (true) { std::cout << prompt; if (std::cin >> value) { if (MathUtils::validateInput(value)) { break; } else { std::cout << "输入必须在0-10000范围内\n"; } } else { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cout << "无效输入,请输入整数\n"; } } return value; } }; class TestRunner { public: static void runTests() { testAddition(); testInputValidation(); std::cout << "所有测试通过\n"; } private: static void testAddition() { if (MathUtils::add(2, 3) != 5) { throw std::runtime_error("加法测试失败"); } if (MathUtils::add(0, 0) != 0) { throw std::runtime_error("零加法测试失败"); } } static void testInputValidation() { if (!MathUtils::validateInput(5000)) { throw std::runtime_error("输入验证测试失败"); } if (MathUtils::validateInput(-1)) { throw std::runtime_error("负输入验证测试失败"); } } }; void displayMenu() { std::cout << "\n===== 高级加法计算器 =====\n"; std::cout << "1. 计算两个数的和\n"; std::cout << "2. 查看计算历史\n"; std::cout << "3. 运行测试\n"; std::cout << "4. 退出\n"; std::cout << "选择: "; } int main() { Logger logger("calculator.log"); while (true) { displayMenu(); int choice; std::cin >> choice; try { switch (choice) { case 1: { int a = InputHandler::getInteger("输入第一个数: "); int b = InputHandler::getInteger("输入第二个数: "); int result = MathUtils::add(a, b); std::ostringstream oss; oss << a << " + " << b << " = " << result; logger.log(oss.str()); std::cout << "结果: " << oss.str() << "\n"; break; } case 2: { auto logs = logger.readLogs(); std::cout << "\n=== 计算历史 ===\n"; for (const auto& log : logs) { std::cout << log << "\n"; } break; } case 3: TestRunner::runTests(); break; case 4: return 0; default: std::cout << "无效选择\n"; } } catch (const std::exception& e) { std::cerr << "错误: " << e.what() << "\n"; logger.log(std::string("错误: ") + e.what()); } } }
信息
- ID
- 1
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 4482
- 已通过
- 1251
- 上传者