MapleStory Finger Point
본문 바로가기
Back-end/Python - project

[Python] 전화번호부 Project - Read구현

by 디팔⸜( ◜࿁◝ )⸝︎︎ 2022. 8. 9.

Read 메뉴 함수

def search_menu(self):
        print('===주소록 검색하기===')
        print('[1] 전체 주소록 검색하기')
        print('[2] 이름으로 검색하기')
        print('[3] 전화번호로 검색하기')
        print('[4] 이메일로 검색하기')
        print('[0] 돌아가기')
        search_input=int(input('원하시는 기능의 숫자를 입력해 주세요 >>'))
        if search_input == 0 : return self.menu()
        elif search_input == 1 : return self.searchAll() #searchAll 함수 필요함!
        elif search_input == 2 :
            search_by_name = input('검색할 이름을 입력해주세요 >>')
            return self.search(search_by_name,"name")
        elif search_input == 3 :
            search_by_phone = input('검색할 전화번호를 입력해주세요 >>')
            return self.search(search_by_phone,"phone")
        elif search_input == 4 :
            search_by_email = input('검색할 이메일을 입력해주세요 >>')
            return self.search(search_by_email,"email")

검색 기능 구현 함수

def search(self,alias,type):
        if type == "name" :
            cursor.execute(f"select name, phone, email from phoneBookDB where name = '{alias}'")
            search_data = cursor.fetchall()
        elif type == "phone":
            cursor.execute(f"select name, phone, email from phoneBookDB where phone = '{alias}'")
            search_data = cursor.fetchall()
        elif type == "email":
            cursor.execute(f"select name, phone, email from phoneBookDB where email = '{alias}'")
            search_data = cursor.fetchall()

        if len(search_data) == 0:
            print('전화번호가 없습니다.')
            return
        else: #빈 문자열에 각 순서대로 할당한 값 넣어서 마지막에 한 번에 출력.
            search_for_print=""
            i = 0
            for(name,phone,email) in search_data:
                if i == 0:
                    search_for_print += f"이름:{name} 전화번호:{phone} 이메일:{email}"
                    i += 1
                    continue
                else:
                    search_for_print += "\n" + f"이름:{name} 전화번호:{phone} 이메일:{email}"
            print(search_for_print)
    
def searchAll(self):
        cursor.execute(f"select * from phoneBookDB order by name")
        All_data = cursor.fetchall()
        if len(All_data) == 0:
            return "전화번호가 없습니다."

        else: #빈 문자열에 줄 바꿈을 하면서 데이터를 쌓은 뒤 한 번에 출력.
            All_data_text = ""
            i = 0
            for d in All_data:
                if i == 0: #첫 출력물은 공백 없이 출력하고 다음부터 줄바꿈을 하면서 출력할 수 있도록. do~while을 이용하면 개선이 될까?
                    All_data_text = f"이름 : {d[1]} 전화번호 : {d[2]} 이메일 : {d[3]}"
                    i+=1
                    continue
                All_data_text +="\n"+f"이름 : {d[1]} 전화번호 : {d[2]} 이메일 : {d[3]}"
            print(All_data_text)

첫 번째 함수(search_menu())는

메뉴를 보여주는 함수로, 입력 값에 따라 함수가 연결된다.

 

두 번째 함수(search)는

검색을 구현하는 함수로 출력시 줄바꿈을 자연스럽게 하기 위해서 i를 부여하고 함수를 작성하였다.

이런 경우에는 do ~ while문을 사용하면 더 직관적인 코드가 작성되지 않을 까 생각이 든다.

 

세 번째 함수(searchAll())는

메뉴에서 전체 전화번호부 조회를 하기위한 함수이다.

댓글