👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
系列文章目录
一、设计要求
-
读取题目信息:
- 使用
readProjects
函数从指定文件projects.txt
中读取题目信息,并将其存储在Project
结构体的向量中。
- 使用
-
随机抽取题目:
- 使用
drawProject
函数从未被选中的题目中随机抽取一个题目,并标记为已选中。通过srand(time(0))
初始化随机数种子确保每次运行时随机性。
- 使用
-
保存选题结果:
- 使用
saveSelection
函数将学生选题结果保存到指定文件selections.txt
中,包含学生信息和题目信息。
- 使用
-
查询选题结果:
- 使用
querySelection
函数从selections.txt
文件中读取并显示所有的选题结果。
- 使用
-
主函数
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
中。 - 用户输入学号进行随机抽题,并保存选题结果到文件中。
- 用户可以查询选题结果,显示所有保存的记录。
通过这些设计,程序实现了一个完整的选题管理系统,支持学生信息输入、题目随机抽取、选题结果保存和查询功能。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 题库 ” 获取,拿来即用。👈👈👈
三、可视化分析
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 题库 ” 获取,拿来即用。👈👈👈