MemoVO Class : 한 개의 게시물을 기억하는 클래스
- 글 번호(자동 증가), 이름, 비밀번호, 메모, 작성일 멤버를 선언한다.
* 글 번호를 자동 증가하기 위해 증가시켜서 넣어 줄 다른 멤버도 선언한다. - 멤버들을 초기화 할 생성자를 선언한다.
-> 이름, 비밀번호, 메모를 입력받고 글 번호는 증가, 날짜는 입력 됐을 때의 시간을 넣어준다. - 멤버들의 getter & setter 를 선언한다. (단축키 사용)
- 원하는 출력 형식으로 toString()을 재정의한다.
* MemoList에서 전체 게시물을 출력할 때 MemoVO의 toString() 형식으로 출력된다.
package com.koreait.memoList;
import java.util.Date;
// 게시글 1건을 기억할 클래스
public class MemoVO {
public static int count; // MemoVO 클래스의 객체가 생성될 때 1씩 증가시킬 변수
private int idx; // 글번화 => count를 이용해서 자동으로 1증가
private String name; // 작성자 이름
private String password; // 비밀번호
private String memo; // 게시글
private Date writeDate; // 작성일 => 컴퓨터 시스템의 날짜와 시간을 자동으로 저장
public MemoVO() { }
public MemoVO(String name, String password, String memo) {
idx = ++count;
this.name = name;
this.password = password;
this.memo = memo;
writeDate = new Date();
}
public int getIdx() {
return idx;
}
public void setIdx(int idx) {
this.idx = idx;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public Date getWriteDate() {
return writeDate;
}
public void setWriteDate(Date writeDate) {
this.writeDate = writeDate;
}
@Override
public String toString() {
return idx + ". " + name + "(" + password + ") 님이 " + writeDate + "에 남긴글\n" + memo;
}
}
MemoList Class : 여러 개의 게시물을 기억하는 클래스
- 여러 개의 MemoVO를 기억하는 클래스이므로 MemoVO를 자료형으로 하는 ArrayList 객체를 만든다.
- ArrayList memoList를 불러오는 getMemoList() 메서드와 ArrayList memoList를 수정하는 setMemoList()
메서드를 만든다. - 원하는 출력 형식으로 toString()을 재정의한다.
-> 여기서의 toString()이 게시판 전체를 출력하는 형식이 된다.
package com.koreait.memoList;
import java.util.ArrayList;
// 게시글 여러건을 기억하는 클래스
public class MemoList {
private ArrayList<MemoVO> memoList = new ArrayList<MemoVO>();
public ArrayList<MemoVO> getMemoList() {
return memoList;
}
public void setMemoList(ArrayList<MemoVO> memoList) {
this.memoList = memoList;
}
@Override
public String toString() {
// 마지막에 입력한 글(최신글) 부터 출력하기 위해서 ArrayList에 저장된 마지막 글 부터 출력한다.
String str = "";
if (memoList.size() == 0) {
str += "저장된 메모가 없습니다.\n";
} else {
// for (int i = 0; i < memoList.size(); i++) { // 처음부터
for (int i = memoList.size() - 1; i >= 0; i--) { // 마지막부터
str += memoList.get(i) + "\n";
}
}
return str;
}
// MemoProjectMain 클래스에서 호출되는 memoList라는 ArrayList에 저장할 데이터가 저장된 MemoVO 클래스의 객체를 넘겨받고
// memoList라는 ArrayList에 저장하는 메소드
public void addMemo(MemoVO vo) {
memoList.add(vo);
}
// MemoProjectMain 클래스에서 호출되는 수정 또는 삭제할 글번호를 넘겨받고 memoList라는 ArrayList에 저장된 글 중에서 글번호에
// 해당된 글 1건을 얻어오 리턴시키는 메소드
public MemoVO selectMemo(int idx) {
try {
return memoList.get(idx - 1);
} catch (IndexOutOfBoundsException e) {
return null;
}
}
// MemoProjectMain 클래스에서 호출되는 수정할 글번호와 메모를 넘겨받고 memoList라는 ArrayList에 저장된 글 중에서 글번호에
// 해당되는 글 1건을 수정하는 메소드
public void updateMemo(int idx, String memo) {
memoList.get(idx - 1).setMemo(memo);
}
// MemoProjectMain 클래스에서 호출되는 삭제할 글번호를 넘겨받고 memoList라는 ArrayList에 저장된 글 중에서 글번호에 해당되는
// 글 1건을 삭제하는 메소드
public void deleteMemo(int idx) {
memoList.remove(idx - 1);
// 글 삭제 후 글번호를 다시 붙여준다. => ArrayList를 사용하기 때문이 이런일이 발생된다.
for (int i = 0; i < memoList.size(); i++) {
memoList.get(i).setIdx(i + 1);
}
// 글이 삭제된 후 새글이 입력될 때 idx가 기존 idx 값에 이어서 1씩 증가할 수 있도록 count의 값을 수정한다.
MemoVO.count = memoList.size();
}
}
MemoProjectMain Class : 게시판의 쓰기, 보기, 수정, 삭제, 저장, 읽기, 종료 메뉴를 선택하고 선택한 기능을 수행할 메서드를 호출한다. (2개 이상의 메서드에서 같이 사용해야 하는 변수 또는 객체는 멤버로 만든다.
- 키보드로 게시판의 메뉴를 선택받는다.
-> 이 때 주어진 메뉴를 제외한 번호가 입력되는 경우 다시 입력을 받도록 한다.
-> 종료 메뉴가 선택되기 전까지 이전에 선택된 메뉴의 작업이 끝나면 메뉴 선택을 반복하도록 한다. - 선택된 기능을 수행하는 메서드를 호출한다.
package com.koreait.memoList;
import java.util.Scanner;
public class MemoProjectMain {
// 클래스 내부의 모든 메소드에서 사용할 객체나 변수는 멤버로 선언한다.
static MemoList memoList = new MemoList();
public static void main(String[] args) {
// MemoVO memo1 = new MemoVO("홍길동", "1111", "1등 입니다.");
// System.out.println(memo1);
// MemoVO memo2 = new MemoVO("임꺽정", "2222", "2등 입니다.");
// System.out.println(memo2);
// MemoVO memo3 = new MemoVO("장길산", "3333", "3등 입니다.");
// System.out.println(memo3);
Scanner scanner = new Scanner(System.in);
int menu = 0;
while (menu != 7) {
while (true) {
System.out.println("============================================================================");
System.out.println(" 1.입력 2.목록보기 3.수정 4.삭제 5.파일로 저장 6.파일에서 읽기 7.종료 ");
System.out.println("============================================================================");
System.out.print("원하는 메뉴를 입력하세요: ");
menu = scanner.nextInt();
if (menu >= 1 && menu <= 7) {
break;
}
System.out.println("메뉴는 1 ~ 7 사이로 입력해야 합니다.");
}
// 여기까지 왔다면 menu에는 1 ~ 7 사이의 숫자가 입력되었다는 의미이다.
switch (menu) {
case 1:
insert();
break;
case 2:
System.out.println(memoList);
break;
case 3:
update();
break;
case 4:
delete();
break;
case 5:
System.out.println("파일로 저장");
break;
case 6:
System.out.println("파일에서 읽기");
break;
}
}
System.out.println("프로그램을 종료합니다.");
}
// 키보드로 삭제할 글번호를 입력받아 삭제할 글 1건을 화면에 표시하고 비밀번호와 입력받아 memoList라는 ArrayList에 저장된 글 1건을
// 삭제한다.
private static void delete() {
// 키보드로 삭제할 글번호를 입력받는다.
Scanner scanner = new Scanner(System.in);
System.out.print("삭제할 글번호를 입력하세요: ");
int idx = scanner.nextInt();
// MemoList 클래스의 memoList라는 ArrayList에 저장된 삭제할 글 1건을 얻어오는 메소드를 실행해서 얻어온 결과를 MemoVO 클래스
// 객체에 저장한다.
MemoVO original = memoList.selectMemo(idx);
// 삭제할 글이 존재하면 글을 삭제하고 존재하지 않으면 존재하지 않는다고 메시지를 출력한다.
if (original == null) {
System.out.println(idx + "번 글이 존재하지 않습니다.");
} else {
System.out.println(original);
// 삭제할 글의 비밀번호를 입력받는다.
System.out.print("삭제할 글의 비밀번호를 입력하세요: ");
scanner.nextLine(); // 키보드 버퍼를 비운다.
String password = scanner.nextLine().trim();
// 글을 삭제하기 위해 입력한 비밀번호(password)와 삭제할 글의 비밀번호(original.getPassword())가 일치하면 글을 삭제하고
// 일치하지 않으면 비밀번호가 일치하지 않는다는 메시지를 출력한다.
if (password.equals(original.getPassword())) {
// 비밀번호가 일치하므로 MemoList 클래스의 memoList라는 ArrayList에 저장된 글 1건을 삭제하는 메소드를 실행한다.
memoList.deleteMemo(idx);
System.out.println("삭제완료!!!");
} else {
// 비밀번호가 일치하지 않기 때문에 비밀번호가 일치하지 않는다는 메시지를 출력한다.
System.out.println("비밀번호가 일치하지 않습니다.");
}
}
}
// 키보드로 수정할 글번호를 입력받아 수정할 글 1건을 화면에 표시하고 비밀번호와 수정할 내용을 입력받아 memoList라는 ArrayList에
// 저장된 글 1건을 수정한다.
private static void update() {
// 키보드로 수정할 글번호를 입력받는다.
Scanner scanner = new Scanner(System.in);
System.out.print("수정할 글번호를 입력하세요: ");
int idx = scanner.nextInt();
// MemoList 클래스의 memoList라는 ArrayList에 저장된 수정할 글 1건을 얻어오는 메소드를 실행해서 얻어온 결과를 MemoVO 클래스
// 객체에 저장한다.
MemoVO original = memoList.selectMemo(idx);
// 수정할 글이 존재하면 글을 수정하고 존재하지 않으면 존재하지 않는다고 메시지를 출력한다.
if (original == null) {
System.out.println(idx + "번 글이 존재하지 않습니다.");
} else {
System.out.println(original);
// 수정할 글의 비밀번호를 입력받는다.
System.out.print("수정할 글의 비밀번호를 입력하세요: ");
scanner.nextLine(); // 키보드 버퍼를 비운다.
String password = scanner.nextLine().trim();
// 글을 수정하기 위해 입력한 비밀번호(password)와 수정할 글의 비밀번호(original.getPassword())가 일치하면 글을 수정하고
// 일치하지 않으면 비밀번호가 일치하지 않는다는 메시지를 출력한다.
if (password.equals(original.getPassword())) {
// 비밀번호가 일치하므로 MemoList 클래스의 memoList라는 ArrayList에 저장된 글 1건을 수정하는 메소드를 실행한다.
// 비밀번소가 일치하므로 수정할 메모를 입력받는다.
System.out.print("수정할 메모를 입력하세요: ");
String memo = scanner.nextLine().trim();
// 메모를 수정하는 메소드를 실행한다.
memoList.updateMemo(idx, memo);
System.out.println("수정완료!!!");
} else {
// 비밀번호가 일치하지 않기 때문에 비밀번호가 일치하지 않는다는 메시지를 출력한다.
System.out.println("비밀번호가 일치하지 않습니다.");
}
}
}
// 키보드로 이름, 비밀번호, 메모를 입력받아 MemoVO 클래스 객체에 저장한다.
private static void insert() {
// 키보드로 이름, 비밀번호, 메모를 입력받는다.
Scanner scanner = new Scanner(System.in);
System.out.println("게시판에 저장할 글 입력");
System.out.print("이름: ");
String name = scanner.nextLine().trim();
System.out.print("비밀번호: ");
String password = scanner.nextLine().trim();
System.out.print("메모: ");
String memo = scanner.nextLine().trim();
// MemoVO 클래스의 MemoVO(String name, String password, String memo) 생성자를 실행해사 MemoVO 클래스 객체를 생성한다.
MemoVO vo = new MemoVO(name, password, memo);
// System.out.println(vo);
// MemoVO 클래스 객체를 인수로 넘겨받아 MemoList 클래스의 memoList라는 ArrayList에 저장하는 메소드를 호출한다.
memoList.addMemo(vo);
System.out.println("저장완료!!!");
// System.out.println(memoList);
}
}
'JAVA > JAVA2' 카테고리의 다른 글
[java2] #36 - PrintWriter (Text File Write Test) (0) | 2022.11.23 |
---|---|
[java2] #35 - StringTokenizer, DecimalFomat Class (0) | 2022.11.23 |
[java2] #33 - varargs (가변인자) (0) | 2022.11.19 |
[java2] #32 - Date, Calendar, SimpleDateFormat Class (1) | 2022.11.17 |
[java2] #31 - ArrayList (개념/사용법) (0) | 2022.11.15 |