언어 자료구조 알고리즘/프로그래밍 실습

[python] 캡슐화 실습 - 학생 유닛 키우기

언제나휴일 2020. 10. 29. 12:18
반응형

시나리오

학생 유닛 키우기
콘솔 응용 프로그램이다.
메뉴 선택에 따라 기능을 수행한다.
1:생성 2:자습 3:강의시작 4:소등 5:취미 활동 6:파티 7:노래방가기 8:상태 확인

자습(공부하기), 취미 활동(휴식), 노래방 가기는 한 유닛을 선택하여 적용
강의시작, 소등(잠자기), 파티(음료마시기)는 전체 유닛에 적용

다음 내용처럼 학생 데이터를 정의하시오.
이름: 생성 시 전달
지력:100(최소 0, 최대 200)
체력: 100 (최소 0, 최대 200)
스트레스: 0 (최소 0, 최대 100)
연속으로 공부한 횟수: 0 (0,5), 공부를 하면 1 증가, 그 외의 행위를 하면 0으로 리셋, scnt로 부름

공부하다(체력 5소모, 지력: scnt 만큼 증가, 스트레스: 2감소)
강의를 받다.(체력 3소모, 지력: scnt 만큼 증가, 스트레스: scnt 만큼 증가)
잠자다.(체력 10회복, 스트레스: 5감소)
휴식하다.(체력 3회복, 스트레스: 25감소)
음료를 마시다.(체력 5회복, 지력:  10감소 , 스트레스: 2증가)
노래하다.(체력 10 소모, 지력: 5-scnt감소, 스트레스: 5-scnt증가)

클래스 다이어그램

 

취미활동, 노래방가기, 소등, 파티 부분은 자습, 강의시작을 구현한 것을 참고하여 직접 작성해 보세요.


Student.py

class Student:
    def __init__(self, name):
        self.name = name
        self.iq = 100
        self.hp = 100
        self.stress = 0
        self.scnt = 0
    def Study(self):
        self.SetHp(self.hp-5)
        self.SetIq(self.iq+self.scnt)
        self.SetStress(self.stress-2)
        self.IncreScnt()
    def ListenLecture(self):
        self.SetHp(self.hp-3)
        self.SetIq(self.iq+self.scnt)
        self.SetStress(self.stress+self.scnt)
        self.ResetScnt()
    def Sleep(self):
        self.SetHp(self.hp+10)
        self.SetStress(self.stress-5)
        self.ResetScnt()
    def Relax(self):
        self.SetHp(self.hp+3)
        self.SetStress(self.stress-25)
        self.ResetScnt()
    def Drink(self):
        self.SetHp(self.hp+5)
        self.SetIq(self.iq-10)
        self.SetStress(self.stress+2)
        self.ResetScnt()
    def Sing(self):
        self.SetHp(self.hp-10)
        self.SetIq(self.iq -(5-self.scnt))
        self.SetStress(self.stress+(5-self.scnt))
        self.ResetScnt()
    def IncreScnt(self):
        if self.scnt<5:
            self.scnt+=1
    def ResetScnt(self):
        self.scnt=0
    def SetStress(self,value):
        if value<0:
            value = 0
        if value>100:
            value = 100
        self.stress = value
    def SetIq(self,value):
        if value<0:
            value = 0
        if value>200:
            value = 200
        self.iq = value
    def SetHp(self,value):
        if value<0:
            value = 0
        if value>200:
            value = 200
        self.hp = value

Application.py

import os
import Student
class Application:
    def __init__(self):
        print("학생 유닛 키우기...")
        input("엔터 키를 누르면 시작합니다.")
        self.stucol = list()
    def Run(self):        
        while True:
            key = self.SelectMenu()
            if key =='0':
                break
            elif key == '1':
                self.MakeUnit()
            elif key == '2':
                self.SelfStudy()
            elif key == '3':
                self.StartLecture()
            elif key == '4':
                self.TurnOff()
            elif key == '5':
                self.DoFavorite()
            elif key == '6':
                self.GoParty()
            elif key == '7':
                self.GoNoraebang()
            elif key == '8':
                self.ViewStates()
            else:
                print("잘못 선택하였습니다.")
            input("엔터 키를 누르세요.")
    def SelectMenu(self):
        os.system("cls")
        print("1:유닛 생성")
        print("2:자습")
        print("3:강의 시작")
        print("4:소등")
        print("5:취미 활동")
        print("6:파티")
        print("7:노래방 가기")
        print("8:상태 보기")
        return input("메뉴 선택:")
    def MakeUnit(self):
        print("유닛 생성")
        name = input("이름:")
        stu = Student.Student(name)
        self.stucol.append(stu)
    def SelfStudy(self):
        print("자습")
        stu = self.SelectStudent("자습할 학생:")
        if stu == None:
            print("없는 학생입니다.")
            return
        print("{0} 공부한다.".format(stu.name))
        stu.Study()
    def SelectStudent(self,msg):
        name = input(msg)
        for stu in self.stucol:
            if stu.name == name:
                return stu
        return None
    def StartLecture(self):
        print("강의 시작")
        for stu in self.stucol:
            print("{0}...".format(stu.name))
            stu.ListenLecture()
    def TurnOff(self):
        print("소등")
    def DoFavorite(self):
        print("취미 활동")
    def GoParty(self):
        print("파티")
    def GoNoraebang(self):
        print("노래방 가기")
    def ViewStates(self):
        print("상태 보기")
        for stu in self.stucol:
            self.ViewStudent(stu)
    def ViewStudent(self,stu):
        print("{0}:{1},{2},{3}".format(stu.name,stu.iq,stu.hp,stu.stress))

main.py

import Application
def main():
    app = Application.Application()
    app.Run()


if __name__ == '__main__':
    main()
반응형