数据结构线性表应用实验报告:学生成绩管理系统

实验目的

通过实验,掌握线性表的基本操作,理解数据结构中线性表的应用。

实验内容

设计一个简单的学生成绩管理系统,能够对学生的成绩进行录入、查询、修改、删除等操作。使用线性表存储学生信息,包括学号、姓名、性别、出生年月、成绩等。

实验步骤

  1. 定义学生信息结构体
struct Student {
    string id;       // 学号
    string name;     // 姓名
    string gender;   // 性别
    string dob;      // 出生年月
    double score;    // 成绩
};
  1. 定义线性表结构体
const int MAXSIZE = 50;    // 线性表最大长度

struct List {
    Student data[MAXSIZE];   // 数据区
    int length;              // 线性表长度
};
  1. 初始化线性表
void InitList(List &L) {
    L.length = 0;
}
  1. 插入数据
bool InsertList(List &L, int i, Student x) {
    if (i < 1 || i > L.length + 1) {
        return false;   // 插入位置不合法
    }
    if (L.length >= MAXSIZE) {
        return false;   // 线性表已满,无法插入
    }
    for (int j = L.length; j >= i; j--) {
        L.data[j] = L.data[j - 1];   // 将第i个位置及之后的数据后移一位
    }
    L.data[i - 1] = x;   // 插入数据
    L.length++;          // 线性表长度加1
    return true;
}
  1. 删除数据
bool DeleteList(List &L, int i) {
    if (i < 1 || i > L.length) {
        return false;   // 删除位置不合法
    }
    for (int j = i; j < L.length; j++) {
        L.data[j - 1] = L.data[j];   // 将第i个位置之后的数据前移一位
    }
    L.length--;          // 线性表长度减1
    return true;
}
  1. 查询数据
int SearchList(List L, string id) {
    for (int i = 0; i < L.length; i++) {
        if (L.data[i].id == id) {
            return i + 1;   // 返回该学生在线性表中的位置
        }
    }
    return 0;   // 未找到该学生
}
  1. 修改数据
bool ModifyList(List &L, int i, Student x) {
    if (i < 1 || i > L.length) {
        return false;   // 修改位置不合法
    }
    L.data[i - 1] = x;   // 修改数据
    return true;
}
  1. 主函数实现
int main() {
    List L;
    InitList(L);
    int choice;
    while (true) {
        cout << "1. 插入数据" << endl;
        cout << "2. 删除数据" << endl;
        cout << "3. 查询数据" << endl;
        cout << "4. 修改数据" << endl;
        cout << "5. 退出程序" << endl;
        cout << "请输入操作编号:";
        cin >> choice;
        if (choice == 1) {
            Student x;
            cout << "请输入学号:";
            cin >> x.id;
            cout << "请输入姓名:";
            cin >> x.name;
            cout << "请输入性别:";
            cin >> x.gender;
            cout << "请输入出生年月(格式为yyyy-mm-dd):";
            cin >> x.dob;
            cout << "请输入成绩:";
            cin >> x.score;
            if (InsertList(L, L.length + 1, x)) {
                cout << "插入成功!" << endl;
            } else {
                cout << "插入失败!" << endl;
            }
        } else if (choice == 2) {
            string id;
            cout << "请输入要删除的学生学号:";
            cin >> id;
            int i = SearchList(L, id);
            if (i == 0) {
                cout << "未找到该学生!" << endl;
            } else {
                if (DeleteList(L, i)) {
                    cout << "删除成功!" << endl;
                } else {
                    cout << "删除失败!" << endl;
                }
            }
        } else if (choice == 3) {
            string id;
            cout << "请输入要查询的学生学号:";
            cin >> id;
            int i = SearchList(L, id);
            if (i == 0) {
                cout << "未找到该学生!" << endl;
            } else {
                cout << "该学生信息如下:" << endl;
                cout << "学号:" << L.data[i - 1].id << endl;
                cout << "姓名:" << L.data[i - 1].name << endl;
                cout << "性别:" << L.data[i - 1].gender << endl;
                cout << "出生年月:" << L.data[i - 1].dob << endl;
                cout << "成绩:" << L.data[i - 1].score << endl;
            }
        } else if (choice == 4) {
            string id;
            cout << "请输入要修改的学生学号:";
            cin >> id;
            int i = SearchList(L, id);
            if (i == 0) {
                cout << "未找到该学生!" << endl;
            } else {
                Student x;
                cout << "请输入要修改的学生信息:" << endl;
                cout << "姓名:";
                cin >> x.name;
                cout << "性别:";
                cin >> x.gender;
                cout << "出生年月(格式为yyyy-mm-dd):";
                cin >> x.dob;
                cout << "成绩:";
                cin >> x.score;
                if (ModifyList(L, i, x)) {
                    cout << "修改成功!" << endl;
                } else {
                    cout << "修改失败!" << endl;
                }
            }
        } else if (choice == 5) {
            break;
        }
    }
    return 0;
}

实验结果

运行程序后,可以通过菜单操作进行学生成绩的录入、查询、修改、删除等操作,程序运行结果如下:

1. 插入数据
2. 删除数据
3. 查询数据
4. 修改数据
5. 退出程序
请输入操作编号:1
请输入学号:2021001
请输入姓名:张三
请输入性别:男
请输入出生年月(格式为yyyy-mm-dd):2001-01-01
请输入成绩:90
插入成功!
1. 插入数据
2. 删除数据
3. 查询数据
4. 修改数据
5. 退出程序
请输入操作编号:1
请输入学号:2021002
请输入姓名:李四
请输入性别:女
请输入出生年月(格式为yyyy-mm-dd):2002-02-02
请输入成绩:80
插入成功!
1. 插入数据
2. 删除数据
3. 查询数据
4. 修改数据
5. 退出程序
请输入操作编号:3
请输入要查询的学生学号:2021001
该学生信息如下:
学号:2021001
姓名:张三
性别:男
出生年月:2001-01-01
成绩:90
1. 插入数据
2. 删除数据
3. 查询数据
4. 修改数据
5. 退出程序
请输入操作编号:4
请输入要修改的学生学号:2021001
请输入要修改的学生信息:
姓名:王五
性别:男
出生年月(格式为yyyy-mm-dd):2001-05-05
成绩:85
修改成功!
1. 插入数据
2. 删除数据
3. 查询数据
4. 修改数据
5. 退出程序
请输入操作编号:2
请输入要删除的学生学号:2021002
删除成功!
1. 插入数据
2. 删除数据
3. 查询数据
4. 修改数据
5. 退出程序
请输入操作编号:5

总结

本次实验通过设计学生成绩管理系统,成功地将线性表应用于实际问题中。通过实验,加深了对线性表基本操作的理解,并掌握了使用线性表解决实际问题的方法。


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

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