设计并实现一个学生管理程序,即定义一个包含学生信息(学号,姓名,成绩)的的顺序表,可以不考虑重名的情况,系统包含以下功能: 1.根据指定学生个数,逐个输入学生信息; 2.逐个显示学生表中所有学生的相关信息; 3.给定一个学生信息,插入到表中指定的位置; 3.删除指定位置的学生记录; 4.利用直接插入排序或者折半插入排序按照姓名进行排序; 5.利用快速排序按照学号进行排序; 6.根据姓名进行折半查找,成功返回此学生的学号和成绩;
时间: 2024-03-10 19:47:13 浏览: 177
1_lower7y7_定义一个包含学生信息(学号_成绩)的顺序表和链表(二选一)_姓名_使其具有如下功能_
5星 · 资源好评率100%
好的,我可以帮你设计并实现这个学生管理程序。这个程序可以使用C++语言实现,具体实现步骤如下:
1. 定义一个学生结构体,包含学号、姓名和成绩三个字段。
```c++
struct Student {
int id; // 学号
string name; // 姓名
float score; // 成绩
};
```
2. 定义一个动态数组,用于存储学生信息,可以使用 `vector` 容器实现。
```c++
vector<Student> students;
```
3. 实现一个函数,用于逐个输入学生信息。该函数需要先输入学生数量,然后逐个输入每个学生的信息,并将其添加到学生数组中。
```c++
void addStudents() {
int num;
cout << "请输入学生数量:";
cin >> num;
for (int i = 0; i < num; i++) {
Student stu;
cout << "请输入第" << i + 1 << "个学生的信息" << endl;
cout << "学号:";
cin >> stu.id;
cout << "姓名:";
cin >> stu.name;
cout << "成绩:";
cin >> stu.score;
students.push_back(stu);
}
}
```
4. 实现一个函数,用于逐个显示学生表中所有学生的相关信息。该函数需要遍历学生数组,并逐个输出每个学生的信息。
```c++
void showStudents() {
for (int i = 0; i < students.size(); i++) {
cout << "学号:" << students[i].id << ",姓名:" << students[i].name << ",成绩:" << students[i].score << endl;
}
}
```
5. 实现一个函数,用于给定一个学生信息,插入到表中指定的位置。该函数需要输入要插入的位置和学生信息,并将其插入到指定位置。
```c++
void insertStudent() {
int pos;
Student stu;
cout << "请输入要插入的位置:";
cin >> pos;
cout << "请输入学生信息:" << endl;
cout << "学号:";
cin >> stu.id;
cout << "姓名:";
cin >> stu.name;
cout << "成绩:";
cin >> stu.score;
students.insert(students.begin() + pos - 1, stu);
}
```
6. 实现一个函数,用于删除指定位置的学生记录。该函数需要输入要删除的位置,并将该位置上的学生记录删除。
```c++
void deleteStudent() {
int pos;
cout << "请输入要删除的位置:";
cin >> pos;
students.erase(students.begin() + pos - 1);
}
```
7. 实现一个函数,使用直接插入排序或者折半插入排序按照姓名进行排序。这里我们使用直接插入排序,具体实现如下:
```c++
void sortByName() {
for (int i = 1; i < students.size(); i++) {
Student temp = students[i];
int j = i - 1;
while (j >= 0 && students[j].name > temp.name) {
students[j + 1] = students[j];
j--;
}
students[j + 1] = temp;
}
}
```
8. 实现一个函数,使用快速排序按照学号进行排序。具体实现如下:
```c++
void sortByNum(int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
int pivot = students[left].id;
while (i < j) {
while (i < j && students[j].id >= pivot) {
j--;
}
students[i].id = students[j].id;
students[i].name = students[j].name;
students[i].score = students[j].score;
while (i < j && students[i].id <= pivot) {
i++;
}
students[j].id = students[i].id;
students[j].name = students[i].name;
students[j].score = students[i].score;
}
students[i].id = pivot;
students[i].name = students[left].name;
students[i].score = students[left].score;
sortByNum(left, i - 1);
sortByNum(i + 1, right);
}
```
9. 实现一个函数,根据姓名进行折半查找。该函数需要输入要查找的姓名,并使用折半查找算法在学生数组中查找该姓名,如果找到则返回该学生的学号和成绩,否则返回未找到。
```c++
void searchByName() {
string name;
cout << "请输入要查找的姓名:";
cin >> name;
int left = 0, right = students.size() - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (students[mid].name == name) {
cout << "找到了该学生,学号为:" << students[mid].id << ",成绩为:" << students[mid].score << endl;
return;
} else if (students[mid].name < name) {
left = mid + 1;
} else {
right = mid - 1;
}
}
cout << "未找到该学生!" << endl;
}
```
现在,你已经可以实现一个简单的学生管理程序了。你可以将上述代码整合到一个统一的程序中,并在主函数中提供菜单,让用户选择不同的功能操作,从而完成学生信息的管理。
阅读全文