数据结构线性表应用实验报告:学生成绩管理系统
数据结构线性表应用实验报告:学生成绩管理系统
实验目的
通过实验,掌握线性表的基本操作,理解数据结构中线性表的应用。
实验内容
设计一个简单的学生成绩管理系统,能够对学生的成绩进行录入、查询、修改、删除等操作。使用线性表存储学生信息,包括学号、姓名、性别、出生年月、成绩等。
实验步骤
- 定义学生信息结构体
struct Student {
string id; // 学号
string name; // 姓名
string gender; // 性别
string dob; // 出生年月
double score; // 成绩
};
- 定义线性表结构体
const int MAXSIZE = 50; // 线性表最大长度
struct List {
Student data[MAXSIZE]; // 数据区
int length; // 线性表长度
};
- 初始化线性表
void InitList(List &L) {
L.length = 0;
}
- 插入数据
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;
}
- 删除数据
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;
}
- 查询数据
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; // 未找到该学生
}
- 修改数据
bool ModifyList(List &L, int i, Student x) {
if (i < 1 || i > L.length) {
return false; // 修改位置不合法
}
L.data[i - 1] = x; // 修改数据
return true;
}
- 主函数实现
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 著作权归作者所有。请勿转载和采集!