package board;

import board.ui.BoardUI;

public class BoardMain {
	
	public static void main(String[] args) {
		
		BoardUI ui = new BoardUI();
		try {
			ui.execute();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}


===================================================================
package board;

// 게시판 번호 생성
public class BoardSequence {

	private static int no = 1;
	
	public static synchronized int getNo() {
		return no++;
	}
}


===================================================================
package board;

import board.service.BoardService;

public class BoardServiceFactory {

	private static BoardService service = null;
	
	public static synchronized BoardService getInstance() {
		if(service == null) {
			service = new BoardService();
		}
		return service;
	}
}
===================================================================
package board.dao;

import java.util.ArrayList;

import board.vo.BoardVO;

// 게시글 저장 & 처리...
public class BoardDAO {

	private ArrayList<BoardVO> list = new ArrayList<>();
	
	/**
	 * 게시글을 등록하는 메소드
	 * @param board
	 */
	public void insertBoard(BoardVO board) {
		list.add(board);
	}
	
	/**
	 * 전체게시물을 조회하는 메소드
	 */
	public ArrayList<BoardVO> selectBoard() {
		return list;
	}
	
	/**
	 * 게시글 번호로 조회하는 메소드
	 */
	public BoardVO selectOneBoard(BoardVO board) {
		
		for(BoardVO vo : list) {
			if(vo.getNo() == board.getNo())
				return vo;
		}
		return null;
	}
	
	/**
	 * 게시물 삭제하는 메소드
	 */
	public boolean deleteBoard(BoardVO board) {
		
		for(BoardVO vo : list) {
			if(board.getNo() == vo.getNo()) {
				list.remove(vo);
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 게시글을 수정하는 메소드
	 */
	public void updateBoard(BoardVO board) {
		
		for(BoardVO vo : list) {
			if(vo.getNo() == board.getNo()) {
				String title = board.getTitle();
				vo.setTitle(title);
				break;
			}
		}
	}
}
===================================================================
package board.service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import board.BoardSequence;
import board.dao.BoardDAO;
import board.vo.BoardVO;

public class BoardService {
	
	private BoardDAO dao;
	
// BoardService를 singletone pattern 구현 동작...	
//------------------------------------------------	
//	private static BoardService service;
//
//	private BoardService() {
//		dao = new BoardDAO();
//	}
//	
//	public static BoardService getInstance() {
//		if(service == null) {
//			service = new BoardService();
//		}
//		return service;
//	}
//------------------------------------------------
	
	// BoardServiceFactory().getInstance() 동작...
	public BoardService() {
		dao = new BoardDAO();
	}

	public void insertBoard(BoardVO board) throws Exception {
		// 게시글 번호 setting
		int no = BoardSequence.getNo();
		// 등록일 설정
		String pattern = "yyyy-MM-dd";
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		String regDate = sdf.format(new Date());
		
		board.setNo(no);
		board.setRegDate(regDate);	
		
		dao.insertBoard(board);
	}
	
	public void updateBoard(BoardVO board) throws Exception {
		dao.updateBoard(board);
	}
	
	public boolean deleteBoard(BoardVO board) throws Exception {
		boolean result =  dao.deleteBoard(board);
		return result;
	}
	
	public BoardVO selectOneBoard(BoardVO board) throws Exception {
		BoardVO result = dao.selectOneBoard(board);
		return result;
	}
	
	public ArrayList<BoardVO> selectBoard() {
		ArrayList<BoardVO> list = dao.selectBoard();
		return list;
	}
}
===================================================================
package board.vo;

public class BoardVO {

	private int no;
	private String title;
	private String writer;
	private String regDate;
//	private Date regDate;
	
	// alt + shift + s 누른 후 c
	public BoardVO() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	// alt + shift + s 누른후 o
	public BoardVO(int no, String title, String writer, String regDate) {
		super();
		this.no = no;
		this.title = title;
		this.writer = writer;
		this.regDate = regDate;
	}

	// alt + shift + s 누른 후 r 선택
	public int getNo() {
		return no;
	}

	public void setNo(int no) {
		this.no = no;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getWriter() {
		return writer;
	}

	public void setWriter(String writer) {
		this.writer = writer;
	}

	public String getRegDate() {
		return regDate;
	}

	public void setRegDate(String regDate) {
		this.regDate = regDate;
	}

	// alt + shift + s 누른 후 s 선택
	@Override
	public String toString() {
		return "BoardVO [no=" + no + ", title=" + title + ", writer=" + writer + ", regDate=" + regDate + "]";
	}	
}
===================================================================
package board.ui;

import java.util.Scanner;

import board.BoardServiceFactory;
import board.service.BoardService;

public abstract class BaseUI implements IBoardUI {

	private Scanner sc = new Scanner(System.in);
	protected BoardService service;
	
	public BaseUI() {
//		service = BoardService.getInstance();	// singleton pattern
		service = BoardServiceFactory.getInstance();
	}

	protected int scanInt(String msg) {
		System.out.print(msg);
		return Integer.parseInt(sc.nextLine());
	}
	
	protected String scanStr(String msg) {
		System.out.print(msg);
		return sc.nextLine();
	}
}
===================================================================
package board.ui;

public class BoardUI extends BaseUI {
		
	public void execute() throws Exception {
		
		while(true) {
			String type = menu();

			IBoardUI ui = null;
			switch (type) {
			case "1":
				ui = new SearchUI();	// 전체 게시글 조회화면
				break;
			case "2":
				ui = new SearchOneUI();	// 게시글 번호 조회화면
				break;
			case "3":
				ui = new AddUI();
				break;
			case "4":
				ui = new UpdateUI();
				break;
			case "5":
				ui = new DeleteUI();
				break;
			case "0":
				ui = new ExitUI();
				break;
			}
			if(ui != null) {
				ui.execute();
			}
		}
	}
	
	String menu() {
		System.out.println("----------------------------------------");
		System.out.println("1. 전체 게시물 조회");
		System.out.println("2. 글번호 조회");
		System.out.println("3. 글등록");
		System.out.println("4. 글수정");
		System.out.println("5. 글삭제");
		System.out.println("0. 종료");
		System.out.println("----------------------------------------");
		String type = scanStr("메뉴 중 처리할 항목을 선택하세요 : ");
		
		return type;
	}
}

===================================================================
package board.ui;

public interface IBoardUI {

	void execute() throws Exception;
}


===================================================================
package board.ui;

import board.vo.BoardVO;

public class AddUI extends BaseUI {

	@Override
	public void execute() throws Exception {
		
		String title = scanStr("제목을 입력하세요 : ");
		String writer = scanStr("글쓴이를 입력하세요 : ");
		
		BoardVO board = new BoardVO();
		board.setTitle(title);
		board.setWriter(writer);
		
		service.insertBoard(board);
		
		System.out.println("게시글을 등록하였습니다.");
	}
}

===================================================================
package board.ui;

import board.vo.BoardVO;

public class UpdateUI extends BaseUI {
	
	public void execute() throws Exception {
		int no = scanInt("수정할 글번호를 입력하세요 : ");
		String title = scanStr("변경할 제목을 입력하세요 : ");
		
		BoardVO board = new BoardVO();
		board.setNo(no);
		board.setTitle(title);
		
		service.updateBoard(board);
		
		System.out.println("게시글을 수정되었습니다.");
	}
}

===================================================================
package board.ui;

import board.vo.BoardVO;

public class DeleteUI extends BaseUI {

	@Override
	public void execute() throws Exception {
		int no = scanInt("삭제할 글번호를 입력하세요 : ");
		
		BoardVO board = new BoardVO();
		board.setNo(no);
		
		boolean bool = service.deleteBoard(board);
		
		if(bool) {
			System.out.println("게시글을 삭제하였습니다.");
		} else {
			System.out.println("해당 게시물을 존재하지 않습니다.");
		}
	}

}

	
===================================================================
package board.ui;

import java.util.ArrayList;

import board.vo.BoardVO;

public class SearchUI extends BaseUI {
	
	public void execute() throws Exception {
		
		// 서비스 메소드 호출...
		ArrayList<BoardVO> list = service.selectBoard();
		
		// 화면에 결과 출력
		System.out.println("게시글 목록 : 전체 " + list.size() + "개");
		System.out.println("--------------------------------------------------");
		System.out.println("번호\t글쓴이\t등록일\t제목");
		System.out.println("--------------------------------------------------");
		for(BoardVO board : list) {
			System.out.print(board.getNo()      + "\t");
			System.out.print(board.getWriter()  + "\t");
			System.out.print(board.getRegDate() + "\t");
			System.out.println(board.getTitle());
		}
		
		if(list.isEmpty()) {
			System.out.println("\t조회할 게시물이 없습니다.");
		}
		System.out.println("--------------------------------------------------");
	}
}

===================================================================
package board.ui;

import board.vo.BoardVO;

public class SearchOneUI extends BaseUI {
	
	public void execute() throws Exception {
		int no = scanInt("글번호를 입력하세요 : ");
		
		BoardVO board = new BoardVO();
		board.setNo(no);
		
		BoardVO result = service.selectOneBoard(board);
		
		// 화면에 조회한 결과를 출력
		if(result == null) {
			System.out.println("글번호 [" + no + "]번 게시물은 존재하지 않습니다.");
		} else {
			System.out.println(result.getNo() + "번 게시글");
			System.out.println("----------------------------------");
			System.out.println("번  호 : " + result.getNo());
			System.out.println("제  목 : " + result.getTitle());
			System.out.println("글쓴이 : " + result.getWriter());
			System.out.println("등록일 : " + result.getRegDate());
			System.out.println("----------------------------------");
		}
	}
}


===================================================================
package board.ui;

public class ExitUI extends BaseUI {

	public void execute() {
		System.out.println("게시판 프로그램을 종료합니다.");
		System.exit(0);
	}
}

===================================================================

'2015 IT 웹 기반 개발자과정 > Mini Project' 카테고리의 다른 글

Team Project SQL  (0) 2015.12.01
Mini Project [게시판] UML 다이어그램  (0) 2015.11.28

+ Recent posts