#include "hanshu.h" #include #include #include #include #include #include using namespace std; // 预设用户数据 vector presetusers = { {"张三1", "123", "小学"}, {"张三2", "123", "小学"}, {"张三3", "123", "小学"}, {"李四1", "123", "初中"}, {"李四2", "123", "初中"}, {"李四3", "123", "初中"}, {"王五1", "123", "高中"}, {"王五2", "123", "高中"}, {"王五3", "123", "高中"} }; // 用户认证函数 User* AuthenticateUser(const string& username, const string& password) { for (auto& user : presetusers) { if (user.username == username && user.password == password) { return &user; } } return nullptr; } bool IsValidUserType(const string& type) { return type == "小学" || type == "初中" || type == "高中"; } // 文件操作函数 void SaveQuestionsToFile(const vector& questions, const string& username, const string& type) { CreateUserDirectory(username); string filename = GetCurrentTimestamp() + ".txt"; string fullPath = username + "/" + filename; ofstream file(fullPath); if (file.is_open()) { file << type << "数学题目\n"; file << "生成时间: " << GetCurrentTimestamp() << "\n\n"; for (size_t i = 0; i < questions.size(); i++) { file << i + 1 << ". " << questions[i] << "\n\n"; } file.close(); cout << "题目已保存到: " << fullPath << endl; } else { cout << "保存文件失败: " << fullPath << endl; } } string GetCurrentTimestamp() { time_t now = time(nullptr); tm* localTime = localtime(&now); stringstream ss; ss << localTime->tm_year + 1900 << "-" << setw(2) << setfill('0') << localTime->tm_mon + 1 << "-" << setw(2) << setfill('0') << localTime->tm_mday << "-" << setw(2) << setfill('0') << localTime->tm_hour << "-" << setw(2) << setfill('0') << localTime->tm_min << "-" << setw(2) << setfill('0') << localTime->tm_sec; return ss.str(); } void CreateUserDirectory(const string& username) { #ifdef _WIN32 string command = "md " + username; // Windows 命令 #else string command = "mkdir -p " + username; // Linux/Mac 命令 #endif system(command.c_str()); } // 输入验证函数 bool IsValidQuestionCount(int count) { return (count >= 10 && count <= 30) || count == -1; } bool IsSwitchCommand(const string& input, string& newtype) { if (input.find("切换为") == 0) { newtype = input.substr(6,input.length()-1); if(!IsValidUserType(newtype)) { cout << "请输入小学、初中和高中三个选项中的一个" << endl; return false; } else return IsValidUserType(newtype); } return false; } // 系统流程函数 void DisplayWelcomeMessage() { cout << "=== 数学题目生成系统 ===" << endl; } void DisplayCurrentMode(const string& type) { cout << "当前选择为" << type << "出题" << endl; } void DisplayQuestionGenerator(std::unique_ptr generator,const User* users){ // 主交互循环 while (true) { cout << "准备生成" << generator->GetType() << "数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):"; string input; cin >> input; // 处理退出命令 if (input == "-1") { cout << "退出当前用户,重新登录..." << endl; break; } // 处理切换命令 string newtype; if (IsSwitchCommand(input, newtype)) { generator = CreateQuestionGenerator(newtype); cout << "准备生成" << newtype << "数学题目,请输入生成题目数量:"; cin >> input; } // 处理题目生成 try { int count = stoi(input); if (count >= 10 && count <= 30) { auto questions = generator->GenerateQuestion(count); SaveQuestionsToFile(questions, users->username, generator->GetType()); DisplayQuestionExamples(questions); } else { cout << "题目数量应在10-30之间" << endl; } } catch (const exception& e) { cout << "请输入有效的数字" << endl; } } } void DisplayQuestionExamples(const vector& questions) { if (!questions.empty()) { cout << "题目示例:" << endl; for (int i = 0; i < min(3, (int)questions.size()); i++) { cout << " " << questions[i] << endl; } } }