1+ import pickle
2+ import os .path
3+
4+ def print_menu ():
5+ print ()
6+ print ("=" * 50 )
7+ print ("1. 조회, 2. 입력, 3. 수정, 4. 삭제, 5. 종료" )
8+ print ("=" * 50 )
9+
10+ def phonebook_search ():
11+ global phonebook
12+ print ("1. 조회" )
13+ a = input ("조회할 이름 또는 전화번호를 입력하세요: " ).strip ()
14+ idx = 0
15+ for i in phonebook :
16+ if a == "" :
17+ print ("[{}] {} {}" .format (idx + 1 , i [0 ], i [1 ]))
18+ idx += 1
19+ elif a in i [0 ] or a in i [1 ]:
20+ print ("[{}] {} {}" .format (idx + 1 , i [0 ], i [1 ]))
21+ idx += 1
22+ if idx == 0 :
23+ print ("조회된 자료가 없습니다." )
24+
25+ print_menu ()
26+ return
27+
28+ def phonebook_insert ():
29+ global phonebook
30+ print ("2. 입력" )
31+ a = input ("입력할 이름을 입력하세요: " ).strip ()
32+ b = input ("입력할 전화번호를 입력하세요: " ).strip ()
33+ if a == "" or b == "" :
34+ print ("입력값이 부족합니다. 다시 입력해주세요." )
35+ phonebook_insert ()
36+ return
37+
38+ phonebook .append ([a , b ])
39+ print ("{} {} 입력 성공" .format (a , b ))
40+ print_menu ()
41+ return
42+
43+ def phonebook_update ():
44+ global phonebook
45+ print ("3. 수정" )
46+ a = input ("이름을 입력하세요: " ).strip ()
47+ b = input ("변경할 전화번호를 입력하세요: " ).strip ()
48+ if a == "" or b == "" :
49+ print ("입력값이 부족합니다. 다시 입력해주세요." )
50+ phonebook_update ()
51+ return
52+
53+ idx = 0
54+ cnt = 0
55+ for i in phonebook :
56+ if i [0 ] == a :
57+ phonebook [idx ][1 ] = b
58+ cnt += 1
59+ idx += 1
60+
61+ if cnt > 0 :
62+ print ("{} {} 수정 성공" .format (a , b ))
63+ else :
64+ print ("{} 이름이 존재하지 않습니다." .format (a ))
65+
66+ print_menu ()
67+ return
68+
69+ def phonebook_delete ():
70+ global phonebook
71+ print ("4. 삭제" )
72+ a = input ("삭제할 전화번호를 입력하세요: " ).strip ()
73+ if a == "" :
74+ print ("입력값이 부족합니다. 다시 입력해주세요." )
75+ phonebook_delete ()
76+ return
77+
78+ tmp_list = []
79+
80+ for i in phonebook :
81+ if not i [1 ] == a :
82+ tmp_list .append ([i [0 ], i [1 ]])
83+
84+ if len (tmp_list )> 0 :
85+ phonebook .clear ()
86+ phonebook = tmp_list
87+
88+ print ("{} 삭제 성공" .format (a ))
89+ else :
90+ print ("{} 번호가 존재하지 않습니다." .format (a ))
91+
92+ print_menu ()
93+ return
94+
95+ def save_phonebook ():
96+ global phonebook
97+ with open ("phonebook.pickle" , "wb" ) as f :
98+ pickle .dump (phonebook , f , pickle .HIGHEST_PROTOCOL )
99+
100+ """
101+ [
102+ ['홍길동','010-1234-5678'],
103+ ['김철수','010-1234-5678'],
104+ ['김대한','010-1111-2222']
105+ ]
106+ """
107+
108+ phonebook = []
109+
110+ if os .path .exists ("phonebook.pickle" ):
111+ with open ("phonebook.pickle" , "rb" ) as f :
112+ phonebook = pickle .load (f )
113+
114+ print ("파이썬 전화번호부 Ver 1.0" )
115+ print_menu ()
116+
117+ while True :
118+ m = input ("기능을 선택하세요.(1~5 입력) " ).strip ()
119+ if m == "" : continue
120+
121+ if m == "1" :
122+ phonebook_search ()
123+
124+ elif m == "2" :
125+ phonebook_insert ()
126+ save_phonebook ()
127+
128+ elif m == "3" :
129+ phonebook_update ()
130+ save_phonebook ()
131+
132+ elif m == "4" :
133+ phonebook_delete ()
134+ save_phonebook ()
135+
136+ elif m == "5" :
137+ save_phonebook ()
138+ break
0 commit comments