[과제] 게시판 만들기
다음은 게시물을 관리하는 모듈이다. 특정 사용자가 등록한 게시물중에 비밀번호가 같으면 삭제할 수 있도록 코드를 작성하라.
기본 만들어진 코드는 아래와 같습니다.
package assignment;
public class BoardVO {
// 멤버변수
private String register;
private String subject;
private String email;
private String content;
private String passwd;
// 생성자
public BoardVO(String register, String subject, String email, String content, String passwd) {
super();
this.register = register;
this.subject = subject;
this.email = email;
this.content = content;
this.passwd = passwd;
}
public String getRegister() {
return register;
}
public void setRegister(String register) {
this.register = register;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
@Override
public String toString() {
return "작성자:" + register + ",이메일:" + email + ",제목:" + subject + ",글내용:" + content;
}
}
package assignment;
import java.util.ArrayList;
import java.util.Scanner;
public class BoardSVC {
ArrayList<BoardVO> boardList;
public BoardSVC() {
boardList = new ArrayList();
}
// 글 입력 처리 메소드
public void writeArticle(Scanner sc) {
System.out.println("게시판에 글을 작성 하세요.");
System.out.print("작성자:");
String register = sc.next();
System.out.print("이메일:");
String email = sc.next();
System.out.print("비밀번호:");
String passwd = sc.next();
System.out.print("제목:");
String subject = sc.next();
System.out.print("글내용:");
String content = sc.next();
BoardVO boardVO = new BoardVO(register, subject, email, content, passwd);
addArticle(boardVO);
}
// 글 작성
private void addArticle(BoardVO boardVO) {
boardList.add(boardVO);
}
// 글목록 출력
public void listArticles(Scanner sc) {
if (boardList.size() > 0) {
for (int i = 0; i < boardList.size(); i++) {
System.out.println(boardList.get(i).toString());
}
} else {
}
System.out.println("등록된 글이 없습니다.");
}
// 삭제할 글의 작성자 및 비밀번호 입력하는 메소드
public void removeArticle(Scanner sc) {
// 코드 작성
}
}
package assignment;
import java.util.Scanner;
public class BoardMain {
public static void main(String[] args) {
boolean isStop = false;
Scanner sc = new Scanner(System.in);
BoardSVC boardSVC = new BoardSVC();
do {
System.out.println();
System.out.println("메뉴를 입력 하세요");
System.out.println("1.게시판 글쓰기");
System.out.println("2.글 목록 보기");
System.out.println("3.글 삭제");
System.out.println("4.종료");
String menu = sc.next();
switch (menu) {
case "1":
boardSVC.writeArticle(sc);
break;
case "2":
boardSVC.listArticles(sc);
break;
case "3":
boardSVC.removeArticle(sc);
break;
case "4":
isStop = true;
}
} while (!isStop);
}
}
이제 특정 사용자가 등록한 게시물중에 비밀번호가 같으면 삭제할 수 있도록 코드를 작성해보겠습니다.
// 삭제할 글의 작성자 및 비밀번호 입력하는 메소드
public void removeArticle(Scanner sc) {
// 코드 작성
System.out.println("삭제할 글의 작성자와 비밀번호를 입력하세요.");
System.out.print("작성자:");
String register = sc.next();
System.out.print("비밀번호:");
String passwd = sc.next();
boolean isRemoved =false;
if(boardList.size()>0) {
for (int i = 0; i < boardList.size(); i++) {
if(boardList.get(i).getRegister().equals(register)&&boardList.get(i).getPasswd().equals(passwd)) {
isRemoved=true;
boardList.remove(i--);
}
}
if(isRemoved)System.out.println("게시물이 삭제됨");
else {
System.out.println("일치하지 않거나 해당 아이디의 게시물 없음");
}
}else System.out.println("게시물이 비어있음.");
}
}
여기서 중요한 점은,
보드리스트에서 아무런 게시물이 없을때와 0보다 큰 보드리스트의 사이즈 일때를 나누어서 코딩을 해야합니다.
게시물이 0개보다 많은 경우에는 for문을 사용하여 보드리스트의 하나하나 요소를 확인해야합니다.
게시물이 많을 수 있기 때문에 0번째 게시물, 1번째 게시물, ...10번째 게시물을 하나하나 돌면서
i번째의 게시물에서 getRegister를 해야 해당 게시물의 아이디를 가져올 수 있습니다.
해당 코드는 ArrayList로 작성이 되었기 때문에 contains메서드는 사용할 수 없습니다.
하여, equals로 비교를 하였습니다.
equals로 다 비교를 하고나서 isRemoved를 사용한 이유는, 게시물이 삭제되었다고 뜨는 문구가 for문 안에서 계속하여 반복 출력 되는 것을 막기 위해서 우선 boolean 값으로 만약 지워졌으면 for 문 밖에서 해당 게시물이 삭제 되었다는 문구가 출력 될 수 있도록 코딩하였습니다.
그렇게 한다면, 여러 게시물을 삭제할때 for문 안에서 boardList.remove도 여러개의 게시물 삭제가 가능해집니다.
boardList.remove(i--)를 한 이유는, for문을 돌때 i가 하나씩 증가를 하고, ArrayList의 값은 하나씩 앞으로 당겨져 오기 때문에 i의 값은 하나씩 줄여줘야합니다.
<다른사람 풀이>
'주니어 기초 코딩공부' 카테고리의 다른 글
Java 직렬화를 하는 이유가 무엇일까? Serializable 인터페이스 설 (0) | 2022.12.07 |
---|---|
Java 입출력 (In/Out), Scanner 클래스 설명 (4) | 2022.12.06 |
15장 컬렉션 프레임워크 (0) | 2022.12.01 |
JA14장 람다식 (0) | 2022.12.01 |
13장 제네릭 (0) | 2022.12.01 |