添加和删除成绩的步骤精简改进一下
时间: 2024-10-17 21:04:33 浏览: 16
当然,为了简化添加和删除成绩的操作,我们可以优化一些细节。以下是优化后的添加和删除成绩操作:
**添加成绩:**
```c
// 使用结构体内的成员作为索引,直接找到对应位置
void addOrUpdateScore(ClassSemester* semester, int student_id, const char* course_name, float score) {
for (int i = 0; i < semester->size; i++) {
if (semester->courses[i].student_id == student_id && !strcmp(semester->courses[i].course_name, course_name)) {
// 更新已有成绩
semester->courses[i].score = score;
return;
}
}
// 如果找不到,则添加新课程
if (semester->size >= semester->capacity) {
// 扩容操作同上
...
}
semester->courses[semester->size].course_name = course_name;
semester->courses[semester->size].student_id = student_id;
semester->courses[semester->size].score = score;
semester->size++;
}
```
**删除成绩:**
```c
// 删除成绩时,除了查找指定学生ID外,还可以同时记录课程名,避免反复查找
CourseIndex deleteCourseByStudentAndCourse(ClassSemester* semester, int student_id, const char* course_name) {
for (int i = 0; i < semester->size; i++) {
if (semester->courses[i].student_id == student_id && !strcmp(semester->courses[i].course_name, course_name)) {
// 移除并更新索引
memmove(&semester->courses[i], &semester->courses[semester->size - 1], sizeof(Course));
semester->size--;
// 调整数组大小(如果必要)
...
return {course_name, i};
}
}
return {NULL, -1}; // 未找到对应课程
}
// 删除指定学生的所有成绩
void deleteAllScoresByStudent(ClassSemester* semester, int student_id) {
for (int i = 0; i < semester->size; i++) {
if (semester->courses[i].student_id == student_id) {
// 移动剩余课程到已删除的位置
memmove(&semester->courses[i], &semester->courses[i + 1], (semester->size - i - 1) * sizeof(Course));
semester->size--;
}
}
}
```
这样的改进减少了不必要的查找次数,提高了效率。但是,记得在处理扩容和缩容时依然要注意边界条件以及内存管理。
阅读全文