본문 바로가기
Java/Java

자바 영어단어장

by code2772 2022. 10. 7.

[ 목차 ]

    728x90
    반응형
    영어단어장 프로그램을 작성해보자.
    1. 지난 단어장을 수정하여 save라는 명령을 입력하면 wordbook.txt 단어를 저장
    2. 프로그램을 재시작할 때 wordbook.txt에서 단어를 읽어와 메모리에 저장

     

    public class World {//먼저 변수를 선언한다.
        private String english;
        private String korean;
        private int level;
        private String wdate;
        // 변수가 private로 선언되어 있기 때문에 this를 이용하영 받아온 값을 넘겨준다.
        public World(String english, String korean, int level, String wdate) {
            this.english = english;
            this.korean = korean;
            this.level = level;
            this.wdate = wdate;
        }
    
        //getter/setter을 이용하여  메인 메소드에 값을 전달해주거나 받아오기 위해 선언해준다.
        public String getEnglish() {
            return english;
        }
    
        public void setEnglish(String english) {
            this.english = english;
        }
    
        public String getKorean() {
            return korean;
        }
    
        public void setKorean(String korean) {
            this.korean = korean;
        }
    
        public int getLevel() {
            return level;
        }
    
        public void setLevel(int level) {
            this.level = level;
        }
    
        public String getWdate() {
            return wdate;
        }
    
        public void setWdate(String wdate) {
            this.wdate = wdate;
        }
        // 오버라이드를 통해 메인에서 사용할 수 있게 해준다.
        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append(english).append(", ").append(korean).append(", ")
                    .append(level).append(", ").append(wdate);
            return sb.toString();
        }
    }
    

     

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class WorldController {
        private ArrayList<World> list;
    
        public ArrayList<World> getList() {
            return list;
        }
    
        public void setList(ArrayList<World> list) {
            this.list = list;
        }
    
        public void insert(String eng) {
            String kor, wdate;
            int lev;
            World w;
            Scanner sc = new Scanner(System.in);
            System.out.println("* 뜻을 입력하세요");
            kor = sc.next();
            System.out.println("* 레벨을 입력하세요");
            lev = sc.nextInt();
            System.out.println("* 날짜를입력하세요");
            wdate = sc.next();
            w = new World(eng, kor, lev, wdate);
            list.add(w);
    
        }
    
        public void list() {
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
        }
    
        public boolean find() {
            Scanner sc = new Scanner(System.in);
            boolean isFind = false;
            System.out.println("🤷‍찾는 단어를 입력하세요");
            String find = sc.next();
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).getEnglish().equals(find)) {
                    System.out.println("있습니다.");
                    System.out.println(list.get(i));
                    isFind = true;
                }
            }
            return isFind;
        }
    
        public void save(String file) {
            try {
                PrintWriter pw = new PrintWriter((new FileOutputStream(file)));
                for (World w : list) {
                    pw.println(w);
                }
                System.out.println("저장되었습니다.");
                pw.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        public void read(String file) {
            Scanner sc = null;
            String temp;
            String[] arr;
            World w;
            try {
                sc = new Scanner(new FileInputStream(file));
                while (sc.hasNextLine()) {
                    temp = sc.nextLine();
                    arr = temp.split(", ");
                    w = new World(arr[0], arr[1], Integer.parseInt(arr[2]), arr[3]);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

     

    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class WordMain {
        public static void main(String[] args) {
            System.out.println("😍[영어단어장]😍");
            System.out.println("print : 지금까지 등록한 영단어가 출력");
            System.out.println("find : 영어 단어를 검색할 수 있음");
            System.out.println("save : 파일에 저장");
            System.out.println("exit : 프로그램을 종료");
    
            Scanner sc  = new Scanner(System.in);
    
            WorldController wc = new WorldController();
            wc.setList(new ArrayList<World>());
    
            String file = "wordbook.txt";//불러오기
            wc.read(file);//읽어오기
            while(true){
                System.out.println("✔ 영어단어 또는 메뉴를 입력하세요");
                String eng = sc.next();
                if (eng.equals("exit")) break;
    
                // case안에 조건식을 사용하는 경우 코드에 가독성이 떨어지기 때문에
                // 따로 클래스를 만들어 메소드를 이용해 보자
    
                switch (eng){
                    case "print":
                        wc.list();
                        break;
                    case "find":
                        if(!wc.find()) System.out.println("찾는 단어가 없습니다.");
                        break;
                    case "save":
                        wc.save(file);
                        break;
                    default:
                        wc.insert(eng);
    
                }
            }
        }
    }
    
    반응형

    'Java > Java' 카테고리의 다른 글

    자바 제네릭(Generic)  (0) 2022.10.12
    자바 스레드  (0) 2022.10.07
    자바 File 다루기  (1) 2022.10.07
    자바 예외처리  (0) 2022.10.06
    국비지원 자바 복습 9(Generic, 컬렉션 프레임워크)  (0) 2022.10.06