1. 实验描述

1.1 实验目的

本实验旨在通过实现一个学生选课系统,让学生熟悉数据结构的基本操作,如数据的插入、删除、查找等,并提高学生对C语言的编程能力。

1.2 实验内容和要求

学生选课系统是一个基于数据结构的应用程序。在本次实验中,我们需要设计一个学生选课系统,包括学生信息和课程信息。学生信息包括姓名,学号,班级,学院;课程信息包括课程名称,课程容量,上课时间,上课地点。学生可以在系统中选择自己感兴趣的课程,系统需要提供以下功能:

  1. 添加学生信息

  2. 添加课程信息

  3. 显示所有学生信息

  4. 显示所有课程信息

  5. 学生选课

  6. 学生退课

  7. 显示学生选课情况

  8. 退出系统

  9. 程序结构

本程序采用链表来存储学生和课程信息。程序的主要结构如下:

struct student {
    int num;            //学号
    char name[20];      //姓名
    char major[20];     //专业
    char grade[20];     //年级
    struct student *next;
};

struct course {
    char name[20];      //课程名称
    int capacity;       //课程容量
    char time[20];      //上课时间
    char place[20];     //上课地点
    struct student *stu;    //选课学生链表
    struct course *next;
};

struct student *stu_head;   //学生链表头指针
struct course *cou_head;    //课程链表头指针

其中,学生和课程信息都是通过结构体来表示的。每个学生和课程都有一个指向下一个学生或课程的指针,形成了链表结构。在课程信息中,还包括一个指向选课学生链表的指针。

  1. 程序代码

本程序的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student {
    int num;            //学号
    char name[20];      //姓名
    char major[20];     //专业
    char grade[20];     //年级
    struct student *next;
};

struct course {
    char name[20];      //课程名称
    int capacity;       //课程容量
    char time[20];      //上课时间
    char place[20];     //上课地点
    struct student *stu;    //选课学生链表
    struct course *next;
};

struct student *stu_head;   //学生链表头指针
struct course *cou_head;    //课程链表头指针

//添加学生信息
void add_student() {
    struct student *p, *q;
    p = (struct student *)malloc(sizeof(struct student));
    printf("请输入学生学号:");
    scanf("%d", &p->num);
    printf("请输入学生姓名:");
    scanf("%s", p->name);
    printf("请输入学生专业:");
    scanf("%s", p->major);
    printf("请输入学生年级:");
    scanf("%s", p->grade);
    p->next = NULL;
    if (stu_head == NULL) {
        stu_head = p;
    } else {
        q = stu_head;
        while (q->next != NULL) {
            q = q->next;
        }
        q->next = p;
    }
    printf("添加学生信息成功!\n");
}

//添加课程信息
void add_course() {
    struct course *p, *q;
    p = (struct course *)malloc(sizeof(struct course));
    printf("请输入课程名称:");
    scanf("%s", p->name);
    printf("请输入课程容量:");
    scanf("%d", &p->capacity);
    printf("请输入上课时间:");
    scanf("%s", p->time);
    printf("请输入上课地点:");
    scanf("%s", p->place);
    p->stu = NULL;
    p->next = NULL;
    if (cou_head == NULL) {
        cou_head = p;
    } else {
        q = cou_head;
        while (q->next != NULL) {
            q = q->next;
        }
        q->next = p;
    }
    printf("添加课程信息成功!\n");
}

//显示所有学生信息
void show_student() {
    struct student *p;
    p = stu_head;
    printf("学号\t姓名\t专业\t年级\n");
    while (p != NULL) {
        printf("%d\t%s\t%s\t%s\n", p->num, p->name, p->major, p->grade);
        p = p->next;
    }
}

//显示所有课程信息
void show_course() {
    struct course *p;
    p = cou_head;
    printf("课程名称\t\t课程容量\t上课时间\t上课地点\n");
    while (p != NULL) {
        printf("%s\t\t\t%d\t\t%s\t\t%s\n", p->name, p->capacity, p->time, p->place);
        p = p->next;
    }
}

//学生选课
void select_course() {
    struct student *p;
    struct course *q;
    int num;
    char name[20];
    printf("请输入学生学号:");
    scanf("%d", &num);
    p = stu_head;
    while (p != NULL) {
        if (p->num == num) {
            break;
        }
        p = p->next;
    }
    if (p == NULL) {
        printf("学号为%d的学生不存在!\n", num);
        return;
    }
    printf("请输入课程名称:");
    scanf("%s", name);
    q = cou_head;
    while (q != NULL) {
        if (strcmp(q->name, name) == 0) {
            break;
        }
        q = q->next;
    }
    if (q == NULL) {
        printf("课程%s不存在!\n", name);
        return;
    }
    if (q->capacity == 0) {
        printf("课程%s已满!\n", name);
        return;
    }
    struct student *s;
    s = (struct student *)malloc(sizeof(struct student));
    s->num = p->num;
    strcpy(s->name, p->name);
    strcpy(s->major, p->major);
    strcpy(s->grade, p->grade);
    s->next = NULL;
    if (q->stu == NULL) {
        q->stu = s;
    } else {
        struct student *t;
        t = q->stu;
        while (t->next != NULL) {
            t = t->next;
        }
        t->next = s;
    }
    q->capacity--;
    printf("选课成功!\n");
}

//学生退课
void drop_course() {
    struct student *p;
    struct course *q;
    int num;
    char name[20];
    printf("请输入学生学号:");
    scanf("%d", &num);
    p = stu_head;
    while (p != NULL) {
        if (p->num == num) {
            break;
        }
        p = p->next;
    }
    if (p == NULL) {
        printf("学号为%d的学生不存在!\n", num);
        return;
    }
    printf("请输入课程名称:");
    scanf("%s", name);
    q = cou_head;
    while (q != NULL) {
        if (strcmp(q->name, name) == 0) {
            break;
        }
        q = q->next;
    }
    if (q == NULL) {
        printf("课程%s不存在!\n", name);
        return;
    }
    struct student *s, *t;
    s = q->stu;
    if (s == NULL) {
        printf("学生未选该课程!\n");
        return;
    }
    if (s->num == num) {
        q->stu = s->next;
        q->capacity++;
        free(s);
        printf("退课成功!\n");
        return;
    }
    while (s != NULL) {
        t = s->next;
        if (t != NULL && t->num == num) {
            s->next = t->next;
            q->capacity++;
            free(t);
            printf("退课成功!\n");
            return;
        }
        s = s->next;
    }
    printf("学生未选该课程!\n");
}

//显示学生选课情况
void show_select() {
    struct course *p;
    struct student *q;
    p = cou_head;
    printf("课程名称\t\t课程容量\t上课时间\t上课地点\t选课学生\n");
    while (p != NULL) {
        printf("%s\t\t\t%d\t\t%s\t\t%s\t\t", p->name, p->capacity, p->time, p->place);
        q = p->stu;
        while (q != NULL) {
            printf("%s ", q->name);
            q = q->next;
        }
        printf("\n");
        p = p->next;
    }
}

//菜单
void menu() {
    printf("\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");
    printf("请输入选项:");
}

//主函数
int main() {
    int choice;
    stu_head = NULL;
    cou_head = NULL;
    while (1) {
        menu();
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                add_student();
                break;
            case 2:
                add_course();
                break;
            case 3:
                show_student();
                break;
            case 4:
                show_course();
                break;
            case 5:
                select_course();
                break;
            case 6:
                drop_course();
                break;
            case 7:
                show_select();
                break;
            case 8:
                exit(0);
            default:
                printf("选项错误!\n");
                break;
        }
    }
    return 0;
}
  1. 程序测试

本程序的测试如下:

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:1
请输入学生学号:1001
请输入学生姓名:张三
请输入学生专业:计算机科学与技术
请输入学生年级:大一
添加学生信息成功!

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:1
请输入学生学号:1002
请输入学生姓名:李四
请输入学生专业:软件工程
请输入学生年级:大二
添加学生信息成功!

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:2
请输入课程名称:数据结构
请输入课程容量:50
请输入上课时间:周一1-3节
请输入上课地点:教学楼A201
添加课程信息成功!

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:2
请输入课程名称:计算机组成原理
请输入课程容量:40
请输入上课时间:周二1-3节
请输入上课地点:教学楼B301
添加课程信息成功!

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:3
学号    姓名    专业                年级
1001    张三     计算机科学与技术    大一
1002    李四     软件工程            大二

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:4
课程名称            课程容量        上课时间        上课地点
数据结构            50              周一1-3节       教学楼A201
计算机组成原理      40              周二1-3节       教学楼B301

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:5
请输入学生学号:1001
请输入课程名称:数据结构
选课成功!

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:5
请输入学生学号:1002
请输入课程名称:数据结构
选课成功!

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:5
请输入学生学号:1002
请输入课程名称:计算机组成原理
选课成功!

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:5
请输入学生学号:1001
请输入课程名称:计算机组成原理
选课成功!

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:6
请输入学生学号:1001
请输入课程名称:数据结构
退课成功!

1.添加学生信息
2.添加课程信息
3.显示所有学生信息
4.显示所有课程信息
5.学生选课
6.学生退课
7.显示学生选课情况
8.退出系统
请输入选项:7
课程名称            课程容量        上课时间        上课地点        选课学生
数据结构            49              周一1-3节       教学楼A201      李四
计算机组成原理      39              周二1-3节       教学楼B301      张三 李四

1
数据结构用C语言写一篇学生选课系统实验报告菜单提示用中文进行提示实验要求:学生信息包括姓名学号班级学院;课程信息包括课程名称课程容量上课时间上课地点;实验步骤:1 实验描述11实验目的12实验内容和要求2程序结构3程序代码4 程序测试

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

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