본문 바로가기

Back-End/Python

[Python][파이썬] 고객 정보 관리 시스템 만들기 실습 2

~ 목차 ~

 이전 고객 정보 관리 시스템 만들기 실습을 다듬어서 새로운 기능들을 넣어 보았다.

1. Insert에서 중복 이메일 방지

2. update에서 수정 할 고객 정보 검색 기능

 

     - 입력된 이름과 일치하는 고객을 찾아서 index를 구함

     - 수정 내용이 없는 항목은 이전 값 유지

 

3. 코드

customers = list()
index = -1

while True :
    menu = input('''
    다음 중에서 하실 작업의 메뉴를 입력하세요.
    I - 고객 정보 입력
    P - 이전 고객 정보 조회
    C - 현재 고객 정보 조회
    N - 다음 고객 정보 조회
    U - 현재 고객 정보 수정
    D - 현재 고객 정보 삭제
    Q - 프로그램 종료
    ''').upper()

    if menu == 'I':
        print('고객 정보 입력')
        customer = { 'name' : '', 'gender' : '', 'email' : '', 'year' : 0 }
        # customer = dict()
        customer['name'] = input('이름을 입력하세요 : ')
        while True:
            customer['gender'] = input('성별 (M/F)를 입력하세요 : ').upper()
            if customer['gender'] in ('M', 'F'):
                break
            else:
                print('잘못 입력하셨습니다. 다시 입력 해 주세요.')

        while True:
            customer['email'] = input('이메일 주소를 입력하세요 : ')
            golbang = '@' in customer['email']
            #이메일 중복 방지 로직 추가~~~
            emails = [customer['email'] for customer in customers]
            if customer['email'] in emails:
                print('중복된 이메일 입니다. 다른 이메일을 입력하세요.')
                continue
            else:
                if golbang:
                    break
                else:
                    print('"@"를 포함한 이메일 주소를 입력하세요.')

        while True:
            customer['year'] = input('출생년도 4자리를 입력하세요 : ')
            check = len(customer['year']) == 4 and customer['year'].isdigit()
            if check:
                break
            else:
                print('출생년도 숫자 4자리를 다시 입력하세요.')

        customers.append(customer)
        print(customers)
        #새로 입력한 고객 정보의 위치 적용 여부 고민 (index = len(customers) - 1 )
        index = len(customers) - 1

    elif menu == 'P':
        print('이전 고객 정보 조회')
        if index <= 0:
            print('이전 고객 데이터가 없습니다.')
            print(index)
        else:
            index -= 1
            print(f'{index + 1}번째 고객 정보 입니다.')
            print(customers[index])

    elif menu == 'C':
        print('현재 고객 정보 조회')
        if index >= 0:
            print(f'{index + 1}번째 고객 정보 입니다.')
            print(customers[index])
        else:
            print('입력된 정보가 없습니다. 정보 입력은 I를 선택하세요.')

    elif menu == 'N':
        print('다음 고객 정보 조회')
        if index >= (len(customers) - 1):
            print('다음 고객 데이터가 없습니다.')
            print(index)
        else:
            index += 1
            print(f'{index + 1}번째 고객 정보 입니다.')
            print(customers[index])

    elif menu == 'U':
        print('현재 고객 정보 수정')
        customer = { 'name' : '', 'gender' : '', 'email' : '', 'year' : 0 }
        # 수정 할 고객 정보 검색 기능
        modifycustomer = input('수정 할 고객 이름을 입력하세요 : ')
        names = [customer['name'] for customer in customers]
        if modifycustomer in names:
            # 입력된 이름과 일치하는 고객을 찾아서 index를 구함
            index = names.index(modifycustomer)
            print(f'수정할 고객 정보는 {customers[index]}입니다. ')
            # 수정 내용이 없는 항목은 이전 값 유지 하도록. (입력한 len(customer['name']) == 0 이면 이전값 입력 customer['name'] = customers[index]['name'] )
            customer['name'] = input('변경할 이름을 입력하세요 : ')
            if len(customer['name']) == 0:
                customer['name'] = customers[index]['name']
                print('이전값을 그대로 유지합니다.')

            while True:
                customer['gender'] = input('변경할 성별 (M/F)를 입력하세요 : ').upper()
                if len(customer['gender']) == 0:
                    customer['gender'] = customers[index]['gender']
                    print('이전값을 그대로 유지합니다.')
                    break
                else:
                    if customer['gender'] in ('M', 'F'):
                        break
                    else:
                        print('잘못 입력하셨습니다. 다시 입력 해 주세요.')

            while True:
                customer['email'] = input('변경할 이메일 주소를 입력하세요 : ')
                if len(customer['email']) == 0:
                    customer['email'] = customers[index]['email']
                    print('이전값을 그대로 유지합니다.')
                    break
                else:
                    golbang = '@' in customer['email']
                    emails = [customer['email'] for customer in customers]
                    if customer['email'] in emails:
                        print('중복된 이메일 입니다. 다른 이메일을 입력하세요.')
                        continue
                    else:
                        if golbang:
                            break
                        else:
                            print('"@"를 포함한 이메일 주소를 입력하세요.')

            while True:
                customer['year'] = input('변경할 출생년도 4자리를 입력하세요 : ')
                if len(customer['year']) == 0:
                    customer['year'] = customers[index]['year']
                    print('이전값을 그대로 유지합니다.')
                    break
                else:
                    check = len(customer['year']) == 4 and customer['year'].isdigit()
                    if check:
                        break
                    else:
                        print('출생년도 숫자 4자리를 다시 입력하세요.')

            customers[index] = customer
            print(f'변경된 고객 정보는 {customers[index]}입니다.')

        else:
            print(f'{modifycustomer} 이름을 가진 고객을 찾을 수 없습니다.')


    elif menu == 'D':
        print('현재 고객 정보 삭제')
        print(f'현재 고객 정보 {customers[index]["name"]}를 삭제하시겠습니까?')
        check = input('삭제하실려면 Y, 그대로 유지하시려면 N를 입력하세요').upper()
        if check == 'Y':
            del customers[index]
            index -= 1
            print('삭제가 완료되었습니다.')
        else:
            print('삭제가 취소되었습니다.')

    elif menu == 'Q':
        print('안녕히 가세요 :)')
        break
    else:
        print('잘못 입력하셨습니다. 다시 입력하세요.')

 

 

4. 결과

 

    다음 중에서 하실 작업의 메뉴를 입력하세요.
    I - 고객 정보 입력
    P - 이전 고객 정보 조회
    C - 현재 고객 정보 조회
    N - 다음 고객 정보 조회
    U - 현재 고객 정보 수정
    D - 현재 고객 정보 삭제
    Q - 프로그램 종료


    i 


고객 정보 입력
이름을 입력하세요 : aaa
성별 (M/F)를 입력하세요 : m
이메일 주소를 입력하세요 : aaa@
출생년도 4자리를 입력하세요 : 1111
[{'name': 'aaa', 'gender': 'M', 'email': 'aaa@', 'year': '1111'}]

    다음 중에서 하실 작업의 메뉴를 입력하세요.
    I - 고객 정보 입력
    P - 이전 고객 정보 조회
    C - 현재 고객 정보 조회
    N - 다음 고객 정보 조회
    U - 현재 고객 정보 수정
    D - 현재 고객 정보 삭제
    Q - 프로그램 종료


    i


고객 정보 입력
이름을 입력하세요 : bbb
성별 (M/F)를 입력하세요 : f
이메일 주소를 입력하세요 : bbb@
출생년도 4자리를 입력하세요 : 2222
[{'name': 'aaa', 'gender': 'M', 'email': 'aaa@', 'year': '1111'}, {'name': 'bbb', 'gender': 'F', 'email': 'bbb@', 'year': '2222'}]

    다음 중에서 하실 작업의 메뉴를 입력하세요.
    I - 고객 정보 입력
    P - 이전 고객 정보 조회
    C - 현재 고객 정보 조회
    N - 다음 고객 정보 조회
    U - 현재 고객 정보 수정
    D - 현재 고객 정보 삭제
    Q - 프로그램 종료
    u
현재 고객 정보 수정
수정 할 고객 이름을 입력하세요 :   
 이름을 가진 고객을 찾을 수 없습니다.

    다음 중에서 하실 작업의 메뉴를 입력하세요.
    I - 고객 정보 입력
    P - 이전 고객 정보 조회
    C - 현재 고객 정보 조회
    N - 다음 고객 정보 조회
    U - 현재 고객 정보 수정
    D - 현재 고객 정보 삭제
    Q - 프로그램 종료
    u
현재 고객 정보 수정
수정 할 고객 이름을 입력하세요 : bbb
수정할 고객 정보는 {'name': 'bbb', 'gender': 'F', 'email': 'bbb@', 'year': '2222'}입니다. 
변경할 이름을 입력하세요 :   
이전값을 그대로 유지합니다.
변경할 성별 (M/F)를 입력하세요 :   
이전값을 그대로 유지합니다.
변경할 이메일 주소를 입력하세요 : aaa@
중복된 이메일 입니다. 다른 이메일을 입력하세요.
변경할 이메일 주소를 입력하세요 : bbbb@
변경할 출생년도 4자리를 입력하세요 :    
이전값을 그대로 유지합니다.
변경된 고객 정보는 {'name': 'bbb', 'gender': 'F', 'email': 'bbbb@', 'year': '2222'}입니다.

    다음 중에서 하실 작업의 메뉴를 입력하세요.
    I - 고객 정보 입력
    P - 이전 고객 정보 조회
    C - 현재 고객 정보 조회
    N - 다음 고객 정보 조회
    U - 현재 고객 정보 수정
    D - 현재 고객 정보 삭제
    Q - 프로그램 종료
    c
현재 고객 정보 조회
2번째 고객 정보 입니다.
{'name': 'bbb', 'gender': 'F', 'email': 'bbbb@', 'year': '2222'}

    다음 중에서 하실 작업의 메뉴를 입력하세요.
    I - 고객 정보 입력
    P - 이전 고객 정보 조회
    C - 현재 고객 정보 조회
    N - 다음 고객 정보 조회
    U - 현재 고객 정보 수정
    D - 현재 고객 정보 삭제
    Q - 프로그램 종료

    q

    안녕히 가세요 :)

728x90