学生成绩管理
一、程序说明
假设某班有不超过40人(具体人数在程序运行时由键盘录入)参加本学期的期末考试,考试科目为语文(CN),数学(MT),英语(EN),科学(SC)。要求编写一个学生成绩管理系统,实现对班级学生成绩的录入、修改、查找、删除、显示、排序、统计、保存等操作的管理。
二、程序设计要求
系统主菜单应包括:
- 录入每个同学的学号、姓名、性别和各科的考试成绩;
- 成绩修改:可以根据输入的学号修改成绩;在修改之前需要用户进一步确认,确认无误后再进行操作。
- 计算每门课程的总分和平均分;
- 计算每个学生所有课程的总分和平均分;
- 按每个学生的总分进行排序;
- 按学号排出成绩表;
- 按姓名的字典顺序排出成绩表;
- 按姓名查询学生的各科成绩、总分、平均分及在班级的排名;
- 按学号查询学生的各科成绩、总分、平均分及在班级的排名;
- 对每门课程按优(90~100)、良(80~89)、中(70~79)、及格(60~69)、不及格(0~59)统计人数,及所占的百分比。
- 输出每个学生的姓名、学号、性别、各门课程的考试成绩、总分、平均分及在班级内的排名;
- 输出班级每门课程的统计数据:包括每门课程的平均分、每门课程优、良、中、及格、不及格的人数及所占百分比;
- 将每个学生的相关信息写入文件保存;
- 从文件中读出相关信息并进行处理;
- 退出系统
执行一个具体的功能之后,程序将重新显示菜单,直至选择退出系统的功能。
==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))