#include <iostream>
#include <iomanip>
using namespace std;
#define REC 5
#define SUBJECT 10
struct student {
int number; // 학번
char name[7]; // 성명
int grade[SUBJECT]; // 과목 성적
}s;
void bubble_sort(student *st, int *idx, int n) // 버블 정렬 함수(성명순 정렬) st : 구조체 idx : 인덱스 n : 구조체 배열의 크기
{
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (strcmp(st[i].name, st[j].name) > 0) {
swap(st[i].name, st[j].name);
swap(st[i].number, st[j].number);
swap(st[i].grade, st[j].grade);
}
}
}
}
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 모두 포함
{
int i,j;
int g[SUBJECT] = { 0 };
if (flag == 1) {
cout << endl << setw(66) << "학 생 성 적 표<입력순>" << endl;
cout << setw(66) << "=======================" << endl << endl;
cout << setw(20) << "학 번 " << " 성 명" << " 성 적" << " 평 균" << endl;
cout << setw(96) << "-------------------------------------------------------------------------------------" << endl;
for (i = 0; i < REC; i++) {
cout << setw(20) << st[i].number << " ";
cout << st[i].name << " ";
for (j = 0; j < SUBJECT; j++) {
g[i] = st[i].grade[j];
cout << setw(5) << g[i];
}
cout << fixed;
cout.precision(1);
cout << setw(10) << st_avg[i];
cout << endl;
}
cout << setw(96) << "-------------------------------------------------------------------------------------" << endl;
cout << setw(30) << "과목평균";
for (i = 0; i < SUBJECT; i++) {
if (i == 0) cout << setw(10) << c_avg[i];
else cout << setw(5) << c_avg[i];
}
cout << fixed;
cout.precision(1);
cout << setw(10) << t_score;
cout << endl << setw(96) << "-------------------------------------------------------------------------------------" << endl;
cout << endl;
}
if (flag == 2) {
cout << endl << setw(66) << "학 생 성 적 표<성명순>" << endl;
cout << setw(66) << "=======================" << endl << endl;
cout << setw(20) << "학 번 " << " 성 명" << " 성 적" << " 평 균" << endl;
cout << setw(96) << "-------------------------------------------------------------------------------------" << endl;
for (i = 0; i < REC-1; i++) {
for (j = i + 1; j < REC; j++) {
swap(st_avg[i], st_avg[j]);
}
}
for (i = 0; i < REC; i++) {
cout << setw(20) << st[i].number << " ";
cout << st[i].name << " ";
for (j = 0; j < SUBJECT; j++) {
g[i] = st[i].grade[j];
cout << setw(5) << g[i];
}
cout << fixed;
cout.precision(1);
cout << setw(10) << st_avg[i];
cout << endl;
}
cout << setw(96) << "-------------------------------------------------------------------------------------" << endl;
cout << setw(30) << "과목평균";
for (i = 0; i < SUBJECT; i++) {
if (i == 0) cout << setw(10) << c_avg[i];
else cout << setw(5) << c_avg[i];
}
cout << fixed;
cout.precision(1);
cout << setw(10) << t_score;
cout << endl << setw(96) << "-------------------------------------------------------------------------------------" << endl;
cout << endl;
}
}
void main(void)
{
int i,j;
float st_avg[REC] = { 0 };
float c_avg[SUBJECT] = { 0 };
float t_score = 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}
};
// 학생 성적 평균
for (i = 0; i < REC; i++) {
for (j = 0; j < SUBJECT; j++) {
st_avg[i] += score[i].grade[j];
}
st_avg[i] = st_avg[i] / SUBJECT;
}
// 과목 성적 평균
for (j = 0; j < SUBJECT; j++) {
for (i = 0; i < REC; i++) {
c_avg[j] += score[i].grade[j];
}
c_avg[j] = c_avg[j] / REC;
}
//전체 성적 평균
for (i = 0; i < REC; i++) {
t_score += st_avg[i];
}
t_score = t_score / REC;
grade_print(score, NULL, st_avg, c_avg, t_score, REC, 1);
bubble_sort(score, NULL, REC);
grade_print(score, NULL, st_avg, c_avg, t_score, REC, 2);
printf("\n>> 작업이 종료되었습니다. \n\n");
}
'STUDY > Assignment' 카테고리의 다른 글
객체 지향 과제 rep 8-2 (0) | 2020.06.09 |
---|---|
객체 지향 과제 rep 8-1 (0) | 2020.06.05 |
객체 지향 과제 rep6 (0) | 2020.05.18 |
보안 자료 구조 과제 (0) | 2020.05.04 |
객체 지향 과제 rep4 (1) | 2020.04.25 |