学生选修课管理 要求 使用c语言 数据结构 创建学生信息结点类型以及学生信息结构体 存储结构 选择单链表存储学生和课程信息 实现功能 以函数方式实现 选课信息链表创建,选课信息输入,选课信息查询, 选课信息修改,选课信息删除,显示已选课程。 字段信息包含,学号,姓名,性别,专业,课程名称,学分,上课时间
时间: 2023-09-30 14:03:26 浏览: 125
C语言课设,关于学生选课管理系统,三大功能:管理学生,管理课程,管理选课,每大功能下有相应小功能,可以轻松上手,拿到就能用
好的,下面是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生信息结构体
typedef struct student {
char id[20]; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
char major[20]; // 专业
struct course *courses; // 已选课程链表
} Student;
// 课程信息结构体
typedef struct course {
char name[20]; // 课程名称
int credit; // 学分
char time[50]; // 上课时间
struct course *next; // 指向下一个选课信息结点的指针
} Course;
// 选课信息链表结构体
typedef struct course_list {
Course *head; // 指向链表头部结点的指针
int length; // 链表长度
} CourseList;
// 创建学生信息结点
Student *create_student(char *id, char *name, char *gender, char *major) {
Student *stu = (Student *) malloc(sizeof(Student));
strcpy(stu->id, id);
strcpy(stu->name, name);
strcpy(stu->gender, gender);
strcpy(stu->major, major);
stu->courses = NULL;
return stu;
}
// 创建课程信息结点
Course *create_course(char *name, int credit, char *time) {
Course *course = (Course *) malloc(sizeof(Course));
strcpy(course->name, name);
course->credit = credit;
strcpy(course->time, time);
course->next = NULL;
return course;
}
// 创建选课信息链表
CourseList *create_course_list() {
CourseList *list = (CourseList *) malloc(sizeof(CourseList));
list->head = NULL;
list->length = 0;
return list;
}
// 向选课信息链表中添加课程信息结点
void add_course(CourseList *list, char *name, int credit, char *time) {
Course *course = create_course(name, credit, time);
if (list->head == NULL) {
list->head = course;
} else {
Course *p = list->head;
while (p->next != NULL) {
p = p->next;
}
p->next = course;
}
list->length++;
}
// 从选课信息链表中删除课程信息结点
void delete_course(CourseList *list, char *name) {
Course *p = list->head;
Course *pre = NULL;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
if (pre == NULL) {
list->head = p->next;
} else {
pre->next = p->next;
}
free(p);
list->length--;
return;
}
pre = p;
p = p->next;
}
}
// 显示已选课程
void show_courses(CourseList *list) {
Course *p = list->head;
printf("已选课程:\n");
while (p != NULL) {
printf("%s(%d学分,上课时间:%s)\n", p->name, p->credit, p->time);
p = p->next;
}
}
// 创建学生信息结点
Student *create_student_node() {
char id[20], name[20], gender[5], major[20];
printf("请输入学生信息:\n");
printf("学号:");
scanf("%s", id);
printf("姓名:");
scanf("%s", name);
printf("性别:");
scanf("%s", gender);
printf("专业:");
scanf("%s", major);
printf("\n");
return create_student(id, name, gender, major);
}
// 向选课信息链表中添加课程信息结点
void add_course_node(Student *stu) {
char name[20], time[50];
int credit;
printf("请输入课程信息:\n");
printf("课程名称:");
scanf("%s", name);
printf("学分:");
scanf("%d", &credit);
printf("上课时间:");
scanf("%s", time);
printf("\n");
add_course(stu->courses, name, credit, time);
}
// 选课信息输入
void input_course_info(Student *stu) {
int choice = 1;
while (choice != 0) {
printf("请选择操作:\n");
printf("1. 添加课程信息\n");
printf("0. 返回\n");
scanf("%d", &choice);
printf("\n");
switch (choice) {
case 1:
add_course_node(stu);
break;
}
}
}
// 选课信息查询
void query_course_info(Student *stu) {
char name[20];
printf("请输入要查询的课程名称:");
scanf("%s", name);
printf("\n");
Course *p = stu->courses->head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("%s(%d学分,上课时间:%s)\n", p->name, p->credit, p->time);
return;
}
p = p->next;
}
printf("未找到该课程!\n");
}
// 选课信息修改
void modify_course_info(Student *stu) {
char name[20];
printf("请输入要修改的课程名称:");
scanf("%s", name);
printf("\n");
Course *p = stu->courses->head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("请输入修改后的课程信息:\n");
printf("课程名称:");
scanf("%s", p->name);
printf("学分:");
scanf("%d", &p->credit);
printf("上课时间:");
scanf("%s", p->time);
printf("\n");
return;
}
p = p->next;
}
printf("未找到该课程!\n");
}
// 选课信息删除
void delete_course_info(Student *stu) {
char name[20];
printf("请输入要删除的课程名称:");
scanf("%s", name);
printf("\n");
delete_course(stu->courses, name);
}
int main() {
CourseList *course_list = create_course_list();
Student *stu1 = create_student("001", "张三", "男", "计算机科学与技术");
Student *stu2 = create_student("002", "李四", "女", "软件工程");
add_course(stu1->courses, "计算机组成原理", 4, "周一 1-2节");
add_course(stu1->courses, "操作系统", 3, "周二 3-4节");
add_course(stu2->courses, "数据库原理", 4, "周三 5-6节");
int choice = 1;
while (choice != 0) {
printf("请选择操作:\n");
printf("1. 学生信息录入\n");
printf("2. 选课信息录入\n");
printf("3. 选课信息查询\n");
printf("4. 选课信息修改\n");
printf("5. 选课信息删除\n");
printf("6. 显示已选课程\n");
printf("0. 退出\n");
scanf("%d", &choice);
printf("\n");
switch (choice) {
case 1:
printf("暂不支持此功能!\n");
break;
case 2:
input_course_info(stu1);
break;
case 3:
query_course_info(stu1);
break;
case 4:
modify_course_info(stu1);
break;
case 5:
delete_course_info(stu1);
break;
case 6:
show_courses(stu1->courses);
break;
}
}
return 0;
}
```
以上代码仅供参考,具体实现方式可能因需求不同而有所不同。
阅读全文