使用C语言完成一个学生选课系统完整源码

程序介绍

基于C语言开发的一个学生选课系统,定义添加学生和课程、学生选课、查询学生和课程信息等几个函数。通过主程序的while循环,可以实现用户对选课系统的操作选择。

代码详情

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

// 定义学生信息结构体
typedef struct {
    char name[20];
    int age;
    char sex[5];
    int max_course_num;  // 学生最多选择的课程数
    int selected_course_num;  // 学生已经选择的课程数
    char selected_courses[5][20];  // 学生已选课程
} Student;

// 定义课程信息结构体
typedef struct {
    char name[20];
    char teacher[20];
    int credit;
    int max_num;  // 课程最大选课人数
    int selected_num;  // 课程已选人数
    Student* selected_students[10];  // 选课学生名单
} Course;

Student students[10];  // 最多存储10个学生
Course courses[5];  // 最多存储5门课程

int student_num = 0;  // 存储学生数量
int course_num = 0;  // 存储课程数量

// 添加学生
void add_student() {
    if (student_num >= 10) {
        printf("学生数量已达上限!\n");
        return;
    }

    printf("请输入学生姓名:");
    scanf("%s", students[student_num].name);
    printf("请输入学生年龄:");
    scanf("%d", &students[student_num].age);
    printf("请输入学生性别:");
    scanf("%s", students[student_num].sex);
    printf("请输入学生最多选择课程的数目:");
    scanf("%d", &students[student_num].max_course_num);
    students[student_num].selected_course_num = 0;

    student_num++;
    printf("添加成功!\n");
}

// 添加课程
void add_course() {
    if (course_num >= 5) {
        printf("课程数量已达上限!\n");
        return;
    }

    printf("请输入课程名称:");
    scanf("%s", courses[course_num].name);
    printf("请输入授课教师:");
    scanf("%s", courses[course_num].teacher);
    printf("请输入学分:");
    scanf("%d", &courses[course_num].credit);
    printf("请输入最大选课人数:");
    scanf("%d", &courses[course_num].max_num);
    courses[course_num].selected_num = 0;

    course_num++;
    printf("添加成功!\n");
}

// 学生选课
void choose_course() {
    char name[20];
    printf("请输入你的姓名:");
    scanf("%s", name);

    Student* current_student = NULL;
    for (int i = 0; i < student_num; i++) {
        if (strcmp(students[i].name, name) == 0) {
            current_student = &students[i];
            break;
        }
    }

    if (current_student == NULL) {
        printf("未找到该学生!\n");
        return;
    }

    if (current_student->selected_course_num >= current_student->max_course_num) {
        printf("你已经选够了最大的课程数!\n");
        return;
    }

    char course_name[20];
    printf("请输入你要选择的课程名称:");
    scanf("%s", course_name);

    Course* current_course = NULL;
    for (int i = 0; i < course_num; i++) {
        if (strcmp(courses[i].name, course_name) == 0) {
            current_course = &courses[i];
            break;
        }
    }

    if (current_course == NULL) {
        printf("未找到该课程!\n");
        return;
    }

    if (current_course->selected_num >= current_course->max_num) {
        printf("该课程已经选满了!\n");
        return;
    }

    for (int i = 0; i < current_student->selected_course_num; i++) {
        if (strcmp(current_student->selected_courses[i], course_name) == 0) {
            printf("你已经选择了该课程!\n");
            return;
        }
    }

    // 学生选课
    strcpy(current_student->selected_courses[current_student->selected_course_num], course_name);
    current_student->selected_course_num++;

    // 更新课程已选人数和学生名单
    current_course->selected_students[current_course->selected_num] = current_student;
    current_course->selected_num++;

    printf("选课成功!\n");
}

// 查询学生信息
void search_student() {
    char name[20];
    printf("请输入你要查询的学生的姓名:");
    scanf("%s", name);

    for (int i = 0; i < student_num; i++) {
        if (strcmp(students[i].name, name) == 0) {
            printf("姓名:%s,年龄:%d,性别:%s\n", students[i].name, students[i].age, students[i].sex);
            printf("已选课程:\n");
            for (int j = 0; j < students[i].selected_course_num; j++) {
                printf("%s\n", students[i].selected_courses[j]);
            }
            return;
        }
    }

    printf("未找到该学生!\n");
}

// 查询课程信息
void search_course() {
    char name[20];
    printf("请输入你要查询的课程名称:");
    scanf("%s", name);

    for (int i = 0; i < course_num; i++) {
        if (strcmp(courses[i].name, name) == 0) {
            printf("课程名称:%s,授课教师:%s,学分:%d\n", courses[i].name, courses[i].teacher, courses[i].credit);
            printf("已选人数:%d,最大选课人数:%d\n", courses[i].selected_num, courses[i].max_num);
            printf("选课学生名单:\n");
            for (int j = 0; j < courses[i].selected_num; j++) {
                printf("%s\n", courses[i].selected_students[j]->name);
            }
            return;
        }
    }

    printf("未找到该课程!\n");
}

int main() {
    while (1) {
        printf("请选择操作:\n");
        printf("1. 添加学生\n");
        printf("2. 添加课程\n");
        printf("3. 学生选课\n");
        printf("4. 查询学生信息\n");
        printf("5. 查询课程信息\n");
        printf("6. 退出系统\n");

        int choice;
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                add_student();
                break;
            case 2:
                add_course();
                break;
            case 3:
                choose_course();
                break;
            case 4:
                search_student();
                break;
            case 5:
                search_course();
                break;
            case 6:
                exit(0);
            default:
                printf("输入有误,请重新输入!\n");
                break;
        }
    }

    return 0;
}

 

希望这个示例能对你有所帮助!

© 版权声明
THE END
喜欢就支持一下吧
点赞14赞赏 分享