C++ 12. 캡슐화 실습(학생)

-캡슐화 실습(학생)

 

시나리오

학생은 생성할 학생 이름을 전달받습니다.

그리고 학생 번호는 순차적으로 부여합니다.

외에 학생의 국어, 영어, 수학 성적을 -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;

}

 

 

728x90

'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

이 글을 공유하기

댓글

Designed by JB FACTORY