💰 개인 가계부
📋 프로젝트 개요
리스트와 딕셔너리를 활용하여 개인의 수입과 지출을 체계적으로 관리하는 가계부 프로그램을 만들어보세요. 돈의 흐름을 추적하고 분석하여 현명한 소비 습관을 기르는 데 도움이 되는 실용적인 도구를 구현해봅시다!
🎯 학습 목표
- 리스트를 활용한 거래 내역 관리
- 딕셔너리를 이용한 구조화된 금융 정보 저장
- 반복문과 조건문을 조합한 데이터 분석
- 실생활 금융 관리를 프로그래밍으로 해결하는 경험
🚀 기본 기능
핵심 요구사항
수입과 지출을 기록하고 관리하는 가계부
-
거래 내역 기록
- 수입/지출 구분하여 입력
- 금액, 내용, 날짜 정보 저장
- 딕셔너리 형태로 구조화하여 리스트에 저장
-
거래 내역 조회
- 모든 거래 내역을 시간순으로 출력
- 수입과 지출을 구분하여 표시
- 잔액 계산 및 표시
-
기본 통계
- 총 수입, 총 지출, 현재 잔액 계산
- 간단한 수지 분석 제공
🎨 추가 기능 1: 카테고리 분류
요구사항
거래 기록 시 카테고리를 설정하여 지출을 체계적으로 분류합니다.
- 카테고리 분류: 식비, 교통비, 쇼핑, 생활비 등으로 지출 분류
- 카테고리 선택: 거래 기록 시 해당하는 카테고리 선택
카테고리 관리 예시
💸 지출 기록
============
금액: 15000
내용: 점심 식사
카테고리를 선택하세요:
1. 식비 2. 교통비 3. 쇼핑 4. 생활비 5. 기타
선택: 1
✅ 식비 카테고리에 15,000원 지출이 기록되었습니다!
💡 추가 기능 2: 카테고리별 조회
요구사항
특정 카테고리의 거래 내역만 모아서 확인할 수 있는 기능을 추가합니다.
- 카테고리별 조회: 특정 카테고리의 거래 내역만 모아보기
- 카테고리별 합계: 해당 카테고리의 총 지출 계산
카테고리별 조회 예시
📂 카테고리별 조회
==================
1. 식비 2. 교통비 3. 쇼핑 4. 생활비 5. 기타
선택: 1
💸 식비 카테고리 (5건)
총 지출: 75,000원
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📅 2025-03-15 💸 15,000원 - 점심 식사
📅 2025-03-16 💸 20,000원 - 저녁 식사
📅 2025-03-17 💸 12,000원 - 커피
📅 2025-03-18 💸 18,000원 - 아침 식사
📅 2025-03-19 💸 10,000원 - 간식
🔍 추가 기능 3: 날짜별 검색
요구사항
특정 날짜의 거래 내역을 검색하여 하루 단위로 가계부를 확인할 수 있습니다.
- 날짜별 검색: 특정 날짜의 거래 내역 조회
- 일일 수지: 해당 날짜의 수입/지출 합계 및 수지 계산
날짜별 검색 예시
📅 날짜별 검색
==============
검색할 날짜 (YYYY-MM-DD): 2025-03-15
📅 2025-03-15 거래 내역 (3건)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💰 수입: 50,000원 - 용돈
💸 지출: 15,000원 - 점심 식사 (식비)
💸 지출: 3,000원 - 버스비 (교통비)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 일일 수지: +32,000원
🔍 추가 기능 4: 내용 검색
요구사항
거래 내용으로 검색하여 특정 항목의 지출 내역을 쉽게 찾을 수 있습니다.
- 내용 검색: 거래 내용에 포함된 단어로 검색
- 검색 결과: 일치하는 모든 거래 내역 표시
내용 검색 예시
🔍 내용 검색
=============
검색어: 커피
🔍 검색 결과: 커피 (4건)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📅 2025-03-10 💸 4,500원 - 아메리카노 커피
📅 2025-03-12 💸 5,000원 - 카페라떼 커피
📅 2025-03-15 💸 4,000원 - 커피 원두 구매
📅 2025-03-18 💸 6,000원 - 스타벅스 커피
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💸 총 지출: 19,500원
📊 추가 기능 5: 월별 통계
요구사항
특정 월의 수입/지출을 분석하여 가계부 패턴을 파악할 수 있습니다.
- 월별 통계: 월별 수입/지출 요약
- 카테고리별 통계: 어느 분야에서 가장 많이 지출하는지 분석
월별 통계 예시
📊 3월 가계부 요약
==================
💰 총 수입: 2,500,000원
💸 총 지출: 1,850,000원
💵 잔액: +650,000원
📈 카테고리별 지출:
- 식비: 450,000원 (24.3%)
- 교통비: 180,000원 (9.7%)
- 쇼핑: 320,000원 (17.3%)
- 생활비: 280,000원 (15.1%)
- 기타: 620,000원 (33.5%)
💰 추가 기능 6: 예산 관리
요구사항
카테고리별 예산을 설정하고 지출을 통제할 수 있는 기능을 추가합니다.
- 예산 설정: 카테고리별 월 예산 설정
- 예산 대비 지출: 현재 지출과 예산 비교
- 예산 초과 알림: 예산 초과 시 경고 메시지
예산 관리 예시
💡 예산 관리
=============
📊 예산 대비 지출 현황
📂 식비
예산: 400,000원
지출: 320,000원
잔여: 80,000원
사용률: 80%
⚠️ 예산 80% 사용 📊
📂 교통비
예산: 150,000원
지출: 180,000원
잔여: -30,000원
사용률: 120%
⚠️ 예산 초과! 🚨
💡 구현 힌트
1. 메뉴 시스템 구현
프로그램의 전체 구조를 만들어보세요.
# 메뉴 시스템 구현
while True:
print("\n💰 가계부 관리 시스템")
print("=" * 30)
print("1. 수입 기록")
print("2. 지출 기록")
print("3. 거래 내역 조회")
print("4. 카테고리별 조회")
print("5. 날짜별 검색")
print("6. 내용 검색")
print("7. 월별 통계")
print("8. 예산 관리")
print("9. 종료")
print("=" * 30)
choice = input("선택 (1-9): ")
if choice == "1":
# 수입 기록 코드 작성
print("💰 수입 기록")
print("-" * 20)
# 여기에 수입 기록 코드를 작성하세요
elif choice == "2":
# 지출 기록 코드 작성
print("💸 지출 기록")
print("-" * 20)
# 여기에 지출 기록 코드를 작성하세요
elif choice == "3":
# 거래 내역 조회 코드 작성
print("📋 거래 내역 조회")
print("-" * 20)
# 여기에 거래 내역 조회 코드를 작성하세요
elif choice == "4":
# 카테고리별 조회 코드 작성
print("📂 카테고리별 조회")
print("-" * 20)
# 여기에 카테고리별 조회 코드를 작성하세요
elif choice == "5":
# 날짜별 검색 코드 작성
print("📅 날짜별 검색")
print("-" * 20)
# 여기에 날짜별 검색 코드를 작성하세요
elif choice == "6":
# 내용 검색 코드 작성
print("🔍 내용 검색")
print("-" * 20)
# 여기에 내용 검색 코드를 작성하세요
elif choice == "7":
# 월별 통계 코드 작성
print("📊 월별 통계")
print("-" * 20)
# 여기에 월별 통계 코드를 작성하세요
elif choice == "8":
# 예산 관리 코드 작성
print("💡 예산 관리")
print("-" * 20)
# 여기에 예산 관리 코드를 작성하세요
elif choice == "9":
print("👋 프로그램을 종료합니다.")
break
else:
print("❌ 잘못된 선택입니다.")
2. 데이터 구조 설계
# 모든 거래 내역을 저장할 리스트
transactions = []
# 각 거래는 딕셔너리로 구성 (기본 기능용)
transaction = {
"type": "지출", # "수입" 또는 "지출"
"amount": 15000, # 금액
"content": "점심 식사", # 내용
"date": "2025-03-15" # 날짜
}
# 거래를 리스트에 추가
transactions.append(transaction)
기본 기능 구현
3. 거래 기록 기능 (기본)
print("💰 새 거래 기록")
print("-" * 20)
# 수입/지출 선택
print("1. 수입 2. 지출")
type_choice = input("선택 (1-2): ")
transaction_type = "수입" if type_choice == "1" else "지출"
# 금액 입력
amount = int(input("금액: "))
# 내용 입력
content = input("내용: ")
# 날짜 입력
date = input("날짜 (YYYY-MM-DD): ")
# 거래 정보를 딕셔너리로 저장 (기본 기능)
new_transaction = {
"type": transaction_type,
"amount": amount,
"content": content,
"date": date
}
transactions.append(new_transaction)
print(f"✅ {transaction_type} {amount:,}원이 기록되었습니다!")
4. 거래 내역 조회 기능 (기본)
print("📋 전체 거래 내역")
print("=" * 40)
if len(transactions) == 0:
print("기록된 거래가 없습니다.")
else:
balance = 0 # 잔액 계산용
for i in range(len(transactions)):
transaction = transactions[i]
# 잔액 계산
if transaction["type"] == "수입":
balance += transaction["amount"]
sign = "+"
emoji = "💰"
else:
balance -= transaction["amount"]
sign = "-"
emoji = "💸"
print(f"{i+1}. {emoji} {transaction['date']}")
print(f" {transaction['type']}: {sign}{transaction['amount']:,}원")
print(f" 내용: {transaction['content']}")
print(f" 잔액: {balance:,}원")
print("-" * 30)
5. 기본 통계 계산
# 총 수입, 총 지출 계산
total_income = 0
total_expense = 0
for transaction in transactions:
if transaction["type"] == "수입":
total_income += transaction["amount"]
else:
total_expense += transaction["amount"]
# 잔액 계산
balance = total_income - total_expense
# 통계 출력
print("📊 가계부 요약")
print("=" * 20)
print(f"💰 총 수입: {total_income:,}원")
print(f"💸 총 지출: {total_expense:,}원")
print(f"💵 현재 잔액: {balance:,}원")
if balance > 0:
print("✅ 흑자입니다! 👍")
elif balance < 0:
print("❌ 적자입니다! 💪 절약이 필요해요.")
else:
print("💯 수지가 맞습니다!")
추가 기능 구현
6. 추가 기능 1: 카테고리 분류
# 카테고리 목록 준비
categories = ["식비", "교통비", "쇼핑", "생활비", "기타"]
# 거래 기록 시 카테고리 추가
if transaction_type == "지출":
print("카테고리를 선택하세요:")
for i in range(len(categories)):
print(f"{i+1}. {categories[i]}")
category_choice = int(input("선택: ")) - 1
category = categories[category_choice]
else:
category = "수입"
# 카테고리가 포함된 거래 딕셔너리
new_transaction = {
"type": transaction_type,
"amount": amount,
"category": category,
"content": content,
"date": date
}
추가 기능 2: 카테고리별 조회
# 카테고리 선택
print("📂 카테고리별 조회")
print("조회할 카테고리를 선택하세요:")
for i in range(len(categories)):
print(f"{i+1}. {categories[i]}")
category_choice = int(input("선택: ")) - 1
selected_category = categories[category_choice]
# 해당 카테고리의 거래만 찾기
category_transactions = []
category_total = 0
for transaction in transactions:
if transaction["category"] == selected_category:
category_transactions.append(transaction)
category_total += transaction["amount"]
# 결과 출력
print(f"\n💸 {selected_category} 카테고리 ({len(category_transactions)}건)")
print(f"총 지출: {category_total:,}원")
print("-" * 30)
for transaction in category_transactions:
print(f"📅 {transaction['date']}")
print(f"💸 {transaction['amount']:,}원 - {transaction['content']}")
print("-" * 15)
추가 기능 3: 날짜별 검색
# 날짜 입력
search_date = input("검색할 날짜 (YYYY-MM-DD): ")
# 해당 날짜의 거래 찾기
found_transactions = []
daily_income = 0
daily_expense = 0
for transaction in transactions:
if transaction["date"] == search_date:
found_transactions.append(transaction)
if transaction["type"] == "수입":
daily_income += transaction["amount"]
else:
daily_expense += transaction["amount"]
# 결과 출력
if len(found_transactions) == 0:
print("❌ 해당 날짜의 거래가 없습니다.")
else:
print(f"📅 {search_date} 거래 내역 ({len(found_transactions)}건)")
print("-" * 30)
for transaction in found_transactions:
emoji = "💰" if transaction["type"] == "수입" else "💸"
print(f"{emoji} {transaction['type']}: {transaction['amount']:,}원")
print(f" 내용: {transaction['content']}")
print("-" * 15)
daily_balance = daily_income - daily_expense
print(f"📊 일일 수지: {daily_balance:,}원")
추가 기능 4: 내용 검색
# 검색어 입력
search_keyword = input("검색할 내용: ")
# 검색 결과 저장
found_transactions = []
total_amount = 0
for transaction in transactions:
if search_keyword in transaction["content"]:
found_transactions.append(transaction)
total_amount += transaction["amount"]
# 결과 출력
if len(found_transactions) == 0:
print("❌ 검색 결과가 없습니다.")
else:
print(f"🔍 검색 결과: {search_keyword} ({len(found_transactions)}건)")
print("-" * 30)
for transaction in found_transactions:
emoji = "💰" if transaction["type"] == "수입" else "💸"
print(f"📅 {transaction['date']} {emoji} {transaction['amount']:,}원")
print(f" 내용: {transaction['content']}")
print("-" * 15)
print(f"💸 총 금액: {total_amount:,}원")
추가 기능 5: 월별 통계
# 월 입력
target_month = input("분석할 월 (MM): ")
# 월별 데이터 수집
monthly_income = 0
monthly_expense = 0
monthly_transactions = []
for transaction in transactions:
# 날짜에서 월 추출 (YYYY-MM-DD 형식)
date_parts = transaction["date"].split("-")
month = date_parts[1]
if month == target_month:
monthly_transactions.append(transaction)
if transaction["type"] == "수입":
monthly_income += transaction["amount"]
else:
monthly_expense += transaction["amount"]
# 월별 통계 출력
print(f"📊 {target_month}월 가계부 요약")
print("=" * 25)
print(f"📈 거래 건수: {len(monthly_transactions)}건")
print(f"💰 총 수입: {monthly_income:,}원")
print(f"💸 총 지출: {monthly_expense:,}원")
monthly_balance = monthly_income - monthly_expense
print(f"💵 월 수지: {monthly_balance:,}원")
if monthly_balance > 0:
print("✅ 이번 달은 흑자네요! 🎉")
elif monthly_balance < 0:
print("⚠️ 이번 달은 적자입니다. 💪")
else:
print("💯 수지가 딱 맞네요!")
추가 기능 6: 예산 관리
# 예산 설정
budgets = {}
print("💡 카테고리별 월 예산 설정")
print("=" * 25)
for category in categories:
budget = int(input(f"{category} 월 예산: "))
budgets[category] = budget
# 현재 지출 계산
category_expenses = {}
for category in categories:
category_expenses[category] = 0
for transaction in transactions:
if transaction["type"] == "지출":
category = transaction["category"]
category_expenses[category] += transaction["amount"]
# 예산 대비 지출 비교
print("\n📊 예산 대비 지출 현황")
print("=" * 25)
for category in categories:
budget = budgets[category]
spent = category_expenses[category]
remaining = budget - spent
usage_rate = (spent * 100) // budget if budget > 0 else 0
print(f"\n📂 {category}")
print(f" 예산: {budget:,}원")
print(f" 지출: {spent:,}원")
print(f" 잔여: {remaining:,}원")
print(f" 사용률: {usage_rate}%")
if usage_rate >= 100:
print(" ⚠️ 예산 초과! 🚨")
elif usage_rate >= 80:
print(" ⚠️ 예산 80% 사용 📊")
else:
print(" ✅ 양호 👍")
메뉴 시스템 구현
while True:
print("\n💰 개인 가계부")
print("=" * 20)
print("1. 거래 기록")
print("2. 전체 내역 보기")
print("3. 기본 통계")
print("4. 카테고리별 조회")
print("5. 날짜별 검색")
print("6. 내용 검색")
print("7. 월별 분석")
print("8. 예산 관리")
print("9. 종료")
print("=" * 20)
choice = input("메뉴를 선택하세요 (1-9): ")
if choice == "1":
# 거래 기록 코드
pass
elif choice == "2":
# 전체 내역 보기 코드
pass
elif choice == "3":
# 기본 통계 코드
pass
elif choice == "4":
# 카테고리별 조회 코드
pass
elif choice == "5":
# 날짜별 검색 코드
pass
elif choice == "6":
# 내용 검색 코드
pass
elif choice == "7":
# 월별 분석 코드
pass
elif choice == "8":
# 예산 관리 코드
pass
elif choice == "9":
print("👋 가계부를 종료합니다!")
break
else:
print("❌ 1~9 중에서 선택하세요!")
🎯 도전 과제
- 수입 카테고리: 급여, 용돈, 투자수익 등 수입도 카테고리 분류
- 반복 거래: 매월 정기적으로 발생하는 거래 자동 기록
- 목표 설정: 저축 목표 설정 및 달성률 추적
- 그래프 표시: 문자로 간단한 막대그래프나 파이차트 구현
📝 완성 체크리스트
💰 개인 가계부 체크리스트
🎉 완성 후 해볼 것
완성된 가계부로 실제 한 달간 가계를 관리해보세요! 매일 지출을 기록하고, 일주일마다 통계를 확인하며, 월말에는 예산 대비 실제 지출을 분석해보세요. 어떤 카테고리에서 가장 많이 지출하는지, 절약할 수 있는 부분은 어디인지 찾아보세요!
Last updated on