C++完整的学生管理系统

实现功能

  1. 添加、删除、修改学生
  2. 为学生添加、删除、修改成绩
  3. 将数据保存在students.txt和grades.txt里

效果图(部分功能)

b4d7c99af1b74a209fadfbe731c0abf6.png

添加学生

59355c93586642c3a220ad405d47080d.png

添加成绩

07c18474059a4f4a88dd953940c4d8b7.png

源代码         

这里就不分多个文件了      编译时在连接器命令行加入以下命令     -std=c++11

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <limits>

using namespace std;

struct Student {
    string id;
    string name;
    string gender;
    int age;
    string class_name;
};

struct Grade {
    string student_id;
    string course_name;
    int grade;
};

vector<Student> students;
vector<Grade> grades;

void loadStudents() {
    ifstream infile("students.txt");
    if (infile.is_open()) {
        Student s;
        while (infile >> s.id >> s.name >> s.gender >> s.age >> s.class_name) {
            students.push_back(s);
        }
        infile.close();
    }
}

void saveStudents() {
    ofstream outfile("students.txt");
    for (const auto& s : students) {
        outfile << s.id << " " << s.name << " " << s.gender << " " << s.age << " " << s.class_name << endl;
    }
}

void loadGrades() {
    ifstream infile("grades.txt");
    if (infile.is_open()) {
        Grade g;
        while (infile >> g.student_id >> g.course_name >> g.grade) {
            grades.push_back(g);
        }
        infile.close();
    }
}

void saveGrades() {
    ofstream outfile("grades.txt");
    for (const auto& g : grades) {
        outfile << g.student_id << " " << g.course_name << " " << g.grade << endl;
    }
}

void addStudent() {
    Student s;
    cout << "输入学生学号 Enter student ID: ";
    cin >> s.id;
    cout << "输入学生姓名 Enter student name: ";
    cin >> s.name;
    cout << "输入学生性别 Enter student gender: ";
    cin >> s.gender;
    cout << "输入学生年龄 Enter student age: ";
    while (!(cin >> s.age)) {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "无效输入,请输入有效的年龄 Invalid input, please enter a valid age: ";
    }
    cout << "输入学生班级 Enter student class: ";
    cin >> s.class_name;
    students.push_back(s);
    saveStudents();
    cout << "学生添加成功 Student added successfully." << endl;
}

void modifyStudent() {
    string id;
    cout << "输入要修改的学生ID Enter student ID to modify: ";
    cin >> id;
    auto it = find_if(students.begin(), students.end(), [&id](const Student& s) {
        return s.id == id;
    });
    if (it != students.end()) {
        cout << "输入学生新的姓名 Enter new student name: ";
        cin >> it->name;
        cout << "输入学生新的性别 Enter new student gender: ";
        cin >> it->gender;
        cout << "输入学生新的年龄 Enter new student age: ";
        while (!(cin >> it->age)) {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            cout << "无效输入,请输入有效的年龄 Invalid input, please enter a valid age: ";
        }
        cout << "输入学生新的班级 Enter new student class: ";
        cin >> it->class_name;
        saveStudents();
        cout << "学生信息修改成功 Student information modified successfully." << endl;
    } else {
        cout << "找不到学生ID Student ID not found." << endl;
    }
}

void deleteStudent() {
    string id;
    cout << "输入要删除的学生ID Enter student ID to delete: ";
    cin >> id;
    auto it = remove_if(students.begin(), students.end(), [&id](const Student& s) {
        return s.id == id;
    });
    if (it != students.end()) {
        students.erase(it, students.end());
        saveStudents();
        cout << "学生已成功删除 Student deleted successfully." << endl;
    } else {
        cout << "找不到学生ID Student ID not found." << endl;
    }
}

void queryStudent() {
    string id;
    cout << "输入要查询的学生ID Enter student ID to query: ";
    cin >> id;
    auto it = find_if(students.begin(), students.end(), [&id](const Student& s) {
        return s.id == id;
    });
    if (it != students.end()) {
        cout << "学生学号 Student ID: " << it->id << endl;
        cout << "学生姓名 Student name: " << it->name << endl;
        cout << "学生性别 Student gender: " << it->gender << endl;
        cout << "学生年龄 Student age: " << it->age << endl;
        cout << "学生班级 Student class: " << it->class_name << endl;
    } else {
        cout << "找不到学生ID Student ID not found." << endl;
    }
}

void addGrade() {
    Grade g;
    cout << "输入学生学号 Enter student ID: ";
    cin >> g.student_id;
    cout << "输入课程名称 Enter course name: ";
    cin >> g.course_name;
    cout << "输入等级 Enter grade: ";
    while (!(cin >> g.grade)) {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "无效输入,请输入有效的等级 Invalid input, please enter a valid grade: ";
    }
    grades.push_back(g);
    saveGrades();
    cout << "成绩添加成功 Grade added successfully." << endl;
}

void modifyGrade() {
    string id, course;
    cout << "输入学生学号 Enter student ID: ";
    cin >> id;
    cout << "输入课程名称 Enter course name: ";
    cin >> course;
    auto it = find_if(grades.begin(), grades.end(), [&id, &course](const Grade& g) {
        return g.student_id == id && g.course_name == course;
    });
    if (it != grades.end()) {
        cout << "输入新的等级 Enter new grade: ";
        while (!(cin >> it->grade)) {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            cout << "无效输入,请输入有效的等级 Invalid input, please enter a valid grade: ";
        }
        saveGrades();
        cout << "成绩修改成功 Grade modified successfully." << endl;
    } else {
        cout << "未找到成绩记录 Grade record not found." << endl;
    }
}

void deleteGrade() {
    string id, course;
    cout << "输入学生学号 Enter student ID: ";
    cin >> id;
    cout << "输入课程名称 Enter course name: ";
    cin >> course;
    auto it = remove_if(grades.begin(), grades.end(), [&id, &course](const Grade& g) {
        return g.student_id == id && g.course_name == course;
    });
    if (it != grades.end()) {
        grades.erase(it, grades.end());
        saveGrades();
        cout << "成绩删除成功 Grade deleted successfully." << endl;
    } else {
        cout << "未找到成绩记录 Grade record not found." << endl;
    }
}

void queryGrade() {
    string id, course;
    cout << "输入学生学号 Enter student ID: ";
    cin >> id;
    cout << "输入课程名称 Enter course name: ";
    cin >> course;
    auto it = find_if(grades.begin(), grades.end(), [&id, &course](const Grade& g) {
        return g.student_id == id && g.course_name == course;
    });
    if (it != grades.end()) {
        cout << "学生学号 Student ID: " << it->student_id << endl;
        cout << "课程名称 Course name: " << it->course_name << endl;
        cout << "成绩 Grade: " << it->grade << endl;
    } else {
        cout << "未找到成绩记录 Grade record not found." << endl;
    }
}

void displayMenu() {
    cout << "学生管理系统 Student Management System" << endl;
    cout << "1.添加学生 Add Student" << endl;
    cout << "2.修改学生 Modify Student" << endl;
    cout << "3.删除学生 Delete Student" << endl;
    cout << "4.查找学生 Query Student" << endl;
    cout << "5.添加成绩 Add Grade" << endl;
    cout << "6.修改成绩 Modify Grade" << endl;
    cout << "7.删除成绩 Delete Grade" << endl;
    cout << "8.查找成绩 Query Grade" << endl;
    cout << "9.退出 Exit" << endl;
}

enum MenuOption {
    ADD_STUDENT = 1,
    MODIFY_STUDENT,
    DELETE_STUDENT,
    QUERY_STUDENT,
    ADD_GRADE,
    MODIFY_GRADE,
    DELETE_GRADE,
    QUERY_GRADE,
    EXIT
};

int main() {
    loadStudents();
    loadGrades();

    int choice;
    do {
        displayMenu();
        cout << "输入您的选择 Enter your choice: ";
        while (!(cin >> choice)) {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            cout << "无效输入,请输入有效的选项 Invalid input, please enter a valid option: ";
        }
        MenuOption option = static_cast<MenuOption>(choice);
        switch (option) {
            case ADD_STUDENT:
                addStudent();
                break;
            case MODIFY_STUDENT:
                modifyStudent();
                break;
            case DELETE_STUDENT:
                deleteStudent();
                break;
            case QUERY_STUDENT:
                queryStudent();
                break;
            case ADD_GRADE:
                addGrade();
                break;
            case MODIFY_GRADE:
                modifyGrade();
                break;
            case DELETE_GRADE:
                deleteGrade();
                break;
            case QUERY_GRADE:
                queryGrade();
                break;
            case EXIT:
                cout << "退出 Exiting..." << endl;
                break;
            default:
                cout << "选择无效,请重试 Invalid choice. Please try again." << endl;
        }
    } while (choice != EXIT);

    return 0;
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

睿智的海鸥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值