【C++】C++-学生考试题库管理系统(源码)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


系列文章目录



一、设计要求

  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;
};

设计思路

  • 定义两个结构体 StudentProject 来分别表示学生和题目信息。
  • 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 结构体中。
  • 初始化 isSelectedfalse,表示题目未被选中。

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 中。
  • 用户输入学号进行随机抽题,并保存选题结果到文件中。
  • 用户可以查询选题结果,显示所有保存的记录。

通过这些设计,程序实现了一个完整的选题管理系统,支持学生信息输入、题目随机抽取、选题结果保存和查询功能。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 题库 ” 获取,拿来即用。👈👈👈


三、可视化分析

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 题库 ” 获取,拿来即用。👈👈👈


  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米码收割机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值