학습 로그/Python3

D+17 [Team Project] KIOSK 영수증 부분 수정 및 보완

goodjop79 님의 블로그 2026. 4. 27. 17:58

ㅇ 일자 : 2026년 4월 23일(목)
ㅇ 내용 : 팀프로젝트 과제 작성 및 토의, 수정 및 보완
 
1. "영수증 용도" 선택 화면에서 구현할 수 있는 함수들

   1. 1. 숫자코드를 선택하도록 하는 방법

def issue_cash_receipt(choice):
    # while과 조건문을 사용하여 영수증 사용 용도를 선택(조건을 선택하도록 choic 사용)
    while True:
        if choice == 1:
            print("결과 : [소득공제용]")
            break
        elif choice == 2:
            print("결과 : [연말정산용]")
            break
        elif choice == 3:
            print("결과 : [발급 안함]")
            break
        else:
            print("잘못된 번호를 선택하셨습니다. 1, 2, 3번 중 선택해 주세요.")

# 메뉴 데이터 딕셔너리

# 2. 사용자 입력 및 함수 실행

def script(order_dict, free_drink_count):
    try:
        user_input = int(input("현금영수증 용도를 선택하세요 (1.소득공제, 2.연말정산, 3. 발행 안함): "))
        issue_cash_receipt(user_input)
        #r_dict안의 데이터 읽어온 다음 값있는 값들만 적용
    except ValueError:
        print("숫자만 입력 가능합니다.")

    print(f"{'영 수 증':^40}")
    print("-------------------------------------")
    print(f"{'상품명':^15}{'수량':^10}{'가격':^10}")

# 코드 설명
   # 위 코드"^"는 파이썬의 f-string(포맷 문자열) 또는 format() 함수에서 사용하는 문자열 정렬 및 폭 지정 규칙.  
   # 표 형식으로 데이터를 깔끔하게 출력할 때 주로 사용함. 
   # 문법 구성 요소 : ^ (가운데 정렬): 텍스트를 지정된 공간의 중앙에 배치,  <는 왼쪽 정렬, >는 오른쪽 정렬
   # 숫자 (15, 10) : 해당 항목이 차지할 전체 칸 수(폭)를 의미
   # { }: 값이 들어갈 자리를 나타내는 중괄호
   # {'상품명':^15}: '상품명'이라는 글자를 포함해 총 15칸을 확보하고, 그 안에서 가운데 정렬
   # {'수량':^10}: '수량'이라는 글자를 포함해 총 10칸을 확보하고, 가운데 정렬
   # {'가격':^10}: '가격'이라는 글자를 포함해 총 10칸을 확보하고, 가운데 정렬

 

   1. 2. 버튼 이미지를 포함하여 작성하는 방법 (검색 찾아보기)

# 화면을 만드는 도구 상자
import tkinter as tk

# [함수] 버튼을 만드는 공식
def 버튼_공장(글자, 색깔):
    # font 설정을 추가하여 글자 크기를 키우고, 패딩을 통해 버튼 크기 조정
    btn = tk.Button(win, text=글자, bg=색깔, width=15, height=5, font=("Arial", 12))                
    btn.pack(side="left", padx=20, pady=20) # side를 문자열 "left"로 변경

# [실행] 화면 조립하기
win = tk.Tk()
win.title("키오스크")
win.geometry("500x200") # 창 크기 설정

label = tk.Label(win, text="용도를 선택해 주세요", font=("돋움", 20))
label.pack(pady=20)

# 버튼들을 담을 프레임 생성 (위치 잡기 더 편함)
button_frame = tk.Frame(win)
button_frame.pack()

# 함수(공장)를 사용 버튼 3개 
# side="left"로 설정했으므로 순서대로 가로로 배치됨
btn1 = tk.Button(button_frame, text="소득공제용", bg="mintcream", width=12, height=3)
btn1.pack(side="left", padx=10)

btn2 = tk.Button(button_frame, text="지출증빙용", bg="lavender", width=12, height=3)
btn2.pack(side="left", padx=10)

btn3 = tk.Button(button_frame, text="발급안함", bg="lightgray", width=12, height=3)
btn3.pack(side="left", padx=10)

win.mainloop()

 

2.  실습 후기

  • 첫번째 팀프로젝트는 kiosk 프로그램 개발을 하는 것이다.
  • 개발 목적 : 팀프로젝트를 통해 팀원들간 소통을 활성화 하고, 프로그램 개발과정을 이해하는 동시에 파이썬 언어를 이해한다.
  • 시중에서 사용되고 있는 브랜드 커피점의 키오스크를 벤치마칭해서 파이참으로 코드를 작성해서 구현해 보는 것이다.
  • 팀이 편성되고 각각의 임무분담을 하고, 개발 단계별로 시행하였다. 물론 처음보는 낯설은 팀원들과 함께 진행하기에는 소통이 우선이 되어야 했고, 팀장이 선출되면 팀장의 임무분담에 따라 일정계획을 세우고 코드를 작성해야 한다.
  • 각자의 코딩실력이 전공자와 비전공자간의 차이로 인해 기한내 종합이 될 수 있을까 고민했지만 나름데로 고민도 해보고 찾아가면서 작성해 보았다. 
  • 예제 과제를 하면서 사용했던 파이썬 문법들을 빈 화면에서 작성해 보니 막히는 부분이 많았다. 그래서 검색도 하며 찾아보기를 여러번, 단순 코드를 작성했고, 조건문과 반복문을 사용했다. 
  • 팀장과 전공자 개발자는 팀원들 각각의 .py 파일들을 종합해서 패키지로 만들고 main.py 를 만들어 배포해 주었고, 처음에 이해도가 낮았던 비전공자들은 가르쳐 주는데로 따라가며 실행하며 종합된 코드들을 한줄 한줄 공부해 나가야 했다. 
  • 그리고 가상환경에서 작업해야 하고, 파일을 배포해서 다른PC에서 실행할 경우, 버젼에 맞는 환경설정과 경로설정 등 main.py에서의 문법 또한 중요함을 뒤늦게서야 알았다. 
  • 종합한 소스코드에서는 class라는 개념을 사용했는지 개념을 모두 이해할 수가 없었다. 그러나 실행되는 과정이 신기하기도 했고 모두가 고민하며 열심히 프로젝트를 하는 모습에서 나의 도전에 대한 용기를 얻을수 있었다. "도전은 계속된다."