C++ 12. 캡슐화 실습(학생)
- C++/설명
- 2016. 4. 19. 21:18
-캡슐화 실습(학생)
시나리오
학생은 생성할 때 학생 이름을 전달받습니다.
그리고 학생 번호는 순차적으로 부여합니다.
이 외에 학생의 국어, 영어, 수학 성적을 -1로 설정 합니다.
학생을 생성한 후에는 학생의 국어, 영어, 수학 성적을 입력할 수 있습니다. 만약 학생 성적이 0에서 100을 벗어나면 -1로 설정합니다.
학생 이름과 번호, 각 과목의 성적과 총점 및 평균을 확인할 수 있습니다. 그리고 전체 학생 수를 확인할 수 있습니다. 그리고 학생 정보를 출력하는 기능을 제공합니다.
//Student.h
#pragma once
#include <string>
#include <iostream>
using namespace std;
enum SIndex //과목 열거형
{
KOREAN, ENGLISH, MATH, MAX_SUBJECT
};
class Student//학생 클래스
{
static int last_num;//정적 멤버 필드
const int num;//상수화 멤버 필드
string name;
int scores[MAX_SUBJECT];
static const string titles[MAX_SUBJECT];//과목명 - 정적 멤버 필드
public:
static int GetStuCount();//정적 메서드
Student(string name);//생성자 초기화
bool SetScore(int sindex,int score);//성적 설정자
int GetScore(int sindex)const;//성적 접근자
int GetTotal()const;//총점 접근자
double GetAverage()const; //평균 접근자
bool AvailSIndex(int sindex)const;//성적 인덱스가 유효한지 판별
void View()const; //정보 출력
private:
bool SetScore(int sindex,int score,int); //성적 설정자
};
//Student.cpp
#include "Student.h"
#include <string>
const string Student::titles[MAX_SUBJECT]={"국어","영어","수학"};
int Student::last_num;
int Student::GetStuCount()
{
return last_num;
}
Student::Student(string name):num(last_num) //이니셜라이저 초기화
{
this->name = name;
++last_num;
//성적 초기화
for(int si = 0; si<MAX_SUBJECT; si++)
{
SetScore(si,-1, 0);
}
}
bool Student::SetScore(int sindex,int score)
{
if(AvailSIndex(sindex))
{
return SetScore(sindex,score,0);
}
return false;
}
int Student::GetScore(int sindex)const
{
if(AvailSIndex(sindex))
{
return scores[sindex];
}
return -1;
}
int Student::GetTotal()const
{
int sum = 0;
for(int i = 0; i < MAX_SUBJECT; i++)
{
if(GetScore(i) != -1)
{
sum += scores[i];
}
}
return sum;
}
double Student::GetAverage()const
{
return GetTotal() / (double)(MAX_SUBJECT);
}
bool Student::AvailSIndex(int sindex)const
{
return (sindex>=0)&&(sindex<MAX_SUBJECT);
}
void Student::View()const
{
cout<<"이름 :"<<name<<"번호 :"<<num+1<<endl;
for(int i = 0; i < MAX_SUBJECT; i++)
{
if(GetScore(i) == -1)
{
cout<<titles[i]<<": 입력 안 함"<<endl;
}
else
{
cout<<titles[i]<<","<<scores[i]<<endl;
}
}
cout<<"총점:"<<GetTotal()<<" 평균:"<<GetAverage()<<endl;
}
bool Student::SetScore(int sindex,int score,int)
{
if(score < 0 || score > 100)
{
scores[sindex] = -1;
return false;
}
scores[sindex] = score;
return true;
}
//Program.cpp
#include "Student.h"
int main()
{
Student *arr[3];
//학생 개체 생성
arr[0] = new Student("홍길동");
arr[1] = new Student("강감찬");
arr[2] = new Student("이순신");
//학생 목록 출력
cout<<"현재 학생 수:"<<Student::GetStuCount()<<endl;
for(int i = 0; i<3;i++)
{
arr[i]->View();
}
arr[0]->SetScore(0,90);//정상
arr[0]->SetScore(1,80);//정상
arr[0]->SetScore(3,90);//설정 오류
arr[1]->SetScore(0,100);//정상
arr[1]->SetScore(1,180);//설정 오류
arr[1]->SetScore(2,80);//정상
arr[2]->SetScore(0,80);//정상
arr[2]->SetScore(1,90);//정상
arr[2]->SetScore(2,90);//잘못
//학생 목록 출력
cout<<"현재 학생 수:"<<Student::GetStuCount()<<endl;
for(int i = 0; i<3;i++)
{
arr[i]->View();
}
//학생 개체 소멸
for(int i = 0; i<3;i++)
{
delete arr[i];
}
return 0;
}
'C++ > 설명' 카테고리의 다른 글
C++ 14.상속 일반화 개요 (0) | 2016.04.19 |
---|---|
C++ 13.C++에서의 형변환 (0) | 2016.04.19 |
C++ 11. 캡슐화 실습(학생 성적) (0) | 2016.04.19 |
C++ 10.캡슐화 실습(복소수) (0) | 2016.04.19 |
C++ 9.복사 생성자 (0) | 2016.04.19 |
이 글을 공유하기