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

[python] 상속 실습 - 상품과 할인 상품

언제나 휴일 언제나휴일 2020. 10. 30. 11:19
반응형

클래스 다이어그램

주석으로 작성한 시나리오에 맞게 상품과 할인 상품 클래스를 정의하시오.

Product.py

#Product.py
#상품
#     상품명, 제조사,가격, 보유 개수, 판매량
#     생성할 때 상품명과 제조사, 가격을 입력받는다.
#     입고 기능에서는 입고 개수를 입력 인자로 받는다.
#     판매 기능에서는 출고 개수를 입력 인자로 받는다.
#     현황 보기에서는 상품명, 제조사, 가격, 보유 개수, 판매량, 판매 총액을 출력한다.


SaleProduct.py

#SaleProduct.py
#할인 상품:상품에서 파생
#             할인률(생성 시 전달)을 멤버로 갖는다. 
#             할인현황보기를 제공한다. 
#                 - 상품의 현황보기 외에 할인률을 고려하여 출력한다.

Main.py

from SaleProduct import SaleProduct
from Product import Product
sp = SaleProduct("롤TV","모르지",1000000000,0.2)
sp.ViewState()
sp.SaleViewState()

sp.InProduct(10)
sp.OutProduct(3)
sp.ViewState()
sp.SaleViewState()

sp.OutProduct(10)
sp.ViewState()
sp.SaleViewState()

sp.InProduct(5)
sp.OutProduct(2)
sp.ViewState()
sp.SaleViewState()

p = Product("롤TV","모르지",1000000000)
p.ViewState()

p.InProduct(10)
p.OutProduct(3)
p.ViewState()

p.OutProduct(10)
p.ViewState()

p.InProduct(5)
p.OutProduct(2)
p.ViewState()

실습 예

Product.py

#Product.py
#상품
#     상품명, 제조사,가격, 보유 개수, 판매량
#     생성할 때 상품명과 제조사, 가격을 입력받는다.
#     입고 기능에서는 입고 개수를 입력 인자로 받는다.
#     판매 기능에서는 출고 개수를 입력 인자로 받는다.
#     현황 보기에서는 상품명, 제조사, 가격, 보유 개수, 판매량, 판매 총액을 출력한다.
class Product:
    #생성자(초기화) 메서드
    def __init__(self,name,company,price):
        self.name = name
        self.company = company
        self.price = price
        self.hcount = 0
        self.scount = 0
    def ViewState(self):
        print("상품명:",self.name)
        print("  제조사:",self.company)
        print("  가격:",self.price)
        print("  보유 개수:",self.hcount)
        print("  판매량:",self.scount)
        print("  판매 총액:",self.scount*self.price)
    def InProduct(self,cnt):
        self.hcount += cnt
    def OutProduct(self,cnt):
        if(self.hcount<cnt):
            cnt = self.hcount
        self.hcount -=cnt
        self.scount += cnt
        return cnt

SaleProduct.py

#SaleProduct.py
#할인 상품:상품에서 파생
#             할인률(생성 시 전달)을 멤버로 갖는다. 
#             할인현황보기를 제공한다. 
#                 - 상품의 현황보기 외에 할인률을 고려하여 출력한다.
from Product import Product
class SaleProduct(Product):
    def __init__(self,name,company,price,salep):
        Product.__init__(self,name,company,price)
        self.salep = salep
    def SaleViewState(self):
        self.ViewState()
        print("  할인율:",self.salep)
        print("실제 판매 가격:",self.price*(1-self.salep))
        print("실제 판매 총액:",self.price*self.scount*(1-self.salep))

Main.py

from SaleProduct import SaleProduct
from Product import Product
sp = SaleProduct("롤TV","모르지",1000000000,0.2)
sp.ViewState()
sp.SaleViewState()

sp.InProduct(10)
sp.OutProduct(3)
sp.ViewState()
sp.SaleViewState()

sp.OutProduct(10)
sp.ViewState()
sp.SaleViewState()

sp.InProduct(5)
sp.OutProduct(2)
sp.ViewState()
sp.SaleViewState()

p = Product("롤TV","모르지",1000000000)
p.ViewState()

p.InProduct(10)
p.OutProduct(3)
p.ViewState()

p.OutProduct(10)
p.ViewState()

p.InProduct(5)
p.OutProduct(2)
p.ViewState()
반응형