//
// Student.c
// test
//
// Created by 王炜晨 on 2022/12/5.
//
#include "Student.h"
#include <stdlib.h>
#include <sys/malloc.h>
Student *students = NULL;
int length = 0;
void addStudent(int number, int *scores, int totalScore){
length += 1;
if(students == NULL){
students = malloc(sizeof(Student) * length);
} else {
students = realloc(students, sizeof(Student) * length);
}
Student student;
student.number = number;
student.scores = scores;
student.totalScore = totalScore;
students[length - 1] = student;
}
void getScoreByNumber(int number){
for (int i = 0; i < length; i++) {
if(students[i].number == number){
Student student = students[i];
int studentLength = sizeof(student.scores) / sizeof(int);
printf("学号 ");
for (int l = 0; l < studentLength; l++)
{
printf("科目%d成绩 ", l);
}
printf("总分 ");
printf("\n");
printf("%d ", students[i].number);
for (int k = 0; k < studentLength; k++)
{
printf(" %d ", students[i].scores[k]);
}
printf(" %d ", students[i].totalScore);
printf("\n");
break;
}
}
}
void sortStudent(int scoresLength){
Student tem;
for (int i = 0; i < length; i++)
{
if (students[i].totalScore < students[i + 1].totalScore)
{
tem.number = students[i].number;
tem.totalScore = students[i].totalScore;
tem.scores = students[i].scores;
students[i].number = students[i + 1].number;
students[i].totalScore = students[i + 1].totalScore;
students[i].scores = students[i + 1].scores;
students[i + 1] = tem;
}
}
printf("学生成绩排名:\n");
printf("\n");
printf("学号 ");
for (int l = 0; l < scoresLength; l++)
{
printf("科目%d成绩 ", l);
}
printf("总分 ");
printf("\n");
printf("\n");
for (int j = 0; j < length; j++)
{
printf("%d ", students[j].number);
for (int k = 0; k < scoresLength; k++)
{
printf(" %d ", students[j].scores[k]);
}
printf(" %d ", students[j].totalScore);
printf("\n");
printf("\n");
}
}
void getStatistical(int scoresLength){
int statisticalArr[scoresLength][5];
for(int m = 0; m < scoresLength; m++){
for(int n = 0; n < 5; n++){
statisticalArr[m][n] = 0;
}
}
for (int i = 0; i < length; i++){
Student student = students[i];
for (int j = 0; j < scoresLength; j++){
int score = student.scores[j];
if(score >=0 && score < 60){
statisticalArr[j][0]++;
} else if(score >=60 && score < 70){
statisticalArr[j][1]++;
} else if(score >=70 && score < 80){
statisticalArr[j][2]++;
} else if(score >=80 && score < 90){
statisticalArr[j][3]++;
} else if(score >=90 && score <= 100){
statisticalArr[j][4]++;
}
}
}
printf("课程名称 不及格 及格 中等 良好 优秀 ");
printf("\n");
printf("\n");
for (int k = 0; k < scoresLength; k++) {
printf("科目%d ",k+1);
for (int l = 0; l < 5; l++) {
printf("%d ",statisticalArr[k][l]);
}
printf("\n");
printf("\n");
}
}