学生选课管理系统使用链表
时间: 2024-01-04 10:17:45 浏览: 25
学生选课管理系统使用链表可以方便地实现对学生和课程信息的存储和管理。下面是一个使用C语言实现的简单学生选课管理系统的例子,其中使用了链表来存储学生和课程信息:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct student {
int id; // 学号
char name[20]; // 姓名
struct student *next; // 指向下一个学生的指针
} Student;
// 定义课程结构体
typedef struct course {
int id; // 课程编号
char name[20]; // 课程名称
int capacity; // 课程容量
int count; // 已选人数
struct student *students; // 指向选课学生链表的指针
struct course *next; // 指向下一个课程的指针
} Course;
// 添加学生
void add_student(Student **head, int id, char *name) {
Student *new_student = (Student *)malloc(sizeof(Student));
new_student->id = id;
strcpy(new_student->name, name);
new_student->next = NULL;
if (*head == NULL) {
*head = new_student;
} else {
Student *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_student;
}
}
// 添加课程
void add_course(Course **head, int id, char *name, int capacity) {
Course *new_course = (Course *)malloc(sizeof(Course));
new_course->id = id;
strcpy(new_course->name, name);
new_course->capacity = capacity;
new_course->count = 0;
new_course->students = NULL;
new_course->next = NULL;
if (*head == NULL) {
*head = new_course;
} else {
Course *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_course;
}
}
// 选课
void select_course(Course *course, Student *student) {
if (course->count >= course->capacity) {
printf("选课失败,课程已满\n");
return;
}
Student *new_student = (Student *)malloc(sizeof(Student));
new_student->id = student->id;
strcpy(new_student->name, student->name);
new_student->next = NULL;
if (course->students == NULL) {
course->students = new_student;
} else {
Student *p = course->students;
while (p->next != NULL) {
p = p->next;
}
p->next = new_student;
}
course->count++;
printf("选课成功\n");
}
// 打印学生信息
void print_students(Student *head) {
printf("学生信息:\n");
printf("学号\t姓名\n");
while (head != NULL) {
printf("%d\t%s\n", head->id, head->name);
head = head->next;
}
}
// 打印课程信息
void print_courses(Course *head) {
printf("课程信息:\n");
printf("编号\t名称\t容量\t已选人数\n");
while (head != NULL) {
printf("%d\t%s\t%d\t%d\n", head->id, head->name, head->capacity, head->count);
head = head->next;
}
}
int main() {
Student *students = NULL;
Course *courses = NULL;
// 添加学生
add_student(&students, 1, "张三");
add_student(&students, 2, "李四");
add_student(&students, 3, "王五");
// 添加课程
add_course(&courses, 1, "语文", 2);
add_course(&courses, 2, "数学", 3);
add_course(&courses, 3, "英语", 1);
// 选课
select_course(courses, students);
select_course(courses, students->next);
select_course(courses->next, students->next);
select_course(courses->next, students->next->next);
// 打印学生和课程信息
print_students(students);
print_courses(courses);
return 0;
}
```