250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- decode()
- zipfile
- node.js
- locals()
- shuffle()
- JS
- HTML
- count()
- inplace()
- 파이썬
- randrange()
- __len__
- 오버라이딩
- MySqlDB
- shutil
- fileinput
- __annotations__
- discard()
- glob
- View
- remove()
- items()
- choice()
- Database
- fnmatch
- CSS
- MySQL
- __sub__
- mro()
- __getitem__
Archives
- Today
- Total
흰둥이는 코드를 짤 때 짖어 (왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!)
(파이썬, MySQL, 과제) 자판기 프로그램 본문
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
반응형
'과제' 카테고리의 다른 글
(CSS, 과제) 뉴스 페이지와 즐겨찾기 페이지 (0) | 2023.03.28 |
---|---|
(HTML, 과제) 이력서 만들기 (0) | 2023.03.28 |
(파이썬, 과제) 사진파일 수정날짜 별로 분류하기 (0) | 2023.03.15 |
(파이썬, 과제) 파일 입출력 문제 (0) | 2023.03.13 |
(파이썬, 과제) 기초 문제 2 (0) | 2023.03.10 |