휴먼교육센터 개발자과정 40일차

조하영·2022년 9월 28일
0

다음 프로그램을 개발하시오.
수준을 선택
모든 소스의 전역변수 private으로 지정

선택 1. 영어단어와 한글설명 1개만저장하는 단어장

선택 2. 영어단어와 한글설명과 중요도를 저장하는 단어장

선택 3.----------------------------------
1. 단어관리 (단어저장, 삭제, 생신, 전체보기)
단어저장은 영단어를 저장 영단어 중복 불가
저장 내용은 한글의미, 설명, 중요도 필요

단어 전체보기 맨처음 줄에 등록된 단어의 수가 나오고 단어와 정보가 출력

단어 공부하기 기능
랜덤한 한글의미가 나오고 해당 영어단어를 입력하는게임
맞으면 10점
틀리면 단어 저장
게임이 끝나면 저장된 단어를 출력
메인메뉴 1.단어관리 2. 단어공부하기

선택 4.------------------------------------
선택 3에 추가
1. 게임이 끝나면 틀린단어가 몇번 틀렸는지 정보 출력

게임이 끝나면 오답으로 작성한 정보도 출력

최근 3번 제시된 단어의 정답을 분석해 2번 이상 틀린경우 화면에 오답조심 표시
단 3번 미만으로 제신된경우 오답조심을 표기하지 않는다

메인 클래스

package test;

public class Main {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
      System.out.println("영어단어장 프로그램 시작 ");
      new MainMenu();
      System.out.println("영어단어장 프로그램 종료 ");
   }
}

메인 메뉴 클래스

package test;

import java.util.HashMap;
import java.util.Scanner;

public class MainMenu {
   private HashMap<String, WordMean> word = new HashMap<>();
   private HashMap<String, WrongWord> wrongWordList = new HashMap<>();
   Scanner in = new Scanner(System.in);
   MainMenu(){
      for(;;) {
         System.out.println("1. 단어관리");
         System.out.println("2. 단어게임");
         System.out.println("3. 프로그램 종료");
         System.out.println("메뉴를 선택해주세요");

         String selMenu = in.nextLine();
         if (selMenu.equals("1")) {
            new WordManager(word);
         } else if (selMenu.equals("2")) {
            if(word.size()>0) {
               new WordGame(word,wrongWordList);
            }else {
               System.out.println("단어장에 단어를 추가해주세요.");
            }
         } else if (selMenu.equals("3")) {
            break;
         } else {
            System.out.println("잘못된 입력입니다.");
         }
      }

   }
}

단어관리 클래스

package test;

import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;

public class WordManager {
   Scanner in = new Scanner(System.in);
   private HashMap<String, WordMean> word = null;

   WordManager(HashMap<String, WordMean> word) {
      this.word = word;
      for (;;) {
         menu();
         System.out.println("메뉴를 선택해주세요 ");
         String selMenu = in.nextLine();
         if (selMenu.equals("1")) {
            addWord();
         } else if (selMenu.equals("2")) {
            delWord();
         } else if (selMenu.equals("3")) {
            searchWord();
         } else if (selMenu.equals("4")) {
            modWord();
         } else if (selMenu.equals("5")) {
            showWord();
         } else if (selMenu.equals("6")) {
            allDelWord();
         } else if (selMenu.equals("7")) {
            break;
         } else {
            System.out.println("잘못된 입력입니다.");
         }
      }
   }

   private void modWord() {
      System.out.println("수정할 영단어를 입력해주세요. ");
      String modWord = in.nextLine();

      if (word.get(modWord) != null) {
         System.out.println("수정할 뜻을 입력해주세요. ");
         String modMean = in.nextLine();
         System.out.println("중요도를 상/중/하로 입력하세요. ");
         String imp = in.nextLine();
         System.out.println("코멘트를 작성하세요. ");
         String comment = in.nextLine();
         if (imp.equals("상") || imp.equals("중") || imp.equals("하")) {
            word.get(modWord).setMean(modMean);
            word.get(modWord).setImp(imp);
            word.get(modWord).setComment(comment);
            word.put(modWord, word.get(modWord));
            System.out.println(modWord + "(이/가) 수정되었습니다. ");
         } else {
            System.out.println("잘못된 입력입니다.");
         }
      } else {
         System.out.println(modWord + " 단어가 없습니다. ");
      }
   }

   private void allDelWord() {
      System.out.println("정말로 삭제하시겠습니까?(Y/N)");
      String yn = in.nextLine();
      yn.toLowerCase();
      if (yn.equals("y")) {
         word.clear();
         System.out.println("모든 단어가 삭제되었습니다.");

      } else {
         System.out.println("이전 메뉴로 돌아갑니다. ");
      }
   }

   private void showWord() {
      System.out.println("등록된 단어의 갯수는 " + word.size() + "개 입니다.");
      for (String i : word.keySet()) {
         System.out.println(
               i + ": " + word.get(i).getMean() + " (" + word.get(i).getImp() + ")" + word.get(i).getComment());
      }
   }

   private void searchWord() {

      for (;;) {
         System.out.println("1. 영단어로 검색 ");
         System.out.println("2. 뜻으로 검색 ");
         System.out.println("3. 중요도로 검색 ");
         System.out.println("4. 이전메뉴 ");
         System.out.println("메뉴를 선택해주세요 ");
         String selMenu = in.nextLine();
         if (selMenu.equals("1")) {
            searchEnWord();
         } else if (selMenu.equals("2")) {
            serchMeanWord();
         } else if (selMenu.equals("3")) {
            serchImpWord();
         } else if (selMenu.equals("4")) {
            break;
         } else {
            System.out.println("잘못된 입력입니다.");
         }
      }
   }

   private void serchImpWord() {
      System.out.println("검색할 영단어의 중요도를 상/중/하로 입력해주세요 ");
      String searchImp = in.nextLine();
      boolean flag = true;
      for (Entry<String, WordMean> entry : word.entrySet()) {
         if (entry.getValue().getImp().equals(searchImp)) {
            System.out.println(entry.getKey() + ": " + entry.getValue().getMean() + " (" + entry.getValue().getImp()
                  + ")" + entry.getValue().getComment());
            flag = false;
         }
      }
      if (flag) {
         System.out.println("중요도 " + searchImp + "(은/는) 없습니다. ");
      }
   }

   private void serchMeanWord() {
      System.out.println("검색할 영단어의 뜻을 입력해주세요 ");
      String searchMean = in.nextLine();
      boolean flag = true;
      for (Entry<String, WordMean> entry : word.entrySet()) {
         if (searchMean.equals(entry.getValue().getMean())) {
            System.out.println(entry.getKey() + ": " + entry.getValue().getMean() + " (" + entry.getValue().getImp()
                  + ")" + entry.getValue().getComment());
            flag = false;
         }
      }
      if (flag) {
         System.out.println(searchMean + "의 뜻을 가진 단어가 없습니다. ");
      }
   }

   private void searchEnWord() {
      System.out.println("검색할 영단어를 입력해주세요 ");
      String searchEn = in.nextLine();
      boolean flag = true;
      for (Entry<String, WordMean> entry : word.entrySet()) {
         if (searchEn.equals(entry.getKey())) {
            System.out.println(entry.getKey() + ": " + entry.getValue().getMean() + " (" + entry.getValue().getImp()
                  + ")" + entry.getValue().getComment());
            flag = false;
         }
      }
      if (flag) {
         System.out.println(searchEn + " 단어가 없습니다. ");
      }
   }

   private void delWord() {
      System.out.println("삭제할 영단어를 입력하세요. ");
      String delWord = in.nextLine();
      if (word.get(delWord) != null) {
         word.remove(delWord);
         System.out.println(delWord + "(이/가) 삭제되었습니다.  ");
      } else {
         System.out.println(delWord + " 단어가 없습니다. ");
      }
   }

   private void addWord() {
      WordMean newWordMean = new WordMean();
      System.out.println("추가할 영단어를 입력하새요 ");
      String newWord = in.nextLine();
      boolean flag = true;
      for (Entry<String, WordMean> entry : word.entrySet()) {
         if (newWord.equals(entry.getKey())) {
            System.out.println(entry.getKey() + "단어가 이미 있습니다.  ");
            flag = false;
         }
      }
      if (flag) {
         System.out.println("영단어의 뜻을 입력하세요. ");
         String wordMean = in.nextLine();
         System.out.println("중요도를 상/중/하로 입력하세요. ");
         String imp = in.nextLine();
         System.out.println("코멘트를 작성하세요. ");
         String comment = in.nextLine();
         if (imp.equals("상") || imp.equals("중") || imp.equals("하")) {
            newWordMean.setMean(wordMean);
            newWordMean.setImp(imp);
            newWordMean.setComment(comment);
            word.put(newWord, newWordMean);
            System.out.println(newWord + "(이/가) 추가되었습니다.");
         } else {
            System.out.println("잘못된 입력입니다.");
         }
      }
   }

   private void menu() {
      System.out.println("1. 단어추가 ");
      System.out.println("2. 단어삭제 ");
      System.out.println("3. 단어검색 ");
      System.out.println("4. 단어수정 ");
      System.out.println("5. 전체보기 ");
      System.out.println("6. 전체삭제 ");
      System.out.println("7. 이전메뉴 ");
   }
}

단어정보 클래스

package test;

public class WordMean {
   private String mean = null;
   private String imp = null;
   private String comment = null;

   public void setComment(String comment) {
      this.comment = comment;
   }

   public void setMean(String mean) {
      this.mean = mean;
   }

   public void setImp(String imp) {
      this.imp = imp;
   }

   public String getComment() {
      return comment;
   }

   public String getMean() {
      return mean;
   }

   public String getImp() {
      return imp;
   }

}

단어게임 클래스

package test;

import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;

public class WordGame {
   private HashMap<String, WordMean> word = null;
   private HashMap<String, WrongWord> wrongWordList = null;
   Scanner in = new Scanner(System.in);
   private int point = 0;

   WordGame(HashMap<String, WordMean> word, HashMap<String, WrongWord> wrongWordList) {
      this.word = word;
      this.wrongWordList = wrongWordList;
      System.out.println("총 문제는 " + word.size() + "개 입니다.");
      System.out.println("게임을 종료하고 싶으면 100을 입력해주세요.");
      System.out.println("엔터를 치면 게임을 시작합니다.");
      in.nextLine();

      startGame();
      endGame();
   }

   private void endGame() {
      System.out.println("최종 점수: " + point + "점");
      for (Entry<String, WrongWord> entry : wrongWordList.entrySet()) {
         System.out.println("틀린단어: " + entry.getKey() + " 오답: " + entry.getValue().getWrongMean() + " 틀린횟수: "
               + entry.getValue().getWrongCnt());
      }
      System.out.println();
   }

   private void startGame() {
      for (Entry<String, WordMean> entry : word.entrySet()) {
         System.out.println("---------------");
         if (wrongWordList.get(entry.getKey()) != null && wrongWordList.get(entry.getKey()).getWrongCnt() > 2) {
            System.out.println(wrongWordList.get(entry.getKey()).getWrongCnt() + "번 틀린 단어(오답조심)");
         }
         System.out.println(entry.getValue().getMean());
         System.out.println("위 뜻을 가진 영단어는?");
         String correct = in.nextLine();
         if (entry.getKey().equals(correct)) {
            System.out.println("정답입니다.");
            point += 10;
         } else {
            if (wrongWordList.get(entry.getKey()) != null) {
               System.out.println("오답입니다.");
               wrongWordList.get(entry.getKey()).setWrongMean(correct);
               wrongWordList.get(entry.getKey()).plusCnt();
            } else {
               WrongWord newWrongWord = new WrongWord();
               System.out.println("오답입니다.");
               newWrongWord.setWrongMean(correct);
               newWrongWord.plusCnt();
               wrongWordList.put(entry.getKey(), newWrongWord);
            }
         }
         if (correct.equals("100")) {
            break;
         }
      }
   }
}

틀린단어 정보 클래스

package test;

public class WrongWord {
   private String wrongMean = null;
   private int wrongCnt = 0;

   public String getWrongMean() {
      return wrongMean;
   }

   public void setWrongMean(String wrongMean) {
      this.wrongMean = wrongMean;
   }

   public int getWrongCnt() {
      return wrongCnt;
   }

   public void setWrongCnt(int wrongCnt) {
      this.wrongCnt = wrongCnt;
   }

   public void plusCnt() {
      wrongCnt++;
   }
}
profile
공부하는 개발자

0개의 댓글