一、设计要求
1.读取题目信息:
- 使用
readProjects
函数从指定文件projects.txt
中读取题目信息,并将其存储在Project
结构体的向量中。
2.随机抽取题目:
- 使用
drawProject
函数从未被选中的题目中随机抽取一个题目,并标记为已选中。通过srand(time(0))
初始化随机数种子确保每次运行时随机性。
3.保存选题结果:
- 使用
saveSelection
函数将学生选题结果保存到指定文件selections.txt
中,包含学生信息和题目信息。
4.查询选题结果:
- 使用
querySelection
函数从selections.txt
文件中读取并显示所有的选题结果。
5.主函数 main
:
- 提供一个简单的菜单驱动界面,用户可以选择以下操作:
- 输入学生信息(学号、姓名、班级),并将学生信息存储在
map
容器中,键为学号。 - 输入学号随机抽取题目,并保存选题结果到文件中。
- 查询并显示所有的选题结果。
- 退出程序。
- 使用
while
循环和cin
获取用户输入,执行相应操作,并提供简单的错误处理。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 题库 ” 获取,拿来即用。👈👈👈
二、设计思路
以下是对各个代码块的详细分析及其设计思路:
1. 结构体定义
struct Student { string id; string name; string className; }; struct Project { int id; string title; string requirements; string deadline; bool isSelected; };
设计思路:
- 定义两个结构体
Student
和Project
来分别表示学生和题目信息。 Student
包含学号、姓名和班级信息。Project
包含题目编号、标题、要求、截止日期,以及一个布尔值isSelected
来标识该题目是否已被选中。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 题库 ” 获取,拿来即用。👈👈👈
2. 读取题目信息
vector<Project> readProjects(const string& filename) { vector<Project> projects; ifstream file(filename); string line; while (getline(file, line)) { stringstream ss(line); // 略....(至少10行代码) // 略....(至少10行代码) file.close(); return projects; }
设计思路:
- 从文件中读取题目信息并存储到
vector<Project>
中。 - 使用
ifstream
读取文件,通过stringstream
解析每一行的数据,并填充到Project
结构体中。 - 初始化
isSelected
为false
,表示题目未被选中。
3. 随机抽取题目
Project* drawProject(vector<Project>& projects) { srand(time(0)); while (true) { // 略....(至少10行代码) // 略....(至少10行代码) }
设计思路:
- 使用
srand(time(0))
初始化随机数种子,确保每次运行程序时随机性。 - 通过
rand()
函数随机抽取一个未被选中的题目,并标记为已选中,返回该题目的指针。
4. 保存选题结果
void saveSelection(const Student& student, const Project& project, const string& filename) { ofstream file(filename, ios::app); file << "学号: " << student.id << ", 姓名: " << student.name << ", 班级: " << // 略....(至少10行代码) // 略....(至少10行代码) file.close(); }
设计思路:
- 将学生的选题结果追加写入到文件中,确保每次选题结果不会覆盖之前的记录。
- 使用
ofstream
以追加模式打开文件 (ios::app
),将学生信息和题目信息格式化后写入文件。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 题库 ” 获取,拿来即用。👈👈👈
5. 查询选题结果
void querySelection(const string& filename) { ifstream file(filename); string line; // 略....(至少10行代码) // 略....(至少10行代码) file.close(); }
设计思路:
- 从文件中读取所有选题结果并输出到控制台。
- 使用
ifstream
打开文件,逐行读取并输出每一行内容。
6. 主函数
int main() { string projectFile = "projects.txt"; string selectionFile = "selections.txt"; vector<Project> projects = readProjects(projectFile); map<string, Student> students; int choice; while (true) { cout << "1. 输入学生信息\n2. 输入学号随机抽取题目\n3. 查询选题结果\n4. 退出\n选择操作: "; cin >> choice; if (choice == 1) { Student student; cout << "输入学号: "; cin >> student.id; // 略....(至少10行代码) // 略....(至少10行代码) } return 0; }
设计思路:
- 设置项目文件和选题结果文件的文件名。
- 读取题目信息并存储在
vector<Project>
中。 - 使用
map
存储学生信息,键为学生的学号。 - 提供一个菜单驱动的界面,让用户可以选择输入学生信息、随机抽取题目、查询选题结果或退出程序。
- 用户输入学号和相关信息后存储到
map
中。 - 用户输入学号进行随机抽题,并保存选题结果到文件中。
- 用户可以查询选题结果,显示所有保存的记录。
通过这些设计,程序实现了一个完整的选题管理系统,支持学生信息输入、题目随机抽取、选题结果保存和查询功能。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 题库 ” 获取,拿来即用。👈👈👈
三、可视化分析
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 题库 ” 获取,拿来即用。👈👈👈