소ê°� ¶
ê¼ ë³¸ì�¸ì�´ 모ë‘� í•™ì �계산프로그램ì�„ 완성한 후 ì œ ê°€ ì§ ì½”ë“œì™€ 비êµ�í•´ 보시기 ë°”ëž�니다.
코드 ¶
CalculateGrade.h ¶
~cpp
#ifndef CALCULATEGRADE_H_
#define CALCULATEGRADE_H_
#include "Student.h"
class CalculateGrade
{
private:
static const int NUM_STUDENT; // 학� 수(�수 멤버)
Student * student; // 학�들� 배열 ��터
public:
CalculateGrade(); // �성�
void sort_student(); // í�‰ì �으로 ì •ë ¬
void show_good_student(); // 장학ìƒ� 명단 ì¶œë ¥
void show_bad_student(); // í•™ê³ ëª…ë‹¨ ì¶œë ¥
~CalculateGrade(); // 파괴�
};
#endif
CalculateGrade.cpp ¶
~cpp
#include <iostream>
using namespace std;
#include "CalculateGrade.h"
// �수멤버 초기화
// - 배열 ��스를 1부터 쓰기 위해 학� 수보다 하나 � �게 잡는다.
const int CalculateGrade::NUM_STUDENT = 121;
// �성�
CalculateGrade::CalculateGrade()
{
// í•™ìƒ� ë°°ì—´ì�„ ë�™ì � í• ë‹¹
student = new Student[NUM_STUDENT];
// ì �수를 ìž…ë ¥ë°›ì•„ ê°�ì²´ë°°ì—´ì�˜ 멤버를 초기화
for (int i = 1; i < NUM_STUDENT; i++)
student[i].input_grade();
}
// í�‰ì �으로 ì •ë ¬ì‹œí‚¨ë‹¤.
void CalculateGrade::sort_student()
{
int p;
Student temp;
for (int i = 1; i < NUM_STUDENT; i++)
{
p = i;
for (int j = i + 1; j < NUM_STUDENT; j++)
{
if (student[p].average < student[j].average)
p = j;
}
temp = student[i];
student[i] = student[p];
student[p] = temp;
}
}
// 장학�(�위 10%) � 명단� 보�다.
void CalculateGrade::show_good_student()
{
int num = NUM_STUDENT / 10;
sort_student();
cout << "장학� 명단\n";
for (int i = 1; i <= num; i++)
student[i].show();
cout << "\n\n";
}
// í•™ê³ (í•™ì � 1.5미만)ì�˜ 명단ì�„ ë³´ì�¸ë‹¤.
void CalculateGrade::show_bad_student()
{
cout << "í•™ê³ ëª…ë‹¨\n";
for (int i = 1; i < NUM_STUDENT; i++)
{
if (student[i].average < 1.5)
student[i].show();
}
cout << "\n\n";
}
// 파괴�
CalculateGrade::~CalculateGrade()
{
delete [] student;
}
Student.h ¶
~cpp
#ifndef STUDENT_H_
#define STUDENT_H_
class Student
{
private:
static const int NUM_GRADE; // 과목 수 (�수 멤버)
int number; // 학번
double grade[4]; // 4과목 ì �수
public:
double average; // í�‰ì �
Student(); // �성�
void find_average(); // í�‰ì �ì�„ 구하는 함수
void input_grade(); // ì �수ì�„ ìž…ë ¥ë°›ëŠ” 함수
void show(); // ì¶œë ¥í•¨ìˆ˜
};
#endif
Student.cpp ¶
~cpp
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
#include "Student.h"
// �수 멤버� 초기화
const int Student::NUM_GRADE = 4;
// �성�
Student::Student()
{
average = 0.0;
number = 0;
}
// 파ì�¼ë¡œë¶€í„° 4과목 ì �수를 ì�½ëŠ”ë‹¤.
void Student::input_grade()
{
static char alpa_grade[9][3] = {"A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"};
static double ital_grade[9] = {4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0};
static fstream fin("input.txt");
char str[3];
fin.ignore(100, ' '); // 사용ìž� ì§€ì • 문ìž�ê°€ 나올때까지 ì�½ì–´ 버리는 함수
fin >> number;
fin.ignore(100, ':');
// 해당 í•™ì �ì�„ double형 숫ìž�로 1대 1 로 변환 시켜 ìž…ë ¥
for (int i = 0; i < NUM_GRADE; i++)
{
fin >> str; // >> � white space(공백)� 무시한다.
for (int j = 0; j < 9; j++)
{
if (strcmp(str, alpa_grade[j]) == 0)
{
grade[i] = ital_grade[j];
break;
}
}
}
fin.ignore(100, '\n');
find_average();
}
// 4 과목 ì �수ì�˜ í�‰ì �ì�„ 구한다.
void Student::find_average()
{
double sum = 0.0;
for (int i = 0; i < NUM_GRADE; i++)
sum += grade[i];
average = sum / NUM_GRADE;
}
// í•™ìƒ� ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤.
void Student::show()
{
cout << "학번 : " << number << " í�‰ì � : " << average << endl;
}
testCalculateGrade.cpp ¶
~cpp
#include "CalculateGrade.h"
int main()
{
CalculateGrade test;
test.show_good_student();
test.show_bad_student();
return 0;
}










