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