Skip to content

Instantly share code, notes, and snippets.

@nesffer
Last active August 29, 2015 14:22
Show Gist options
  • Save nesffer/c7ea02c7790589f76acb to your computer and use it in GitHub Desktop.
Save nesffer/c7ea02c7790589f76acb to your computer and use it in GitHub Desktop.
Grades Management
Nesffer 21580023 10 20 30 40 50
Nesffer 21580023 60 70 80 90 100
Nesffer 21580023 90 80 70 60 50
Nesffer 21580023 40 30 20 10 20
Nesffer 21580023 30 40 50 60 70
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define HUMAN 5
// 구조체: 학생
struct student {
char name[10]; // 이름
char number[8]; // 학번
int subjects[5]; // 과목
int total; // 총점
double average; // 평균
char grade; // 등급
int rank; // 석차
};
// 등급 반환 함수
char Grade(char avg) {
char grade;
if (avg >= 90)
grade = 'A';
else if (avg >= 80)
grade = 'B';
else if (avg >= 70)
grade = 'C';
else if (avg >= 60)
grade = 'D';
else if (avg >= 50)
grade = 'E';
else
grade = 'F';
return grade;
}
int main() {
struct student s[HUMAN];
int subject_total[HUMAN];
double subject_average[HUMAN];
double student_total = 0;
double student_average;
int i, j;
FILE * f;
// 파일 읽기/텍스트 열기
f = fopen("grades.txt", "rt");
if (f == NULL) {
puts("파일 열기 실패!");
return -1;
}
// 파일 읽어 변수에 저장
for (i = 0; i < HUMAN; i++) {
fscanf(f, "%s %s %d %d %d %d %d", s[i].number, s[i].name, &s[i].subjects[0], &s[i].subjects[1], &s[i].subjects[2], &s[i].subjects[3], &s[i].subjects[4]);
s[i].total = s[i].subjects[0] + s[i].subjects[1] + s[i].subjects[2] + s[i].subjects[3] + s[i].subjects[4];
s[i].average = (double)s[i].total / HUMAN;
s[i].grade = Grade(s[i].average);
}
fclose(f);
// 1등으로 초기화
for (i = 0; i < HUMAN; i++)
s[i].rank = 1;
// j 학생보다 i 학생의 평균이 작으면 석차++
for (i = 0; i < HUMAN; i++) {
for (j = 0; j < HUMAN; j++) {
if (s[i].average < s[j].average)
s[i].rank++;
}
}
// 과목별 총합
for (i = 0; i < HUMAN; i++) {
subject_total[i] = s[0].subjects[i] + s[1].subjects[i] + s[2].subjects[i] + s[3].subjects[i] + s[4].subjects[i];
}
// 과목별 평균
for (i = 0; i < HUMAN; i++) {
subject_average[i] = (double)subject_total[i] / HUMAN;
}
// 총 학생 총점
for (i = 0; i < HUMAN; i++) {
student_total += s[i].average;
}
// 출력
puts("+----------------------------------------------------------------------------------+");
puts("| 이름 | 학번 | 국어 | 영어 | 수학 | 사회 | 과학 | 총점 | 평균 | 등급 | 석차 |");
puts("+--------+----------+------+------+------+------+------+------+------+------+------+");
for (i = 0; i < HUMAN; i++) {
printf("| %s | %s | %3d | %3d | %3d | %3d | %3d | %3d | %0.1lf | %c | %2d |\n",
s[i].number, s[i].name, s[i].subjects[0], s[i].subjects[1], s[i].subjects[2], s[i].subjects[3], s[i].subjects[4], s[i].total, s[i].average, s[i].grade, s[i].rank);
}
puts("+-------------------+------+------+------+------+------+------+------+------+------+");
puts("| 평균 | 국어 | 영어 | 수학 | 사회 | 과학 | | 학생 | |");
printf("| 점수 | %0.1lf | %0.1lf | %0.1lf | %0.1lf | %0.1lf | | %0.1lf | |\n",
subject_average[0], subject_average[1], subject_average[2], subject_average[3], subject_average[4], student_total / HUMAN);
puts("+----------------------------------------------------------------------------------+");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment