본문 바로가기

Back-End/Python

[Python][파이썬] 고객 정보 관리 시스템 만들기 실습 4 - 고객정보 파일저장, pickle라이브러리

~ 목차 ~

고객 정보 관리 시스템 기능으로 고객 정보 저장과 고객 정보 불러오는 기능을 추가 해보았다.

 

1. S메뉴 => 고객 정보를 파일로 저장하는 기능 추가(pickle라이브러리 사용)

 

2. 프로그램 실행시 자동으로 저장된 고객정보 읽어와 복원

 

3. 프로그램 종료시 자동으로 고객 정보 파일로 저장

 


 

1. S메뉴 => 고객 정보를 파일로 저장하는 기능 추가(pickle라이브러리 사용)

  • do_Save로 모듈 생성 [/cust/save/do_Save.py]
    • pickle 라이브러리 import하기
      • 자주쓰는 alias : [ fp : 파일포인트, f : 파일 ]
    • do_S() 함수 생성하기 : 고객정보 저장
      • 예외처리 try-except 하기
      • finally 사용하여 고객정보같은 중요한 내용은 경로 이용하는 os라이브러리 사용하여 반드시 저장하도록 해도 좋음.
    • do_L() 함수 생성하기 : 고객정보 불러오기
import pickle
import os

def do_S(customers):
    try:
        with open('cust/customers.pickle', 'wb') as fp:
            # fp라는 파일에 customers를 저장하자
            pickle.dump(customers, fp)
    except Exception as e:
        print('저장하는데에 실패하였습니다.', e)
    # finally:
    #     os.mkdir('cust')
    #     with open('cust/customers.pickle', 'wb') as fp:
    #         pickle.dump(customers, fp)

def do_L():
    file_path = 'cust/customers.pickle'
    if os.path.exists(file_path):
        with open(file_path, 'rb') as fp:
            return pickle.load(fp)
    else:
        return list()

 


 

2. 프로그램 실행시 자동으로 저장된 고객정보 읽어와 복원

  • main 수정하기
    • do_S, do_L 함수 import 
    • 저장된 고객정보 읽어오기
    • 메뉴에 'S' 추가하기
from cust.ver1.common import print_menu
from cust.insert.do_I import do_I as I
from cust.read.do_C import do_C as C
from cust.read.do_P import do_P as P
from cust.read.do_N import do_N as N
from cust.update.do_U import do_U as U
from cust.delete.do_D import do_D as D
from cust.save.do_Save import do_S as S
from cust.save.do_Save import do_L as L

#main
def main():
    customers = L()
    index = -1

    while True:
        menu = print_menu()
        if menu == 'I':
            index = I(customers, index)
            print('customers : ', customers)

        elif menu == 'P':
            index = P(customers, index)

        elif menu == 'C':
            C(customers, index)

        elif menu == 'N':
            index = N(customers, index)

        elif menu == 'U':
            U(customers, index)

        elif menu == 'D':
            index = D(customers, index)

        elif menu == 'S':
            S(customers)

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

if __name__ == '__main__':
    main()

 

 


 

 

3. 프로그램 종료시 자동으로 고객 정보 파일로 저장

  • 'Q'메뉴에 do_S 불러오기
  • sys : break대신 시스템 종료시켜주는 라이브러리 사용하기
from cust.ver1.common import print_menu
from cust.insert.do_I import do_I as I
from cust.read.do_C import do_C as C
from cust.read.do_P import do_P as P
from cust.read.do_N import do_N as N
from cust.update.do_U import do_U as U
from cust.delete.do_D import do_D as D
from cust.save.do_Save import do_S as S
from cust.save.do_Save import do_L as L

# sys : break대신 시스템 종료시켜주는 라이브러리
import sys

#main
def main():
    customers = L()
    index = -1

    while True:
        menu = print_menu()
        if menu == 'I':
            print('index before :', index)
            index = I(customers, index)
            print('index :', index)
            print('customers : ', customers)

        elif menu == 'P':
            index = P(customers, index)

        elif menu == 'C':
            C(customers, index)

        elif menu == 'N':
            index = N(customers, index)

        elif menu == 'U':
            U(customers, index)

        elif menu == 'D':
            index = D(customers, index)

        elif menu == 'S':
            S(customers)

        elif menu == 'Q':
            #try-except해서 finally에서 저장은 반드시 되도록 설정해도 좋을 것 같다.
            S(customers)
            print('저장이 완료되었습니다.')
            print('안녕히가세요~')
            sys.exit()
            
        else:
            print('잘못 입력하셨습니다. 다시 입력 해주세요')

if __name__ == '__main__':
    main()

※ 'Q' 메뉴에도 try-except-finally 사용하여 저장은 반드시 되도록 설정해도 좋을 것 같다.

 

 


 

 

4. 실행 결과

 

     다음 중에서 하실 작업의 메뉴를 입력하세요.
        I - 고객 정보 입력
        P - 이전 고객 정보 조회
        C - 현재 고객 정보 조회
        N - 다음 고객 정보 조회
        U - 현재 고객 정보 수정
        D - 현재 고객 정보 삭제
        S - 고객 정보 저장 
        Q - 프로그램 종료
    I
index before : -1
고객정보 입력
이름을 입력하세요 : AAA
성별 (M/F)를 입력하세요 : M
이메일 주소를 입력하세요 : ABC@maver.com
잘못 입력하셨습니다. 다시 입력 해 주세요.
이메일 주소를 입력하세요 : abcd@naver.com
출생년도 4자리 입력하세요 : 2020
index : 5
customers :  [{'name': 'AAA', 'gender': 'M', 'email': 'aaa@', 'year': '1111'}, {'name': 'SSS', 'gender': 'F', 'email': 'sss@', 'year': '2222'}, {'name': 'OOO', 'gender': 'M', 'email': 'oooo@gamil.com', 'year': '1354'}, {'name': 'AAA', 'gender': 'M', 'email': 'bbbb@gamil.com', 'year': '8888'}, {'name': 'ZZZZ', 'gender': 'F', 'email': 'ZZZZ@NAVER', 'year': '9998'}, {'name': 'AAA', 'gender': 'M', 'email': 'abcd@naver.com', 'year': '2020'}]

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

        다음 중에서 하실 작업의 메뉴를 입력하세요.
        I - 고객 정보 입력
        P - 이전 고객 정보 조회
        C - 현재 고객 정보 조회
        N - 다음 고객 정보 조회
        U - 현재 고객 정보 수정
        D - 현재 고객 정보 삭제
        S - 고객 정보 저장 
        Q - 프로그램 종료
    Q
저장이 완료되었습니다.
안녕히가세요~

 

 

※ 수정해야 할 부분 

 1. finally를 이용해 고객정보저장이 반드시 되도록 하는 것이 좋을 것 같다.

 2. 고객정보 저장 시에 저장되었는지 확인문자가 없어 확인 메시지 추가하는게 좋을 것 같다.

 3. s를 입력하면 S메뉴가 작동하지 않으므로 upper()함수를 넣어줘야 할 것 같다.

 

 

728x90