以下是一个示例的C++类及相关方法,用于维护学生成绩表:

#include <iostream>
#include <cstring>
using namespace std;

class Student {
private:
    long num;
    char name[10];
    float score;

public:
    void input() {
        cout << "请输入学号:";
        cin >> num;
        cout << "请输入姓名:";
        cin >> name;
        cout << "请输入分数:";
        cin >> score;
    }

    void display() {
        cout << "学号:" << num << endl;
        cout << "姓名:" << name << endl;
        cout << "分数:" << score << endl;
    }

    long getNum() {
        return num;
    }

    float getScore() {
        return score;
    }

    void setNum(long n) {
        num = n;
    }

    void setScore(float s) {
        score = s;
    }
};

class ScoreTable {
private:
    Student *students;
    int size;

public:
    ScoreTable(int n) {
        size = n;
        students = new Student[size];
    }

    ~ScoreTable() {
        delete[] students;
    }

    void inputTable() {
        for (int i = 0; i < size; i++) {
            students[i].input();
        }
    }

    void displayTable() {
        for (int i = 0; i < size; i++) {
            students[i].display();
        }
    }

    void deleteStudent(long num) {
        int index = -1;
        for (int i = 0; i < size; i++) {
            if (students[i].getNum() == num) {
                index = i;
                break;
            }
        }
        if (index != -1) {
            for (int i = index; i < size - 1; i++) {
                students[i] = students[i + 1];
            }
            size--;
            cout << "删除成功!" << endl;
        } else {
            cout << "未找到该学号的学生!" << endl;
        }
    }

    void insertStudent(Student student) {
        float newScore = student.getScore();
        int index = -1;
        for (int i = 0; i < size; i++) {
            if (students[i].getScore() > newScore) {
                index = i;
                break;
            }
        }
        if (index != -1) {
            for (int i = size; i > index; i--) {
                students[i] = students[i - 1];
            }
            students[index] = student;
            size++;
            cout << "插入成功!" << endl;
        } else {
            students[size] = student;
            size++;
            cout << "插入成功!" << endl;
        }
    }

    ScoreTable mergeTable(ScoreTable table) {
        ScoreTable mergedTable(size + table.size);
        int i = 0, j = 0, k = 0;
        while (i < size && j < table.size) {
            if (students[i].getScore() < table.students[j].getScore()) {
                mergedTable.students[k] = students[i];
                i++;
            } else {
                mergedTable.students[k] = table.students[j];
                j++;
            }
            k++;
        }
        while (i < size) {
            mergedTable.students[k] = students[i];
            i++;
            k++;
        }
        while (j < table.size) {
            mergedTable.students[k] = table.students[j];
            j++;
            k++;
        }
        mergedTable.size = size + table.size;
        return mergedTable;
    }
};

int main() {
    int n;
    cout << "请输入学生数量:";
    cin >> n;
    ScoreTable table(n);
    cout << "请依次输入学生信息:" << endl;
    table.inputTable();
    cout << "学生信息如下:" << endl;
    table.displayTable();
    
    long deleteNum;
    cout << "请输入需要删除的学号:";
    cin >> deleteNum;
    table.deleteStudent(deleteNum);
    cout << "删除后的学生信息如下:" << endl;
    table.displayTable();
    
    Student newStudent;
    cout << "请输入新学生信息:" << endl;
    newStudent.input();
    table.insertStudent(newStudent);
    cout << "插入后的学生信息如下:" << endl;
    table.displayTable();
    
    int m;
    cout << "请输入第二张学生成绩表的学生数量:";
    cin >> m;
    ScoreTable table2(m);
    cout << "请依次输入第二张学生成绩表的学生信息:" << endl;
    table2.inputTable();
    ScoreTable mergedTable = table.mergeTable(table2);
    cout << "合并后的学生信息如下:" << endl;
    mergedTable.displayTable();
    
    return 0;
}

输入及输出的内容示例:

请输入学生数量:3
请依次输入学生信息:
请输入学号:1001
请输入姓名:Alice
请输入分数:85
请输入学号:1002
请输入姓名:Bob
请输入分数:90
请输入学号:1003
请输入姓名:Charlie
请输入分数:80
学生信息如下:
学号:1001
姓名:Alice
分数:85
学号:1002
姓名:Bob
分数:90
学号:1003
姓名:Charlie
分数:80
请输入需要删除的学号:1002
删除成功!
删除后的学生信息如下:
学号:1001
姓名:Alice
分数:85
学号:1003
姓名:Charlie
分数:80
请输入新学生信息:
请输入学号:1004
请输入姓名:David
请输入分数:75
插入成功!
插入后的学生信息如下:
学号:1001
姓名:Alice
分数:85
学号:1003
姓名:Charlie
分数:80
学号:1004
姓名:David
分数:75
请输入第二张学生成绩表的学生数量:2
请依次输入第二张学生成绩表的学生信息:
请输入学号:1005
请输入姓名:Eve
请输入分数:95
请输入学号:1006
请输入姓名:Frank
请输入分数:70
合并后的学生信息如下:
学号:1006
姓名:Frank
分数:70
学号:1004
姓名:David
分数:75
学号:1003
姓名:Charlie
分数:80
学号:1001
姓名:Alice
分数:85
学号:1002
姓名:Bob
分数:90
学号:1005
姓名:Eve
分数:95
1 设计C++类及相关方法用于维护学生成绩表2 写出建立线性表并向线性表中输入数据的函数。3 写出删除指定学号的学生信息及按学生的成绩顺序插入新的学生信息的函数。假定学生的成绩已有序排列 基础信息:学号姓名分数:long num; char name10; float score;4 写出输入及输出的内容。5 合并两张有序表扩展内容

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

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