实验目的:

通过本次实验,了解数据结构的基本操作,熟悉C语言的语法和指针操作,设计并实现一个学生选课系统,包括学生信息和课程信息的管理。

实验要求:

  1. 学生信息包括姓名、学号、班级、学院,课程信息包括课程名称、课程容量、上课时间、上课地点。

  2. 学生可以选择课程,并且每门课程的容量有限,当课程已满员时,不能再选该课程。

  3. 实现菜单功能,包括添加学生、添加课程、查询学生、查询课程、选课、退课、退出程序等功能。

实验步骤:

  1. 定义学生结构体,包括姓名、学号、班级、学院等信息。

typedef struct student { char name[30]; int id; char clazz[30]; char college[30]; } Student;

  1. 定义课程结构体,包括课程名称、课程容量、上课时间、上课地点等信息。

typedef struct course { char name[30]; int capacity; char time[30]; char place[30]; } Course;

  1. 定义链表节点结构体,包括学生结构体和课程结构体的指针。

typedef struct node { Student *stu; Course *cou; struct node *next; } Node;

  1. 实现添加学生功能,通过输入学生信息,创建一个学生结构体并插入到链表中。

void addStudent(Node **head) { Student *stu = (Student *)malloc(sizeof(Student)); printf("请输入学生姓名:"); scanf("%s", stu->name); printf("请输入学生学号:"); scanf("%d", &stu->id); printf("请输入学生班级:"); scanf("%s", stu->clazz); printf("请输入学生学院:"); scanf("%s", stu->college); Node *node = (Node *)malloc(sizeof(Node)); node->stu = stu; node->cou = NULL; node->next = *head; *head = node; printf("添加成功!\n"); }

  1. 实现添加课程功能,通过输入课程信息,创建一个课程结构体并插入到链表中。

void addCourse(Node **head) { Course *cou = (Course *)malloc(sizeof(Course)); printf("请输入课程名称:"); scanf("%s", cou->name); printf("请输入课程容量:"); scanf("%d", &cou->capacity); printf("请输入课程上课时间:"); scanf("%s", cou->time); printf("请输入课程上课地点:"); scanf("%s", cou->place); Node *node = (Node *)malloc(sizeof(Node)); node->stu = NULL; node->cou = cou; node->next = *head; *head = node; printf("添加成功!\n"); }

  1. 实现查询学生功能,通过输入学号,查找学生结构体并打印出学生信息。

void searchStudent(Node *head) { int id; printf("请输入学生学号:"); scanf("%d", &id); Node *p = head; while (p != NULL) { if (p->stu != NULL && p->stu->id == id) { printf("姓名:%s\n", p->stu->name); printf("学号:%d\n", p->stu->id); printf("班级:%s\n", p->stu->clazz); printf("学院:%s\n", p->stu->college); return; } p = p->next; } printf("未找到该学生!\n"); }

  1. 实现查询课程功能,通过输入课程名称,查找课程结构体并打印出课程信息。

void searchCourse(Node *head) { char name[30]; printf("请输入课程名称:"); scanf("%s", name); Node *p = head; while (p != NULL) { if (p->cou != NULL && strcmp(p->cou->name, name) == 0) { printf("课程名称:%s\n", p->cou->name); printf("课程容量:%d\n", p->cou->capacity); printf("上课时间:%s\n", p->cou->time); printf("上课地点:%s\n", p->cou->place); return; } p = p->next; } printf("未找到该课程!\n"); }

  1. 实现选课功能,通过输入学号和课程名称,找到对应的学生结构体和课程结构体,如果课程容量未满,则将课程结构体插入到学生结构体中的课程链表中。

void selectCourse(Node *head) { int id; char name[30]; printf("请输入学生学号:"); scanf("%d", &id); printf("请输入课程名称:"); scanf("%s", name); Node *p = head; while (p != NULL) { if (p->stu != NULL && p->stu->id == id) { Node *q = head; while (q != NULL) { if (q->cou != NULL && strcmp(q->cou->name, name) == 0) { if (q->cou->capacity > 0) { q->cou->capacity--; Node *node = (Node *)malloc(sizeof(Node)); node->stu = NULL; node->cou = q->cou; node->next = p->stu->couList; p->stu->couList = node; printf("选课成功!\n"); return; } else { printf("该课程已满员!\n"); return; } } q = q->next; } printf("未找到该课程!\n"); return; } p = p->next; } printf("未找到该学生!\n"); }

  1. 实现退课功能,通过输入学号和课程名称,找到对应的学生结构体和课程结构体,将课程结构体从学生结构体中的课程链表中删除。

void dropCourse(Node *head) { int id; char name[30]; printf("请输入学生学号:"); scanf("%d", &id); printf("请输入课程名称:"); scanf("%s", name); Node *p = head; while (p != NULL) { if (p->stu != NULL && p->stu->id == id) { Node *pre = p->stu->couList; Node *cur = pre->next; while (cur != NULL) { if (cur->cou != NULL && strcmp(cur->cou->name, name) == 0) { pre->next = cur->next; free(cur); printf("退课成功!\n"); return; } pre = cur; cur = cur->next; } printf("未找到该课程!\n"); return; } p = p->next; } printf("未找到该学生!\n"); }

  1. 实现菜单功能,通过输入数字选择对应的功能。

void menu() { printf("1.添加学生\n"); printf("2.添加课程\n"); printf("3.查询学生\n"); printf("4.查询课程\n"); printf("5.选课\n"); printf("6.退课\n"); printf("7.退出程序\n"); }

int main() { Node *head = NULL; int op; do { menu(); printf("请输入数字选择对应的功能:"); scanf("%d", &op); switch (op) { case 1: addStudent(&head); break; case 2: addCourse(&head); break; case 3: searchStudent(head); break; case 4: searchCourse(head); break; case 5: selectCourse(head); break; case 6: dropCourse(head); break; case 7: printf("退出程序!\n"); break; default: printf("输入有误,请重新输入!\n"); break; } } while (op != 7);

return 0;

}

实验结果:

成功实现了学生选课系统的设计和实现,能够通过菜单选择对应的功能,实现添加学生、添加课程、查询学生、查询课程、选课、退课等操作,能够对学生和课程信息进行管理和查询

数据结构用C语言写一篇学生选课系统实验报告菜单提示用中文进行提示实验要求:学生信息包括姓名学号班级学院;课程信息包括课程名称课程容量上课时间上课地点;

原文地址: http://www.cveoy.top/t/topic/flWa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录