ATM (프로그래밍)

2025. 3. 14. 19:15·프로젝트

🏦 ATM 자동화 기기 프로젝트

📚 프로젝트 개요

이 프로젝트는 ATM(자동화 기기) 시스템을 간단하게 구현하는 예제입니다. 사용자는 입금, 출금, 영수증 출력, 종료와 같은 기본적인 금융 기능을 선택하여 이용할 수 있습니다.

  • 입금: 사용자가 입력한 금액을 통장에 추가합니다.
  • 출금: 사용자가 입력한 금액을 통장에서 차감합니다. 잔액보다 많은 금액은 출금할 수 없습니다.
  • 영수증: 입금과 출금 내역을 리스트 형태로 출력합니다.
  • 종료: 프로그램을 종료합니다.

📄 전체 코드

# 초기 설정
receipts = []  # 영수증 내역을 저장할 리스트
balance = 3000  # 초기 잔액

# 메뉴 출력
def print_menu():
    print("원하는 기능을 선택하세요:")
    print("1. 입금")
    print("2. 출금")
    print("3. 영수증 보기")
    print("4. 종료")

# 입금 기능
def deposit():
    global balance
    deposit_amount = input("입금할 금액을 입력해주세요 : ")
    
    if deposit_amount.isdigit() and int(deposit_amount) > 0:
        balance += int(deposit_amount)
        print(f"{deposit_amount}원이 입금되었습니다. 현재 잔액은 {balance}원입니다.")
        receipts.append(("입금", int(deposit_amount), balance))
    else:
        print("정신차리고, 제대로된 숫자형태로 입금액을 작성해줘")

# 출금 기능
def withdraw():
    global balance
    withdraw_amount = input("출금할 금액을 입력해주세요 : ")

    if withdraw_amount.isdigit() and int(withdraw_amount) > 0:
        withdraw_amount = min(balance, int(withdraw_amount))
        balance -= withdraw_amount
        print(f"고객님이 출금한 금액은 {withdraw_amount}원이고, 현재 잔액은 {balance}원입니다.")
        receipts.append(("출금", withdraw_amount, balance))
    else:
        print("정신차리고, 제대로된 숫자형태로 출금액을 작성해줘")

# 영수증 출력 기능
def show_receipts():
    if receipts:
        print("=== 영수증 ===")
        for i in receipts:
            print(f"{i[0]} : {i[1]}원 | 잔액 {i[2]}원")
    else:
        print("영수증에 아무내역이 없습니다.")

# 프로그램 실행 함수
def run_atm():
    while True:
        print_menu()
        num = input("숫자를 입력해주세요 (1~4): ")

        if num == "1":
            deposit()
        elif num == "2":
            withdraw()
        elif num == "3":
            show_receipts()
        elif num == "4":
            print("서비스를 종료합니다.")
            break
        else:
            print("잘못된 입력입니다. 1~4 사이의 숫자를 입력해주세요.")

run_atm()

⚙️ 프로세스별 상세 설명

1️⃣ 입금 프로세스

  • deposit() 함수
    • isdigit() 함수로 입력값이 숫자인지 검증합니다.
    • 입력한 금액이 0보다 큰지 조건을 추가하여 유효성 검사합니다.
    • 정상적인 경우, balance에 금액을 더하고, 영수증(receipts) 리스트에 기록합니다.
    • 사용된 함수:
      • isdigit(): 입력값이 숫자인지 확인.
      • append(): 리스트에 값 추가.

2️⃣ 출금 프로세스

  • withdraw() 함수
    • isdigit()으로 숫자 여부를 확인하고, 금액이 0보다 큰지 검증합니다.
    • min() 함수를 사용하여 잔액을 초과하지 않도록 출금액을 제한합니다.
    • 출금 후 balance에서 금액을 차감하고, 영수증에 기록합니다.
    • 사용된 함수:
      • min(): 두 값 중 작은 값을 선택하여 잔액 초과 방지.
      • append(): 영수증 리스트에 기록.

3️⃣ 영수증 출력 프로세스

  • show_receipts() 함수
    • 영수증 내역이 있는 경우, for 루프를 통해 각 내역을 출력합니다.
    • 내역이 없는 경우, 안내 메시지를 출력합니다.
    • 사용된 데이터 구조:
      • list와 tuple을 사용하여 기록과 잔액을 관리.

4️⃣ 종료 프로세스

  • 입력값이 4일 때 프로그램을 종료합니다.
  • **break**를 통해 while 루프를 종료합니다.

🧠 이해도 체크리스트

  1. isdigit() 함수는 어떤 역할을 하나요?
    • 정답: 문자열이 숫자인지 판별하는 함수입니다.
  2. 출금 시, min() 함수가 사용된 이유는 무엇인가요?
    • 정답: 사용자가 입력한 출금액이 잔액보다 큰 경우, 잔액 만큼만 출금되도록 제한하기 위해 사용되었습니다.
  3. 영수증을 기록할 때 사용된 자료형은 무엇인가요?
    • 정답: 리스트(list)와 튜플(tuple)이 사용되었습니다. 리스트는 여러 튜플을 순차적으로 저장하고, 튜플은 각 기록을 구성합니다.
  4. 프로그램에서 break 문은 어떤 역할을 하나요?
    • 정답: 사용자가 4를 입력하여 종료를 선택했을 때, while 루프를 종료하기 위해 사용되었습니다.

✅ 최종 정리

  • 각 기능은 함수 단위로 구조화하여 가독성을 높이고 유지보수를 쉽게 하였습니다.
  • isdigit()과 같은 함수로 입력값을 검증하여 입력 오류를 최소화하였습니다.
  • min() 함수를 통해 출금 제한을 구현하여 현실적인 기능을 적용하였습니다.
  • 프로그램 종료 시 break 문을 사용하여 루프를 명확하게 종료하도록 설계하였습니다.

이렇게 구성된 ATM 프로그램은 단순하지만, 입력 검증과 기능별 로직이 명확하여 기본적인 프로그램 설계의 좋은 예시가 될 것입니다. 😊

'프로젝트' 카테고리의 다른 글

Mini Project : 프로필 페이지 만들기(HTML:1일차 과제)  (0) 2025.03.28
MySQL을 이용한 더미 데이터 생성 프로세스  (0) 2025.03.20
Database- 데이터베이스 (2일차: 데이터베이스와 테이블 생성)  (0) 2025.03.19
Database- 데이터베이스 (2일차: MySQL 사용자 생성 및 권한 부여)  (0) 2025.03.19
🐟 붕어빵 자동판매 관리 시스템 (객체지향 프로그래밍)  (0) 2025.03.14
'프로젝트' 카테고리의 다른 글
  • MySQL을 이용한 더미 데이터 생성 프로세스
  • Database- 데이터베이스 (2일차: 데이터베이스와 테이블 생성)
  • Database- 데이터베이스 (2일차: MySQL 사용자 생성 및 권한 부여)
  • 🐟 붕어빵 자동판매 관리 시스템 (객체지향 프로그래밍)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (794) N
      • Python (32)
      • 프로젝트 (113) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154) N
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    bts
    lawsuitculture
    college reunions
    travel ban
    youngprofessionals
    chinanightlife
    global politics
    life reflection
    urbantrends
    btsreunion
    livebroadcast
    newpoliticalparty
    hotcoffeecase
    americaparty
    chatgpterror
    gpterror
    trumpmuskclash
    remittance
    smartphonedurability
    self-growth
    homebartrend
    titaniumcase
    btsjungkook
    뷔
    classaction
    basalcellcarcinoma
    RM
    americanlaw
    btscomeback
    btsdischarge
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
ATM (프로그래밍)
상단으로

티스토리툴바