#키오스크 만들어보기
import time
import getpass
from Kiosk_File.kiosk_reservation import *
from Kiosk_File.kiosk_reservation_check import *
reser = Kiosk_reservation_Package()
reser_check = Kisok_reservation_ckeck_Package(reser)
class Kiosk:
def __init__(self):
self.admin_password = "admin"
self.admin_authenticateed = False
def process_user_input(self, user_input):
if user_input == "1": #예약
print("\n[안내] 예약 화면으로 이동합니다. 잠시만 기다려 주십시오.\n")
time.sleep(0.5)
reser.clear_screen() #cmd 화면 지우기
reser.reservation() #예약 화면 메뉴
reser.clear_screen()
elif user_input == "2": #예약 확인
print("\n[안내] 예약 확인 화면으로 이동합니다. 잠시만 기다려 주십시오.\n")
time.sleep(2)
reser.clear_screen()
reser_check.user_check() # 인스턴스를 통한 접근
elif user_input == "3": #예약자 명단
reser.clear_screen()
if self.admin_authenticateed or self.authenticate_admin():
reser.display_user_info()
else:
print("\n[안내] 비밀번호를 틀렸습니다. 접속할 수 없습니다.")
print("메뉴로 돌아갑니다.")
time.sleep(2)
reser.clear_screen()
elif user_input == "4": #종료
print("\n[안내] 프로그램을 종료합니다.\n")
else:
print("잘못된 입력입니다. 다시 입력해주세요.")
def authenticate_admin(self):
print("[안내] 관리자 암호가 필요합니다. 암호를 입력해주세요.")
admin_password_input = getpass.getpass("입력: ")
if admin_password_input == self.admin_password:
self.admin_authenticate = True
return True
else:
return False
while True:
print("\n키오스크 테스트\n")
print("[1. 예약]\n[2. 예약 확인]\n[3. 예약자 명단]\n[4. 종료]")
kiosk = Kiosk()
print()
user_input = input("입력:")
kiosk.process_user_input(str(user_input))
#3번 입력 시 프로그램 종료
if user_input == "4":
break
메인.py
import os
import time
class Kiosk_reservation_Package:
def __init__(self):
self.user_info = []
def clear_screen(self):
if os.name == 'nt':
os.system('cls')
else:
os.system('clear')
def reservation_save_file(self, user_info):
print("\n저장하였습니다.\n")
header = "이름\t전화번호\n"
with open("reservation.txt", "a", encoding="utf8") as reservation_save_file:
if not os.path.exists("reservation.txt"):
reservation_save_file.write(header)
print(f"예약자 이름: {user_info['name']}\n예약자 휴대폰번호: {user_info['phoneNumber']}\n",
file=reservation_save_file)
def reservation_load_file(self):
print("\n파일을 불러옵니다.")
try:
with open("reservation.txt", "r", encoding="utf8") as reservation_load_file:
for line in reservation_load_file:
print(line, end="")
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
def reservation(self):
print("\n[안내] 키오스크 예약 화면입니다.\n")
print("[1. 숙소 예약]\n[2. 테스트]")
r_user_input = input("입력:")
if r_user_input == "1":
print("\n[안내] 숙소를 예약하겠습니다.\n")
while True:
name = input("\n[안내] 예약할 예약자님의 이름을 입력해주세요.\n입력: ")
phoneNumber = input("\n[안내] 예약자님의 전화번호를 입력해주세요.\n입력: ")
self.clear_screen()
print("\n[안내] 입력하신 정보를 확인해주세요.\n")
print(f"이름: {name}\n전화번호: {phoneNumber}\n")
info = input("[안내] 입력하신 정보가 맞으면 Y를, 다르면 N을 입력해주세요:")
if info == "Y" or info == "y":
print("예약이 완료되었습니다. 메인화면으로 이동합니다.")
user_info = {"name": name, "phoneNumber": phoneNumber}
self.user_info.append(user_info)
self.reservation_save_file(user_info)
time.sleep(3)
break
elif info == "N" or info == "n":
print("예약을 다시 시도합니다. 잠시만 기다려주십시오.")
time.sleep(3)
self.clear_screen()
else:
print("잘못 입력하였습니다. 처음부터 다시 입력해주세요.")
return name, phoneNumber
elif r_user_input == "2":
print("\n테스트\n")
else:
print("else")
def display_user_info(self):
if not self.user_info:
print("예약한 정보가 없습니다.")
else:
print("\n[안내] 예약자가 예약한 정보입니다.\n")
for idx, user_info in enumerate(self.user_info, start=1):
print(f"예약 번호: {idx}\n이름: {user_info['name']}\n전화번호: {user_info['phoneNumber']}\n")
예약.py
from Kiosk_File.kiosk_reservation import Kiosk_reservation_Package
import time
class Kisok_reservation_ckeck_Package:
def __init__(self, reser_instance):
self.user_name_found = False
self.reser = reser_instance
self.reservation = Kiosk_reservation_Package()
def user_check(self): #예약자 이름 입력
print("[안내] 휴대폰번호를 입력해주세요.")
userCheck = input("입력: ")
#리스트에 정보가 있고 입력한 정보가 있을 때 출력
for self.user_info in self.reser.user_info:
if self.user_info["phoneNumber"] == userCheck:
self.user_name_found = True
print("\n[안내] 예약한 정보를 확인중입니다. 잠시만 기다려주십시오.")
time.sleep(2)
print("\n[안내] 예약한 정보를 찾았습니다.\n")
print("예약 번호: {0}\n예약자: {1}\n휴대폰 번호: {2}".format(
self.reser.user_info.index(self.user_info) + 1,
self.user_info["name"],
self.user_info["phoneNumber"]
))
break
else:
print("\n[안내] 예약한 정보를 확인중입니다. 잠시만 기다려주십시오.")
time.sleep(2)
print("\n[안내] 입력한 예약자를 찾을 수 없습니다. 예약을 부탁드립니다.")
self.user_notFound()
#리스트에 정보가 완전히 없을 때 출력
def user_notFound(self):
if not self.user_name_found:
print("\n예약 정보가 없습니다.")
예약 확인.py
업데이트 후 프로그램 작동 영상
오늘은 코드 업데이트를 조금 진행했다.
버그가 몇 개 있었는데 모두 고쳤다.
버그 내용:
1. 예약.py에서 예약자의 정보 저장 후 예약 확인.py로 데이터를 가져오는 과정에서 예약자가 예약을 확인 할 때마다 예약자 수만큼 print문이 실행.
예) 예약이 n개 되었다고 했을 때 마지막에 예약한 사람이 예약확인을 했을 경우,
print("\n[안내] 예약한 정보를 확인중입니다. 잠시만 기다려주십시오.")
예약 번호가 1번일 때는 바로 예약자 명단이 출력되지만 n번 이상일때는 위 코드가 n번 실행 후 예약자 명단을 출력했음.
2. 이름이 같은 동일인이 있을 경우를 대비하여 예약 확인을 이름에서 휴대폰번호로 변경.
3. 예약 리스트 접속 시 보안 상 관리자 암호를 안보이게 처리.
'파이썬' 카테고리의 다른 글
[파이썬] 숙소예약 프로그램 github 주소 (0) | 2024.01.02 |
---|---|
[파이썬] 개인정보 암호화 적용 (1) | 2023.12.29 |
[파이썬] 숙소 프로그램 2일차 업데이트 동영상 (0) | 2023.12.29 |
[파이썬] 숙소 예약 프로그램 작동 영상 (0) | 2023.12.28 |
[파이썬] 숙소 예약 프로그램 만들기 2일차 (0) | 2023.12.28 |