数据结构用c++写学生信息管理系统要求是选取一个合适的数据结构存储数据,设计一学生成绩表,能对数据进行插入、删余。 统计总分、按总分从大到小排序、查找等; 分析排序排序方法和查找方法的效率; 设计界面具有选择功能。
时间: 2024-03-09 08:50:33 浏览: 44
好的,下面是一个使用C++实现的学生信息管理系统,其中采用了链表数据结构存储学生信息。
```c++
#include <iostream>
#include <string>
using namespace std;
// 学生信息结构体
struct student {
string name; // 姓名
int id; // 学号
int chinese; // 语文成绩
int math; // 数学成绩
int english; // 英语成绩
int total; // 总分
struct student* next; // 指向下一个学生的指针
};
// 初始化链表头指针
struct student* head = NULL;
// 插入学生信息
void insert() {
struct student* p, * q, * s;
s = new student;
cout << "请输入学生的姓名、学号、语文成绩、数学成绩和英语成绩:" << endl;
cin >> s->name >> s->id >> s->chinese >> s->math >> s->english;
s->total = s->chinese + s->math + s->english;
s->next = NULL;
if (head == NULL) {
head = s;
} else {
p = head;
while (p != NULL && p->id < s->id) {
q = p;
p = p->next;
}
if (p == head) {
s->next = head;
head = s;
} else {
s->next = p;
q->next = s;
}
}
cout << "学生信息插入成功!" << endl;
}
// 删除学生信息
void del() {
int id;
cout << "请输入要删除的学生的学号:" << endl;
cin >> id;
struct student* p, * q;
p = head;
while (p != NULL && p->id != id) {
q = p;
p = p->next;
}
if (p == NULL) {
cout << "不存在该学生的信息!" << endl;
return;
}
if (p == head) {
head = p->next;
} else {
q->next = p->next;
}
delete p;
cout << "学生信息删除成功!" << endl;
}
// 统计总分
void total() {
struct student* p;
int sum = 0;
p = head;
while (p != NULL) {
sum += p->total;
p = p->next;
}
cout << "学生总分为:" << sum << endl;
}
// 按总分从大到小排序
void sort() {
struct student* p, * q, * r;
r = NULL;
while (r != head->next) {
p = head;
q = p->next;
while (q != r) {
if (p->total < q->total) {
int temp = p->id;
p->id = q->id;
q->id = temp;
string temp1 = p->name;
p->name = q->name;
q->name = temp1;
int temp2 = p->chinese;
p->chinese = q->chinese;
q->chinese = temp2;
int temp3 = p->math;
p->math = q->math;
q->math = temp3;
int temp4 = p->english;
p->english = q->english;
q->english = temp4;
int temp5 = p->total;
p->total = q->total;
q->total = temp5;
}
p = q;
q = q->next;
}
r = p;
}
cout << "按总分从大到小排序成功!" << endl;
}
// 查找学生信息
void search() {
int id;
cout << "请输入要查找的学生的学号:" << endl;
cin >> id;
struct student* p;
p = head;
while (p != NULL && p->id != id) {
p = p->next;
}
if (p == NULL) {
cout << "不存在该学生的信息!" << endl;
return;
}
cout << "姓名:" << p->name << endl;
cout << "学号:" << p->id << endl;
cout << "语文成绩:" << p->chinese << endl;
cout << "数学成绩:" << p->math << endl;
cout << "英语成绩:" << p->english << endl;
cout << "总分:" << p->total << endl;
}
// 显示学生信息
void display() {
struct student* p;
p = head;
if (p == NULL) {
cout << "学生信息为空!" << endl;
return;
}
cout << "姓名\t学号\t语文\t数学\t英语\t总分" << endl;
while (p != NULL) {
cout << p->name << "\t" << p->id << "\t" << p->chinese << "\t" << p->math << "\t" << p->english << "\t" << p->total << endl;
p = p->next;
}
}
// 主函数
int main() {
int choice;
while (true) {
cout << "请输入要进行的操作:" << endl;
cout << "1. 插入学生信息" << endl;
cout << "2. 删除学生信息" << endl;
cout << "3. 统计总分" << endl;
cout << "4. 按总分从大到小排序" << endl;
cout << "5. 查找学生信息" << endl;
cout << "6. 显示学生信息" << endl;
cout << "7. 退出程序" << endl;
cin >> choice;
switch (choice) {
case 1:
insert();
break;
case 2:
del();
break;
case 3:
total();
break;
case 4:
sort();
break;
case 5:
search();
break;
case 6:
display();
break;
case 7:
return 0;
default:
cout << "输入错误,请重新输入!" << endl;
}
}
return 0;
}
```
在该学生信息管理系统中,使用了链表数据结构存储学生信息,并提供了插入、删除、统计总分、按总分从大到小排序、查找和显示学生信息等功能。其中,插入和删除操作的时间复杂度为$O(n)$,统计总分和查找操作的时间复杂度为$O(n)$,按总分从大到小排序操作的时间复杂度为$O(n^2)$。
阅读全文