STUDY/Assignment

객체 지향 과제 rep7

da1seun9 2020. 5. 30. 00:00

#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