[PYTHON] 파이썬을 통해 전화번호부 만들기

2023. 9. 13. 18:39DATA PROGRAMMING/PYTHON

지난 글에서 class에 대해 공부한 내용을 토대로 전화번호부를 만들어 보려고 한다.

 

파이썬 CLASS 기능을 통해서 전화번호부 만들기

 

1. 전화번호부 클래스 만들기

class Contact:
    def __init__(self, name, phone_number, e_mail, addr):
        self.name = name
        self.phone_number = phone_number
        self.e_mail = e_mail
        self.addr = addr

    def print_info(self):
        print("Name: ", self.name)
        print("Phone Number: ", self.phone_number)
        print("E-mail: ", self.e_mail)
        print("Address: ", self.addr)

def set_contact():
    name = input("Name: ")
    phone_number = input("Phone Number: ")
    e_mail = input("E-mail: ")
    addr = input("Address: ")
    print(name, phone_number, e_mail, addr)

전화번호부 역할을 하는 Contact라는 클래스의 기본적인 뼈대를 정의했다. 여기엔 print_info라는 메서드가 존재하는데 이는 저장된 전화번호 정보를 출력하는 메서드이다. 클래스 외부에 정의된 함수 set_contact는 직점 이름, 전화번호, 이메일, 주소 등을 입력하는 역할을 하는 함수다.

 

def run():
    set_contact()

if __name__ == "__main__":
    run()

run()함수를 통해 set_contact 함수를 불러올수 있다.

set_contact 함수는 전화번호부 정보를 입력하는 역할을 하는 함수로 사용자가 직접 입력 가능하다.

 

 

2. 메인메뉴 만들기

def print_menu():
    print("1. 연락처 입력")
    print("2. 연락처 출력")
    print("3. 연락처 삭제")
    print("4. 종료")
    menu = input("메뉴선택: ")
    return int(menu)

def run():
    while 1:
        menu = print_menu()
        if menu == 4:
            break

if __name__ == "__main__":
    run()

 

메인메뉴는 연락처를 입력할지 출력할지 삭제할지를 정해주는 역할을 한다. 이를 print_menu()로 정의했으며, run()함수에 while문을 사용하여 각 번호를 입력하면 해당 메뉴가 실행되며 4를 선택할시에 메뉴선택이 종료된다.

 

 

3. 연락처 입력기능 작동시키기

def set_contact():
    name = input("Name: ")
    phone_number = input("Phone Number: ")
    e_mail = input("E-mail: ")
    addr = input("Address: ")
    contact = Contact(name, phone_number, e_mail, addr)
    return contact

set_contact함수를 다음과같이 수정하여 입력한 결과를 contact 클래스에 입력할수 있도록 한다.

 

이제 앞서 만들었던 run함수를 통해 1번 메뉴를 선택했을때, set_contact함수가 실행돼 연락처를 입력할수 있도록 만들어 준다.

 

class Contact:
    def __init__(self, name, phone_number, e_mail, addr):
        self.name = name
        self.phone_number = phone_number
        self.e_mail = e_mail
        self.addr = addr

    def print_info(self):
        print("Name: ", self.name)
        print("Phone Number: ", self.phone_number)
        print("E-mail: ", self.e_mail)
        print("Address: ", self.addr)

def set_contact():
    name = input("Name: ")
    phone_number = input("Phone Number: ")
    e_mail = input("E-mail: ")
    addr = input("Address: ")
    contact = Contact(name, phone_number, e_mail, addr)
    return contact

def print_menu():
    print("1. 연락처 입력")
    print("2. 연락처 출력")
    print("3. 연락처 삭제")
    print("4. 종료")
    menu = input("메뉴선택: ")
    return int(menu)

def run():
    contact_list = []
    while 1:
        menu = print_menu()
        if menu == 1:
            contact = set_contact()
            contact_list.append(contact)
        elif menu == 4:
            break

if __name__ == "__main__":
    run()

지금까지의 전체적인 코드는 이렇게 작성된다.

 

 

4. 연락처 출력하기, 연락처 삭제하기 기능 추가

 

우선 연락처를 출력하는 기능부터 만들어보자.

def print_contact(contact_list):
    for contact in contact_list:
        contact.print_info()

contact_list라는 많은 연락처들중 contact라는 클래스 불러온다. 이때 print_info메서드를 사용한다. 또한 이 기능을 위해 여러 연락처를 저장할수 있도록 run함수에 contact_list를 만들어 주고, 2번 기능(연락처 출력)을 print_contact함수와 연결한다.

 

def run():
    contact_list = []
    while 1:
        menu = print_menu()
        if menu == 1:
            contact = set_contact()
            contact_list.append(contact)
        elif menu == 2:
            print_contact(contact_list)
        elif menu == 4:
            break

 

마찬가지로 연락처를 삭제하는 함수까지 정의해서 run()함수의 3번 메뉴에 연결해 준다

 

def delete_contact(contact_list, name):
    for i, contact in enumerate(contact_list):
        if contact.name == name:
            del contact_list[i]
            
def run():
    contact_list = []
    while 1:
        menu = print_menu()
        if menu == 1:
            contact = set_contact()
            contact_list.append(contact)
        elif menu == 2:
            print_contact(contact_list)
        elif menu == 3:
            name = input("Name: ")
            delete_contact(contact_list, name)
        elif menu == 4:
            break

여기까지 파이썬의 클래스 기능을 활용하여 전화번호부 기능을하는 프로그램을 만들수 있었다. 이에 더해 파일 기능을 통해 입력한 연락처 정보를 파일 형태로 저장할수도 있다.