#include \u0026lt;fstream> \u0026lt;string> \u0026lt;vector> using namespace std; \n\n// 定义错题的结构体 struct Mistake { \n string question; // 题目 \n string fault; // 错误信息 \n string analysis; // 答案分析 \n string experience; // 心得体会 \n string source; // 错题来源 \n string reason; // 错题原因 \n string difficulty; // 难易程度 \n string type; // 题目类型 \n string knowledgePoint; // 知识点 \n}; \n\n// 定义链表节点 struct Node { \n Mistake data; \n Node* next; \n}; \n\n// 添加错题信息 void addMistake(Node*\u0026 head) { \n Mistake mistake; \n cout << '请输入题目:'; \n getline(cin, mistake.question); \n cout << '请输入错误信息:'; \n getline(cin, mistake.fault); \n cout << '请输入答案分析:'; \n getline(cin, mistake.analysis); \n cout << '请输入心得体会:'; \n getline(cin, mistake.experience); \n cout << '请输入错题来源:'; \n getline(cin, mistake.source); \n cout << '请输入错题原因:'; \n getline(cin, mistake.reason); \n cout << '请输入难易程度:'; \n getline(cin, mistake.difficulty); \n cout << '请输入题目类型:'; \n getline(cin, mistake.type); \n cout << '请输入知识点:'; \n getline(cin, mistake.knowledgePoint); \n Node* newNode = new Node; \n newNode->data = mistake; \n newNode->next = nullptr; \n if (head == nullptr) // 如果链表为空,将新节点作为头节点 { \n head = newNode; \n } else // 否则将新节点插入到链表末尾 { \n Node* current = head; \n while (current->next != nullptr) { \n current = current->next; \n } \n current->next = newNode; \n } \n cout << '错题信息添加成功!' << endl; \n} \n\n// 显示所有错题信息 void displayMistakes(Node* head) { \n if (head == nullptr) { \n cout << '没有任何错题信息!' << endl; \n return; \n } \n Node* current = head; \n while (current != nullptr) { \n Mistake mistake = current->data; \n cout << '题目:' << mistake.question << endl; \n cout << '错误信息:' << mistake.fault << endl; \n cout << '答案分析:' << mistake.analysis << endl; \n cout << '心得体会:' << mistake.experience << endl; \n cout << '错题来源:' << mistake.source << endl; \n cout << '错题原因:' << mistake.reason << endl; \n cout << '难易程度:' << mistake.difficulty << endl; \n cout << '题目类型:' << mistake.type << endl; \n cout << '知识点:' << mistake.knowledgePoint << endl; \n cout << '-------------------------' << endl; \n current = current->next; \n } \n} \n\n// 查询错题信息 void searchMistakes(Node* head) { \n if (head == nullptr) { \n cout << '没有任何错题信息!' << endl; \n return; \n } \n string keyword; \n cout << '请输入要查询的关键字:'; \n getline(cin, keyword); \n Node* current = head; \n int count = 0; \n while (current != nullptr) { \n Mistake mistake = current->data; \n if (mistake.knowledgePoint == keyword || mistake.type == keyword) { \n cout << '题目:' << mistake.question << endl; \n cout << '错误信息:' << mistake.fault << endl; \n cout << '答案分析:' << mistake.analysis << endl; \n cout << '心得体会:' << mistake.experience << endl; \n cout << '错题来源:' << mistake.source << endl; \n cout << '错题原因:' << mistake.reason << endl; \n cout << '难易程度:' << mistake.difficulty << endl; \n cout << '题目类型:' << mistake.type << endl; \n cout << '知识点:' << mistake.knowledgePoint << endl; \n cout << '-------------------------' << endl; \n count++; \n } \n current = current->next; \n } \n if (count == 0) { \n cout << '没有找到相关错题信息!' << endl; \n } \n} \n\n// 修改错题信息 void modifyMistake(Node* head) { \n if (head == nullptr) { \n cout << '没有任何错题信息!' << endl; \n return; \n } \n string keyword; \n cout << '请输入要修改的关键字:'; \n getline(cin, keyword); \n Node* current = head; \n vector<Node*> matches; \n while (current != nullptr) { \n Mistake mistake = current->data; \n if (mistake.knowledgePoint == keyword || mistake.type == keyword) { \n matches.push_back(current); \n } \n current = current->next; \n } \n if (matches.empty()) { \n cout << '没有找到相关错题信息!' << endl; \n return; \n } \n cout << '找到以下匹配的错题信息:' << endl; \n for (int i = 0; i < matches.size(); i++) { \n Mistake mistake = matches[i]->data; \n cout << i + 1 << '. ' << '题目:' << mistake.question << endl; \n cout << ' 错误信息:' << mistake.fault << endl; \n cout << ' 答案分析:' << mistake.analysis << endl; \n cout << ' 心得体会:' << mistake.experience << endl; \n cout << ' 错题来源:' << mistake.source << endl; \n cout << ' 错题原因:' << mistake.reason << endl; \n cout << ' 难易程度:' << mistake.difficulty << endl; \n cout << ' 题目类型:' << mistake.type << endl; \n cout << ' 知识点:' << mistake.knowledgePoint << endl; \n cout << '-------------------------' << endl; \n } \n int choice; \n cout << '请选择要修改的错题序号:'; \n cin >> choice; \n cin.ignore(); // 忽略之前的换行符 \n if (choice < 1 || choice > matches.size()) { \n cout << '输入的序号无效!' << endl; \n return; \n } \n Node* selectedNode = matches[choice - 1]; \n Mistake\u0026 selectedMistake = selectedNode->data; \n cout << '请输入新的题目(原题目:' << selectedMistake.question << '):'; \n getline(cin, selectedMistake.question); \n cout << '请输入新的错误信息(原错误信息:' << selectedMistake.fault << '):'; \n getline(cin, selectedMistake.fault); \n cout << '请输入新的答案分析(原答案分析:' << selectedMistake.analysis << '):'; \n getline(cin, selectedMistake.analysis); \n cout << '请输入新的心得体会(原心得体会:' << selectedMistake.experience << '):'; \n getline(cin, selectedMistake.experience); \n cout << '请输入新的错题来源(原错题来源:' << selectedMistake.source << '):'; \n getline(cin, selectedMistake.source); \n cout << '请输入新的错题原因(原错题原因:' << selectedMistake.reason << '):'; \n getline(cin, selectedMistake.reason); \n cout << '请输入新的难易程度(原难易程度:' << selectedMistake.difficulty << '):'; \n getline(cin, selectedMistake.difficulty); \n cout << '请输入新的题目类型(原题目类型:' << selectedMistake.type << '):'; \n getline(cin, selectedMistake.type); \n cout << '请输入新的知识点(原知识点:' << selectedMistake.knowledgePoint << '):'; \n getline(cin, selectedMistake.knowledgePoint); \n cout << '错题信息修改成功!' << endl; \n} \n\n// 删除错题信息 void deleteMistakes(Node*\u0026 head) { \n if (head == nullptr) { \n cout << '没有任何错题信息!' << endl; \n return; \n } \n string keyword; \n cout << '请输入要删除的关键字:'; \n getline(cin, keyword); \n Node* current = head; \n Node* prev = nullptr; \n int count = 0; \n while (current != nullptr) { \n Mistake mistake = current->data; \n if (mistake.knowledgePoint == keyword || mistake.type == keyword) { \n if (prev == nullptr) { \n head = current->next; \n } else { \n prev->next = current->next; \n } \n delete current; \n count++; \n } else { \n prev = current; \n } \n current = current->next; \n } \n if (count == 0) { \n cout << '没有找到相关错题信息!' << endl; \n } else { \n cout << '成功删除 ' << count << ' 条错题信息!' << endl; \n } \n} \n\n// 文件导入 void importMistakes(Node*\u0026 head) { \n string filename; \n cout << '请输入要导入的文件名:'; \n cin >> filename; \n cin.ignore(); // 忽略之前的换行符 \n\n ifstream file(filename); \n if (!file.is_open()) { \n cout << '无法打开文件!' << endl; \n return; \n } \n int count = 0;// 文件导入 \n while (!file.eof()) { \n Mistake mistake; \n getline(file, mistake.question); \n getline(file, mistake.fault); \n getline(file, mistake.analysis); \n getline(file, mistake.experience); \n getline(file, mistake.source); \n getline(file, mistake.reason); \n getline(file, mistake.difficulty); \n getline(file, mistake.type); \n getline(file, mistake.knowledgePoint); \n Node* newNode = new Node; \n newNode->data = mistake; \n newNode->next = nullptr; \n if (head == nullptr) { \n head = newNode; \n } else { \n Node* current = head; \n while (current->next != nullptr) { \n current = current->next; \n } \n current->next = newNode; \n } \n count++; \n } \n file.close(); \n cout << '成功导入 ' << count << ' 条错题信息!' << endl; \n} \n\n// 文件导出 void exportMistakes(Node* head) { \n if (head == nullptr) { \n cout << '没有任何错题信息!' << endl; \n return; \n } \n string filename; \n cout << '请输入要导出的文件名:'; \n cin >> filename; \n cin.ignore(); // 忽略之前的换行符 \n ofstream file(filename); \n if (!file.is_open()) { \n cout << '无法打开文件!' << endl; \n return; \n } \n Node* current = head; \n while (current != nullptr) { \n Mistake mistake = current->data; \n file << mistake.question << endl; \n file << mistake.fault << endl; \n file << mistake.analysis << endl; \n file << mistake.experience << endl; \n file << mistake.source << endl; \n file << mistake.reason << endl; \n file << mistake.difficulty << endl; \n file << mistake.type << endl; \n file << mistake.knowledgePoint << endl; \n current = current->next; \n } \n file.close(); \n cout << '成功导出错题信息到文件!' << endl; \n} \n\n// 释放链表内存 void releaseMemory(Node*\u0026 head) { \n Node* current = head; \n while (current != nullptr) { \n Node* temp = current; \n current = current->next; \n delete temp; \n } \n head = nullptr; \n} \n\nint main() { \n Node* head = nullptr; \n int choice; \n while (true) { \n cout << '错题本管理程序' << endl; \n cout << '1 添加错题信息' << endl; \n cout << '2 浏览错题信息' << endl; \n cout << '3 查询错题信息' << endl; \n cout << '4 删除错题信息' << endl; \n cout << '5 文件导入' << endl; \n cout << '6 文件导出' << endl; \n cout << '7 退出' << endl; \n cout << '请选择功能:'; \n cin >> choice; \n cin.ignore(); // 忽略之前的换行符 \n switch (choice) { \n case 1: \n addMistake(head); \n break; \n case 2: \n displayMistakes(head); \n break; \n case 3: \n searchMistakes(head); \n break; \n case 4: \n deleteMistakes(head); \n break; \n case 5: \n importMistakes(head); \n break; \n case 6: \n exportMistakes(head); \n break; \n case 7: \n releaseMemory(head); \n return 0; \n default: \n cout << '输入的选项无效!' << endl; \n break; \n } \n cout << endl; \n } \n}

错题本管理系统 - C++ 链表实现

原文地址: https://www.cveoy.top/t/topic/qzC5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录