내가푼답
#include <iostream>
#include <iomanip>
using namespace std;
#define REC 5
#define SUBJECT 10
struct student {
int number; // 학번
char name[7]; // 성명
int grade[SUBJECT]; // 과목 성적
};
const char *head[] = { " 학 생 성 적 표<입력순>", " 학 생 성 적 표<성명순>" };
int i, j, flag, idx, no, n, sum[REC] = { 0, }, sum2[SUBJECT] = { 0, };
float st_avg[REC] = { 0, }, c_avg[SUBJECT] = { 0, }, t_score = 0,sum3=0;
student score[REC] = { {11111111,"홍길동", 90,91,92,93,94,94,93,92,91,90},
{22222222,"이영희", 90,80,90,80,90,80,90,80,90,80},
{33333333,"이수일", 80,81,82,83,84,85,86,87,88,89},
{44444444,"박문수", 70,71,72,73,74,75,76,77,78,79},
{55555555,"김철수", 90,91,92,93,94,95,96,97,98,99} };
void bubble_sort(student *st, int *idx, int n)// 버블 정렬 함수(성명순 정렬)
{
// st : 구조체 idx : 인덱스 n : 구조체 배열의 크기
for (i = 0; i < REC-1; i++) {
for (j = 1 + i; j < REC; j++) {
if (strcmp(score[i].name, score[j].name) > 0)
{
swap(score[i].name, score[j].name);
swap(score[i].number, score[j].number);
swap(score[i].grade, score[j].grade);
swap(st_avg[i], st_avg[j]);
}
}
}
}
void grade_print(student *st, int *idx, float *st_avg, float *c_avg, float t_score, int no, int flag) {
// st, idx : 생략 st_avg : 학생 성적 평균 c_avg : 과목 성적 평균 t_score : 전체 성적 평균
// no : 학생수 flag : 입력순, 성명순 지정 변수(입력순=1, 성명순 정열=2) <----- heading과 tail 모두 포함
cout << "\n\t\t\t\t\t" << head[flag - 1] << endl;
cout << "\t\t\t\t\t" << " ========================";
cout << "\n\n" << " 학 번 성 명 성 적 평 균 ";
cout << "\n" << " " << setfill('-') << setw(113) << "-" << endl << setfill(' ');
cout << fixed;
cout.precision(1);
for (i = 0; i < REC; i++) {
cout << " " << score[i].number << setw(15) << score[i].name << " " << setw(22);
for (j = 0; j < SUBJECT; j++) cout << setw(7) << score[i].grade[j];
cout << setw(10) << st_avg[i] << endl;
}
cout << " " << setfill('-') << setw(113) << "-" << endl << setfill(' ');
cout << " 과목평균 ";
for (i = 0; i < SUBJECT; i++) {
cout << " " << c_avg[i];
}
cout << " " << t_score;
cout << "\n" << " " << setfill('-') << setw(113) << "-" << endl << setfill(' ');
}
void main(void)
{
for (i = 0; i < REC; i++) {
for (j = 0; j < SUBJECT; j++) {
sum[i] += score[i].grade[j];
}
st_avg[i] = (float)sum[i] / (SUBJECT);
}
for (i = 0; i < SUBJECT; i++) {
for (j = 0; j < REC; j++) {
sum2[i] += score[j].grade[i];
}
c_avg[i] = (float)sum2[i] / (REC);
}
for (i = 0; i < REC; i++) {
sum3 += st_avg[i];
}
t_score = sum3 / REC;
flag = 1;
grade_print(score, &idx, st_avg, c_avg, t_score, no, flag);
bubble_sort(score,&idx,n);
flag = 2;
grade_print(score, &idx, st_avg, c_avg, t_score, no, flag);
printf("\n>> 작업이 종료되었습니다. \n\n");
}