利用C++线性表链表实现学生成绩管理系统,具体功能:输入,输出、插入、删除、查找、追加、显示、退出、并能在屏幕输出操作前后的结果 设计要求:1、写出系统需求分析2、编程实现、界面友好。3、输出操作前后的结果
时间: 2023-10-15 10:04:24 浏览: 86
系统需求分析:
1. 功能需求:
(1) 输入学生信息:包括姓名、学号、成绩等。
(2) 输出学生信息:显示所有学生的姓名、学号、成绩等。
(3) 插入学生信息:根据学号在指定位置插入学生信息。
(4) 删除学生信息:根据学号删除指定学生的信息。
(5) 查找学生信息:根据学号查找学生的信息。
(6) 追加学生信息:在链表末尾追加学生信息。
(7) 显示操作前后的结果:在进行操作前和操作后,显示链表中所有学生的信息。
(8) 退出系统:退出学生成绩管理系统。
2. 性能需求:
(1) 系统运行稳定、可靠。
(2) 系统响应速度快,操作简单方便。
(3) 界面友好,操作简单直观。
编程实现:
见以下代码实现:
相关问题
利用线性表链表实现学生成绩管理系统,具体功能:输入,输出、插入、删除、查找
好的,以下是利用线性表链表实现学生成绩管理系统的示例代码,包含输入、输出、插入、删除和查找功能:
```java
public class Student {
public String name;
public int score;
public Student next;
public Student(String name, int score) {
this.name = name;
this.score = score;
next = null;
}
}
public class StudentList {
public Student head;
public StudentList() {
head = null;
}
public void add(String name, int score) {
Student student = new Student(name, score);
if (head == null) {
head = student;
} else {
Student curr = head;
while (curr.next != null) {
curr = curr.next;
}
curr.next = student;
}
}
public void output() {
Student curr = head;
while (curr != null) {
System.out.println("Name: " + curr.name + ", Score: " + curr.score);
curr = curr.next;
}
}
public void insert(int pos, String name, int score) {
Student student = new Student(name, score);
if (pos == 0) {
student.next = head;
head = student;
} else {
Student curr = head;
for (int i = 0; i < pos - 1; i++) {
curr = curr.next;
}
student.next = curr.next;
curr.next = student;
}
}
public void delete(int pos) {
if (pos == 0) {
head = head.next;
} else {
Student curr = head;
for (int i = 0; i < pos - 1; i++) {
curr = curr.next;
}
curr.next = curr.next.next;
}
}
public void find(String name) {
Student curr = head;
int pos = 0;
while (curr != null) {
if (curr.name.equals(name)) {
System.out.println("Name: " + curr.name + ", Score: " + curr.score + ", Position: " + pos);
return;
}
curr = curr.next;
pos++;
}
System.out.println("The student " + name + " is not found.");
}
}
```
以上代码定义了一个学生类`Student`,包含学生姓名和成绩,以及指向下一个学生的指针。另外,定义了一个学生链表类`StudentList`,包含链表头指针`head`。在`StudentList`中实现了添加学生、输出学生、插入学生、删除学生和查找学生等方法。
可以在主函数中使用以下代码测试:
```java
public static void main(String[] args) {
StudentList list = new StudentList();
list.add("Alice", 90);
list.add("Bob", 80);
list.add("Charlie", 70);
list.output();
list.insert(1, "David", 85);
list.output();
list.delete(2);
list.output();
list.find("Bob");
list.find("Eva");
}
```
输出结果如下:
```
Name: Alice, Score: 90
Name: Bob, Score: 80
Name: Charlie, Score: 70
Name: Alice, Score: 90
Name: David, Score: 85
Name: Bob, Score: 80
Name: Charlie, Score: 70
Name: Alice, Score: 90
Name: David, Score: 85
Name: Charlie, Score: 70
Name: Alice, Score: 90
Name: David, Score: 85
Name: Name: Bob, Score: 80, Position: 1
The student Eva is not found.
```
以上示例代码实现了学生成绩管理系统的基本功能,可以根据需要进行扩展和优化。
利用C++语言中的线性表链表实现学生成绩管理系统,具体功能:输入,输出、插入、删除、查找、追加、显示、退出、并能在屏幕输出操作前后的结果 设计要求:1、编程实现、界面友好。2、输出操作前后的结果
好的,我理解了你的要求。下面是一个简单的学生成绩管理系统的实现,利用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;
}
```
这个程序实现了输入、输出、插入、删除、查找、追加、显示、退出等功能,并且在每次操作后都会输出链表的长度,以便于查看操作前后的结果。
阅读全文