选课系统2

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

//学生结构体
struct student {
    char name[30];
    char id[10];
    char course[30][10];
    double score[30];
};

//教师结构体
struct teacher {
    char name[30];
    char course[10];
    char id[5];
};

//声明函数
void add_student();
void display_student(char id[]);
void add_teacher();
void display_teacher(char id[]);
void select_course(char id[]);
void input_score(char id[]);
void course_report(char course[]);

int main(){
    int choice;
    char id[10];
    do{
        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("\n请选择需要的操作:");
        scanf("%d", &choice);

        switch(choice){
            case 1: add_student(); break;
            case 2: 
                printf("请输入学生学号:");
                scanf("%s", id);
                display_student(id); 
                break;
            case 3: add_teacher(); break;
            case 4: 
                printf("请输入教师编号:");
                scanf("%s", id);
                display_teacher(id); 
                break;
            case 5: 
                printf("请输入学生学号:");
                scanf("%s", id);
                select_course(id); 
                break;
            case 6: 
                printf("请输入教师编号:");
                scanf("%s", id);
                input_score(id); 
                break;
            case 7: 
                printf("请输入课程名称:");
                char course[10];
                scanf("%s", course);
                course_report(course); 
                break;
            case 8: exit(0); break;
            default: printf("无效选择,请重新输入。\n");
        }
    } while(1);

    return 0;
}

//添加学生
void add_student(){
    struct student s;
    printf("\n请输入学生姓名:");
    scanf("%s", s.name);
    printf("请输入学生学号:");
    scanf("%s", s.id);
    printf("请输入选修课程数量:");
    int count;
    scanf("%d", &count);
    for(int i=0; i<count; i++){
        printf("请输入选修课程%d的名称:", i+1);
        scanf("%s", s.course[i]);
        fflush(stdin);
        s.score[i] = -1;
    }
    FILE *fp;
    fp = fopen("students.dat", "ab+");
    fwrite(&s, sizeof(s), 1, fp);
    fclose(fp);
    printf("学生添加成功。\n\n");
}

//查看学生信息
void display_student(char id[]){
    struct student s;
    int found = 0;
    FILE *fp;
    fp = fopen("students.dat", "rb");
    while(fread(&s, sizeof(s), 1, fp)==1){
        if(strcmp(s.id, id)==0){
            found = 1;
            printf("\n学生姓名:%s\n学生学号:%s\n选修课程及成绩:\n", s.name, s.id);
            for(int i=0; i<30; i++){
                if(strcmp(s.course[i], "")!=0){
                    if(s.score[i]==-1){
                        printf("%s:未选\n", s.course[i]);
                    }
                    else{
                        printf("%s:%2.1f\n", s.course[i], s.score[i]);
                    }
                }
            }
            printf("\n");
            break;
        }
    }
    fclose(fp);
    if(found==0){
        printf("\n学生不存在。\n\n");
    }
}

//添加教师
void add_teacher(){
    struct teacher t;
    printf("\n请输入教师姓名:");
    scanf("%s", t.name);
    printf("请输入教师编号:");
    scanf("%s", t.id);
    printf("请输入教授课程名称:");
    scanf("%s", t.course);
    FILE *fp;
    fp = fopen("teachers.dat", "ab+");
    fwrite(&t, sizeof(t), 1, fp);
    fclose(fp);
    printf("教师添加成功。\n\n");
}

//查看教师信息
void display_teacher(char id[]){
    struct teacher t;
    int found = 0;
    FILE *fp;
    fp = fopen("teachers.dat", "rb");
    while(fread(&t, sizeof(t), 1, fp)==1){
        if(strcmp(t.id, id)==0){
            found = 1;
            printf("\n教师姓名:%s\n教师编号:%s\n教授课程:%s\n", t.name, t.id, t.course);
            printf("\n");
            break;
        }
    }
    fclose(fp);
    if(found==0){
        printf("\n教师不存在。\n\n");
    }
}

//学生选课
void select_course(char id[]){
    struct student s;
    int found = 0;
    FILE *fp;
    fp = fopen("students.dat", "rb+");
    while(fread(&s, sizeof(s), 1, fp)==1){
        if(strcmp(s.id, id)==0){
            found = 1;
            printf("\n请选择需要选修的课程:\n");
            for(int i=0; i<30; i++){
                if(strcmp(s.course[i], "")==0){
                    char course[10];
                    printf("%d. ", i+1);
                    scanf("%s", course);
                    fflush(stdin);
                    strcpy(s.course[i], course);
                    s.score[i] = -1;
                    break;
                }
            }
            fseek(fp, -sizeof(s), SEEK_CUR);
            fwrite(&s, sizeof(s), 1, fp);
            printf("选课成功。\n\n");
            break;
        }
    }
    fclose(fp);
    if(found==0){
        printf("\n学生不存在。\n\n");
    }
}

//教师录入成绩
void input_score(char id[]){
    struct student s;
    int found = 0;
    FILE *fp;
    fp = fopen("students.dat", "rb+");
    while(fread(&s, sizeof(s), 1, fp)==1){
        for(int i=0; i<30; i++){
            if(strcmp(s.course[i], "")!=0){
                if(strcmp(s.course[i], id)==0){
                    found = 1;
                    printf("\n请输入学生成绩(0-100):");
                    double score;
                    scanf("%lf", &score);
                    fflush(stdin);
                    s.score[i] = score;
                    fseek(fp, -sizeof(s), SEEK_CUR);
                    fwrite(&s, sizeof(s), 1, fp);
                    printf("成绩录入成功。\n\n");
                    break; //找到对应课程后退出循环
                }
            }
        }
    }
    fclose(fp);
    if(found==0){
        printf("\n该课程学生不存在。\n\n");
    }
}

//课程报表
void course_report(char course[]){
    int count = 0;
    double sum = 0;
    struct student s;
    int found = 0;
    FILE *fp;
    fp = fopen("students.dat", "rb");
    while(fread(&s, sizeof(s), 1, fp)==1){
        for(int i=0; i<30; i++){
            if(strcmp(s.course[i], "")!=0){
                if(strcmp(s.course[i], course)==0){
                    found = 1;
                    count++;
                    if(s.score[i]!=-1){
                        sum += s.score[i];
                    }
                }
            }
        }
    }
    fclose(fp);
    if(found==0){
        printf("\n该课程不存在。\n\n");
    }
    else{
        printf("\n选修 %s 的学生数量:%d\n平均成绩:%.2f\n\n", course, count, sum/count);
    }
}

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

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

然然超绝肌肉线条

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

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

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

打赏作者

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

抵扣说明:

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

余额充值