코딩/과제

과제 4 - 파일 입출력을 이용한 단어장 만들기

Song1234 2024. 3. 22. 11:54

과제

  • '수정하기' 기능 추가
    • 수정할 단어를 선택하세요: apple
      • 선택한 단어가 없습니다
      • apple의 뜻을 입력하세요: 사과
      • apple의 레벨을 입력하세요: 1
      • 수정되었습니다.
  • '삭제하기' 기능 추가
    • 삭제할 단어를 선택하세요: 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. 삭제확인


 

4.저장확인


5.종료하기


6.불러오기