본문으로 바로가기

rep7

category c++/대학 과제 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];	// 과목 성적
};

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"); 
}

 

'c++ > 대학 과제' 카테고리의 다른 글

중간고사 실기  (0) 2020.05.25
rep6  (0) 2020.05.25
rep5  (0) 2020.05.25
rep4  (0) 2020.05.25
rep3  (0) 2020.05.25