利用C++语言中的线性表链表实现学生成绩管理系统,具体功能:输入,输出、插入、删除、查找、追加、显示、退出、并能在屏幕输出操作前后的结果 设计要求:1、编程实现、界面友好。2、输出操作前后的结果
时间: 2023-07-04 07:22:57 浏览: 60
好的,我理解了你的要求。下面是一个简单的学生成绩管理系统的实现,利用C++语言中的线性表链表。
```
#include <iostream>
#include <string>
using namespace std;
// 学生信息结构体
struct Student {
string name;
int score;
};
// 链表节点结构体
struct ListNode {
Student data;
ListNode* next;
};
// 链表类
class LinkedList {
private:
ListNode* head; // 头指针
int length; // 链表长度
public:
// 构造函数
LinkedList() {
head = new ListNode;
head->next = NULL;
length = 0;
}
// 析构函数
~LinkedList() {
ListNode* p = head;
while (p) {
ListNode* q = p->next;
delete p;
p = q;
}
}
// 插入操作
bool insert(int pos, Student stu) {
if (pos < 1 || pos > length + 1) {
cout << "插入位置不合法!" << endl;
return false;
}
ListNode* p = head;
for (int i = 1; i < pos; i++) {
p = p->next;
}
ListNode* q = new ListNode;
q->data = stu;
q->next = p->next;
p->next = q;
length++;
return true;
}
// 删除操作
bool remove(int pos) {
if (pos < 1 || pos > length) {
cout << "删除位置不合法!" << endl;
return false;
}
ListNode* p = head;
for (int i = 1; i < pos; i++) {
p = p->next;
}
ListNode* q = p->next;
p->next = q->next;
delete q;
length--;
return true;
}
// 查找操作
int search(string name) {
ListNode* p = head->next;
int pos = 1;
while (p) {
if (p->data.name == name) {
return pos;
}
p = p->next;
pos++;
}
return 0;
}
// 追加操作
void append(Student stu) {
ListNode* p = head;
while (p->next) {
p = p->next;
}
ListNode* q = new ListNode;
q->data = stu;
q->next = NULL;
p->next = q;
length++;
}
// 显示操作
void display() {
cout << "学生信息如下:" << endl;
ListNode* p = head->next;
int pos = 1;
while (p) {
cout << "第" << pos << "个学生:" << endl;
cout << "姓名:" << p->data.name << " ";
cout << "成绩:" << p->data.score << endl;
p = p->next;
pos++;
}
}
// 获取链表长度
int getLength() {
return length;
}
};
// 主函数
int main() {
LinkedList list;
int choice = 0;
while (true) {
cout << "请选择操作:" << endl;
cout << "1. 输入学生信息" << endl;
cout << "2. 删除学生信息" << endl;
cout << "3. 查找学生信息" << endl;
cout << "4. 追加学生信息" << endl;
cout << "5. 显示学生信息" << endl;
cout << "6. 退出程序" << endl;
cin >> choice;
switch (choice) {
case 1: {
cout << "请输入学生姓名和成绩:" << endl;
Student stu;
cin >> stu.name >> stu.score;
list.insert(list.getLength() + 1, stu);
cout << "插入成功!" << endl;
break;
}
case 2: {
cout << "请输入要删除的学生姓名:" << endl;
string name;
cin >> name;
int pos = list.search(name);
if (pos == 0) {
cout << "未找到该学生!" << endl;
}
else {
list.remove(pos);
cout << "删除成功!" << endl;
}
break;
}
case 3: {
cout << "请输入要查找的学生姓名:" << endl;
string name;
cin >> name;
int pos = list.search(name);
if (pos == 0) {
cout << "未找到该学生!" << endl;
}
else {
cout << "该学生在链表中的位置为:" << pos << endl;
}
break;
}
case 4: {
cout << "请输入学生姓名和成绩:" << endl;
Student stu;
cin >> stu.name >> stu.score;
list.append(stu);
cout << "追加成功!" << endl;
break;
}
case 5: {
list.display();
break;
}
case 6: {
cout << "程序已退出!" << endl;
exit(0);
}
default: {
cout << "输入有误,请重新选择操作!" << endl;
break;
}
}
cout << "操作后链表长度为:" << list.getLength() << endl;
cout << endl;
}
return 0;
}
```
这个程序实现了输入、输出、插入、删除、查找、追加、显示、退出等功能,并且在每次操作后都会输出链表的长度,以便于查看操作前后的结果。