📞 스마트 전화번호부
📋 프로젝트 개요
리스트와 딕셔너리를 활용하여 연락처를 체계적으로 관리하는 스마트 전화번호부를 만들어보세요. 연락처 추가부터 검색, 그룹 관리까지 실생활에서 유용한 기능들을 구현해봅시다!
🎯 학습 목표
- 리스트를 활용한 데이터 목록 관리
- 딕셔너리를 이용한 구조화된 정보 저장
- 반복문과 조건문을 조합한 데이터 처리
- 실생활 문제를 프로그래밍으로 해결하는 경험
🚀 기본 기능
핵심 요구사항
연락처를 저장하고 관리하는 전화번호부
-
연락처 추가
- 이름, 전화번호, 이메일 입력받기
- 딕셔너리 형태로 정보 저장
- 전체 연락처 리스트에 추가
-
연락처 조회
- 저장된 모든 연락처 목록 출력
- 번호와 함께 깔끔하게 정렬하여 표시
-
연락처 삭제
- 이름으로 연락처 찾기
- 해당 연락처를 목록에서 제거
🎨 추가 기능 1: 연락처 검색
요구사항
이름의 일부만 입력해도 관련 연락처를 찾을 수 있는 검색 기능을 추가합니다.
- 부분 검색: 이름의 일부만 입력해도 관련 연락처 찾기
- 검색 결과: 일치하는 모든 연락처 표시
연락처 검색 예시
🔍 연락처 검색
===============
검색할 이름: 김
🔍 검색 결과: 김 (3명)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📞 김철수 - 010-1234-5678
📧 kim@email.com
👥 친구
📞 김영희 - 010-5678-9012
📧 younghee@email.com
👥 회사
📞 김민수 - 010-9876-5432
📧 minsu@email.com
👥 가족
👥 추가 기능 2: 그룹 관리
요구사항
연락처를 그룹별로 분류하여 체계적으로 관리할 수 있는 기능을 추가합니다.
- 그룹 분류: 가족, 친구, 회사 등으로 연락처 분류
- 그룹 설정: 연락처 추가/수정 시 그룹 선택
그룹 관리 예시
📱 연락처 그룹 관리
==================
사용 가능한 그룹:
1. 가족 2. 친구 3. 회사 4. 기타
김철수님을 어떤 그룹에 추가하시겠습니까?
선택: 2
✅ 김철수님이 '친구' 그룹에 추가되었습니다!
📂 추가 기능 3: 그룹별 조회
요구사항
특정 그룹의 연락처만 모아서 확인할 수 있는 기능을 추가합니다.
- 그룹별 조회: 특정 그룹의 연락처만 모아보기
- 그룹별 통계: 각 그룹의 연락처 수 표시
그룹별 조회 예시
📂 그룹별 조회
===============
1. 가족 2. 친구 3. 회사 4. 기타
선택: 2
👥 친구 그룹 (5명)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📞 김철수 - 010-1234-5678
📞 이영희 - 010-5678-9012
📞 박민수 - 010-9876-5432
📞 최지영 - 010-1111-2222
📞 정수현 - 010-3333-4444
✏️ 추가 기능 4: 연락처 수정
요구사항
기존 연락처의 정보를 수정할 수 있는 기능을 추가합니다.
- 연락처 수정: 기존 연락처 정보 변경
- 선택적 수정: 원하는 항목만 수정 가능
연락처 수정 예시
✏️ 연락처 수정
===============
수정할 연락처 이름: 김철수
📞 김철수님의 현재 정보:
전화번호: 010-1234-5678
이메일: kim@email.com
그룹: 친구
수정할 항목을 선택하세요:
1. 전화번호 2. 이메일 3. 그룹 4. 모두
선택: 1
새로운 전화번호: 010-9999-8888
✅ 김철수님의 전화번호가 수정되었습니다!
⭐ 추가 기능 5: 즐겨찾기 관리
요구사항
자주 연락하는 사람을 즐겨찾기로 설정하여 쉽게 찾을 수 있는 기능을 추가합니다.
- 즐겨찾기: 자주 연락하는 사람을 즐겨찾기로 설정
- 즐겨찾기 조회: 즐겨찾기 연락처만 모아보기
즐겨찾기 관리 예시
⭐ 즐겨찾기 관리
================
1. 즐겨찾기 추가/제거
2. 즐겨찾기 목록 보기
선택: 1
즐겨찾기 설정할 이름: 김철수
✅ 김철수님을 즐겨찾기에 추가했습니다!
⭐ 즐겨찾기 연락처 (3명)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📞 김철수 - 010-1234-5678
📞 이영희 - 010-5678-9012
📞 박민수 - 010-9876-5432
📊 추가 기능 6: 통계 및 정보
요구사항
전화번호부 사용 현황을 파악할 수 있는 통계 기능을 추가합니다.
- 통계 정보: 그룹별 연락처 수, 전체 통계
- 최근 추가: 가장 최근에 추가된 연락처 표시
- 데이터 내보내기: 모든 연락처를 정리된 형태로 출력
통계 출력 예시
📊 전화번호부 통계
==================
📞 전체 연락처: 15명
⭐ 즐겨찾기: 5명
👥 그룹별 분포:
- 가족: 4명
- 친구: 8명
- 회사: 3명
📅 최근 추가된 연락처:
1. 김철수 (친구)
2. 이영희 (회사)
3. 박민수 (가족)
💡 구현 힌트
1. 메뉴 시스템 구현
프로그램의 전체 구조를 만들어보세요.
# 메뉴 시스템 구현
while True:
print("\n📱 전화번호부 관리 시스템")
print("=" * 35)
print("1. 연락처 추가")
print("2. 연락처 조회")
print("3. 연락처 삭제")
print("4. 연락처 검색")
print("5. 그룹 관리")
print("6. 그룹별 조회")
print("7. 연락처 수정")
print("8. 즐겨찾기 관리")
print("9. 통계 및 정보")
print("10. 종료")
print("=" * 35)
choice = input("선택 (1-10): ")
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("📊 통계 및 정보")
print("-" * 20)
# 여기에 통계 및 정보 코드를 작성하세요
elif choice == "10":
print("👋 프로그램을 종료합니다.")
break
else:
print("❌ 잘못된 선택입니다.")
2. 데이터 구조 설계
# 전체 연락처를 저장할 리스트
contacts = []
# 각 연락처는 딕셔너리로 구성 (기본 기능용)
contact = {
"name": "김철수",
"phone": "010-1234-5678",
"email": "kim@email.com"
}
# 연락처를 리스트에 추가
contacts.append(contact)
기본 기능 구현
3. 연락처 추가 기능 (기본)
print("📱 새 연락처 추가")
print("-" * 20)
name = input("이름: ")
phone = input("전화번호: ")
email = input("이메일: ")
# 딕셔너리로 연락처 정보 저장 (기본 기능)
new_contact = {
"name": name,
"phone": phone,
"email": email
}
contacts.append(new_contact)
print(f"✅ {name}님의 연락처가 추가되었습니다!")
4. 연락처 조회 기능 (기본)
print("📋 전체 연락처 목록")
print("=" * 30)
if len(contacts) == 0:
print("저장된 연락처가 없습니다.")
else:
for i in range(len(contacts)):
contact = contacts[i]
print(f"{i+1}. 📞 {contact['name']}")
print(f" 전화: {contact['phone']}")
print(f" 이메일: {contact['email']}")
print("-" * 25)
5. 연락처 삭제 기능 (기본)
delete_name = input("삭제할 연락처 이름: ")
found = False
# 리스트에서 해당 연락처 찾아서 삭제
for i in range(len(contacts)):
if contacts[i]["name"] == delete_name:
removed_contact = contacts[i]
del contacts[i] # 인덱스로 삭제
print(f"✅ {removed_contact['name']}님의 연락처가 삭제되었습니다.")
found = True
break
if not found:
print("❌ 해당 이름의 연락처를 찾을 수 없습니다.")
추가 기능 구현
6. 추가 기능 1: 연락처 검색
# 검색어 입력
search_name = input("검색할 이름: ")
# 검색 결과 저장
found_contacts = []
for contact in contacts:
if search_name in contact["name"]:
found_contacts.append(contact)
# 결과 출력
if len(found_contacts) == 0:
print("❌ 검색 결과가 없습니다.")
else:
print(f"🔍 검색 결과: {search_name} ({len(found_contacts)}명)")
print("-" * 30)
for contact in found_contacts:
print(f"📞 {contact['name']} - {contact['phone']}")
print(f" 📧 {contact['email']}")
print("-" * 20)
추가 기능 2: 그룹 관리
# 그룹 목록 준비
groups = ["가족", "친구", "회사", "기타"]
# 연락처 추가 시 그룹 설정
print("그룹을 선택하세요:")
for i in range(len(groups)):
print(f"{i+1}. {groups[i]}")
group_choice = int(input("선택 (1-4): ")) - 1
selected_group = groups[group_choice]
# 그룹이 포함된 연락처 딕셔너리
new_contact = {
"name": name,
"phone": phone,
"email": email,
"group": selected_group,
"favorite": False
}
print(f"✅ {name}님이 '{selected_group}' 그룹에 추가되었습니다!")
추가 기능 3: 그룹별 조회
# 그룹 선택
print("📂 그룹별 연락처 조회")
print("조회할 그룹을 선택하세요:")
for i in range(len(groups)):
print(f"{i+1}. {groups[i]}")
group_choice = int(input("선택 (1-4): ")) - 1
selected_group = groups[group_choice]
# 해당 그룹의 연락처만 찾기
group_contacts = []
for contact in contacts:
if contact["group"] == selected_group:
group_contacts.append(contact)
# 결과 출력
print(f"\n👥 {selected_group} 그룹 ({len(group_contacts)}명)")
print("-" * 30)
if len(group_contacts) == 0:
print("해당 그룹에 연락처가 없습니다.")
else:
for contact in group_contacts:
print(f"📞 {contact['name']} - {contact['phone']}")
print(f" 📧 {contact['email']}")
print("-" * 20)
추가 기능 4: 연락처 수정
# 수정할 연락처 선택
edit_name = input("수정할 연락처 이름: ")
found = False
for contact in contacts:
if contact["name"] == edit_name:
# 현재 정보 출력
print(f"📞 {contact['name']}님의 현재 정보:")
print(f" 전화번호: {contact['phone']}")
print(f" 이메일: {contact['email']}")
print(f" 그룹: {contact['group']}")
# 수정할 항목 선택
print("\n수정할 항목을 선택하세요:")
print("1. 전화번호 2. 이메일 3. 그룹 4. 모두")
edit_choice = input("선택: ")
if edit_choice == "1":
new_phone = input("새로운 전화번호: ")
contact["phone"] = new_phone
elif edit_choice == "2":
new_email = input("새로운 이메일: ")
contact["email"] = new_email
elif edit_choice == "3":
print("새로운 그룹:")
for i in range(len(groups)):
print(f"{i+1}. {groups[i]}")
group_choice = int(input("선택: ")) - 1
contact["group"] = groups[group_choice]
print(f"✅ {contact['name']}님의 정보가 수정되었습니다!")
found = True
break
if not found:
print("❌ 해당 이름의 연락처를 찾을 수 없습니다.")
추가 기능 5: 즐겨찾기 관리
# 즐겨찾기 설정/해제
favorite_name = input("즐겨찾기 설정할 이름: ")
found = False
for contact in contacts:
if contact["name"] == favorite_name:
if contact["favorite"]:
contact["favorite"] = False
print(f"⭐ {favorite_name}님을 즐겨찾기에서 제거했습니다.")
else:
contact["favorite"] = True
print(f"⭐ {favorite_name}님을 즐겨찾기에 추가했습니다.")
found = True
break
if not found:
print("❌ 해당 이름의 연락처를 찾을 수 없습니다.")
# 즐겨찾기 목록 조회
print("\n⭐ 즐겨찾기 연락처")
print("-" * 30)
favorite_contacts = []
for contact in contacts:
if contact["favorite"]:
favorite_contacts.append(contact)
if len(favorite_contacts) == 0:
print("즐겨찾기에 추가된 연락처가 없습니다.")
else:
for contact in favorite_contacts:
print(f"📞 {contact['name']} - {contact['phone']}")
print(f" 📧 {contact['email']}")
print("-" * 15)
추가 기능 6: 통계 및 정보
# 전체 통계 계산
total_contacts = len(contacts)
favorite_count = 0
group_count = {"가족": 0, "친구": 0, "회사": 0, "기타": 0}
for contact in contacts:
if contact["favorite"]:
favorite_count += 1
group = contact["group"]
group_count[group] += 1
# 통계 출력
print("📊 전화번호부 통계")
print("=" * 20)
print(f"📞 전체 연락처: {total_contacts}명")
print(f"⭐ 즐겨찾기: {favorite_count}명")
print("\n👥 그룹별 분포:")
for group in group_count:
count = group_count[group]
print(f" - {group}: {count}명")
# 최근 추가된 연락처
if len(contacts) > 0:
print("\n📅 최근 추가된 연락처:")
recent_contacts = contacts[-3:] # 최근 3개
for i, contact in enumerate(recent_contacts, 1):
print(f" {i}. {contact['name']} ({contact['group']})")
메뉴 시스템 구현
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("10. 종료")
print("=" * 30)
choice = input("메뉴를 선택하세요 (1-10): ")
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":
# 통계 보기 코드
pass
elif choice == "10":
print("👋 전화번호부를 종료합니다!")
break
else:
print("❌ 1~10 중에서 선택하세요!")
🎯 도전 과제
- 중복 방지: 같은 이름의 연락처 추가 방지
- 정렬 기능: 이름순, 그룹순으로 연락처 정렬
- 백업 기능: 연락처를 텍스트 형태로 저장/불러오기
- 생일 관리: 생일 정보 추가 및 다가오는 생일 알림
📝 완성 체크리스트
📞 스마트 전화번호부 체크리스트
🎉 완성 후 해볼 것
완성된 전화번호부로 실제 지인들의 연락처를 관리해보세요! 가족, 친구, 회사 동료들을 그룹별로 정리하고, 자주 연락하는 사람들을 즐겨찾기에 추가해보세요. 통계 기능으로 어떤 그룹의 사람들과 가장 많이 연락하는지도 확인해보세요!
Last updated on