编程实训小组课题——学生成绩管理系统

要求
1.显示所有学生信(学号,姓名)
2.查询个人成绩(语数外)
3.修改成绩(学号,课程)
4.按平均分排序显示(升序)
5.按总分排序(升序)
注:上1到5需单独列出代码

该回答引用ChatGPT

有疑问可以回复我

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

// 定义学生信息结构体
struct Student {
    string id;      // 学号
    string name;    // 姓名
    float chinese;  // 语文成绩
    float math;     // 数学成绩
    float english;  // 英语成绩
    float total;    // 总分
    float average;  // 平均分
};

// 显示所有学生信息
void display_all(Student *students, int count) {
    cout << "学号\t姓名\n";
    for (int i = 0; i < count; i++) {
        cout << students[i].id << "\t" << students[i].name << endl;
    }
}

// 查询个人成绩
void query_score(Student *students, int count) {
    string id;
    cout << "请输入学生学号:";
    cin >> id;
    for (int i = 0; i < count; i++) {
        if (students[i].id == id) {
            cout << "学号\t语文\t数学\t英语\n";
            cout << students[i].id << "\t" << students[i].chinese << "\t" << students[i].math << "\t" << students[i].english << endl;
            return;
        }
    }
    cout << "未找到该学生的成绩记录。\n";
}

// 修改成绩
void modify_score(Student *students, int count) {
    string id;
    string course;
    float score;
    cout << "请输入学生学号:";
    cin >> id;
    cout << "请输入要修改的课程(chinese/math/english):";
    cin >> course;
    cout << "请输入新的成绩:";
    cin >> score;
    for (int i = 0; i < count; i++) {
        if (students[i].id == id) {
            if (course == "chinese") {
                students[i].chinese = score;
            } else if (course == "math") {
                students[i].math = score;
            } else if (course == "english") {
                students[i].english = score;
            } else {
                cout << "无效的课程名称。\n";
                return;
            }
            students[i].total = students[i].chinese + students[i].math + students[i].english;
            students[i].average = students[i].total / 3;
            cout << "成绩修改成功。\n";
            return;
        }
    }
    cout << "未找到该学生的成绩记录。\n";
}

// 按平均分排序显示
bool compare_average(const Student &s1, const Student &s2) {
    return s1.average < s2.average;
}

void sort_by_average(Student *students, int count) {
    sort(students, students + count, compare_average);
    cout << "学号\t姓名\t平均分\n";
    for (int i = 0; i < count; i++) {
        cout << students[i].id << "\t" << students[i].name << "\t" << students[i].average << endl;
    }
}

// 按总分排序显示
bool compare_total(const Student &s1, const Student &s2) {
    return s1.total < s2.total;
}

void sort_by_total(Student *students, int count) {
    sort(students, students + count, compare_total);
    cout << "学号\t姓名\t总分\n";
    for (int i = 0; i < count; i++) {
        cout << students[i].id << "\t" << students[i].name << "\t" << students[i].total << endl;
    }
}

int main() {
    int n;
    cout << "请输入学生数量:";
    cin >> n;
    Student *students = new Student[n];
    for (int i = 0; i < n; i++) {
        cout << "请输入第" << i + 1 << "个学生的信息(学号、姓名、语文成绩、数学成绩、英语成绩):";
        cin >> students[i].id >> students[i].name >> students[i].chinese >> students[i].math >> students[i].english;
        students[i].total = students[i].chinese + students[i].math + students[i].english;
        students[i].average = students[i].total / 3;
    }

    int choice;
    while (true) {
        cout << "请选择操作:\n";
        cout << "1. 显示所有学生信息\n";
        cout << "2. 查询个人成绩\n";
        cout << "3. 修改成绩\n";
        cout << "4. 按平均分排序显示\n";
        cout << "5. 按总分排序显示\n";
        cout << "6. 退出\n";
        cout << "请输入操作编号:";
        cin >> choice;
        switch (choice) {
            case 1:
                display_all(students, n);
                break;
            case 2:
                query_score(students, n);
                break;
            case 3:
                modify_score(students, n);
                break;
            case 4:
                sort_by_average(students, n);
                break;
            case 5:
                sort_by_total(students, n);
                break;
            case 6:
                cout << "谢谢使用!\n";
                return 0;
            default:
                cout << "无效的操作编号。\n";
                break;
        }
    }

    delete[] students;
    return 0;
}



基于C++编写的学生成绩管理系统

显示学生所有信息


#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
// 学生信息结构体
struct Student {
    string id;      // 学号
    string name;    // 姓名
    int score[3];   // 成绩,分别为语文、数学、英语
    int totalScore; // 总分
    double avgScore; // 平均分
};
// 全局变量,存储所有学生信息
vector<Student> students;
// 显示所有学生信息
void showAllStudents() {
    cout << "学号\t姓名\t语文\t数学\t英语\t总分\t平均分" << endl;
    for (auto& student : students) {
        cout << student.id << "\t" << student.name << "\t" << student.score[0] << "\t"
             << student.score[1] << "\t" << student.score[2] << "\t" << student.totalScore
             << "\t" << student.avgScore << endl;
    }
}
// 显示所有学生信息
void showAllStudents() {
    cout << "学号\t姓名\t语文\t数学\t英语\t总分\t平均分" << endl;
    for (auto& s : students) {
        cout << s.id << "\t" << s.name << "\t" << s.score[0] << "\t"
             << s.score[1] << "\t" << s.score[2] << "\t" << s.totalScore
             << "\t" << s.avgScore << endl;
    }
}

查询个人成绩

void queryScore() {
    string id;
    cout << "请输入学号:";
    cin >> id;
    for (auto& s : students) {
        if (s.id == id) {
            cout << "学号\t姓名\t语文\t数学\t英语\t总分\t平均分" << endl;
            cout << s.id << "\t" << s.name << "\t" << s.score[0] << "\t"
                 << s.score[1] << "\t" << s.score[2] << "\t" << s.totalScore
                 << "\t" << s.avgScore << endl;
            return;
        }
    }
    cout << "未找到学号为" << id << "的学生" << endl;
}

修改学生成绩

void modifyScore() {
    string id;
    int course, score;
    cout << "请输入学号和课程编号(1表示语文,2表示数学,3表示英语):";
    cin >> id >> course;
    if (course < 1 || course > 3) {
        cout << "无效的课程编号" << endl;
        return;
    }
    for (auto& s : students) {
        if (s.id == id) {
            cout << "当前成绩为:" << s.score[course - 1] << endl;
            cout << "请输入新成绩:";
            cin >> score;
            s.score[course - 1] = score;
            s.totalScore = s.score[0] + s.score[1] + s.score[2];
            s.avgScore = s.totalScore / 3.0;
            cout << "成绩修改成功" << endl;
            return;
        }
    }
    cout << "未找到学号为" << id << "的学生" << endl;
}

按平均分排序显示

void sortByAvgScore() {
    sort(students.begin(), students.end(), [](const Student& s1, const Student& s2) {
        return s1.avgScore < s2.avgScore;
    });
    showAllStudents();
}

按总分排序显示

void sortByTotalScore() {
    sort(students.begin(), students.end(), [](const Student&


以下答案基于ChatGPT与GISer Liu编写:
以下是一个简单的学生成绩管理系统的代码实现,主要包括上述五个要求:

# 定义一个学生类
class Student:
    def __init__(self, sid, name, score):
        self.sid = sid
        self.name = name
        self.score = score

    def __repr__(self):
        return f'Student(sid={self.sid}, name={self.name}, score={self.score})'


# 定义一个学生列表
students = [
    Student('001', 'Tom', {'语文': 80, '数学': 90, '英语': 70}),
    Student('002', 'Jerry', {'语文': 90, '数学': 70, '英语': 80}),
    Student('003', 'Mike', {'语文': 60, '数学': 80, '英语': 90}),
    Student('004', 'Lucy', {'语文': 70, '数学': 60, '英语': 80}),
    Student('005', 'John', {'语文': 80, '数学': 80, '英语': 80}),
]


# 1.显示所有学生信息
def show_students():
    print('所有学生信息如下:')
    for student in students:
        print(student)


# 2.查询个人成绩
def query_score(sid):
    for student in students:
        if student.sid == sid:
            return student.score
    print('没有找到该学生的信息')
    return None


# 3.修改成绩
def modify_score(sid, course, score):
    for student in students:
        if student.sid == sid:
            student.score[course] = score
            print(f'{sid}{course}成绩已修改为{score}')
            return
    print('没有找到该学生的信息')


# 4.按平均分排序显示(升序)
def sort_by_avg_score():
    sorted_students = sorted(students, key=lambda s: sum(s.score.values()) / len(s.score), reverse=False)
    print('按平均分排序后的学生信息如下:')
    for student in sorted_students:
        print(student)


# 5.按总分排序(升序)
def sort_by_total_score():
    sorted_students = sorted(students, key=lambda s: sum(s.score.values()), reverse=False)
    print('按总分排序后的学生信息如下:')
    for student in sorted_students:
        print(student)


# 测试代码
show_students()
print()

score = query_score('001')
if score is not None:
    print('001的成绩如下:', score)
print()

modify_score('002', '数学', 75)
print()

sort_by_avg_score()
print()

sort_by_total_score()

运行以上代码,可以得到如下输出:

所有学生信息如下:
Student(sid=001, name=Tom, score={'语文': 80, '数学': 90, '英语': 70})
Student(sid=002, name=Jerry, score={'语文': 90, '数学': 70, '英语': 80})
Student(sid=003, name=Mike, score={'语文': 60, '数学': 80, '英语': 90})

参考GPT和自己的思路,以下是一个简单的学生成绩管理系统的C++代码。在这个系统中,每个学生有一个唯一的学号,姓名和三个科目的成绩(语文,数学和英语)。

要求1:显示所有学生信息

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

// 定义学生结构体
struct Student {
    string id;
    string name;
    int chinese_score;
    int math_score;
    int english_score;
};

// 显示所有学生信息
void display_all_students(const vector<Student>& students) {
    cout << "所有学生信息:" << endl;
    for (const auto& student : students) {
        cout << "学号:" << student.id << ",姓名:" << student.name << endl;
    }
}

要求2:查询个人成绩

// 查询个人成绩
void query_individual_score(const vector<Student>& students) {
    string id;
    cout << "请输入学号:";
    cin >> id;
    // 查找学号对应的学生
    auto it = find_if(students.begin(), students.end(), [&](const Student& s) {
        return s.id == id;
    });
    if (it != students.end()) {
        // 找到了学生,显示其成绩
        cout << "学号:" << it->id << ",姓名:" << it->name << endl;
        cout << "语文成绩:" << it->chinese_score << ",数学成绩:" << it->math_score << ",英语成绩:" << it->english_score << endl;
    } else {
        // 没有找到学生
        cout << "没有找到该学生!" << endl;
    }
}

要求3:修改成绩

void modifyScore() {
    string id;
    string course;
    double score;

    cout << "请输入学号:";
    cin >> id;
    cout << "请输入课程(chinese, math, english):";
    cin >> course;
    cout << "请输入新成绩:";
    cin >> score;

    bool found = false;
    for (int i = 0; i < students.size(); i++) {
        if (students[i].id == id) {
            found = true;
            if (course == "chinese") {
                students[i].chinese = score;
            } else if (course == "math") {
                students[i].math = score;
            } else if (course == "english") {
                students[i].english = score;
            } else {
                cout << "输入的课程不正确" << endl;
                return;
            }

            cout << "成绩修改成功" << endl;
            break;
        }
    }

    if (!found) {
        cout << "未找到该学生" << endl;
    }
}

按平均分排序显示

bool compareByAvgScore(const Student& a, const Student& b) {
    double avgA = (a.chinese + a.math + a.english) / 3;
    double avgB = (b.chinese + b.math + b.english) / 3;
    return avgA < avgB;
}

void sortByAvgScore() {
    sort(students.begin(), students.end(), compareByAvgScore);
    cout << "按平均分排序后的学生信息:" << endl;
    for (int i = 0; i < students.size(); i++) {
        double avg = (students[i].chinese + students[i].math + students[i].english) / 3;
        cout << students[i].id << " " << students[i].name<< " 平均分:" << avg << endl;
}

按总分排序(升序)

bool compareByTotalScore(const Student& a, const Student& b) {
double totalA = a.chinese + a.math + a.english;
double totalB = b.chinese + b.math + b.english;
return totalA < totalB;
}

void sortByTotalScore() {
sort(students.begin(), students.end(), compareByTotalScore);
cout << "按总分排序后的学生信息:" << endl;
for (int i = 0; i < students.size(); i++) {
double total = students[i].chinese + students[i].math + students[i].english;
cout << students[i].id << " " << students[i].name << " 总分:" << total << endl;
}
}
int main() {
// 添加一些测试数据
students.push_back({"1001", "张三", 85, 90, 92});
students.push_back({"1002", "李四", 80, 85, 88});
students.push_back({"1003", "王五", 95, 91, 97});
// 显示所有学生信息
showAllStudents();

// 查询个人成绩
showStudentScores();

// 修改成绩
modifyScore();
showAllStudents();

// 按平均分排序
sortByAvgScore();

// 按总分排序
sortByTotalScore();

return 0;

这个程序定义了一个 Student 结构体,包含学号、姓名和三门科目的成绩,使用一个 vector 来保存学生数组。每个操作都是一个独立的函数。在 main 函数中,我们添加了一些测试数据,然后按顺序执行每个操作。
如果对您有帮助,请给与采纳,谢谢。

以下代码实现了题目要求的所有功能:

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

// 学生成绩结构体
struct StudentScore {
    string id;
    string name;
    double chinese;
    double math;
    double english;
    double total;
    double average;
};

// 显示所有学生信息
void showAllStudents(const vector<StudentScore>& students) {
    cout << "所有学生信息:" << endl;
    cout << setw(10) << "学号" << setw(10) << "姓名" << endl;
    for (const auto& student : students) {
        cout << setw(10) << student.id << setw(10) << student.name << endl;
    }
}

// 查询个人成绩
void showStudentScore(const vector<StudentScore>& students, const string& id) {
    for (const auto& student : students) {
        if (student.id == id) {
            cout << "学号:" << student.id << endl;
            cout << "姓名:" << student.name << endl;
            cout << "语文成绩:" << student.chinese << endl;
            cout << "数学成绩:" << student.math << endl;
            cout << "英语成绩:" << student.english << endl;
            cout << "总分:" << student.total << endl;
            cout << "平均分:" << student.average << endl;
            return;
        }
    }
    cout << "未找到该学生!" << endl;
}

// 修改成绩
void modifyScore(vector<StudentScore>& students, const string& id, const string& subject, double score) {
    for (auto& student : students) {
        if (student.id == id) {
            if (subject == "语文") {
                student.chinese = score;
            } else if (subject == "数学") {
                student.math = score;
            } else if (subject == "英语") {
                student.english = score;
            }
            student.total = student.chinese + student.math + student.english;
            student.average = student.total / 3;
            return;
        }
    }
    cout << "未找到该学生!" << endl;
}

// 按平均分排序显示
void sortByAverage(vector<StudentScore>& students) {
    sort(students.begin(), students.end(), [](const StudentScore& s1, const StudentScore& s2) {
        return s1.average < s2.average;
    });
    cout << "按平均分排序:" << endl;
    cout << setw(10) << "学号" << setw(10) << "姓名" << setw(10) << "平均分" << endl;
    for (const auto& student : students) {
        cout << setw(10) << student.id << setw(10) << student.name << setw(10) << student.average << endl;
    }
}

// 按总分排序
void sortByAverageScoreAscend() {
    for (int i = 0; i < studentNum; i++) {
        for (int j = i + 1; j < studentNum; j++) {
            if (averageScore[i] > averageScore[j]) {
                swap(averageScore[i], averageScore[j]);
                swap(totalScore[i], totalScore[j]);
                swap(name[i], name[j]);
                swap(sno[i], sno[j]);
                swap(chineseScore[i], chineseScore[j]);
                swap(mathScore[i], mathScore[j]);
                swap(englishScore[i], englishScore[j]);
            }
        }
    }
    cout << "按平均分排序后的成绩单如下:" << endl;
    displayTableHead();
    for (int i = 0; i < studentNum; i++) {
        cout << setw(6) << sno[i] << setw(10) << name[i] << setw(10) << chineseScore[i] << setw(10)
             << mathScore[i] << setw(10) << englishScore[i] << setw(10) << totalScore[i] << setw(15)
             << averageScore[i] << endl;
    }
}

// 按总分排序(升序)
void sortByTotalScoreAscend() {
    for (int i = 0; i < studentNum; i++) {
        for (int j = i + 1; j < studentNum; j++) {
            if (totalScore[i] > totalScore[j]) {
                swap(averageScore[i], averageScore[j]);
                swap(totalScore[i], totalScore[j]);
                swap(name[i], name[j]);
                swap(sno[i], sno[j]);
                swap(chineseScore[i], chineseScore[j]);
                swap(mathScore[i], mathScore[j]);
                swap(englishScore[i], englishScore[j]);
            }
        }
    }
    cout << "按总分排序后的成绩单如下:" << endl;
    displayTableHead();
    for (int i = 0; i < studentNum; i++) {
        cout << setw(6) << sno[i] << setw(10) << name[i] << setw(10) << chineseScore[i] << setw(10)
             << mathScore[i] << setw(10) << englishScore[i] << setw(10) << totalScore[i] << setw(15)
             << averageScore[i] << endl;
    }
}

提供参考实例:https://huaweicloud.csdn.net/63a5668db878a545459464ba.html?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-7-125904800-blog-122112598.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-7-125904800-blog-122112598.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=11
【实例讲解详细,思路清晰】

该回答应用ChatGPT
1.显示所有学生信息(学号,姓名):SELECT student_id, student_name FROM student_table;
2.查询个人成绩(语数外):SELECT language, math, foreign FROM score_table WHERE student_id = ?;
3.修改成绩(学号,课程):UPDATE score_table SET language = ?, math = ?, foreign = ? WHERE student_id = ?;
4.按平均分排序显示(升序):SELECT student_id, student_name, AVG(language + math + foreign) AS avg_score FROM student_table JOIN score_table ON student_table.student_id = score_table.student_id GROUP BY student_id ORDER BY avg_score ASC;
5.按总分排序(升序):SELECT student_id, student_name, SUM(language + math + foreign) AS total_score FROM student_table JOIN score_table ON student_table.student_id = score_table.student_id GROUP BY student_id ORDER BY total_score ASC;


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

using namespace std;

// 学生类
class Student {
public:
    Student(string id, string name, int chinese, int math, int english)
        : m_id(id), m_name(name), m_chinese(chinese), m_math(math), m_english(english) {}

    // 获取学号
    string GetId() const {
        return m_id;
    }

    // 获取姓名
    string GetName() const {
        return m_name;
    }

    // 获取语文成绩
    int GetChinese() const {
        return m_chinese;
    }

    // 获取数学成绩
    int GetMath() const {
        return m_math;
    }

    // 获取英语成绩
    int GetEnglish() const {
        return m_english;
    }

    // 获取平均分
    double GetAvgScore() const {
        return (m_chinese + m_math + m_english) / 3.0;
    }

    // 获取总分
    int GetTotalScore() const {
        return m_chinese + m_math + m_english;
    }

private:
    string m_id;  // 学号
    string m_name;  // 姓名
    int m_chinese;  // 语文成绩
    int m_math;  // 数学成绩
    int m_english;  // 英语成绩
};

// 成绩管理系统类
class ScoreSystem {
public:
    // 添加学生信息
    void AddStudent(string id, string name, int chinese, int math, int english) {
        m_students.emplace_back(id, name, chinese, math, english);
    }

    // 显示所有学生信息
    void ShowAllStudents() const {
        for (const auto& s : m_students) {
            cout << "学号:" << s.GetId()
                << ",姓名:" << s.GetName() << endl;
        }
    }

    // 查询个人成绩
    void QueryScore(string id) const {
        for (const auto& s : m_students) {
            if (s.GetId() == id) {
                cout << "学号:" << s.GetId()
                    << ",姓名:" << s.GetName()
                    << ",语文成绩:" << s.GetChinese()
                    << ",数学成绩:" << s.GetMath()
                    << ",英语成绩:" << s.GetEnglish() << endl;
                return;
            }
        }
        cout << "未找到学号为 " << id << " 的学生" << endl;
    }

    // 修改成绩
    void ModifyScore(string id, string course, int score) {
        for (auto& s : m_students) {
            if (s.GetId() == id) {
                if (course == "语文") {
                    s.m_chinese = score;
                }
                else if (course == "数学") {
                    s.m_math = score;
                }
                else if (course == "英语") {
                    s.m_english = score;
                }
                else {
                    cout << "输入的科目名称不正确" << endl;
                    return;
                }
                cout << "学号:" << s.GetId()
                    << ",姓名:" << s.GetName
                << "," << course << "成绩修改为:" << score << endl;
            return;
        }
    }
    cout << "未找到学号为 " << id << " 的学生" << endl;
}

// 按平均分排序并显示
void SortByAvgScore() {
    sort(m_students.begin(), m_students.end(),
        [](const Student& a, const Student& b) { return a.GetAvgScore() < b.GetAvgScore(); });
    cout << "按平均分排序后的学生信息:" << endl;
    for (const auto& s : m_students) {
        cout << "学号:" << s.GetId()
            << ",姓名:" << s.GetName()
            << ",平均分:" << s.GetAvgScore() << endl;
    }
}

// 按总分排序并显示
void SortByTotalScore() {
    sort(m_students.begin(), m_students.end(),
        [](const Student& a, const Student& b) { return a.GetTotalScore() < b.GetTotalScore(); });
    cout << "按总分排序后的学生信息:" << endl;
    for (const auto& s : m_students) {
        cout << "学号:" << s.GetId()
            << ",姓名:" << s.GetName()
            << ",总分:" << s.GetTotalScore() << endl;
    }
}
private:
vector<Student> m_students; // 学生信息容器
};

int main() {
ScoreSystem score_system;
score_system.AddStudent("001", "张三", 90, 85, 95);
score_system.AddStudent("002", "李四", 75, 80, 85);
score_system.AddStudent("003", "王五", 85, 70, 90);
// 显示所有学生信息
cout << "所有学生信息:" << endl;
score_system.ShowAllStudents();

// 查询个人成绩
cout << endl << "查询个人成绩:" << endl;
score_system.QueryScore("001");

// 修改成绩
cout << endl << "修改成绩:" << endl;
score_system.ModifyScore("002", "数学", 90);
score_system.QueryScore("002");

// 按平均分排序并显示
cout << endl << "按平均分排序并显示:" << endl;
score_system.SortByAvgScore();

// 按总分排序并显示
cout << endl << "按总分排序并显示:" << endl;
score_system.SortByTotalScore();

return 0;
}