Java/Java

자바 영어단어장

code2772 2022. 10. 7. 15:13
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