과제
(파이썬, MySQL, 과제) 자판기 프로그램
흰둥아솜사탕
2023. 3. 28. 10:02
728x90
반응형
MySQL
use kdt;
create table tb_machine(
m_num int auto_increment primary key,
m_name varchar(50) unique,
m_price int not null,
m_cnt int default 0
);
DTO
class MachineDTO:
def __init__(self, mNum, mName, mPrice, mCnt):
self.mNum = mNum
self.mName = mName
self.mPrice = mPrice
self.mCnt = mCnt
def setMNum(self, mNum):
self.mNum = mNum
def getMNum(self):
return self.mNum
def setMName(self, mName):
self.mName = mName
def getMName(self):
return self.mName
def setMPrice(self, mPrice):
self.mPrice = mPrice
def getMPrice(self):
return self.mPrice
def setMCnt(self, mCnt):
self.mCnt = mCnt
def getMCnt(self):
return self.mCnt
DAO
import MySQLdb
class MachineDAO:
def __init__(self):
self.db = None
def connect(self):
self.db = MySQLdb.connect('localhost', 'root', '1234', 'kdt')
def disconnect(self):
self.db.close()
def selectAll(self):
self.connect()
cur = self.db.cursor(MySQLdb.cursors.DictCursor)
sql = "select m_num, m_name, m_price, m_cnt from tb_machine"
cur.execute(sql)
datas = []
while True:
data = cur.fetchone()
if data:
datas.append(data)
else:
break
self.disconnect()
return datas
def selectOne(self, mNum):
self.connect()
cur = self.db.cursor(MySQLdb.cursors.DictCursor)
sql = "select m_num, m_name, m_price, m_cnt from tb_machine where m_num = %s"
data = (mNum,)
cur.execute(sql, data)
data = cur.fetchone()
self.disconnect()
return data
def insert(self, mDto):
self.connect()
cur = self.db.cursor()
sql = "insert into tb_machine (m_name, m_price, m_cnt) values (%s, %s, %s)"
data = (mDto.getMName(), mDto.getMPrice(), mDto.getMCnt())
cur.execute(sql, data)
self.db.commit()
self.disconnect()
def update(self, column, content, mNum):
self.connect()
cur = self.db.cursor()
sql = "update tb_machine set " + column + " = %s where m_num = %s"
data = (content, mNum)
cur.execute(sql, data)
self.db.commit()
self.disconnect()
def delete(self, mNum):
self.connect()
cur = self.db.cursor()
sql = "delete from tb_machine where m_num = %s"
data = (mNum,)
cur.execute(sql, data)
self.db.commit()
self.disconnect()
Service
class AdminMachineService:
def __init__(self):
self.mDao = MachineDAO()
def login(self):
check = input('관리자 비밀번호를 입력하세요')
if check == '1234':
return True
else:
return False
def showAll(self):
datas = self.mDao.selectAll()
for data in datas:
print(f"제품번호 : {data['m_num']}\n제품명 : {data['m_name']}\n가격 : {data['m_price']}\n수량 : {data['m_cnt']}\n")
def create(self):
mName = input('제품명을 입력하세요: ')
mPrice = int(input('가격을 입력하세요: '))
mCnt = int(input('수량을 입력하세요: '))
mDto = MachineDTO(_, mName, mPrice, mCnt)
try:
self.mDao.insert(mDto)
print('제품이 등록되었습니다')
except:
print('이미 존재하는 제품입니다')
def modify(self):
columns = {1:'m_name', 2:'m_price', 3:'m_cnt'}
mNum = int(input('제품번호를 입력하세요: '))
columnNum = int(input('1. 제품명수정 2. 가격수정 3. 수량수정'))
if columnNum<1 or columnNum>3:
print('숫자를 잘못입력하셨습니다')
return
content = input('수정값을 입력하세요: ')
column = columns[columnNum]
try:
self.mDao.update(column, content, mNum)
except:
print('수정사항을 다시 확인해주세요.')
def drop(self):
mNum = int(input('제품번호를 입력하세요: '))
try:
self.mDao.delete(mNum)
print('삭제가 완료되었습니다')
except:
print('제품번호를 확인하세요')
class UserMachineService:
def __init__(self):
self.mDao = MachineDAO()
self.money = 0
def inputMoney(self):
try:
money = int(input('투입할 금액을 입력하세요: '))
self.money += money
except:
print('잘못된 입력 방식입니다.')
print(f'현재 잔액: {self.money}')
def showAll(self):
datas = self.mDao.selectAll()
for data in datas:
cnt_str = ''
if data['m_cnt'] <= 0:
cnt_str = '*********매진*********\n'
print(f"{cnt_str}제품번호 : {data['m_num']}\n제품명 : {data['m_name']}\n가격 : {data['m_price']}\n")
def pay(self):
print(f'현재 잔액: {self.money}')
mNum = int(input('제품번호를 입력하세요: '))
data = self.mDao.selectOne(mNum)
if data['m_cnt'] <= 0:
print('매진된 상품입니다')
elif self.money < data['m_price']:
print('잔액이 부족합니다')
else:
self.money -= data['m_price']
self.mDao.update('m_cnt', data['m_cnt']-1, data['m_num'])
print('결제가 완료되었습니다.')
print(f'남은 잔액: {self.money}')
def returnMoney(self):
print(f'반환 금액: {self.money}')
self.money = 0
view
class Machine:
def __init__(self):
self.aMService = AdminMachineService()
self.uMService = UserMachineService()
def aRun(self):
while True:
menu = int(input('1.목록보기 2.제품등록 3.제품수정 4.제품삭제 0.관리자모드 종료'))
if menu == 1:
self.aMService.showAll()
elif menu == 2:
self.aMService.create()
elif menu == 3:
self.aMService.modify()
elif menu == 4:
self.aMService.drop()
elif menu == 0:
print('관리자 모드를 종료합니다')
break
def uRun(self):
while True:
menu = int(input('1.목록보기 2.잔액 충전 3. 구매하기 4. 잔액 반환 0.자판기 종료'))
if menu == 1:
self.uMService.showAll()
elif menu == 2:
self.uMService.inputMoney()
elif menu == 3:
self.uMService.pay()
elif menu == 4:
self.uMService.returnMoney()
elif menu == 0:
print('프로그램을 종료합니다')
break
elif menu == 1234:
if self.aMService.login():
self.aRun()
else:
print('잘못된 접근입니다.')
start = Machine()
start.uRun()
728x90
반응형