C++ 学籍管理系统:基础功能实现及代码示例

本教程提供一个使用 C++ 实现的简单学籍管理系统的代码示例,涵盖学生基本信息、成绩录入、查询、删除、排序等功能。代码基于文本文件输入输出,易于理解和修改。

数据文件

  • A.txt (学生基本信息) 学号 姓名 性别 宿舍号码 电话号码 01 张成成 男 501 87732111 02 李成华 女 101 87723112 03 王成凤 女 101 87723112 04 张明明 男 502 87734333 05 陈东 男 501 87732111 06 李果 男 502 87734333 07 张园园 女 102 87756122 ...
  • B.txt (学生成绩信息) 学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 90 01 B03 高等数学 4 45 -1 88 02 C01 VF 3 65 76 66 ...

功能说明

  1. 数据录入: 对 B.txt 进行数据录入,包含学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩。综合成绩和实得学分由程序自动计算。
  2. 查询: 分为学生基本情况查询和成绩查询两种。
    • 学生基本情况查询: 输入学号或姓名,查询并显示学生基本信息;输入宿舍号码,查询并显示该宿舍所有学生信息。
    • 成绩查询: 输入学号,查询并显示该学生的所有课程信息,包括课程编号、课程名称、综合成绩、实得学分等。
  3. 删除: 当在 A.txt 中删除一个学生时,自动地在 B.txt 中删除此人所有信息。
  4. 排序: 支持按综合成绩或实得学分升序或降序排序并显示数据。

C++ 代码实现

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <algorithm>

using namespace std;

struct Student {
    string studentID;
    string name;
    string gender;
    string dormitory;
    string phoneNumber;
};

struct Course {
    string studentID;
    string courseID;
    string courseName;
    int credit;
    int usualGrade;
    int experimentGrade;
    int paperGrade;
    int comprehensiveGrade;
    int earnedCredit;
};

vector<Student> students;
vector<Course> courses;

// 从文件读取学生信息
void readStudentsFromFile(string filename) {
    ifstream file(filename);
    if (!file) {
        cout << "Error opening file: " << filename << endl;
        return;
    }

    string line;
    while (getline(file, line)) {
        istringstream iss(line);
        Student student;
        iss >> student.studentID >> student.name >> student.gender >> student.dormitory >> student.phoneNumber;
        students.push_back(student);
    }

    file.close();
}

// 从文件读取课程信息
void readCoursesFromFile(string filename) {
    ifstream file(filename);
    if (!file) {
        cout << "Error opening file: " << filename << endl;
        return;
    }

    string line;
    while (getline(file, line)) {
        istringstream iss(line);
        Course course;
        iss >> course.studentID >> course.courseID >> course.courseName >> course.credit >> course.usualGrade >> course.experimentGrade >> course.paperGrade;
        courses.push_back(course);
    }

    file.close();
}

// 将课程信息写入文件
void writeCoursesToFile(string filename) {
    ofstream file(filename);
    if (!file) {
        cout << "Error opening file: " << filename << endl;
        return;
    }

    for (const Course& course : courses) {
        file << course.studentID << " " << course.courseID << " " << course.courseName << " " << course.credit << " " << course.usualGrade << " " << course.experimentGrade << " " << course.paperGrade << " " << course.comprehensiveGrade << " " << course.earnedCredit << endl;
    }

    file.close();
}

// 计算综合成绩和实得学分
void calculateComprehensiveGradeAndEarnedCredit() {
    for (Course& course : courses) {
        if (course.experimentGrade == -1) {
            course.comprehensiveGrade = course.usualGrade * 0.3 + course.paperGrade * 0.7;
        } else {
            course.comprehensiveGrade = course.usualGrade * 0.15 + course.experimentGrade * 0.15 + course.paperGrade * 0.7;
        }

        if (course.comprehensiveGrade >= 90) {
            course.earnedCredit = course.credit;
        } else if (course.comprehensiveGrade >= 80) {
            course.earnedCredit = course.credit * 0.8;
        } else if (course.comprehensiveGrade >= 70) {
            course.earnedCredit = course.credit * 0.75;
        } else if (course.comprehensiveGrade >= 60) {
            course.earnedCredit = course.credit * 0.6;
        } else {
            course.earnedCredit = 0;
        }
    }
}

// 添加课程
void addCourse() {
    Course course;
    cout << "Enter student ID: ";
    cin >> course.studentID;
    cout << "Enter course ID: ";
    cin >> course.courseID;
    cout << "Enter course name: ";
    cin >> course.courseName;
    cout << "Enter credit: ";
    cin >> course.credit;
    cout << "Enter usual grade: ";
    cin >> course.usualGrade;
    cout << "Enter experiment grade (-1 if none): ";
    cin >> course.experimentGrade;
    cout << "Enter paper grade: ";
    cin >> course.paperGrade;

    courses.push_back(course);
}

// 显示学生信息
void displayStudentInfo(const Student& student) {
    cout << "Student ID: " << student.studentID << endl;
    cout << "Name: " << student.name << endl;
    cout << "Gender: " << student.gender << endl;
    cout << "Dormitory: " << student.dormitory << endl;
    cout << "Phone Number: " << student.phoneNumber << endl;
}

// 显示课程信息
void displayCourseInfo(const Course& course) {
    cout << "Course ID: " << course.courseID << endl;
    cout << "Course Name: " << course.courseName << endl;
    cout << "Comprehensive Grade: " << course.comprehensiveGrade << endl;
    cout << "Earned Credit: " << course.earnedCredit << endl;
}

// 搜索学生信息
void searchStudentInfo() {
    int choice;
    cout << "Search by: " << endl;
    cout << "1. Student ID" << endl;
    cout << "2. Name" << endl;
    cout << "Enter your choice: ";
    cin >> choice;

    if (choice == 1) {
        string studentID;
        cout << "Enter student ID: ";
        cin >> studentID;

        for (const Student& student : students) {
            if (student.studentID == studentID) {
                displayStudentInfo(student);
                break;
            }
        }
    } else if (choice == 2) {
        string name;
        cout << "Enter name: ";
        cin >> name;

        for (const Student& student : students) {
            if (student.name == name) {
                displayStudentInfo(student);
            }
        }
    } else {
        cout << "Invalid choice." << endl;
    }
}

// 搜索课程信息
void searchCourseInfo() {
    string studentID;
    cout << "Enter student ID: ";
    cin >> studentID;

    for (const Course& course : courses) {
        if (course.studentID == studentID) {
            displayCourseInfo(course);
        }
    }
}

// 删除学生
void deleteStudent(string studentID) {
    auto studentIter = find_if(students.begin(), students.end(), [&](const Student& student) {
        return student.studentID == studentID;
    });

    if (studentIter != students.end()) {
        students.erase(studentIter);

        courses.erase(remove_if(courses.begin(), courses.end(), [&](const Course& course) {
            return course.studentID == studentID;
        }), courses.end());

        cout << "Student deleted successfully." << endl;
    } else {
        cout << "Student not found." << endl;
    }
}

// 按综合成绩排序
void sortCoursesByComprehensiveGrade(bool ascending) {
    sort(courses.begin(), courses.end(), [&](const Course& course1, const Course& course2) {
        return ascending ? course1.comprehensiveGrade < course2.comprehensiveGrade : course1.comprehensiveGrade > course2.comprehensiveGrade;
    });
}

// 按实得学分排序
void sortCoursesByEarnedCredit(bool ascending) {
    sort(courses.begin(), courses.end(), [&](const Course& course1, const Course& course2) {
        return ascending ? course1.earnedCredit < course2.earnedCredit : course1.earnedCredit > course2.earnedCredit;
    });
}

int main() {
    readStudentsFromFile("A.txt");
    readCoursesFromFile("B.txt");
    calculateComprehensiveGradeAndEarnedCredit();

    int choice;
    while (true) {
        cout << "Menu: " << endl;
        cout << "1. Add course" << endl;
        cout << "2. Search student info" << endl;
        cout << "3. Search course info" << endl;
        cout << "4. Delete student" << endl;
        cout << "5. Sort courses by comprehensive grade" << endl;
        cout << "6. Sort courses by earned credit" << endl;
        cout << "0. Exit" << endl;
        cout << "Enter your choice: ";
        cin >> choice;

        if (choice == 1) {
            addCourse();
        } else if (choice == 2) {
            searchStudentInfo();
        } else if (choice == 3) {
            searchCourseInfo();
        } else if (choice == 4) {
            string studentID;
            cout << "Enter student ID: ";
            cin >> studentID;
            deleteStudent(studentID);
        } else if (choice == 5) {
            int sortChoice;
            cout << "Sort by: " << endl;
            cout << "1. Ascending" << endl;
            cout << "2. Descending" << endl;
            cout << "Enter your choice: ";
            cin >> sortChoice;

            bool ascending = sortChoice == 1;
            sortCoursesByComprehensiveGrade(ascending);
        } else if (choice == 6) {
            int sortChoice;
            cout << "Sort by: " << endl;
            cout << "1. Ascending" << endl;
            cout << "2. Descending" << endl;
            cout << "Enter your choice: ";
            cin >> sortChoice;

            bool ascending = sortChoice == 1;
            sortCoursesByEarnedCredit(ascending);
        } else if (choice == 0) {
            writeCoursesToFile("B.txt");
            break;
        } else {
            cout << "Invalid choice." << endl;
        }
    }

    return 0;
}

注意: 该代码仅实现基本功能,可根据实际需求进行改进。

运行说明: 将 A.txt 和 B.txt 文件与代码文件放置在同一目录下,然后编译运行代码。

C++ 学籍管理系统:基础功能实现及代码示例

原文地址: https://www.cveoy.top/t/topic/o3WF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录