Skip to Content
💻 코리아IT아카데미 신촌 - 프로그래밍 학습 자료
실전 프로젝트레벨 4스마트 전화번호부

📞 스마트 전화번호부

📋 프로젝트 개요

리스트와 딕셔너리를 활용하여 연락처를 체계적으로 관리하는 스마트 전화번호부를 만들어보세요. 연락처 추가부터 검색, 그룹 관리까지 실생활에서 유용한 기능들을 구현해봅시다!

🎯 학습 목표

  • 리스트를 활용한 데이터 목록 관리
  • 딕셔너리를 이용한 구조화된 정보 저장
  • 반복문과 조건문을 조합한 데이터 처리
  • 실생활 문제를 프로그래밍으로 해결하는 경험

🚀 기본 기능

핵심 요구사항

연락처를 저장하고 관리하는 전화번호부

  1. 연락처 추가

    • 이름, 전화번호, 이메일 입력받기
    • 딕셔너리 형태로 정보 저장
    • 전체 연락처 리스트에 추가
  2. 연락처 조회

    • 저장된 모든 연락처 목록 출력
    • 번호와 함께 깔끔하게 정렬하여 표시
  3. 연락처 삭제

    • 이름으로 연락처 찾기
    • 해당 연락처를 목록에서 제거

🎨 추가 기능 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 중에서 선택하세요!")

🎯 도전 과제

  1. 중복 방지: 같은 이름의 연락처 추가 방지
  2. 정렬 기능: 이름순, 그룹순으로 연락처 정렬
  3. 백업 기능: 연락처를 텍스트 형태로 저장/불러오기
  4. 생일 관리: 생일 정보 추가 및 다가오는 생일 알림

📝 완성 체크리스트

📞 스마트 전화번호부 체크리스트

🎉 완성 후 해볼 것

완성된 전화번호부로 실제 지인들의 연락처를 관리해보세요! 가족, 친구, 회사 동료들을 그룹별로 정리하고, 자주 연락하는 사람들을 즐겨찾기에 추가해보세요. 통계 기능으로 어떤 그룹의 사람들과 가장 많이 연락하는지도 확인해보세요!

Last updated on