(4) 插入新学生信息(插入学生的学号不能和已有学生学号重复); (5) 删除给定学号的学生信息; 6) 统计表中学生人数。
时间: 2024-10-07 14:01:36 浏览: 11
在上面的顺序表实现中,可以添加两个额外的功能来实现插入新学生信息、删除学生以及统计学生人数:
(4) 插入新学生信息(插入学生的学号不能和已有学生学号重复):
```c
// 功能:插入新学生信息
void insertStudent(StudentList* list, const Student* new_student) {
// 检查是否有空位
if (list->size >= MAX_SIZE) {
printf("Error: Student list is full. Cannot insert.\n");
return;
}
// 遍历列表,检查是否有相同的学号
for (int i = 0; i < list->size; ++i) {
if (list->data[i].sno == new_student->sno) {
printf("Error: Duplicate student number detected. Insertion skipped.\n");
return;
}
}
// 插入新学生
list->data[list->size] = *new_student;
list->size++;
}
```
这个函数会遍历已有的学生信息,如果发现新的学号已经存在,就提示错误并返回。
(5) 删除给定学号的学生信息:
```c
// 功能:删除给定学号的学生信息
void deleteStudent(StudentList* list, int sno) {
for (int i = 0; i < list->size; ++i) {
if (list->data[i].sno == sno) {
// 将最后一个学生移动到要删除的位置
memmove(&list->data[i], &list->data[i + 1], sizeof(Student) * (list->size - i - 1));
list->size--;
break;
}
}
}
```
这个函数会遍历整个列表,找到指定学号的学生,然后将后面的元素向前移动一位填补空缺,最后更新学生总数。
(6) 统计表中学生人数:
```c
// 功能:统计学生人数
int countStudents(const StudentList* list) {
return list->size;
}
```
这个简单的函数直接返回学生列表中的元素数量,即学生人数。
现在你可以在`main`函数中调用这些新增的方法来实现插入、删除和统计功能。例如,在查询之后,你可以询问用户是否想插入、删除或继续其他操作,然后根据他们的选择执行相应的操作。
阅读全文