小学生算数出题系统及四则运算考试系统的设计——C++版本

小学生算数出题系统及小学生四则运算考试系统的设计

具体功能如下:

1、主界面包括:

计算练习、计算考试、查询成绩、成绩排序、学生信息删除。

2、计算练习时,系统随机出题:

运算数均在100以内,运算类型包括加减乘除,除法应能整除,显示算式,键入结果,正确和错误均有提示,出错时允许再输入,最多三次机会,若还不正确,给出答案。根据提示信息继续练习或者退出练习退出前显示总题数,正确数和正确率。退出练习后根据提示信息进入主界面或者退出系统

3、计算考试时提示输入学号和姓名:

可以输入出题数量,系统随机出题,每题只给一次机会,总分为100分,根据正确率计算得分,统计得分。结束后,给出总分,显示各题的对错信息,错误的给出答案。并将学生学号、姓名和成绩保存入文件,成绩只保留最高分。考试结束后根据提示信息进入主界面或者退出系统

4、查询成绩时:

首先提示输入学生学号和学生姓名,输出学生的考试成绩。 查询结束后退出练习后根据提示信息进入主界面或者退出系统。

5、排序成绩:

将已有学生成绩降序排序,并输出排序前后的结果。排序后根据提示信息进入主界面或者退出系统

6 学生信息删除

提示输入学号和姓名,删除学生相关信息。如果不存在此学生时,给出提示信息。信息删除后根据提示信息进入主界面或者退出系统。

具体功能的程序实现:

1、主菜单显示和整体系统流程

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <algorithm>

class Student {
    
};

class MathExamSystem {
private:
    std::vector<Student> students;

    int num1, num2, result;
    char op;

    struct ExamResult {
        int questionNumber;
        bool isCorrect;
        int correctAnswer;

        ExamResult(int num, bool correct, int correctAns) : questionNumber(num), isCorrect(correct), correctAnswer(correctAns) {}
    };

    std::vector<ExamResult> examResults;

public:
    // 主菜单
    void displayMainMenu() {
        std::cout << "\n===== 小学生四则运算考试系统 =====\n";
        std::cout << "1. 计算练习\n";
        std::cout << "2. 计算考试\n";
        std::cout << "3. 查询成绩\n";
        std::cout << "4. 成绩排序\n";
        std::cout << "5. 学生信息删除\n";
        std::cout << "6. 退出系统\n";
        std::cout << "请选择功能(输入相应数字): ";
    }

    // 主系统流程
    void run() {
        int choice;
        do {
            displayMainMenu();
            std::cin >> choice;

            switch (choice) {
                case 1:
                    practice();
                    break;
                case 2:
                    takeExam();
                    break;
                case 3:
                    queryScore();
                    break;
                case 4:
                    sortScores();
                    break;
                case 5:
                    deleteStudent();
                    break;
                case 6:
                    std::cout << "谢谢使用,再见!\n";
                    break;
                default:
                    std::cout << "无效的选择,请重新输入。\n";
            }
        } while (choice != 6);
    }

private:
    // ...(上面的其他私有成员函数和结构体保持不变)
    void practice(){
        
    }
    void takeExam(){
        
    }
    void queryScore(){
        
    }
    void sortScores(){
        
    }
    void deleteStudent(){
        
    }

};

int main() {
    std::srand(static_cast<unsigned>(std::time(nullptr)));

    MathExamSystem examSystem;
    // 运行整个系统
    examSystem.run();

    return 0;
}



这段代码将整个系统流程包裹在了 run 函数中,通过主菜单的显示和用户输入的方式来选择功能。

2、计算练习功能实现:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <algorithm>

class MathExamSystem {
private:
    std::vector<Student> students;

    int num1, num2, result;
    char op;

    struct ExamResult {
        int questionNumber;
        bool isCorrect;
        int correctAnswer;

        ExamResult(int num, bool correct, int correctAns) : questionNumber(num), isCorrect(correct), correctAnswer(correctAns) {}
    };

    std::vector<ExamResult> examResults;

public:
    // ...(上面的其他公有成员函数和结构体保持不变)

    // 计算练习
    void practice() {
        int totalQuestions = 0;
        int correctAnswers = 0;

        std::cout << "\n===== 计算练习 =====\n";

        while (totalQuestions < 3) {
            generateQuestion();
            displayQuestion(totalQuestions);

            std::cin >> result;

            if (std::cin.fail()) {
                std::cin.clear();
                std::cin.ignore(INT_MAX, '\n');
                std::cout << "请输入一个有效的整数。\n";
                continue;
            }

            bool isCorrect = checkAnswer();

            if (isCorrect) {
                std::cout << "回答正确!\n";
                correctAnswers++;
            } else {
                std::cout << "回答错误!";
                std::cout << " 正确答案是 " << getCorrectAnswer() << ".\n";
            }

            totalQuestions++;
        }

        std::cout << "\n练习结束!\n";
        std::cout << "总题数: " << totalQuestions << "\n";
        std::cout << "正确数: " << correctAnswers << "\n";
        std::cout << "正确率: " << (correctAnswers * 100.0 / totalQuestions) << "%\n";
    }

private:
    // ...(上面的其他私有成员函数和结构体保持不变)
};

int main() {
    std::srand(static_cast<unsigned>(std::time(nullptr)));

    MathExamSystem examSystem;
    // 运行计算练习
    examSystem.practice();

    return 0;
}

这段代码实现了 “计算练习” 功能。

3、计算考试功能实现:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <algorithm>

class MathExamSystem {
private:
    std::vector<Student> students;

    int num1, num2, result;
    char op;

    struct ExamResult {
        int questionNumber;
        bool isCorrect;
        int correctAnswer;

        ExamResult(int num, bool correct, int correctAns) : questionNumber(num), isCorrect(correct), correctAnswer(correctAns) {}
    };

    std::vector<ExamResult> examResults;

public:
    // ...(上面的其他公有成员函数和结构体保持不变)

    // 计算考试
    void takeExam() {
        std::string studentID, studentName;
        std::cout << "\n===== 计算考试 =====\n";
        std::cout << "请输入学生学号: ";
        std::cin >> studentID;
        std::cout << "请输入学生姓名: ";
        std::cin >> studentName;

        auto studentIter = std::find_if(students.begin(), students.end(), [&](const Student& s) {
            return s.studentID == studentID && s.studentName == studentName;
        });

        if (studentIter == students.end()) {
            students.emplace_back(studentID, studentName);
            studentIter = students.end() - 1;
        }

        int numQuestions;
        std::cout << "请输入题目数量: ";
        std::cin >> numQuestions;

        int totalQuestions = 0;
        int correctAnswers = 0;

        for (int i = 0; i < numQuestions; ++i) {
            generateQuestion();
            displayQuestion(i);

            std::cin >> result;

            if (std::cin.fail()) {
                std::cin.clear();
                std::cin.ignore(INT_MAX, '\n');
                std::cout << "请输入一个有效的整数。\n";
                i--;
                continue;
            }

            bool isCorrect = checkAnswer();

            if (isCorrect) {
                std::cout << "回答正确!\n";
                correctAnswers++;
            } else {
                std::cout << "回答错误!";
                std::cout << " 正确答案是 " << getCorrectAnswer() << ".\n";
            }

            examResults.emplace_back(i + 1, isCorrect, getCorrectAnswer());
            totalQuestions++;
        }

        int score = (correctAnswers * 100) / numQuestions;

        std::cout << "\n考试结束!\n";
        std::cout << "总分: " << score << "\n";
        std::cout << "题目对错信息:\n";
        for (const auto& result : examResults) {
            std::cout << "题目 " << result.questionNumber << ": " << (result.isCorrect ? "正确" : "错误") << "\n";
        }

        studentIter->bestScore = std::max(studentIter->bestScore, score);

        saveStudentInfoToFile();

        std::cout << "\n返回主界面。\n";
    }

private:
    // ...(上面的其他私有成员函数和结构体保持不变)
};

int main() {
    std::srand(static_cast<unsigned>(std::time(nullptr)));

    MathExamSystem examSystem;
    // 运行计算考试
    examSystem.takeExam();

    return 0;
}

这段代码实现了 “计算考试” 功能。

4、查询成绩功能实现:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <algorithm>

class MathExamSystem {
private:
    std::vector<Student> students;

    int num1, num2, result;
    char op;

    struct ExamResult {
        int questionNumber;
        bool isCorrect;
        int correctAnswer;

        ExamResult(int num, bool correct, int correctAns) : questionNumber(num), isCorrect(correct), correctAnswer(correctAns) {}
    };

    std::vector<ExamResult> examResults;

public:
    // ...(上面的其他公有成员函数和结构体保持不变)

    // 查询成绩
    void queryScore() {
        std::string studentID, studentName;
        std::cout << "\n===== 查询成绩 =====\n";
        std::cout << "请输入学生学号: ";
        std::cin >> studentID;
        std::cout << "请输入学生姓名: ";
        std::cin >> studentName;

        auto studentIter = std::find_if(students.begin(), students.end(), [&](const Student& s) {
            return s.studentID == studentID && s.studentName == studentName;
        });

        if (studentIter != students.end()) {
            std::cout << "学生姓名: " << studentIter->studentName << "\n";
            std::cout << "学号: " << studentIter->studentID << "\n";
            std::cout << "最高分: " << studentIter->bestScore << "\n";
        } else {
            std::cout << "未找到该学生的成绩记录。\n";
        }

        std::cout << "\n返回主界面。\n";
    }

private:
    // ...(上面的其他私有成员函数和结构体保持不变)
};

int main() {
    std::srand(static_cast<unsigned>(std::time(nullptr)));

    MathExamSystem examSystem;
    // 运行查询成绩
    examSystem.queryScore();

    return 0;
}

这段代码实现了 “查询成绩” 功能。

5、成绩排序和学生信息删除功能实现:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <algorithm>

class MathExamSystem {
private:
    std::vector<Student> students;

    int num1, num2, result;
    char op;

    struct ExamResult {
        int questionNumber;
        bool isCorrect;
        int correctAnswer;

        ExamResult(int num, bool correct, int correctAns) : questionNumber(num), isCorrect(correct), correctAnswer(correctAns) {}
    };

    std::vector<ExamResult> examResults;

public:
    // ...(上面的其他公有成员函数和结构体保持不变)

    // 成绩排序
    void sortScores() {
        std::cout << "\n===== 成绩排序 =====\n";
        std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
            return a.bestScore > b.bestScore;
        });

        std::cout << "学号\t姓名\t最高分\n";
        for (const auto& student : students) {
            std::cout << student.studentID << "\t" << student.studentName << "\t" << student.bestScore << "\n";
        }

        std::cout << "\n返回主界面。\n";
    }

    // 学生信息删除
    void deleteStudent() {
        std::string studentID, studentName;
        std::cout << "\n===== 学生信息删除 =====\n";
        std::cout << "请输入学生学号: ";
        std::cin >> studentID;
        std::cout << "请输入学生姓名: ";
        std::cin >> studentName;

        auto studentIter = std::find_if(students.begin(), students.end(), [&](const Student& s) {
            return s.studentID == studentID && s.studentName == studentName;
        });

        if (studentIter != students.end()) {
            students.erase(studentIter);
            std::cout << "学生信息删除成功。\n";
        } else {
            std::cout << "未找到该学生的信息。\n";
        }

        std::cout << "\n返回主界面。\n";
    }

private:
    // ...(上面的其他私有成员函数和结构体保持不变)
};

int main() {
    std::srand(static_cast<unsigned>(std::time(nullptr)));

    MathExamSystem examSystem;
    // 运行成绩排序
    examSystem.sortScores();
    // 运行学生信息删除
    examSystem.deleteStudent();

    return 0;
}

这段代码实现了 “成绩排序” 和 “学生信息删除” 功能。
运行界面及操作界面:
主菜单界面
计算练习界面
计算考试操作界面
成绩查询界面
成绩排序操作界面
学生信息删除界面

完整程序在这里下载

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小王子同学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值