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 |