주니어 기초 코딩공부

JAVA 게시판 만들기_비밀번호가 같으면 삭제할 수 있도록 코드 작성

jju_developer 2022. 12. 2. 21:23
728x90

[과제] 게시판 만들기
 다음은 게시물을 관리하는 모듈이다. 특정 사용자가 등록한 게시물중에 비밀번호가 같으면 삭제할 수 있도록 코드를 작성하라.

 

기본 만들어진 코드는 아래와 같습니다.

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의 값은 하나씩 줄여줘야합니다.

 

 


<다른사람 풀이>

 

 

 

 

 

 

 

 

 

728x90