学生成绩管理

送分小仙女□ 提交于 2019-12-10 05:21:56

学生成绩管理

一、程序说明

假设某班有不超过40人(具体人数在程序运行时由键盘录入)参加本学期的期末考试,考试科目为语文(CN),数学(MT),英语(EN),科学(SC)。要求编写一个学生成绩管理系统,实现对班级学生成绩的录入、修改、查找、删除、显示、排序、统计、保存等操作的管理。

二、程序设计要求

系统主菜单应包括:

  1. 录入每个同学的学号、姓名、性别和各科的考试成绩;
  2. 成绩修改:可以根据输入的学号修改成绩;在修改之前需要用户进一步确认,确认无误后再进行操作。
  3. 计算每门课程的总分和平均分;
  4. 计算每个学生所有课程的总分和平均分;
  5. 按每个学生的总分进行排序;
  6. 按学号排出成绩表;
  7. 按姓名的字典顺序排出成绩表;
  8. 按姓名查询学生的各科成绩、总分、平均分及在班级的排名;
  9. 按学号查询学生的各科成绩、总分、平均分及在班级的排名;
  10. 对每门课程按优(90~100)、良(80~89)、中(70~79)、及格(60~69)、不及格(0~59)统计人数,及所占的百分比。
  11. 输出每个学生的姓名、学号、性别、各门课程的考试成绩、总分、平均分及在班级内的排名;
  12. 输出班级每门课程的统计数据:包括每门课程的平均分、每门课程优、良、中、及格、不及格的人数及所占百分比;
  13. 将每个学生的相关信息写入文件保存;
  14. 从文件中读出相关信息并进行处理;
  15. 退出系统

执行一个具体的功能之后,程序将重新显示菜单,直至选择退出系统的功能。
在这里插入图片描述

==main.c==👇

#include "class.h"

int main(){
    Class X;
    init(&X);
    puts("1)load from std");
    puts("2)load from file");
    puts("3)save to file");
    puts("4)modify the score");
    puts("5)sort by sum");
    puts("6)sort by number");
    puts("7)sort by name");
    puts("8)find by name");
    puts("9)find by number");
    puts("10)print all the date");
    puts("11)print class date");
    puts("12)exit");
    int d;
    char tmp[100];
    while(1) {
        scanf("%d",&d);
        if(d == 1) load_from_std(&X);
        if(d == 2) load_from_file(&X);
        if(d == 3) save_to_file(&X);
        if(d == 4) {scanf("%s",tmp);fun0(&X,tmp);}
        if(d == 5) fun1(&X);
        if(d == 6) fun2(&X);
        if(d == 7) fun3(&X);
        if(d == 8) {scanf("%s",tmp);fun4(&X,tmp);}
        if(d == 9) {scanf("%s",tmp);fun5(&X,tmp);}
        if(d == 10) fun6(&X);
        if(d == 11) fun7(&X);
        if(d == 12) break;
    }
    return 0;
};

==class.h==👇

//
// Created by limbo_null on 12/21/17.
//
#include "student.h"

#ifndef UNTITLED_CLASS_H
#define UNTITLED_CLASS_H
typedef struct {
    int tot;
    student stu[50];
    int sum_CN,sum_MT,sum_EN,sum_SC;
    int CA,CB,CC,CD,CE,MA,MB,MC,MD,ME,EA,EB,EC,ED,EE,SA,SB,SC,SD,SE;
}Class;

void init(Class *x) {
    x->tot = 0;
    x->sum_CN=x->sum_MT=x->sum_EN=x->sum_SC = 0;
    x->CA=x->CB=x->CC=x->CD=x->CE=x->SA=x->SB=x->SC=x->SD=x->SE=x->MA=x->MB=x->MC=x->MD=x->ME=x->EA=x->EB=x->EC=x->ED=x->EE=0;
}

void sort(Class *x,int (*cmp)(student *a,student *b)) {
    int i,j;
    student tmp;
    for(i = 1 ; i < x->tot ; ++i)
        for(j = i+1 ; j <= x->tot ; ++j)
            if((*cmp)(&x->stu[i],&x->stu[j])) {
                tmp = x->stu[i];
                x->stu[i] = x->stu[j];
                x->stu[j] = tmp;
            }
}

void fun0(Class *x,char *number) {
    int i;
    int a,b,c,d;
    for(i = 1 ; i <= x->tot ; ++i)
        if(!strcmp(number,x->stu[i].number)) {
            puts("put the new score\nCN EN MT SC");
            scanf("%d%d%d%d",&a,&b,&c,&d);
            puts("Y/n");
            char c = getchar();
            if(c == 'n') return ;
            else {
                if(x->stu[i].CN >= 90) --x->CA;
                else {
                        if(x->stu[i].CN >= 80) --x->CB;
                        else {
                                if(x->stu[i].CN >= 70) --x->CC;
                                else {
                                    if(x->stu[i].CN >= 60) --x->CD;
                                    else --x->CE;
                                }
                        }
                }
                if(x->stu[i].MT >= 90) --x->MA;
                else {
                    if(x->stu[i].MT >= 80) --x->MB;
                    else {
                        if(x->stu[i].MT >= 70) --x->MC;
                        else {
                            if(x->stu[i].MT >= 60) --x->MD;
                            else --x->ME;
                        }
                    }
                }
                if(x->stu[i].EN >= 90) --x->EA;
                else {
                    if(x->stu[i].EN >= 80) --x->EB;
                    else {
                        if(x->stu[i].EN >= 70) --x->EC;
                        else {
                            if(x->stu[i].EN >= 60) --x->ED;
                            else --x->EE;
                        }
                    }
                }
                if(x->stu[i].SC >= 90) --x->SA;
                else {
                    if(x->stu[i].SC >= 80) --x->SB;
                    else {
                        if(x->stu[i].SC >= 70) --x->SC;
                        else {
                            if(x->stu[i].SC >= 60) --x->SD;
                            else --x->SE;
                        }
                    }
                }
                x->sum_CN += a-x->stu[i].CN;
                x->sum_EN += b-x->stu[i].EN;
                x->sum_MT += c-x->stu[i].MT;
                x->sum_SC += d-x->stu[i].SC;
                if(a >= 90) ++x->CA;
                else {
                    if(a >= 80) ++x->CB;
                    else {
                        if(a >= 70) ++x->CC;
                        else {
                            if(a >= 60) ++x->CD;
                            else ++x->CE;
                        }
                    }
                }
                if(b >= 90) ++x->EA;
                else {
                    if(b >= 80) ++x->EB;
                    else {
                        if(b >= 70) ++x->EC;
                        else {
                            if(b >= 60) ++x->ED;
                            else ++x->EE;
                        }
                    }
                }
                if(c >= 90) ++x->MA;
                else {
                    if(c >= 80) ++x->MB;
                    else {
                        if(c >= 70) ++x->MC;
                        else {
                            if(c >= 60) ++x->MD;
                            else ++x->ME;
                        }
                    }
                }
                if(d >= 90) ++x->SA;
                else {
                    if(d >= 80) ++x->SB;
                    else {
                        if(d >= 70) ++x->SC;
                        else {
                            if(d >= 60) ++x->SD;
                            else ++x->SE;
                        }
                    }
                }
            }
        }
}

void fun1(Class *x) {
    int i;
    sort(x,&cmp_sum);
    for(i = 1 ; i <= x->tot ; ++i)
        show(&x->stu[i]);
}

void fun2(Class *x) {
    int i;
    sort(x,&cmp_num);
    for(i = 1 ; i <= x->tot ; ++i)
        show(&x->stu[i]);
}

void fun3(Class *x) {
    int i;
    sort(x,&cmp_name);
    for(int i = 1 ; i <= x->tot ; ++i)
        show(&x->stu[i]);
}

void fun4(Class *x,char *name) {
    int i;
    sort(x,&cmp_sum);
    for(i = 1 ; i <= x->tot ; ++i)
        if(!strcmp(name,x->stu[i].name)) {
            printf("%d: ",i);show(&x->stu[i]);
            break;
        }
}

void fun5(Class *x,char *number) {
    int i;
    sort(x,&cmp_sum);
    for(i = 1 ; i <= x->tot ; ++i)
        if(!strcmp(number,x->stu[i].number)) {
            printf("%d ",i);show(&x->stu[i]);
            break;
        }
}

void fun6(Class *x) {
    int i;
    sort(x,&cmp_sum);
    for(i = 1 ; i <= x->tot ; ++i) {
        printf("Rank:%d ",i);
        show(&x->stu[i]);
    }
}

void fun7(Class *x) {
    printf("CN %lf %d %d %d %d %d %lf %lf %lf %lf %lf\n",x->sum_CN/(double)x->tot,x->CA,x->CB,x->CC,x->CD,x->CE,x->CA/(double)x->tot,x->CB/(double)x->tot,x->CC/(double)x->tot,x->CD/(double)x->tot,x->CE/(double)x->tot);
    printf("MT %lf %d %d %d %d %d %lf %lf %lf %lf %lf\n",x->sum_MT/(double)x->tot,x->MA,x->MB,x->MC,x->MD,x->ME,x->MA/(double)x->tot,x->MB/(double)x->tot,x->MC/(double)x->tot,x->MD/(double)x->tot,x->ME/(double)x->tot);
    printf("EN %lf %d %d %d %d %d %lf %lf %lf %lf %lf\n",x->sum_EN/(double)x->tot,x->EA,x->EB,x->EC,x->ED,x->EE,x->EA/(double)x->tot,x->EB/(double)x->tot,x->EC/(double)x->tot,x->ED/(double)x->tot,x->EE/(double)x->tot);
    printf("SC %lf %d %d %d %d %d %lf %lf %lf %lf %lf\n",x->sum_SC/(double)x->tot,x->SA,x->SB,x->SC,x->SD,x->SE,x->SA/(double)x->tot,x->SB/(double)x->tot,x->SC/(double)x->tot,x->SD/(double)x->tot,x->SE/(double)x->tot);
}

void load_from_std(Class *x) {
    puts("enter the number of students");
    scanf("%d",&x->tot);
    puts("number name sex CN MT EN SC");
    int i;
    for(i = 1 ; i <= x->tot ; ++i) {
        get(&x->stu[i]);
        x->sum_CN += x->stu[i].CN;
        x->sum_MT += x->stu[i].MT;
        x->sum_SC += x->stu[i].SC;
        x->sum_EN += x->stu[i].EN;
        x->stu[i].sum = x->stu[i].EN+x->stu[i].MT+x->stu[i].CN+x->stu[i].SC;
        x->stu[i].ave = x->stu[i].sum/4.0;
        if(x->stu[i].CN >= 90) ++x->CA;
        else {
            if(x->stu[i].CN >= 80) ++x->CB;
            else {
                if(x->stu[i].CN >= 70) ++x->CC;
                else {
                    if(x->stu[i].CN >= 60) ++x->CD;
                    else ++x->CE;
                }
            }
        }
        if(x->stu[i].MT >= 90) ++x->MA;
        else {
            if(x->stu[i].MT >= 80) ++x->MB;
            else {
                if(x->stu[i].MT >= 70) ++x->MC;
                else {
                    if(x->stu[i].MT >= 60) ++x->MD;
                    else ++x->ME;
                }
            }
        }
        if(x->stu[i].EN >= 90) ++x->EA;
        else {
            if(x->stu[i].EN >= 80) ++x->EB;
            else {
                if(x->stu[i].EN >= 70) ++x->EC;
                else {
                    if(x->stu[i].EN >= 60) ++x->ED;
                    else ++x->EE;
                }
            }
        }
        if(x->stu[i].SC >= 90) ++x->SA;
        else {
            if(x->stu[i].SC >= 80) ++x->SB;
            else {
                if(x->stu[i].SC >= 70) ++x->SC;
                else {
                    if(x->stu[i].SC >= 60) ++x->SD;
                    else ++x->SE;
                }
            }
        }
    }
}

void save_to_file(Class *x) {
    FILE *fp = fopen("date","w");
    fprintf(fp,"%d\n",x->tot);
    int i;
    fprintf(fp,"%d %d %d %d\n%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",
        x->sum_CN,x->sum_MT,x->sum_EN,x->sum_SC,
        x->CA,x->CB,x->CC,x->CD,x->CE,
        x->MA,x->MB,x->MC,x->MD,x->ME,
        x->EA,x->EB,x->EC,x->ED,x->EE,
        x->SA,x->SB,x->SC,x->SD,x->SE);
    for(i = 1 ; i <= x->tot ; ++i)
        fprintf(fp,"%s %s %s %d %d %d %d\n",x->stu[i].number, x->stu[i].name,x->stu[i].sex,x->stu[i].CN,x->stu[i].MT,x->stu[i].EN,x->stu[i].SC);
    fclose(fp);
}

void load_from_file(Class *x) {
    FILE *fp = fopen("date","r");
    fscanf(fp,"%d",&x->tot);
    int i;
    fscanf(fp,"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n",
            &x->sum_CN,&x->sum_MT,&x->sum_EN,&x->sum_SC,
            &x->CA,&x->CB,&x->CC,&x->CD,&x->CE,
            &x->MA,&x->MB,&x->MC,&x->MD,&x->ME,
            &x->EA,&x->EB,&x->EC,&x->ED,&x->EE,
            &x->SA,&x->SB,&x->SC,&x->SD,&x->SE);
    for(i = 1 ; i <= x->tot ; ++i) {
        fscanf(fp,"%s%s%s%d%d%d%d",x->stu[i].number,x->stu[i].name,x->stu[i].sex,&x->stu[i].CN,&x->stu[i].MT,&x->stu[i].EN,&x->stu[i].SC);
        x->stu[i].sum = x->stu[i].EN+x->stu[i].MT+x->stu[i].CN+x->stu[i].SC;
        x->stu[i].ave = x->stu[i].sum/4.0;
    }
    fclose(fp);
}

#endif //UNTITLED_CLASS_H

==student.h==👇

//
// Created by limbo_null on 12/21/17.
//

#ifndef UNTITLED_STUDENT_H
#define UNTITLED_STUDENT_H
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct {
    char name[100],number[100],sex[100];
    int CN,MT,EN,SC;
    int sum;double ave;
}student;

void get(student *a) {
    scanf("%s%s%s%d%d%d%d",a->number,a->name,a->sex,&a->CN,&a->MT,&a->EN,&a->SC);
}

int cmp_CN(student *a,student *b) {
    if(a->CN < b->CN) return 1;
    else return 0;
}

int cmp_MT(student *a,student *b) {
    if(a->MT < b->MT) return 1;
    else return 0;
}

int cmp_EN(student *a,student *b) {
    if(a->EN < b->EN) return 1;
    else return 0;
}

int cmp_SC(student *a,student *b) {
    if(a->SC < b->SC) return 1;
    else return 0;
}

int cmp_num(student *a,student *b) {
    if(a->number > b->number) return 1;
    else return 0;
}

int cmp_name(student *a,student *b) {
    if(strcmp(a->name,b->name) < 0) return 1;
    else return 0;
}

int cmp_sum(student *a,student *b) {
    if(a->sum < b->sum) return 1;
    else return 0;
}

void show(student *x) {
    printf("%s %s %s %d %d %d %d %d %d %lf\n",x->number,x->name,x->sex,x->sum,x->CN,x->MT,x->EN,x->SC,x->MT+x->EN+x->SC+x->CN,(x->MT+x->EN+x->SC+x->CN)/4.0);
}
#endif //UNTITLED_STUDENT_H

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!