选课系统1



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

#define MAX_STUDENTS 100 // 最大可以处理的学生数量
#define MAX_COURSES 30 // 每个学生最多可以选修的课程数量
#define MAX_NAME_LEN 30 // 学生姓名最大长度
#define MAX_ID_LEN 10 // 学生学号和教师编号最大长度
#define MAX_COURSE_NAME_LEN 20 // 课程名称最大长度

// 学生结构体
typedef struct {
    char name[MAX_NAME_LEN];
    char id[MAX_ID_LEN];
    int courses_num;
    char courses[MAX_COURSES][MAX_COURSE_NAME_LEN];
    double scores[MAX_COURSES];
} Student;

// 教师结构体
typedef struct {
    char name[MAX_NAME_LEN];
    char id[MAX_ID_LEN];
    char course[MAX_COURSE_NAME_LEN];
} Teacher;

// 函数声明
void enroll(Student* student, const char* course_name);
void addScore(Student* student, const char* course_name, double score_input);
void printStudent(Student* student);
void printCourseInfo(const char* course_name);
void addTeacher(Teacher* teacher);

int main() {
    // 创建学生数组
    Student students[MAX_STUDENTS];
    int num_students = 0;

    // 创建教师数组
    Teacher teachers[2];
    int num_teachers = 0;

    int choice;
    do {
        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("请选择操作:");
        scanf("%d", &choice);

        switch (choice) {
            case 1: {
                // 添加学生
                if (num_students >= MAX_STUDENTS) {
                    printf("学生已达到系统处理能力,无法添加更多学生。\n");
                    break;
                }

                Student* student = &students[num_students];
                printf("请输入学生姓名:");
                scanf("%s", student->name);
                printf("请输入学生学号:");
                scanf("%s", student->id);
                num_students++;
                printf("学生添加成功。\n");
                break;
            }
            case 2: {
                // 学生选课
                char course_name[MAX_COURSE_NAME_LEN];
                printf("请输入课程名称:");
                scanf("%s", course_name);
                for (int i = 0; i < num_students; i++) {
                    Student* student = &students[i];
                    if (strcmp(student->id, "") != 0) { // 判断学生是否存在
                        enroll(student, course_name);
                    }
                }
                break;
            }
            case 3: {
                // 教师打分
                char teacher_id[MAX_ID_LEN];
                printf("请输入教师编号:");
                scanf("%s", teacher_id);

                char course_name[MAX_COURSE_NAME_LEN];
                int found = 0;
                for (int i = 0; i < num_teachers; i++) {
                    if (strcmp(teachers[i].id, teacher_id) == 0) {
                        strcpy(course_name, teachers[i].course);
                        found = 1;
                        break;
                    }
                }

                if (!found) {
                    printf("无效的教师编号。\n");
                    break;
                }

                for (int i = 0; i < num_students; i++) {
                    Student* student = &students[i];
                    if (strcmp(student->id, "") != 0) { // 判断学生是否存在
                        addScore(student, course_name, 90); // 在此默认打分为90分
                    }
                }
                break;
            }
            case 4: {
                // 查询学生信息
                char student_id[MAX_ID_LEN];
                printf("请输入学生学号:");
                scanf("%s", student_id);
                for (int i = 0; i < num_students; i++) {
                    Student* student = &students[i];
                    if (strcmp(student->id, student_id) == 0) { // 学生存在
                        printStudent(student);
                        break;
                    } else if (i == num_students - 1) { // 学生不存在
                        printf("学生不存在。\n");
                    }
                }
                break;
            }
            case 5: {
                // 添加教师信息
                if (num_teachers >= 2) {
                    printf("系统只能添加两个教师信息。\n");
                    break;
                }
                Teacher* teacher = &teachers[num_teachers];
                addTeacher(teacher);
                num_teachers++;
                printf("教师添加成功。\n");
                break;
            }
            case 6: {
                // 查询教师信息
                char teacher_id[MAX_ID_LEN];
                printf("请输入教师编号:");
                scanf("%s", teacher_id);

                int found = 0;
                for (int i = 0; i < num_teachers; i++) {
                    if (strcmp(teachers[i].id, teacher_id) == 0) {
                        printf("教师姓名:%s\n教师编号:%s\n授课课程:%s\n", teachers[i].name, teachers[i].id, teachers[i].course);
                        found = 1;
                        break;
                    }
                }
                if (!found) {
                    printf("教师不存在。\n");
                }
                break;
            }
            case 7: {
                return 0;
            }
            default: {
                printf("无效的选择,请重新选择。\n");
                break;
            }
        }
    } while (1);

    return 0;
}

// 学生选课
void enroll(Student* student, const char* course_name) {
    if (student->courses_num >= MAX_COURSES) {
        printf("%s选课失败,已选课程数量超过限制。\n", student->name);
        return;
    }
    for (int i = 0; i < student->courses_num; i++) {
        if (strcmp(student->courses[i], course_name) == 0) {
            printf("%s已经选过%s。\n", student->name, course_name);
            return;
        }
    }
    strcpy(student->courses[student->courses_num], course_name);
    student->courses_num++;
    printf("选课成功:%s选了%s。\n", student->name, course_name);
}

// 教师打分
void addScore(Student* student, const char* course_name, double score_input) {
    double score;
    do {
        printf("请输入%s的成绩(0-100):", student->name);
        scanf("%lf", &score);
    } while (score < 0 || score > 100);

    for (int i = 0; i < student->courses_num; i++) {
        if (strcmp(student->courses[i], course_name) == 0) {
            student->scores[i] = score;
            printf("%s的%s课程已被打分为%.1f分。\n", student->name, course_name, score);
            return;
        }
    }
    printf("%s没有选择%s课程,无法打分。\n", student->name, course_name);
}

// 输出学生信息
void printStudent(Student* student) {
    printf("学生姓名:%s\n学生学号:%s\n已选课程及成绩:\n", student->name, student->id);
    if (student->courses_num == 0) {
        printf("暂无课程\n");
    } else {
        for (int i = 0; i < student->courses_num; i++) {
            if (student->scores[i] == -1) {
                printf("%s:未打分\n", student->courses[i]);
            } else {
                printf("%s:%.1f分\n", student->courses[i], student->scores[i]);
            }
        }
    }
}
// 添加教师信息
void addTeacher(Teacher* teacher) {
    printf("请输入教师姓名:");
    scanf("%s", teacher->name);
    printf("请输入教师编号:");
    scanf("%s", teacher->id);
    printf("请输入教师授课课程:");
    scanf("%s", teacher->course);
}

欢迎订阅专栏,数据结构实验,期末大作业,前端后端都有哦,想我发哪个方面的资源或文章可以私信我,免费的哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

然然超绝肌肉线条

你的鼓励将是创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值