用c语言写学生选修课管理 要求: 3 (1)数据结构:创建学生信息结点类型以及学生信息结构体; (2)存储结构:选择单链表存储学生和课程信息。 (3)实现功能(以函数方式实现):选课信息链表创建、选课信息输入、选课信息 查询、选课信息修改、选课信息删除、选课信息输出(全部或部分输出)或保存到文件, 选课相关排序。 附:字段信息包括:学号,姓名,性别,专业,选课名称,学分,上课时间等。
时间: 2024-02-13 17:07:39 浏览: 113
好的,以下是C语言实现学生选修课管理的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生信息结构体
typedef struct student_info {
char id[20]; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
char major[20]; // 专业
struct course_info *courses; // 指向课程信息链表的指针
} StudentInfo;
// 课程信息结构体
typedef struct course_info {
char course_name[20]; // 选课名称
int credit; // 学分
char time[20]; // 上课时间
struct course_info *next; // 指向下一个课程信息结点的指针
} CourseInfo;
// 学生和课程信息链表结点结构体
typedef struct node {
StudentInfo student; // 学生信息
CourseInfo course; // 课程信息
struct node *next; // 指向下一个结点的指针
} Node;
// 全局变量:指向学生和课程信息链表头结点的指针
Node *head = NULL;
// 选课信息链表创建
void create() {
int n;
printf("请输入学生人数:");
scanf("%d", &n);
Node *p, *q;
p = q = (Node*)malloc(sizeof(Node));
printf("请按照以下格式输入学生和课程信息:\n");
printf("学号 姓名 性别 专业 选课名称 学分 上课时间\n");
for (int i = 0; i < n; i++) {
scanf("%s %s %s %s %s %d %s", p->student.id, p->student.name, p->student.gender, p->student.major, p->course.course_name, &p->course.credit, p->course.time);
p->student.courses = &p->course;
if (i == 0) {
head = p;
} else {
q->next = p;
}
q = p;
p = (Node*)malloc(sizeof(Node));
}
q->next = NULL;
}
// 选课信息输入
void insert() {
Node *p, *q;
p = q = head;
while (p->next != NULL) {
p = p->next;
}
p->next = (Node*)malloc(sizeof(Node));
p = p->next;
printf("请输入学生和课程信息:\n");
printf("学号 姓名 性别 专业 选课名称 学分 上课时间\n");
scanf("%s %s %s %s %s %d %s", p->student.id, p->student.name, p->student.gender, p->student.major, p->course.course_name, &p->course.credit, p->course.time);
p->student.courses = &p->course;
p->next = NULL;
}
// 选课信息查询
void search() {
char id[20];
printf("请输入要查询的学生的学号:");
scanf("%s", id);
Node *p = head;
while (p != NULL) {
if (strcmp(p->student.id, id) == 0) {
printf("学号:%s\n", p->student.id);
printf("姓名:%s\n", p->student.name);
printf("性别:%s\n", p->student.gender);
printf("专业:%s\n", p->student.major);
printf("选课名称:%s\n", p->course.course_name);
printf("学分:%d\n", p->course.credit);
printf("上课时间:%s\n", p->course.time);
return;
}
p = p->next;
}
printf("未找到该学生!\n");
}
// 选课信息修改
void modify() {
char id[20];
printf("请输入要修改的学生的学号:");
scanf("%s", id);
Node *p = head;
while (p != NULL) {
if (strcmp(p->student.id, id) == 0) {
printf("请输入新的选课信息:\n");
printf("选课名称 学分 上课时间\n");
scanf("%s %d %s", p->course.course_name, &p->course.credit, p->course.time);
printf("修改成功!\n");
return;
}
p = p->next;
}
printf("未找到该学生!\n");
}
// 选课信息删除
void remove() {
char id[20];
printf("请输入要删除的学生的学号:");
scanf("%s", id);
Node *p = head, *q = NULL;
while (p != NULL) {
if (strcmp(p->student.id, id) == 0) {
if (q == NULL) {
head = p->next;
} else {
q->next = p->next;
}
free(p);
printf("删除成功!\n");
return;
}
q = p;
p = p->next;
}
printf("未找到该学生!\n");
}
// 选课信息输出
void output() {
int choice;
printf("请选择输出方式:\n");
printf("1. 全部输出\n");
printf("2. 按学号输出\n");
scanf("%d", &choice);
if (choice == 1) {
Node *p = head;
while (p != NULL) {
printf("学号:%s\n", p->student.id);
printf("姓名:%s\n", p->student.name);
printf("性别:%s\n", p->student.gender);
printf("专业:%s\n", p->student.major);
printf("选课名称:%s\n", p->course.course_name);
printf("学分:%d\n", p->course.credit);
printf("上课时间:%s\n", p->course.time);
p = p->next;
}
} else if (choice == 2) {
char id[20];
printf("请输入要输出的学生的学号:");
scanf("%s", id);
Node *p = head;
while (p != NULL) {
if (strcmp(p->student.id, id) == 0) {
printf("学号:%s\n", p->student.id);
printf("姓名:%s\n", p->student.name);
printf("性别:%s\n", p->student.gender);
printf("专业:%s\n", p->student.major);
printf("选课名称:%s\n", p->course.course_name);
printf("学分:%d\n", p->course.credit);
printf("上课时间:%s\n", p->course.time);
return;
}
p = p->next;
}
printf("未找到该学生!\n");
} else {
printf("输入有误!\n");
}
}
// 选课相关排序(按学号排序)
void sort() {
Node *p, *q;
p = head;
while (p != NULL) {
q = p->next;
while (q != NULL) {
if (strcmp(p->student.id, q->student.id) > 0) {
StudentInfo temp_student = p->student;
p->student = q->student;
q->student = temp_student;
CourseInfo temp_course = p->course;
p->course = q->course;
q->course = temp_course;
}
q = q->next;
}
p = p->next;
}
}
int main() {
int choice;
while (1) {
printf("\n请选择操作:\n");
printf("1. 选课信息链表创建\n");
printf("2. 选课信息输入\n");
printf("3. 选课信息查询\n");
printf("4. 选课信息修改\n");
printf("5. 选课信息删除\n");
printf("6. 选课信息输出\n");
printf("7. 选课相关排序\n");
printf("8. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
create();
break;
case 2:
insert();
break;
case 3:
search();
break;
case 4:
modify();
break;
case 5:
remove();
break;
case 6:
output();
break;
case 7:
sort();
printf("排序成功!\n");
break;
case 8:
return 0;
default:
printf("输入有误!\n");
break;
}
}
}
```
此代码实现了选课信息链表的创建、选课信息输入、选课信息查询、选课信息修改、选课信息删除、选课信息输出(全部或部分输出)或保存到文件,以及选课相关排序(按学号排序)等功能。
阅读全文