C语言数据结构实现学生选课系统实验报告
C语言数据结构实现学生选课系统实验报告
一、实验目的
本次实验的目的是通过使用C语言的数据结构知识,设计并实现一个简单的学生选课系统。
二、实验内容
-
学生信息包括姓名、学号、班级、学院,使用结构体来存储学生信息。
-
课程信息包括课程名称、上课时间、上课地点,使用结构体来存储课程信息。
-
实现菜单功能,包括以下选项: (1) 添加学生信息 (2) 添加课程信息 (3) 查询学生信息 (4) 查询课程信息 (5) 选课 (6) 退课 (7) 退出系统
-
实现选课和退课功能,需要使用链表来存储学生选课和退课信息。
三、实验步骤
- 定义学生信息结构体和课程信息结构体。
typedef struct {
char name[20]; // 姓名
char id[20]; // 学号
char cls[20]; // 班级
char college[20]; // 学院
} student;
typedef struct {
char name[20]; // 课程名称
char time[20]; // 上课时间
char place[20]; // 上课地点
} course;
- 定义链表节点结构体和链表结构体。
typedef struct node {
student stu;
struct node *next;
} node;
typedef struct {
node *head;
node *tail;
int size;
} list;
- 实现菜单功能,根据用户输入的选项执行相应的操作。
while (1) {
printf("请选择操作:\n");
printf("1. 添加学生信息\n");
printf("2. 添加课程信息\n");
printf("3. 查询学生信息\n");
printf("4. 查询课程信息\n");
printf("5. 选课\n");
printf("6. 退课\n");
printf("7. 退出系统\n");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student(&stu_list);
break;
case 2:
add_course(&course_list);
break;
case 3:
query_student(&stu_list);
break;
case 4:
query_course(&course_list);
break;
case 5:
select_course(&stu_list, &course_list);
break;
case 6:
drop_course(&stu_list, &course_list);
break;
case 7:
printf("谢谢使用!\n");
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
- 实现添加学生信息功能,将学生信息添加到链表中。
void add_student(list *stu_list) {
student stu;
printf("请输入学生姓名:");
scanf("%s", stu.name);
printf("请输入学生学号:");
scanf("%s", stu.id);
printf("请输入学生班级:");
scanf("%s", stu.cls);
printf("请输入学生学院:");
scanf("%s", stu.college);
node *new_node = (node *) malloc(sizeof(node));
new_node->stu = stu;
new_node->next = NULL;
if (stu_list->head == NULL) {
stu_list->head = new_node;
stu_list->tail = new_node;
} else {
stu_list->tail->next = new_node;
stu_list->tail = new_node;
}
stu_list->size++;
printf("添加成功!\n");
}
- 实现添加课程信息功能,将课程信息添加到链表中。
void add_course(list *course_list) {
course course;
printf("请输入课程名称:");
scanf("%s", course.name);
printf("请输入上课时间:");
scanf("%s", course.time);
printf("请输入上课地点:");
scanf("%s", course.place);
node *new_node = (node *) malloc(sizeof(node));
new_node->course = course;
new_node->next = NULL;
if (course_list->head == NULL) {
course_list->head = new_node;
course_list->tail = new_node;
} else {
course_list->tail->next = new_node;
course_list->tail = new_node;
}
course_list->size++;
printf("添加成功!\n");
}
- 实现查询学生信息功能,根据学号查询学生信息。
void query_student(list *stu_list) {
char id[20];
printf("请输入学生学号:");
scanf("%s", id);
node *p = stu_list->head;
while (p != NULL) {
if (strcmp(p->stu.id, id) == 0) {
printf("姓名:%s\n", p->stu.name);
printf("学号:%s\n", p->stu.id);
printf("班级:%s\n", p->stu.cls);
printf("学院:%s\n", p->stu.college);
return;
}
p = p->next;
}
printf("未找到该学生!\n");
}
- 实现查询课程信息功能,根据课程名称查询课程信息。
void query_course(list *course_list) {
char name[20];
printf("请输入课程名称:");
scanf("%s", name);
node *p = course_list->head;
while (p != NULL) {
if (strcmp(p->course.name, name) == 0) {
printf("课程名称:%s\n", p->course.name);
printf("上课时间:%s\n", p->course.time);
printf("上课地点:%s\n", p->course.place);
return;
}
p = p->next;
}
printf("未找到该课程!\n");
}
- 实现选课功能,将学生选课信息添加到链表中。
void select_course(list *stu_list, list *course_list) {
char id[20];
char name[20];
printf("请输入学生学号:");
scanf("%s", id);
printf("请输入要选的课程名称:");
scanf("%s", name);
node *stu_p = stu_list->head;
while (stu_p != NULL) {
if (strcmp(stu_p->stu.id, id) == 0) {
node *course_p = course_list->head;
while (course_p != NULL) {
if (strcmp(course_p->course.name, name) == 0) {
node *new_node = (node *) malloc(sizeof(node));
new_node->course = course_p->course;
new_node->next = NULL;
if (stu_p->stu.head == NULL) {
stu_p->stu.head = new_node;
stu_p->stu.tail = new_node;
} else {
stu_p->stu.tail->next = new_node;
stu_p->stu.tail = new_node;
}
stu_p->stu.size++;
printf("选课成功!\n");
return;
}
course_p = course_p->next;
}
}
stu_p = stu_p->next;
}
printf("选课失败!\n");
}
- 实现退课功能,将学生退课信息从链表中删除。
void drop_course(list *stu_list, list *course_list) {
char id[20];
char name[20];
printf("请输入学生学号:");
scanf("%s", id);
printf("请输入要退的课程名称:");
scanf("%s", name);
node *stu_p = stu_list->head;
while (stu_p != NULL) {
if (strcmp(stu_p->stu.id, id) == 0) {
node *p = stu_p->stu.head;
node *prev = NULL;
while (p != NULL) {
if (strcmp(p->course.name, name) == 0) {
if (prev == NULL) {
stu_p->stu.head = p->next;
} else {
prev->next = p->next;
}
if (p->next == NULL) {
stu_p->stu.tail = prev;
}
stu_p->stu.size--;
printf("退课成功!\n");
return;
}
prev = p;
p = p->next;
}
}
stu_p = stu_p->next;
}
printf("退课失败!\n");
}
四、实验结果
经过实验,我们成功地实现了一个简单的学生选课系统,具有以下功能:
- 添加学生信息
- 添加课程信息
- 查询学生信息
- 查询课程信息
- 选课
- 退课
- 退出系统
五、实验总结
本次实验通过使用C语言的数据结构知识,设计并实现了一个简单的学生选课系统。在实现过程中,我们使用了结构体来存储学生信息和课程信息,使用链表来存储学生选课和退课信息,实现了菜单功能,并按照用户选择的选项执行相应的操作。
通过本次实验,我们对数据结构的应用有了更深入的理解,同时也掌握了C语言的基本语法和编程技巧。
原文地址: https://www.cveoy.top/t/topic/ockk 著作权归作者所有。请勿转载和采集!