C++/디딤돌 C++

학생 클래스 (캡슐화 최종 실습) [디딤돌 C++]

언제나휴일 2016. 4. 14. 12:40
반응형

학생 클래스 (캡슐화 최종 실습) [디딤돌 C++]

언제나 휴일 티스토리


학생 클래스 (캡슐화 최종 실습)


학생 클래스 (캡슐화 최종 실습)



학생 클래스(캡슐화 최종실습).zip



Student.h

//Student.h

#pragma once

#include <string>

using namespace std;

class Student

{

    const int pn;//주민번호

    static int last_pn;//가장 최근에 부여한 주민 번호

    string name;//이름

    int iq;//지력

    int hp;//체력

    int stress;//스트레스

    int scnt;//연속으로 공부한 횟수

   

    //능력치의 디폴트, 최소, 최대값

    static const int def_iq;

    static const int min_iq;

    static const int max_iq;

 

    static const int def_hp;

    static const int min_hp;

    static const int max_hp;

 

    static const int def_stress;

    static const int min_stress;

    static const int max_stress;

 

    static const int def_scnt;

    static const int min_scnt;

    static const int max_scnt;

public:

    Student(string name);//생성자

    void Study();//공부하다.

    void ListenLecture();//강의받다.

    void Sleep();//잠자다.

    void Relax();//휴식하다.

    void Drink();//음료마시다.

    void Sing();//노래하다.

    string GetName()const;//이름 접근자

    int GetPN()const;//주민번호 접근자

    int GetIQ()const;//지력 접근자

    int GetHP()const;//체력 접근자

    int GetStress()const;//스트레스 접근자

private:

    void SetIQ(int iq);//지력 설정자

    void SetHP(int hp); //체력 설정자

    void SetStress(int stress); //스트레스 설정자

    void SetScnt(int scnt); //연속으로 공부한 횟수 설정자

};

 

Student.cpp

//Student.cpp

#include "Student.h"

#include <iostream>

using namespace std;

int Student::last_pn;

const int Student::def_iq=100;

const int Student::min_iq=0;

const int Student::max_iq=200;

const int Student::def_hp=100;

const int Student::min_hp=0;

const int Student::max_hp=200;

const int Student::def_stress=0;

const int Student::min_stress=0;

const int Student::max_stress=100;

const int Student::def_scnt=0;

const int Student::min_scnt=0;

const int Student::max_scnt=5;

Student::Student(string name):pn(++last_pn)

{

    this->name = name;

    SetIQ(def_iq);

    SetHP(def_hp);

    SetStress(def_stress);

    SetScnt(def_scnt);

}

void Student::Study()

{

    //공부하다(체력 5소모, 지력: scnt 만큼 증가, 스트레스: 2감소)

    cout<<pn<<","<<name<<" 공부하다."<<endl;

    SetHP(hp - 5);

    SetIQ(iq+scnt);

    SetStress(stress-2);

    SetScnt(scnt+1);

}

void Student::ListenLecture()

{

    //강의를 받다.(체력 3소모, 지력: scnt 만큼 증가, 스트레스: scnt 만큼 증가)

    cout<<pn<<","<<name<<" 강의받다."<<endl;

    SetHP(hp - 3);

    SetIQ(iq+scnt);

    SetStress(stress+scnt);

    SetScnt(0);

}

void Student::Sleep()

{

    //잠자다.(체력 10회복, 스트레스: 5감소)

    cout<<pn<<","<<name<<" 잠자다."<<endl;

    SetHP(hp + 10);   

    SetStress(stress-5);

    SetScnt(0);

}

void Student::Relax()

{

    //휴식하다.(체력 3회복, 스트레스: 25감소)

    cout<<pn<<","<<name<<" 잠자다."<<endl;

    SetHP(hp -+ 3);   

    SetStress(stress-25);

    SetScnt(0);

}

void Student::Drink()

{

    //음료를 마시다.(체력 5회복, 지력:  10감소 , 스트레스: 2증가)

    cout<<pn<<","<<name<<"음료마시다."<<endl;

    SetHP(hp + 5);

    SetIQ(iq - 10);

    SetStress(stress + 2);

    SetScnt(0);

}

void Student::Sing()

{

    //노래하다.(체력 10 소모, 지력: 5-scnt감소, 스트레스: 5-scnt증가)

    cout<<pn<<","<<name<<" 노래하다."<<endl;

    SetHP(hp - 10);

    SetIQ(iq - (5-scnt));

    SetStress(stress+(5-scnt));

    SetScnt(0);

}

string Student::GetName()const

{

    return name;

}

int Student::GetPN()const

{

    return pn;

}

int Student::GetIQ()const

{

    return iq;

}

int Student::GetHP()const

{

    return hp;

}

int Student::GetStress()const

{

    return stress;

}

void Student::SetIQ(int iq)

{

    if(iq>max_iq)

    {

        iq = max_iq;

    }

    if(iq<min_iq)

    {

        iq = min_iq;

    }

    this->iq = iq;

}

void Student::SetHP(int hp)

{

    if(hp>max_hp)

    {

        hp = max_hp;

    }

    if(hp<min_hp)

    {

        hp = min_hp;

    }

    this->hp = hp;

}

void Student::SetStress(int stress)

{

    if(stress>max_stress)

    {

        stress = max_stress;

    }

    if(stress<min_stress)

    {

        stress = min_stress;

    }

    this->stress = stress;

}

void Student::SetScnt(int scnt)

{

    if(scnt>max_scnt)

    {

        scnt = max_scnt;

    }

    if(scnt<min_scnt)

    {

        scnt = min_scnt;

    }

    this->scnt = scnt;

}

 

Program.cpp

//Program.cpp

#include "Student.h"

#include <iostream>

using namespace std;

 

void ViewStuInfo(Student *stu);//학생 정보 출력

void TestPN();//순차적으로 주민 번호 부여 테스트

void TestStudy();//공부하다 테스트

void TestEtc();//나머지 테스트

int main()

{

    TestPN();//순차적으로 주민 번호 부여 테스트

    TestStudy();//공부하다 테스트

    TestEtc();//나머지 테스트

    return 0;

}

void ViewStuInfo(Student *stu)

{

    cout<<"주민 번호:"<<stu->GetPN()<<" 이름:"<<stu->GetName()<<endl;

    cout<<"지력:"<<stu->GetIQ()<<" 체력:"<<stu->GetHP()<<" 스트레스:"<<stu->GetStress()<<endl;

}

void TestPN()

{

    Student *stu;

    cout<<"10명의 학생 생성 소멸(순차적으로 주민 번호 부여 테스트)"<<endl;

    for(int i = 0; i<10;i++)

    {

        stu = new Student("테스트");

        ViewStuInfo(stu);

        delete stu;

    }

    cout<<endl;

}

void TestStudy()

{

    Student *stu = new Student("홍길동");

    ViewStuInfo(stu);

    cout<<"공부하다 8 실시"<<endl;

    for(int i = 0; i<8;i++)

    {

        stu->Study();

        ViewStuInfo(stu);       

    }

    delete stu;

}

void TestEtc()

{

    Student *stu = new Student("홍길동");

    ViewStuInfo(stu);

    cout<<"공부하다 3 실시"<<endl;

    for(int i = 0; i<3;i++)

    {

        stu->Study();

        ViewStuInfo(stu);       

    }

    cout<<"강의받다 3 실시"<<endl;

    for(int i = 0; i<3;i++)

    {

        stu->ListenLecture();

        ViewStuInfo(stu);    

    }

    cout<<"공부하다 1 실시"<<endl;

    stu->Study();

    ViewStuInfo(stu);

    //이하 생략

    delete stu;

}

 

* 디딤돌 C++  22. 캡슐화 최종 실습에서

디딤돌 C++ 소개 바로가기

반응형