오류 사항 있음 추후 수정
MainController
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import service.BoardService;
import util.Print;
import util.ScanUtil;
import util.View;
import view.BoardPrint;
public class MainController extends BoardPrint { //상속클래스라서 import 해야함!!
//sessionStorage(Map 타입) 객체 생성
static public Map<String, Object> sessionStorage = new HashMap<>();
// BoardService에서 getInstance 메소드 호출
BoardService boardService =BoardService.getInstance();
public static void main(String[] args) {
new MainController().start();
}
private void start() { // private으로 접근 제한
View view = View.MAIN; //처음시작 MAIN으로 함
while (true) { // 무한 로딩이라서 View 호출 가능
switch (view) {
case MAIN: //홈
view = home(); //home 메소드가 view 대입해서 메소드 호출
break;
case BOARD_LIST: // 전체 조회
view = boardList();//boardList 메소드가 view 대입해서 메소드 호출
break;
case BOARD_INSERT://게시판 등록
view = boardInsert();//boardInsert 메소드가 view 대입해서 메소드 호출
break;
case BOARD_DEAIL://게시판상세보기
view = boardDetail();//boardDetail 메소드가 view 대입해서 메소드 호출
break;
case BOARD_DELETE://게시판 삭제
view = boardDelete();//boardDelete 메소드가 view 대입해서 메소드 호출
break;
case BOARD_UPDATE://게시판 수정
view = boardUpdate();//boardUpdate 메소드가 view 대입해서 메소드 호출
break;
}
}
}
private View home() { //home
//출력
printHome(); //출력문 가져옴 장점 : 프린트 관련된것을 프린트 메소드에서 고치면됨
int sel = ScanUtil.nextInt(" 선택 : "); // 안내문구 안쓰면 실행 안됨
switch (sel) {
case 1:
return View.BOARD_LIST;
case 2:
return View.BOARD_INSERT;
case 3:
return View.MAIN;
default:
return View.MAIN;
}
}
private View boardList() { //전체리스트 출력
//boardService class 속한 boardList 메소드 호출해서 list 대입
List<Map<String, Object>> list = boardService.boardList();
//출력문
printBoardList(list);
printListMenu();
//출력문
int sel =ScanUtil.nextInt(" 선택 :");
switch (sel) {
case 1:
//입력한 숫자(1)가/ boardNO 대입함
int boardNO =ScanUtil.nextInt("게시판 번호 입력 : ");
//sessionStorage("boardNO", 입력한 숫자ex);
sessionStorage.put("boardNO", boardNO);
return View.BOARD_DEAIL; //start()-> boardDetail() 이동
case 2:
return View.MAIN; //
default:
return View.MAIN;
}
}
private View boardInsert() {
System.out.println("-----게시판등록-----");
// 제목변수 & 출력문 String
String name = ScanUtil.nextLine("제목 변경>>");
// 내용변수 & 출력문String
String content = ScanUtil.nextLine("내용 변경>>");
// 작성자변수 & 출력문String
String writer = ScanUtil.nextLine("내용 변경>>");
//제목 내용 param 내용 추가
List<Object> param = new ArrayList(); //param에 관한 List 객체 타입 생성
param.add(name); //param에 ScanUtil.nextLine("제목 변경>>")에 대한 출력문 넣음
param.add(content); //param에 ScanUtil.nextLine("내용 변경>>")에 대한 출력문 넣음
param.add(writer);//param에 ScanUtil.nextLine("내용 변경>>")에 대한 출력문 넣음
// BoardService class에 boardInsert 메소드에 param 파라미터 넣어줌
boardService.boardInsert(param);
//서비스 메소드 연결
return View.BOARD_LIST; //
}
private View boardDetail() { //
int boardNO =(int)sessionStorage.get("boardNO"); //
//BoardService class 에 boardDetail에서 boardNO 파라미터를 준 리턴값을
//board 대입
Map<String, Object> board =boardService.boardDetail(boardNO);
//출력문
printDetail(board);
printDetailMenu();
int sel= ScanUtil.nextInt("메뉴선택: " );
switch (sel) {
case 1:
return View.BOARD_UPDATE;
case 2:
return View.BOARD_DELETE;
case 3:
return View.BOARD_LIST;
case 4:
return View.MAIN;
default:
return View.BOARD_DEAIL;
}
}
private View boardUpdate() {
//출력문
System.out.println("1. 제목");
System.out.println("2.내용");
System.out.println("3.전체");
System.out.println("4.취소");
int sel = ScanUtil.nextInt("수정할 항목을 고르시오.");
// 4번 선택시 boardDetail 메소드 호출하고 boardUpdate 종료(return 있어서)
if(sel ==4) return View.BOARD_DEAIL;
//param(List타입 선언) 하고 객체 추가
List<Object> param = new ArrayList();
//3번 : name,content 둘다 if문 실행
//1번, 3번 입력하면 param(List타입) 에 name(입력한 이름) 추가
if(sel ==1 || sel ==3 ) {
String name = ScanUtil.nextLine("제목 : >");
param.add(name); //이름 추가
}
//2번, 3번 입력하면 param(List타입) 에 content(입력한 내용) 추가
if(sel ==2 || sel ==3) {
String content = ScanUtil.nextLine("내용 : >");
param.add(content); // 내용 추가
}
int boardNo =(int) sessionStorage.get("boardNO");
param.add(boardNo);
boardService.boardUpdate(param,sel);
return View.BOARD_DEAIL;
}
private View boardDelete() {
//y 또는 n 선택
String yn = ScanUtil.nextLine("삭제 하시겠습니까?(y/n)");
//대소문자 무시하고 같은지 비교
if(yn.equalsIgnoreCase("n")) {
return View.BOARD_DEAIL;
}
if(yn.equalsIgnoreCase("y")) {
//sessionStorage(Map타입) 값 꺼내서 boardNO명 대입
int boardNO =(int)sessionStorage.get("boardNO");
List<Object> param =new ArrayList(); //param 에 대한 List 타입
param.add(boardNO); //boardNO 값을 param에 추가함
// BoardService class 속한 boardUpdate메소드에 (param, 0) 파라미터 보냄
boardService.boardUpdate(param, 0);
}
return View.BOARD_LIST;
}
BoardService
import java.util.List;
import java.util.Map;
import dao.BoardDao;
public class BoardService {
private static BoardService instance =null;
private BoardService() {
}
public static BoardService getInstance() {
if(instance == null) {
instance = new BoardService();
}
return instance;
}
BoardDao dao = BoardDao.getInstance(); // dao 연결(불러옴)
public List<Map<String, Object>> boardList(){
List<Map<String, Object>> list = dao.boardList(); //dao 클래스에 있는 boardList메소드 호출 해서 list 넣기
for (Map<String, Object> map : list) {
String content = (String) map.get("CONTENT");
if (content.length() > 10) {
content = content.substring(0, 10)+"....";
}
//줄바꿈 세가지 case
content = content.replace("\n", "");
content = content.replace("\r", "");
content = content.replace("\r\n", "");
map.put("CONTENT",content);
}
return list;
// return dao.boardList();
}
public Map<String, Object> boardDetail(int no){
return dao.boardDetail(no);
}
public void boardUpdate(List<Object> param,int sel) {
dao.boardUpdate(param,sel);
}
public void boardInsert(List<Object> param) {
dao.boardInsert(param);
}
}
BoardDao
import java.util.List;
import java.util.Map;
import util.JDBCUtil;
public class BoardDao {
private static BoardDao instance =null;
private BoardDao() {
}
public static BoardDao getInstance() {
if(instance == null) {
instance = new BoardDao();
}
return instance;
}
JDBCUtil jdbc = JDBCUtil.getInstance(); //JDBCUil 가져옴
public List<Map<String, Object>> boardList(){
String sql= "SELECT NO,NAME, SUBSTR(CONTENT,0,20) CONTENT, writer,\r\n" +
" TO_char(reg_date,'YYYY/MM/DD') reg_date\r\n" +
" FROM java_freeboared\r\n" ;
return jdbc.selectList(sql);
}
public Map<String, Object> boardDetail(int no){
String sql = "SELECT NO,NAME, CONTENT, writer,\r\n" +
" TO_char(reg_date,'YYYY/MM/DD') reg_date\r\n" +
" FROM java_freeboared\r\n" +
" WHERE delyn = 'N'\r\n" +
" AND NO = "+ no;
return jdbc.selectOne(sql); //하나행만 가져옴
}
public void boardUpdate(List<Object>list, int sel) {
// UPDATE JAVA_FREEBOARED
// SET
// NAME = '수정1'
// ,CONTENT = '수정1'
// WHERE NO = 1
//문법 분리
String sql_front = "UPDATE JAVA_FREEBOARED"
+" SET";
String format = " %s = ?"; //printf 유형
String sql =sql_front;
if(sel == 0) { // 0번을 입력하면 DELYN Y 가 들어가게 함
sql += "DELYN = 'Y'";
}
if(sel == 1 || sel == 3) {
//sql = sql + String.format(format, "Name");
sql += String.format(format, " Name");
}
if(sel ==2 || sel == 3) {
// if(sel==)
sql += String.format(format, " CONTENT");
}
// if(sel==3) {
// sql += String.format(format, "Name") + ", ";
// sql += String.format(format, "CONTENT") + ", ";
//
// }
sql+= " WHERE NO = ?";
jdbc.update(sql,list);
}
public void boardInsert(List<Object> param) {
// INSERT INTO JAVA_FREEBOARED(NO,NAME,CONTENT,WRITER,DELYN)
// VALUES(4,'등록1','등록내용1','등록자1','N')
String sql_front ="INSERT INTO JAVA_FREEBOARED(NO,NAME,CONTENT,WRITER,DELYN)\r\n" +
" VALUES(";
String format = " %s ,%s"; //printf 유형
String sql = "";
jdbc.update(sql, param);
}
}
View
public enum View { // 화면이동 페이지
MAIN, // 기본화면
BOARD_LIST,
BOARD_INSERT,
BOARD_DEAIL,
BOARD_DELETE,
BOARD_UPDATE
}
BoardPrint
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;
public class BoardPrint {
public void printVar() {
System.out.println("(╯°□°)╯︵ 🖥️(╯°□°)╯︵🖥️(╯°□°)╯︵🖥️(╯°□°)╯︵ 🖥️");
}
public void printLn(int num) {
for (int i = 0; i < num; i++) {
System.out.println();
}
}
public void printHome() {
printVar();
System.out.println("1. 게시판 전체 조회");
System.out.println("2.게시판 등록");
System.out.println("3. 홈");
printLn(3);
printVar();
}
public void printBoardList(List<Map<String, Object>> list ) {
System.out.println("게시판 번호 \t제목\t내용\t\t\t작성일\t작성자");
for (Map<String, Object> map : list) {
//오라클에서 NUMBER 타입 / 이클립스는 BigDecimal 클래스 사용해서 print할때 변수명.intValue()
BigDecimal no = (BigDecimal)map.get("NO");
String name = (String)map.get("NAME");
String content = (String)map.get("CONTENT");
String regDate = (String)map.get("reg_date"); //오라클에서 날짜를 문자로 변환해서 여기서 String사용
String writer = (String)map.get("writer");
System.out.println(no.intValue()+"\t"+name+"\t"+content+"\t"+regDate+"\t"+writer); //BigDecimal 사용 방법 : 변수명.intValue() BigDecimal 클래스에서 int 타입만 꺼내옴
}
}
public void printListMenu() {
printVar();
System.out.println("1.게시판 상세보기 ");
System.out.println("2.홈 ");
printLn(5);
printVar();
}
public void printDetailMenu() {
printVar();
System.out.println("1.게시판 수정");
System.out.println("2.게시판 삭제");
System.out.println("3.게시판 리스트");
System.out.println("4.홈");
printLn(3);
printVar();
}
public void printDetail(Map<String, Object>board) {
printVar();
BigDecimal no = (BigDecimal)board.get("NO");
String name = (String)board.get("NAME");
String content = (String)board.get("CONTENT");
String regDate = (String)board.get("reg_date"); //오라클에서 날짜를 문자로 변환해서 여기서 String사용
String writer = (String)board.get("writer");
System.out.println("제목 :"+ name);
System.out.println("번호 : " + no.intValue()+"\t"+"작성일: "+regDate+"\t"+"작성자 : "+writer);
System.out.println("╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯╰(*°▽°*)╯");
System.out.println(content);
printVar();
}
}
'JAVA > 수업' 카테고리의 다른 글
도서 관리시스템 CRUD (0) | 2024.01.08 |
---|---|
Coffee 메뉴 등록 CRUD (0) | 2024.01.05 |
로그인 CRUD (2) | 2024.01.04 |
study10 (0) | 2023.12.29 |
Study07 (0) | 2023.12.26 |