티스토리 뷰
1. menus.txt 에 까페에서 파는 [메뉴이름 가격 수량] 을 기록한다.
더보기
iceame 5000 100
caffemoca 4000 50
2. 모든 메뉴의 수량이 0이 되면 프로그램을 종료한다.
3. 판매를 할 경우 영수증을 파일(receipt.txt)에 주문 내역을 저장한다.
4. 관리자 모드에서는 id.txt 파일에 있는 계정으로 로그인 할 수 있다.
더보기
admin 1234
admin1 12345
5. 관리자 모드에서는 id.txt 파일에 계정을 추가할수 있다.
6. 관리자 모드에서는 메뉴의 추가/수정/삭제 가능하다.
import datetime
import os.path
def read_file(path):
with open(path, 'r') as f:
return list(map(lambda x: x.replace("\n", ""), f.readlines()))
def write_file(path, data: list, mode):
with open(path, mode) as f:
lines = "\n".join(data)
f.writelines(lines)
def create_receipt(path, order, cost ):
now = datetime.datetime.now()
data = [f"Time:{now} Model:{order[0]} Amount:{order[1]} Cost:{cost}\n"]
print(data[0][:-1])
write_file(path, data, "a+")
def read_menus(path, show=True):
lines = read_file(path)
if show:
[print(menu) for menu in lines]
return [line.split(" ") for line in lines]
def write_menus(path, menus):
menus = [" ".join(map(str, menu)) for menu in menus]
write_file(path, menus, "w")
def find_menu(target, menus):
for i, menu in enumerate(menus):
if target == menu[0]:
return True, i
return False, False
def process_menu(order, menus, reciept_path):
data = find_menu(order[0], menus)
if data[0]:
menu = menus[data[1]]
if order[0] == menu[0]:
if int(menu[2]) >= int(order[1]):
menu[2] = int(menu[2]) - int(order[1])
cost = int(order[1]) * int(menu[1])
create_receipt(reciept_path, order, cost)
print(f"{order[0]} {order[1]}개 {cost}원 주문되었습니다.\n")
else:
print("수량이 부족합니다.")
else:
print("해당 메뉴가 없습니다.")
def is_amount(menus):
for menu in menus:
if int(menu[2]):
return True
return False
def process_order(menus_path, receipt_path):
menus = read_menus(menus_path)
if is_amount(menus):
order = input("any order?").split(" ")
process_menu(order, menus, receipt_path)
write_menus(menus_path, menus)
else:
print("모든 메뉴가 품절입니다.")
def login(id_path):
accounts = read_file(id_path)
print(accounts)
for _ in range(3):
account = input("아이디 비밀번호를 입력하세요\n")
if account in accounts:
print("로그인 되었습니다.")
return True
print("다음에 다시 시도하세요")
return False
def add_id(cmd, id_path):
if len(cmd) == 2:
account = [" ".join(cmd)]
accounts = read_file(id_path) + account
write_file(id_path, accounts, "w")
print(f"id:{cmd[0]} pw:{cmd[1]} 추가 되었습니다.")
else:
print("잘못된 명령어 입니다.")
def add_menu(cmd, menu_path):
if len(cmd) == 3 and cmd[1].isdigit() and cmd[2].isdigit():
menu, price, amount = cmd
if os.path.isfile(menu_path):
menus = read_file(menu_path) + [" ".join(cmd)]
else:
menus = [" ".join(cmd)]
write_file(menu_path, menus, "w")
print(f"menu:{menu} price:{price} amount:{amount} 가 추가되었습니다.")
else:
print("잘못된 명령어 입니다.")
def remove_menu(cmd, menu_path):
if len(cmd) == 1:
menu_name = cmd[0]
menus = read_menus(menu_path, show=False)
data = find_menu(menu_name, menus)
if data[0]:
new_menus = [menu for i, menu in enumerate(menus) if i != data[1]]
write_menus(menu_path, new_menus)
print(f"{menus[data[1]]} 메뉴 삭제 되었습니다.")
else:
print("없는 메뉴 입니다.")
else:
print("잘못된 명령어 입니다.")
def change_menu(cmd, menu_path):
if len(cmd) == 4:
print(cmd[:1])
print(cmd[1:])
remove_menu(cmd[:1], menu_path)
add_menu(cmd[1:], menu_path)
else:
print("잘못된 명령어 입니다.")
def process_admin(id_path, menu_path):
if login(id_path):
cmds = "add_id id pw\n" \
"add_menu menu price amount\n" \
"change_menu menu new_menu new_price new_amount\n" \
"remove_menu menu\n"
cmd = input(cmds).split(" ")
if cmd[0] == "add_id":
add_id(cmd[1:], id_path)
elif cmd[0] == "add_menu":
add_menu(cmd[1:], menu_path )
elif cmd[0] == "change_menu":
change_menu(cmd[1:], menu_path)
elif cmd[0] == "remove_menu":
remove_menu(cmd[1:], menu_path)
else:
print("잘못된 명령어 입니다.")
def process_main(id_path, menu_path, receipt_path):
cmds = """1. 주문하기\n2. 관리자모드\n"""
cmd = input(cmds)
if cmd == "1":
process_order(menu_path, receipt_path)
elif cmd == "2":
process_admin(id_path, menu_path)
else:
print("잘못된 명령어 입니다.")
while True:
process_main("id.txt", "menus.txt", "receipt.txt")
'python lecture > project' 카테고리의 다른 글
[python] # 연산 하기 (0) | 2020.05.11 |
---|---|
[python] 원소기호 맞추기 (0) | 2020.05.09 |
[blockchain] 블록체인 예제 (0) | 2020.05.07 |
[python] 해시의 무결성 (0) | 2020.05.07 |
[edu] 연락처 (class, 연산자 오버로드) (0) | 2020.03.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- gitignore
- django chatbot
- pycrypto
- 파이썬 입문
- virtualenv
- 면접정답
- PuTTYGen
- chatbot
- gitlab
- Tistory
- admin.py
- django
- 이미지 비교
- Python
- 파이썬 강좌
- 플러스친구 자동응답
- 파이썬
- 모바일 스킨 적용
- 장고 플러스친구 자동응답
- 문과 코딩
- wsgi
- 파이썬 프로그래밍
- 엑셀 비교
- 파이썬 독학
- GIT
- 장고 카톡 자동응답
- 면접답변
- 문서 비교
- 모바일 테마 적용
- 장고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함