코딩/과제
과제 4 - 파일 입출력을 이용한 단어장 만들기
Song1234
2024. 3. 22. 11:54
과제
- '수정하기' 기능 추가
- 수정할 단어를 선택하세요: apple
- 선택한 단어가 없습니다
- apple의 뜻을 입력하세요: 사과
- apple의 레벨을 입력하세요: 1
- 수정되었습니다.
- 수정할 단어를 선택하세요: apple
- '삭제하기' 기능 추가
- 삭제할 단어를 선택하세요: apple
*선택한 단어가 없습니다.- 삭제되었습니다.
- 삭제할 단어를 선택하세요: apple
- 불러오기 메뉴 변경
- 메뉴 4번을 삭제
- 프로그램 시작시 기존에 단어장 파일이 존재하는지 확인하고 있으면 그 파일에 있는 데이터를 메모리에 불러옴(없으면 패스)
wordList = [] # 단어를 여러개 받기위해 전역변수로 리스트를 선언
filename = 'words.txt' # 사용할 파일 이름을 미리 지정해준다.
class Word: # 단어 입출력 을 위한 클래스
def __init__(self, eng, kor, lev=1):
self.eng = eng
self.kor = kor
self.lev = lev
# def __str__(self):
# return '[{}, {}, {}]'.format(self.eng, self.kor, self.lev)
def setEng(self, eng):
self.eng = eng
def getEng(self):
return (self.eng)
def setKor(self, kor):
self.kor = kor
def getKor(self):
return self.kor
def setLev(self,lev):
self.lev = lev
def getLev(self):
return self.lev
class WordService: # 메뉴의 기능을 위한 클래스
def insertWord(self): # 단어를 입력받는 메서드
eng = input('단어를 입력하세요: ')
kor = input('뜻을 입력하세요: ')
lev = input('레벨을 입력하세요: ')
word = Word(eng, kor, lev)
wordList.append(word) # 단어를 받아 한 단어로 묶어주고 리스트에 어팬드 해준다.
print('등록되었습니다.')
def printAll(self): # 저장한 문자 전체 출력 메서드
# apple : 사과 (레벨 1)
for data in wordList: # 위와 같은 형식으로 출력 을 해준다
print(data.getEng() + ' : ' + data.getKor() + ' (레벨' + data.getLev() + ')')
def saveAll(self): # 입력받은 문자들을 파일로 저장해주는 메서드
with open(filename, 'w') as f:
for data in wordList:
f.write(f'{data.getEng()},{data.getKor()},{data.getLev()}\n')
print('저장되었습니다') # 'apple','사과','(레벨1)\n' 과 같은 형식으로 파일에 메모를 저장한다
def delelteWord(self): # 단어 삭제를 위한 메서드
delWord = input('삭제할 단어를 입력하세요.') # 삭제한 단어를 입력받음
for data in wordList:
i = wordList.index(data)
if data.getEng() != delWord: # 입력받은 단어와 getEng 로 리스트에서 값을 하나씩 가져와 비교
print('삭제할 단어가 없습니다.') # 단어가 없다면 출력
break
else :
del wordList[i] # 입력받은 문자와 리스트에 단어가 같다면 해당 단어의 인덱스로 삭제
print('단어가 삭제 되었습니다.')
def changeWord(self): # 단어 수정을 위한 메서드
chaEng = input('수정할 단어를 입력하세요.') # 수정할 단어를 입력
i = -1
for data in wordList:
if data.getEng() == chaEng: # 리스트에 있는 단어와 입력한 단어비교
# 단어가 같다면 코드실행
newEng = input('새로운 단어를 입력하세요.')
data.setEng(newEng)
newKor = input(f'{newEng}의 뜻을 입력하세요.')
data.setKor(newKor)
newLev = input(f'{newEng}의 레벨을 입력하세요.')
data.setLev(newLev)
print('수정이 완료되었습니다.')
i += 1
break
# 불러온 단어에 (Eng,Kor,Lev)이런 형태로 저장된 문자를 하나씩 set메서드로 값을 변경해준다.
elif i == -1:
print('입력한 단어가 없습니다')
def loadData(self): # 저장된 파일 불러오기
try:
with open(filename, 'r') as f:
while True:
line = f.readline()
if line != "":
data = line.strip().split(',')
wordList.append(Word(data[0],data[1],data[2]))
# 단어가 있다면 (apple,사과,(레벨1)) 과 같은 형태로 리스트에 저장
else:
break
print('데이터를 불러 왔습니다')
except FileNotFoundError: # 파일이 없다면 넘어가기
pass
class Menu: # 이용자가 사용할 메뉴를 고르는 클래스
def __init__(self): # 객체가 생성되면 WordService 클래스를 불러온다
self.service = WordService()
def run(self): # 메뉴
self.service.loadData() # 메뉴를 실행하면 저장되어있는 파일을 불러오고 없다면 패스
while True:
try:
menu = int(input('1.등록하기, 2.출력하기, 3.저장하기, 4.수정하기 5.삭제하기 0.종료'))
if menu == 1:
self.service.insertWord()
elif menu == 2:
self.service.printAll()
elif menu == 3:
self.service.saveAll()
elif menu == 4:
self.service.changeWord()
elif menu == 5:
self.service.delelteWord()
elif menu == 0:
# 프로그램 종료 하기전 한번더 확인
YorN = input('파일을 저장하지 않으면 삭제됩니다 종료 하시겠습니까?: Y/N')
if YorN.upper() == 'Y':
print('프로그램을 종료합니다.')
wordList.clear() # 프로그램 종료하면서 리스트 초기화
break
except:
print('입력을 확인하세요.')
start = Menu() # 메뉴 객체 생성
start.run() # 프로그램 실행
실행확인.
1. 등록확인
2. 수정확인
3. 삭제확인