고객 정보 관리 시스템 기능으로 고객 정보 저장과 고객 정보 불러오는 기능을 추가 해보았다.
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() 함수 생성하기 : 고객정보 불러오기
- pickle 라이브러리 import하기
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()함수를 넣어줘야 할 것 같다.
'Back-End > Python' 카테고리의 다른 글
[Python][파이썬] 정규표현식 사용하기 (0) | 2023.11.10 |
---|---|
[Python][파이썬] 고객 정보 관리 시스템 만들기 실습 5 - class, structure, os라이브러리 (0) | 2023.11.10 |
[Python][파이썬]객체 지향 프로그래밍(OOP) (0) | 2023.11.10 |
[Python][파이썬] 고객 정보 관리 시스템 만들기 실습 3 - module, import (7) | 2023.11.08 |
[Python][파이썬] 고객 정보 관리 시스템 만들기 실습 2 (3) | 2023.11.08 |