c语言编写数据结构题,详细注明,逻辑清晰。利用顺序表完成一个班级的一个学期的课程的管理,仅需要增加、删除、 修改成绩
时间: 2024-10-17 19:08:37 浏览: 31
学生信息管理系统的顺序表实现
在C语言中,我们可以利用顺序表(数组或动态数组)来实现一个班级一个学期课程的管理。这里是一个简单的实现,包括了添加、删除和修改成绩的功能。
首先,我们需要定义一个结构体表示一个课程,包含课程名、学生的ID和对应的分数:
```c
typedef struct {
char course_name[50]; // 课程名称
int student_id; // 学生ID
float score; // 成绩
} Course;
```
接下来,我们创建一个顺序表结构,存储学生的课程信息,并维护当前的课程数量:
```c
typedef struct {
Course* courses; // 课程数组
int size; // 当前课程数量
int capacity; // 数组容量
} ClassSemester;
```
实现添加课程(添加成绩)函数:
```c
void addCourse(ClassSemester* semester, const char* course_name, int student_id, float score) {
if (semester->size == semester->capacity) {
// 扩容
semester->capacity *= 2; // 或者其他合适的方式,如动态分配
semester->courses = realloc(semester->courses, semester->capacity * sizeof(Course));
}
semester->courses[semester->size].course_name = course_name;
semester->courses[semester->size].student_id = student_id;
semester->courses[semester->size].score = score;
semester->size++;
}
```
实现删除课程(根据学生ID)函数:
```c
void deleteCourseById(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[semester->size - 1], sizeof(Course));
semester->size--;
// 缩小数组容量,减少内存浪费
if (semester->size < semester->capacity / 4) {
semester->capacity /= 2;
semester->courses = realloc(semester->courses, semester->capacity * sizeof(Course));
}
break;
}
}
}
```
实现修改成绩函数:
```c
void modifyScoreById(ClassSemester* semester, int student_id, const char* course_name, float new_score) {
CourseIndex index = findCourseIndexByName(semester, course_name);
if (index.index != -1) {
semester->courses[index.index].score = new_score;
} else {
printf("Course not found.\n");
}
}
// 内部辅助函数:查找课程名称对应的索引
CourseIndex findCourseIndexByName(ClassSemester* semester, const char* course_name) {
for (int i = 0; i < semester->size; i++) {
if (!strcmp(semester->courses[i].course_name, course_name)) {
return {course_name, i};
}
}
return {NULL, -1}; // 未找到对应课程
}
```
以上就是使用顺序表实现班级课程管理的基本逻辑。注意,这个实现并没有处理所有边界情况和异常,实际使用时需要增加相应的错误检查和处理代码。
阅读全文