👩🏻‍💻 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞/⠀⠀⠀⠀ Jᴀᴠᴀ

2023/11/10 🧚‍♀️ 조별 프로젝트 마지막날

유리쯔의일상 2023. 11. 13. 01:26
반응형
 

 

👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇

 

 

 


 

 

 

오늘은 과제를 제출하는 날

전날 조원들과 밤 9시부터 12시 까지 Zoom으로 숙제를 했다ㅎㅎ

얼굴은 안보이고 서로 화면을 공유해 가며 예외처리가 나는 부분, 에러가 나는 부분들을 같이 점검하며

코딩을 했는데 너무 즐거운 시간이었다 ㅎ_ㅎ

이번 조 친구들은 너도 나도 할 것 없이 서로 열심히 하려고 해서 너무 즐거운 프로젝트이다.

룰루랄라 오늘도 신나게 시작하며 룰루랄라 재밌게 출발해 본다 부릉부릉 🚗🚘

 

 

 

 


 

 

 

DB 뷰 쿼리 , 시퀀스 쿼리, 트리거 쿼리

 

 

 

 

 


 

 

 

 

DB INSERT 쿼리

------------------------------------------------------------------------------ 																
-- DB - Member Insert 																
------------------------------------------------------------------------------ 																
INSERT INTO Members VALUES( 'user1' , 'pass1' , '박재업' , 0 );																
INSERT INTO Members VALUES( 'user2' , 'pass2' , '박성희' , 0 );																
INSERT INTO Members VALUES( 'user3' , 'pass3' , '남미연' , 0 );																
INSERT INTO Members VALUES( 'user4' , 'pass4' , '이수진' , 0 );																
INSERT INTO Members VALUES( 'user5' , 'pass5' , '고은이' , 0 );																
INSERT INTO Members VALUES( 'user6' , 'pass6' , '서지원' , 0 );																
INSERT INTO Members VALUES( 'user7' , 'pass7' , '박미선' , 0 );																
INSERT INTO Members VALUES( 'user8' , 'pass8' , '문종석' , 0 );																
INSERT INTO Members VALUES( 'user9' , 'pass9' , '이성우' , 0 );																
INSERT INTO Members VALUES( 'user10' , 'pass10' , '차선우' , 0 );																
INSERT INTO Members VALUES( 'user11' , 'pass11' , '최성희' , 0 );																
INSERT INTO Members VALUES( 'user12' , 'pass12' , '김도균' , 0 );																
INSERT INTO Members VALUES( 'user13' , 'pass13' , '박춘규' , 0 );																
INSERT INTO Members VALUES( 'user14' , 'pass14' , '고연숙' , 0 );																
INSERT INTO Members VALUES( 'user15' , 'pass15' , '윤태욱' , 0 );																
INSERT INTO Members VALUES( 'user16' , 'pass16' , '배창숙' , 0 );																
INSERT INTO Members VALUES( 'user17' , 'pass17' , '배건우' , 0 );																
INSERT INTO Members VALUES( 'user18' , 'pass18' , '배신웅' , 0 );																
INSERT INTO Members VALUES( 'user19' , 'pass19' , '배윤식' , 0 );																
INSERT INTO Members VALUES( 'user20' , 'pass20' , '김종원' , 0 );																
INSERT INTO Members VALUES( 'user21' , 'pass21' , '강동호' , 0 );																
INSERT INTO Members VALUES( 'user22' , 'pass22' , '최의정' , 0 );																
INSERT INTO Members VALUES( 'user23' , 'pass23' , '신보경' , 0 );																
INSERT INTO Members VALUES( 'user24' , 'pass24' , '김보라' , 0 );																
INSERT INTO Members VALUES( 'user25' , 'pass25' , '윤보라' , 0 );																
INSERT INTO Members VALUES( 'user26' , 'pass26' , '장보람' , 0 );																
INSERT INTO Members VALUES( 'user27' , 'pass27' , '박보은' , 0 );																
INSERT INTO Members VALUES( 'user28' , 'pass28' , '김성경' , 0 );																
INSERT INTO Members VALUES( 'user29' , 'pass29' , '최원호' , 0 );																
INSERT INTO Members VALUES( 'user30' , 'pass30' , '이연주' , 0 );																
INSERT INTO Members VALUES( 'user31' , 'pass31' , '이민호' , 0 );																
INSERT INTO Members VALUES( 'user32' , 'pass32' , '김태형' , 0 );																
INSERT INTO Members VALUES( 'admin' , 'human' , '관리자' , 0 );																
COMMIT;																
------------------------------------------------------------------------------ 																
-- DB - Review Insert 																
------------------------------------------------------------------------------ 																
INSERT INTO Review VALUES( Review_no.NEXTval, '파견자들' ,'재밌어용 또 읽어보려구요1', 1 ,'user1' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '시대예보' ,'재밌어용 또 읽어보려구요2', 1 ,'user2' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '손실 없는 투자 원칙' ,'재밌어용 또 읽어보려구요3', 1 ,'user3' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '낮에 뜨는 달' ,'재밌어용 또 읽어보려구요4', 1 ,'user4' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '붉은 궁' ,'재밌어용 또 읽어보려구요5', 1 ,'user5' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '세이노의 가르침' ,'재밌어용 또 읽어보려구요6', 1 ,'user6' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '아침 그리고 저녁' ,'재밌어용 또 읽어보려구요7', 1 ,'user7' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역행자 ' ,'재밌어용 또 읽어보려구요8', 1 ,'user8' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '고통 구경하는 사회' ,'재밌어용 또 읽어보려구요9', 1 ,'user9' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '슈퍼노멀' ,'재밌어용 또 읽어보려구요10', 1 ,'user10' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '디케의 눈물' ,'재밌어용 또 읽어보려구요11', 1 ,'user11' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '최소한의 한국사' ,'재밌어용 또 읽어보려구요12', 1 ,'user12' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역사는 반복된다' ,'재밌어용 또 읽어보려구요13', 1 ,'user13' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '머니 트렌드' ,'재밌어용 또 읽어보려구요14', 1 ,'user14' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '단 한 사람' ,'재밌어용 또 읽어보려구요15', 1 ,'user15' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '멜랑콜리아' ,'재밌어용 또 읽어보려구요16', 1 ,'user16' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '무명의 감정들' ,'재밌어용 또 읽어보려구요17', 1 ,'user17' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '대화의 정석' ,'재밌어용 또 읽어보려구요18', 1 ,'user18' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '돈의 속성' ,'재밌어용 또 읽어보려구요19', 1 ,'user19' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '모순' ,'재밌어용 또 읽어보려구요20', 1 ,'user20' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '구의 증명' ,'재밌어용 또 읽어보려구요21', 1 ,'user21' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '아주 희미한 빛으로도' ,'재밌어용 또 읽어보려구요22', 1 ,'user22' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '파견자들' ,'재구매 예상각1', 1 ,'user23' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '시대예보' ,'재구매 예상각2', 1 ,'user24' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '손실 없는 투자 원칙' ,'재구매 예상각3', 1 ,'user25' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '낮에 뜨는 달' ,'재구매 예상각4', 1 ,'user26' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '붉은 궁' ,'재구매 예상각5', 1 ,'user27' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '세이노의 가르침' ,'재구매 예상각6', 1 ,'user28' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '아침 그리고 저녁' ,'재구매 예상각7', 1 ,'user29' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역행자 ' ,'재구매 예상각8', 1 ,'user30' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '고통 구경하는 사회' ,'재구매 예상각9', 1 ,'user31' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '슈퍼노멀' ,'재구매 예상각10', 1 ,'user32' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '디케의 눈물' ,'재구매 예상각11', 0 ,'user5' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '파견자들' ,'재구매 예상각12', 0 ,'user6' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '시대예보' ,'재구매 예상각13', 0 ,'user7' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '손실 없는 투자 원칙' ,'재구매 예상각14', 0 ,'user8' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '낮에 뜨는 달' ,'재구매 예상각15', 0 ,'user9' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '붉은 궁' ,'재구매 예상각16', 0 ,'user10' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '세이노의 가르침' ,'재구매 예상각17', 0 ,'user11' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '아침 그리고 저녁' ,'재구매 예상각18', 0 ,'user12' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역행자 ' ,'재구매 예상각19', 0 ,'user13' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '고통 구경하는 사회' ,'재구매 예상각20', 0 ,'user14' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '슈퍼노멀' ,'재구매 예상각21', 0 ,'user15' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '디케의 눈물' ,'재구매 예상각22', 0 ,'user16' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '최소한의 한국사' ,'재구매 예상각23', 0 ,'user17' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역사는 반복된다' ,'재구매 예상각24', 0 ,'user18' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '머니 트렌드' ,'재구매 예상각25', 0 ,'user19' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '단 한 사람' ,'재구매 예상각26', 0 ,'user20' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '멜랑콜리아' ,'이거보면 꿀잠자요1', 0 ,'user21' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '무명의 감정들' ,'이거보면 꿀잠자요2', 0 ,'user22' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '대화의 정석' ,'이거보면 꿀잠자요3', 0 ,'user23' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '돈의 속성' ,'이거보면 꿀잠자요4', 0 ,'user24' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '모순' ,'이거보면 꿀잠자요5', 0 ,'user21' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '구의 증명' ,'이거보면 꿀잠자요6', 0 ,'user22' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '아주 희미한 빛으로도' ,'이거보면 꿀잠자요7', 0 ,'user23' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '파견자들' ,'이거보면 꿀잠자요8', 0 ,'user24' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '시대예보' ,'이거보면 꿀잠자요9', 0 ,'user25' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '손실 없는 투자 원칙' ,'이거보면 꿀잠자요10', 0 ,'user26' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '낮에 뜨는 달' ,'이거보면 꿀잠자요11', 0 ,'user27' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '시대예보' ,'이거보면 꿀잠자요12', 0 ,'user28' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '손실 없는 투자 원칙' ,'이거보면 꿀잠자요13', 0 ,'user29' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '낮에 뜨는 달' ,'리뷰는 그만쓸래 1', 0 ,'user30' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '붉은 궁' ,'리뷰는 그만쓸래 2', 1 ,'user31' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '세이노의 가르침' ,'리뷰는 그만쓸래 3', 1 ,'user32' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '아침 그리고 저녁' ,'리뷰는 그만쓸래 4', 1 ,'user1' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역행자 ' ,'리뷰는 그만쓸래 5', 1 ,'user2' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '고통 구경하는 사회' ,'리뷰는 그만쓸래 6', 1 ,'user3' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '슈퍼노멀' ,'리뷰는 그만쓸래 7', 1 ,'user4' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '디케의 눈물' ,'리뷰는 그만쓸래 8', 1 ,'user5' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '최소한의 한국사' ,'리뷰는 그만쓸래 9', 1 ,'user6' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역사는 반복된다' ,'리뷰는 그만쓸래 10', 1 ,'user7' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '머니 트렌드' ,'리뷰는 그만쓸래 11', 1 ,'user8' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '단 한 사람' ,'리뷰는 그만쓸래 12', 1 ,'user9' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역사는 반복된다' ,'리뷰는 그만쓸래 13', 1 ,'user10' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역사는 반복된다' ,'리뷰는 그만쓸래 14', 1 ,'user11' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '최소한의 한국사' ,'리뷰는 그만쓸래 9', 1 ,'user6' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역사는 반복된다' ,'리뷰는 그만쓸래 10', 1 ,'user7' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '머니 트렌드' ,'리뷰는 그만쓸래 11', 1 ,'user8' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '단 한 사람' ,'리뷰는 그만쓸래 12', 1 ,'user9' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역사는 반복된다' ,'리뷰는 그만쓸래 13', 1 ,'user10' ,default );																
INSERT INTO Review VALUES( Review_no.NEXTval, '역사는 반복된다' ,'리뷰는 그만쓸래 14', 1 ,'user11' ,default );

 

 

 

 

 

 


 

 

 

 

Test 쿼리작성

 

 

 

 

 

 


 

 

 

 

 

Class Diagram

 

 

 

 

 

 


 

 

 

 

 

 

DB에 Access 하기위한 드라이버와 커넥션 준비

 

package DAO;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class AccessDAO {
    private final static String url = "jdbc:oracle:thin:@localhost:1521:XE";
    private final static String username = "system";
    private final static String pass = "oracle";
    private static Connection conn = null;
    private static PreparedStatement psmt = null;
    private static AccessDAO self = null;

    public static AccessDAO getInstance() {
        if(self == null) {
            self = new AccessDAO();
        }
        return self;
    }

    // 드라이버 로드
    private AccessDAO() {
        try {// 실행중에 발생하는 예외를 처리하여 프로그램 오류가 나지 않게 한다.
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (Exception e) {
            System.out.println("드라이버 로드 실패");// 가 코드에서 드라이버를 로드 못하면 실행
        }
    }

    // 커넥션 시도 리턴값 : 성공/실패
    public static boolean getConnection()
    {
        try {
            conn = DriverManager.getConnection(url, username, pass);
            return true;
        } catch (Exception e) {
            System.out.println("컨넥션 실패");
        }
        return false;
    }

    // 자원 반납 메서드정의
    public static void resourcesClose(){
        try {
            if ( psmt != null ) psmt.close();
            if ( conn != null ) conn.close();
        }catch (Exception e){
            System.out.println("자원 반납 예외발생");
        }
    }

    /*
    Getter && Setter Area
     */
    public static Connection getConn() {
        return conn;
    }

}

 

 

 

 

 

 


 

 

 

 

 

 

DTO 정의

package DTO;

public class BookDTO {
    private String book = null;
    private String author = null;
    private int rec = 0;

    public int getRec() {
        return rec;
    }

    public void setRec(int rec) {
        this.rec = rec;
    }


    public String getBook() {
        return book;
    }

    public void setBook(String book) {
        this.book = book;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public void bookPrt() {
        System.out.println("책이름 : " + this.book + "\n저자 :" + this.author);
    }
}

 

package DTO;

public class BookJoinReviewDTO {
    private int rnum = 0;
    private String book = null;
    private String author = null;
    private String id = null;
    private String rText = null;

    public BookJoinReviewDTO(){}

    public int getRnum() {
        return rnum;
    }

    public void setRnum(int rnum) {
        this.rnum = rnum;
    }

    public String getBook() {
        return book;
    }

    public void setBook(String book) {
        this.book = book;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getrText() {
        return rText;
    }

    public void setrText(String rText) {
        this.rText = rText;
    }
}

 

 

package DTO;

public class MembersDTO {
    private String id = null;
    private String pw = null;
    private String name = null;
    private int point = 0;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPw() {
        return pw;
    }

    public void setPw(String pw) {
        this.pw = pw;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPoint() {
        return point;
    }

    public void setPoint(int point) {
        this.point = point;
    }
}

 

 

package DTO;

public class ReviewDTO {
    private int rnum = 0;
    private String book = null;
    private String rtext = null;
    private int rec = 0;
    private String id = null;

    public int getRnum() {
        return rnum;
    }

    public void setRnum(int rnum) {
        this.rnum = rnum;
    }

    public String getBook() {
        return book;
    }

    public void setBook(String book) {
        this.book = book;
    }

    public String getRtext() {
        return rtext;
    }

    public void setRtext(String rtext) {
        this.rtext = rtext;
    }

    public int getRec() {
        return rec;
    }

    public boolean setRec(int rec) {
        if ( rec == 0 || rec == 1 ) {
            this.rec = rec;
            return true;
        }
        else System.out.println("추천은 1, 비추천은 0만 입력해주세요");
        return false;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

 

 

 

 

 

 


 

 

 

 

 

 

DAO 정의

package DAO;

import DTO.BookDTO;
import DTO.BookJoinReviewDTO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

public class BookDAO {

    // DB에 도서를 추가하는 메서드
    public static void bookInsertDB(BookDTO BDTO) {
        Boolean trueConn = AccessDAO.getConnection();
        PreparedStatement psmt = null;
        if (trueConn == true) {
            Connection conn = AccessDAO.getConn();
            try {
                String sql = "insert into Book values (?,?,?)";
                psmt = conn.prepareStatement(sql);
                psmt.setString(1, BDTO.getBook());
                psmt.setString(2, BDTO.getAuthor());
                psmt.setInt(3, BDTO.getRec());
                psmt.executeQuery();
                System.out.println("도서명 : " + BDTO.getBook() + " 등록 완료 ");
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("도서 등록 실패");
            } finally {
                AccessDAO.resourcesClose();
            }
        }
    }


    // DB에서 검색하고자 하는 도서를 키워드 Like 검색, 후기와 함께 서브쿼리 리턴값 반환
    public static ArrayList<BookJoinReviewDTO> bookTitleSearch(String title) {
        ArrayList<BookJoinReviewDTO> searchBookReview = new ArrayList<>();
        Boolean trueConn = AccessDAO.getConnection();
        PreparedStatement psmt = null;
        ResultSet rs = null;
        if (trueConn) {
            try {
                Connection conn = AccessDAO.getConn();
                String sql = "SELECT * FROM ReviewAndBook WHERE book LIKE ? ORDER BY RNUM";
                psmt = conn.prepareStatement(sql);
                psmt.setString(1, "%" + title + "%");
                rs = psmt.executeQuery();
                while (rs.next()) {
                    BookJoinReviewDTO tmpBook = new BookJoinReviewDTO();
                    tmpBook.setRnum(rs.getInt("rnum"));
                    tmpBook.setBook(rs.getString("book"));
                    tmpBook.setAuthor(rs.getString("author"));
                    tmpBook.setId(rs.getString("id"));
                    tmpBook.setrText(rs.getString("rtext"));
                    searchBookReview.add(tmpBook);
                }
                return searchBookReview;
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("검색 결과가 없습니다");
            } finally {
                AccessDAO.resourcesClose();
            }
        }
        return null;
    }


    // DB 에서 도서 단건 검색 후 리턴 메서드
    public static BookDTO searchBook(String searchBookTitle) {
        Boolean trueConn = AccessDAO.getConnection();
        PreparedStatement psmt = null;
        ResultSet rs = null;
        if (trueConn) {
            try {
                Connection conn = AccessDAO.getConn();
                String sql = "select * from book where book=?";
                psmt = conn.prepareStatement(sql);
                psmt.setString(1, searchBookTitle);
                rs = psmt.executeQuery();
                if (rs.next()) {
                    BookDTO bDTO = new BookDTO();
                    bDTO.setBook(rs.getString("book"));
                    System.out.println(bDTO.getBook() + "가 검색되었습니다.");
                    return bDTO;
                } else {
                    System.out.println("검색하신 책이 없습니다.");
                }
            } catch (Exception e) {
                System.out.println("select 오류");
                e.printStackTrace();
            } finally {
                AccessDAO.resourcesClose();
            }
        }
        return null;
    }


    // 등록된 책 이름만 DB에서 가져오는 메서드
    public static ArrayList<BookDTO> allBookTitle() {
        ArrayList<BookDTO> allTitle = new ArrayList<>();
        PreparedStatement psmt = null;
        ResultSet rs = null;
        Boolean trueConn = AccessDAO.getConnection();
        if (trueConn != null) {
            try {
                Connection conn = AccessDAO.getConn();
                String sql = "SELECT * FROM Book ORDER BY book";
                psmt = conn.prepareStatement(sql);
                rs = psmt.executeQuery();
                while (rs.next()) {
                    BookDTO bookDTO = new BookDTO();
                    bookDTO.setBook(rs.getString("book"));
                    bookDTO.setAuthor(rs.getString("author"));
                    bookDTO.setRec(rs.getInt("rec"));
                    allTitle.add(bookDTO);
                }
                return allTitle;
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("오류발생");
            } finally {
                AccessDAO.resourcesClose();
            }
        }
        return null;
    }
}
package DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import DTO.MembersDTO;

public class MembersDAO {

    // 회원이 정보를 조회 할때마다 DB에 있는 회원 포인트를 다시 읽어와서 갱신 후 출력해주는 메서드
    public static MembersDTO newMemberP(String memberId) {
        MembersDTO newMember = new MembersDTO();
        PreparedStatement psmt = null;
        ResultSet rs = null;
        Boolean trueConn = AccessDAO.getConnection();
        if (trueConn != null){
            try {
                Connection conn = AccessDAO.getConn();
                String sql = "select * FROM Members WHERE id = ?";
                psmt = conn.prepareStatement(sql);
                psmt.setString(1, memberId);
                rs = psmt.executeQuery();
                if (rs.next()) {
                    newMember.setId(rs.getString("id"));
                    newMember.setPw(rs.getString("pw"));
                    newMember.setName(rs.getString("name"));
                    newMember.setPoint(rs.getInt("point"));
                    return newMember;
                }
            } catch (Exception e) {
                System.out.println("예외발생");
                e.printStackTrace();
            } finally {
                AccessDAO.resourcesClose();
            }
        }
        return null;
    }


    // DB에서 등록된 사용자인지 검증 후 사용자 정보를 리턴해주는 메서드
    public MembersDTO serUser(String id, String pw) {
        PreparedStatement psmt = null;
        ResultSet rs = null;
        Boolean trueConn = AccessDAO.getConnection();
        if (trueConn) {
            try {
                Connection conn = AccessDAO.getConn();
                String sql = "select * from members where id=? and pw=?";
                psmt = conn.prepareStatement(sql);
                psmt.setString(1, id);
                psmt.setString(2, pw);
                rs = psmt.executeQuery();
                if (rs.next()) {
                    MembersDTO m = new MembersDTO();
                    m.setId(rs.getString("id"));
                    m.setPw(rs.getString("pw"));
                    m.setName(rs.getString("name"));
                    m.setPoint(rs.getInt("point"));
                    System.out.println("로그인이 완료되었습니다");
                    return m;
                } else {
                    System.out.println("등록된 회원 정보가 없습니다");
                    return null;
                }
            } catch (Exception e) {
                System.out.println("select 오류");
                e.printStackTrace();
            } finally {
                AccessDAO.resourcesClose();
            }
        }
        return null;
    }


    // 회원 가입시 DB에 전달하여 Members 테이블에 Insert처리 해주는 메서드
    public MembersDTO memberAdd(MembersDTO tmpM) {
        Boolean trueConn = AccessDAO.getConnection();
        PreparedStatement psmt = null;
        Connection conn = null;
        if (trueConn) {
            try {
                conn = AccessDAO.getConn();
                String sql = "insert into Members values (?,?,?,?)";
                psmt = conn.prepareStatement(sql);
                psmt.setString(1, tmpM.getId());
                psmt.setString(2, tmpM.getPw());
                psmt.setString(3, tmpM.getName());
                psmt.setInt(4, tmpM.getPoint());
                int resultInt = psmt.executeUpdate();
                if (resultInt <= 0) {
                    System.out.println("중복된 ID입니다 , 다시 가입하세요 ");
                    return null;
                } else {
                    System.out.println(tmpM.getName() + "님 회원가입 완료");
                    return tmpM;
                }
            } catch (Exception e) {
                System.out.println("회원가입 오류");
                e.printStackTrace();
            } finally {
                AccessDAO.resourcesClose();
            }
        }
        System.out.println("커넥션오류");
        return null;
    }
}
package DAO;
import java.lang.reflect.Member;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import DTO.MembersDTO;
import DTO.ReviewDTO;
public class ReviewDAO {

    // 리뷰 삭제 메서드
    public static void reviewDel(int delReviewNum){
        Boolean trueConn = AccessDAO.getConnection();
        PreparedStatement psmt = null;
        if (trueConn) {
            try {
                Connection conn= AccessDAO.getConn();
                String sql = "delete from review where rnum=?";
                psmt = conn.prepareStatement(sql);
                psmt.setInt(1,delReviewNum);
                int resultInt = psmt.executeUpdate();
                System.out.println(resultInt + "건 삭제 성공");
            } catch (Exception e) {
                System.out.println("delete 오류");
                e.printStackTrace();
            } finally {
                AccessDAO.resourcesClose();
            }
        }
    }


    // DB에 입력된 Review테이블에 rtext레코드를 수정하는 메서드
    public void reviewMod(int rNum, String rtext) {
        Boolean trueConn = AccessDAO.getConnection();
        PreparedStatement psmt = null;
        if (trueConn) {
            try {
                Connection conn= AccessDAO.getConn();
                String sql = "update review set rtext=? where rnum=?";
                psmt = conn.prepareStatement(sql);
                psmt.setString(1,rtext);
                psmt.setInt(2,rNum);
                int resultInt = psmt.executeUpdate();
                System.out.println(resultInt + "건 삽입 성공");
            } catch (Exception e) {
                System.out.println("UPDATE 오류");
                e.printStackTrace();
            } finally {
                AccessDAO.resourcesClose();

            }
        }
    }


    // DB에 정의된 Review테이블에 insert처리 메서드
    public void reviewAdd(ReviewDTO reviewDTO) {
        Boolean trueConn = AccessDAO.getConnection();
        PreparedStatement psmt = null;
        if (trueConn) {
            try {
                Connection conn= AccessDAO.getConn();
                String sql = "insert into Review values(Review_no.NEXTval,?,?,?,?,default)";
                psmt = conn.prepareStatement(sql);
                psmt.setString(1,reviewDTO.getBook());
                psmt.setString(2,reviewDTO.getRtext());
                psmt.setInt(3,reviewDTO.getRec());
                psmt.setString(4,reviewDTO.getId());
                int resultInt = psmt.executeUpdate();
                System.out.println(resultInt + "건 삽입 성공");
            } catch (Exception e) {
                System.out.println("insert 오류");
                e.printStackTrace();
            } finally {
                AccessDAO.resourcesClose();

            }
        }
    }


    // DB에 입력된 ID기준 리뷰목록을 DB에서 Select한 뒤 리턴해주는 메서드
    public ArrayList<ReviewDTO> returnReviewId( String title, MembersDTO nowMember, int selnum) {
        Boolean trueConn = AccessDAO.getConnection();
        ArrayList<ReviewDTO> rlist = new ArrayList();
        Connection conn = AccessDAO.getConn();
        PreparedStatement psmt = null;
        ResultSet rs = null;
        String sql = null;
        if (trueConn) {
            try {
                switch (selnum){
                    case 6 : // 정확한 도서명을 전달받아 select 결과 전달받음
                        sql = "select * from review where book=? and id = ? ORDER BY RNUM";
                        psmt = conn.prepareStatement(sql);
                        psmt.setString(1, title);
                        psmt.setString(2, nowMember.getId());
                        break;
                    default : // 로그인된 Id로 select하여 결과 전달
                        sql = "select * from review where id=? ORDER BY RNUM";
                        psmt = conn.prepareStatement(sql);
                        psmt.setString(1, nowMember.getId());
                        break;
                }
                rs = psmt.executeQuery(); // 결과 참조 가능하도록 연결
                while(rs.next()) {
                    ReviewDTO rDTO = new ReviewDTO();
                    rDTO.setRnum(rs.getInt("rnum"));
                    rDTO.setBook(rs.getString("book"));
                    rDTO.setRtext(rs.getString("rtext"));
                    rDTO.setRec(rs.getInt("rec"));
                    rDTO.setId(rs.getString("id"));
                    rlist.add(rDTO);
                }
                return rlist;
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("리뷰 조회 실패");
            }
        }
        return null;
    }

}

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

그 외 기능 소스코드

package funtion;
import DAO.MembersDAO;
import DAO.ReviewDAO;
import DTO.BookDTO;
import DTO.BookJoinReviewDTO;
import DTO.MembersDTO;
import DTO.ReviewDTO;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class Funtions {
    private static Scanner in = new Scanner(System.in);
    private static ArrayList<ReviewDTO> rList = null;
    private static ReviewDAO rDAO = new ReviewDAO();

    // 회원의 정보를 출력해주는 메서드
    public void memberInfoPrt(MembersDTO tmpMember){
        linePrt();
        MembersDTO newMember = MembersDAO.newMemberP(tmpMember.getId());
        System.out.println("  I     D : " + newMember.getId());
        System.out.println("  P     W : " + newMember.getPw());
        System.out.println("  N A M E : " + newMember.getName());
        System.out.println("P O I N T : " + newMember.getPoint());
    }

    // 리뷰에 대한 정보를 출력해주는 메서드
    public static void reviewPrt(MembersDTO nowMember, int selnum) {
        try {
            switch ( selnum ){
                case 6 :
                    // 정확한 도서명을 입력받아 DB에서 select 결과 rList에 대입 , 출력
                    String str = OutText("책 제목");
                    rList = rDAO.returnReviewId(str, nowMember, selnum);
                    break;
                default :
                    // 로그인된 id가 등록한 리뷰에 대해 DB에서 select 결과를 rList에 대입 , 출력
                    rList = rDAO.returnReviewId(null, nowMember,selnum);
                    break;
            }
            if (rList.size() != 0) {
                Iterator var3 = rList.iterator();
                while (var3.hasNext()) {
                    ReviewDTO list = (ReviewDTO) var3.next();
                    linePrt1();
                    System.out.println(String.format("%10s", "✧ 리뷰 번호 : ") + list.getRnum());
                    System.out.println(String.format("%10s", "✧ 추천 수 : ") + list.getRec());
                    System.out.println(String.format("%10s", "✧ 도서 명 : ") + list.getBook());
                    System.out.println(String.format("%10s", "✧ 리뷰 내용 : ") + list.getRtext());
                }
            }
        } catch ( Exception e ){
            System.out.println("예외발생");
        }
    }


    // DB결과 : 도서명별 리뷰정보와 도서정보를 서브쿼리로 출력
    // 해당 내용을 매개변수로 전달받아 출력해주는 메서드
    public void prtBookNReview(ArrayList<BookJoinReviewDTO> bjrtmp){
        for (BookJoinReviewDTO tmpBook : bjrtmp) {
            linePrt1();
            System.out.println(String.format("%20s", "리뷰 번호 : ") + tmpBook.getRnum());
            System.out.println(String.format("%20s", "도서 명 : ") + tmpBook.getBook());
            System.out.println(String.format("%20s", "저서 명 : ") + tmpBook.getAuthor());
            System.out.println(String.format("%20s", "리뷰 ID : ") + tmpBook.getId());
            System.out.println(String.format("%20s", "리뷰 내용 : ") + tmpBook.getrText());

        }
    }


    // 등록된 책 정보만 전체 출력해주는 메서드
    public void prtTitle(ArrayList<BookDTO> allTitle){
        for (BookDTO tmpBook : allTitle) {
            System.out.print(String.format("%10s", "✧ 도서 명 : ") + String.format("%-20s" , tmpBook.getBook()));
            System.out.println();
            System.out.print("∘₊✧──────────────────────────✧₊∘✧ 작가 명 : " + String.format("%-10s" , tmpBook.getAuthor()));
            System.out.print(String.format("%-5s", "✧ 추천 수 : ") + String.format("%-10s" , tmpBook.getRec()));
            System.out.println();
        }
    }


    // 입력된 문자열을 리턴해주는 메서드
    public static String OutText(String text) {
        System.out.print("\t" + text + " 입력 >> ");
        return in.nextLine();
    }

    public void linePrt(){
        System.out.println("∘₊✧──────────────────────────✧₊∘ Information ∘₊✧──────────────────────────✧₊∘");
    }

    public static void linePrt1(){
        System.out.println("∘₊✧──────────────────────────✧₊∘ Description ∘₊✧──────────────────────────✧₊∘");
    }
}

 

 

 

 

 


 

 

 

 

 

 

 

관리자 전용 화면 클래스

package membershipRounge;

import DAO.BookDAO;
import DAO.ReviewDAO;
import DTO.BookDTO;
import DTO.BookJoinReviewDTO;
import funtion.Funtions;

import java.util.ArrayList;

public class Admin {
    private ArrayList<BookJoinReviewDTO> bookJoinReviewDTOS = null;
    private Funtions fn = new Funtions();
    private static Admin self = null;

    private Admin() {
    }

    // 관리자 객체를 싱글톤으로 하기 위한 인스턴스 메서드
    public static Admin getInstanse() {
        if (self == null) self = new Admin();
        return self;
    }

    // 관리자 메뉴를 선택할 수 있는 메서드
    public void adminInfo() {
        while (true) {
            fn.linePrt();
            AdminInfo();
            int sel = Integer.parseInt(fn.OutText("메뉴"));
            if (sel == 1) addBook();
            if (sel == 2) delReview();
            if (sel == 3) break;
        }
    }

    // 리뷰 삭제 메서드
    // 관리자는 모든 책의 리뷰를 삭제할 수 있다
    private void delReview() {
        fn.linePrt();
        System.out.println("리뷰 삭제 메뉴 입니다");
        System.out.println("리뷰를 삭제할 도서명을 검색해주세요");
        String delbookTitle = fn.OutText("키워드");
        bookJoinReviewDTOS = BookDAO.bookTitleSearch(delbookTitle);
        if (bookJoinReviewDTOS != null) {
            fn.prtBookNReview(bookJoinReviewDTOS);
            int delNum = Integer.parseInt(fn.OutText("삭제 리뷰번호"));
            for (BookJoinReviewDTO tmp : bookJoinReviewDTOS) {
                if (tmp.getRnum() == delNum) {
                    ReviewDAO.reviewDel(delNum);
                    break;
                }
            }
        } else System.out.println("초기화면으로 이동합니다");
    }

    // 책 등록 메서드
    private void addBook() {
        fn.linePrt();
        System.out.println("책 등록 메뉴 입니다");
        BookDTO bookDTO = new BookDTO();
        bookDTO.setBook(fn.OutText("책 이름"));
        bookDTO.setAuthor(fn.OutText("작가 이름"));
        BookDAO.bookInsertDB(bookDTO);
    }

    // 관리자 로그인시 info 출력 메서드
    private void AdminInfo() {
        System.out.println("관리자 메뉴입니다");
        System.out.println("1. 책 등록");
        System.out.println("2. 리뷰 삭제");
        System.out.println("3. 로그아웃");
    }

}

 

 

 

 

 

 

 


 

 

 

 

비회원 전용 화면 클래스

package infoDesk;
import java.util.ArrayList;
import DAO.BookDAO;
import DTO.BookDTO;
import DTO.BookJoinReviewDTO;
import funtion.Funtions;

public class NoMember {
    private Funtions fn = new Funtions();

    // 비회원 전용 클래스
    public NoMember() {
        boolean flag = true;
        while (flag) {
            info();
            int sel = Integer.parseInt(fn.OutText("번호"));
            switch (sel) {
                case 1: // 등록된 책 이름 전체보기
                    AllBookTitle();
                    break;
                case 2: // 책 이름별 리뷰 전체보기
                    bookTitleSearch();
                    break;
                case 3:
                    System.out.println("초기 화면으로 돌아갑니다");
                    flag = false;
                    break;
                default:
                    System.out.println("없는 메뉴 번호입니다");
            }
        }
    }

    // 책 이름별 리뷰 전체보기
    private void bookTitleSearch() {
        System.out.println("리뷰 조회 도서명");
        String selBookTitle = fn.OutText("키워드");
        ArrayList<BookJoinReviewDTO> bookJoinReviewDTO = BookDAO.bookTitleSearch(selBookTitle);
        if ( bookJoinReviewDTO != null ) fn.prtBookNReview(bookJoinReviewDTO);
        else System.out.println("조회된 내용이 없습니다.");
    }

    // 등록된 책 이름 전체보기
    private void AllBookTitle() {
        System.out.println("현제 등록된 책 목록입니다");
        ArrayList<BookDTO> allTitle = BookDAO.allBookTitle();
        fn.linePrt();
        fn.prtTitle(allTitle);
    }

    // 비회원 전용 info 메뉴
    private void info() {
        System.out.println("비회원 전용 화면입니다");
        System.out.println("1. 등록된 책 이름 전체보기");
        System.out.println("2. 책 이름별 리뷰 전체보기");
        System.out.println("3. 초기화면 돌아가기");
    }
}

 

 

 

 

 

 

 


 

 

 

 

 

 

회원 로그인 후 선택 메뉴 및 회원 전용 화면 클래스

package membershipRounge;

import DAO.BookDAO;
import DAO.ReviewDAO;
import DTO.BookDTO;
import DTO.MembersDTO;
import DTO.ReviewDTO;
import funtion.Funtions;

import java.util.ArrayList;

public class MemberMain {

    private static MemberMain self = null;
    private static Funtions fn = new Funtions();
    private static MembersDTO nowMember = null;
    private static ReviewDAO rDAO = new ReviewDAO();
    private static ArrayList<ReviewDTO> rList = new ArrayList<>();

    public static MemberMain getInstance() {
        if (self == null) {
            self = new MemberMain();
        }
        return self;
    }

    private MemberMain() {
    }

    public void info(MembersDTO member) {
        this.nowMember = member;
        boolean flag = true;
        while (flag) {
            fn.linePrt();
            System.out.println("1. 내 정보 조회 ");
            System.out.println("2. 리뷰 등록 ");
            System.out.println("3. 리뷰 수정 ");
            System.out.println("4. 리뷰 삭제 ");
            System.out.println("5. 리뷰 전체 보기 ");
            System.out.println("6. 도셔명 리뷰 검색 ");
            System.out.println("7. 로그 아웃 ");
            int sel = Integer.parseInt(fn.OutText("메뉴"));
            switch (sel) {
                case 1: // 내 정보 조회
                    myPointSearch();
                    break;
                case 2: // 리뷰 등록
                    addReview();
                    break;
                case 3: // 리뷰 수정
                    editReview(sel);
                    break;
                case 4: // 리뷰 삭제
                    deleteReview(sel);
                    break;
                case 5: // 리뷰 전체 보기
                    allReviewShow(sel);
                    break;
                case 6: // 도서명 리뷰 검색
                    titleSearchReview(sel);
                    break;
                case 7:
                    System.out.println("로그아웃 진행합니다 . 감사합니다");
                    flag = false;
                    break;
                default:
                    System.out.println("잘 못 입력 하셨습니다. 다시 입력해주세요");
            }
        }
    }


    // 메뉴번호 6번 : 도서명 기준으로 모든 리뷰를 검색하는 메서드
    private static void titleSearchReview(int selnum) {
        fn.linePrt();
        System.out.println("도서명 리뷰검색 입니다.");
        fn.reviewPrt(nowMember, selnum);

    }

    // 로그인된 회원 기준으로 해당 회원이 등록한 리뷰만 전베보기하는 메서드
    private static void allReviewShow(int selnum) {
        fn.linePrt();
        System.out.println("전체보기입니다.");
        fn.reviewPrt(nowMember, selnum);
    }


    // 로그인된 회원 기준으로 해당 회원이 등록한 리뷰만 삭제하는 메서드
    private static void deleteReview(int selnum) {
        fn.linePrt();
        System.out.println("리뷰 삭제 입니다.");
        System.out.println(nowMember.getName() + "님의 리뷰 내역 입니다.");
        fn.reviewPrt(nowMember, selnum);
        int delReview = Integer.parseInt(fn.OutText("삭제 리뷰 번호"));
        editSelDel(delReview, selnum);
    }

    // 로그인된 회원 기준으로 해당 회원의 리뷰만 수정하는 메서드
    private static void editReview(int selnum) {
        fn.linePrt();
        System.out.println("리뷰 수정 입니다.");
        System.out.println(nowMember.getName() + "님의 리뷰 내역 입니다.");
        fn.reviewPrt(nowMember, selnum);
        int modReview = Integer.parseInt(fn.OutText("수정 리뷰 번호"));
        editSelDel(modReview, selnum);
    }


    // 로그인한 회원 기준으로 리뷰 등록 하는 메서드
    private static void addReview() {
        ReviewDTO rDTO = new ReviewDTO();
        fn.linePrt();
        System.out.println("리뷰 등록 입니다.");
        System.out.println("책 제목을 검색해 주세요");
        String bookTitle = fn.OutText("책 제목");
        BookDTO bDTO = BookDAO.searchBook(bookTitle);
        if (bDTO != null) {
            rDTO.setBook(bookTitle);
            if (rDTO != null) {
                rDTO.setRtext(fn.OutText("리뷰 "));
                System.out.println("0. 추천안함 / 1. 추천함");
                rDTO.setRec(Integer.parseInt(fn.OutText("번호")));
                rDTO.setId(nowMember.getId());
                rDAO.reviewAdd(rDTO);
            }
        } else
            System.out.println("입력한 도서명은 등록되지 않았습니다. 관리자에게 문의하세요");
    }

    // 로그인된 회원 기준에 회원 정보를 출력하는 메서드
    private static void myPointSearch() {
        fn.memberInfoPrt(nowMember);
    }

    // 수정 삭제 실제 처리메서드에 전달
    // int selnum = 3 (수정) or 4(삭제)
    private static void editSelDel(int rnum, int selnum) {
        rList = rDAO.returnReviewId(null, nowMember, selnum);
        try {
            if (rList != null) {
                ReviewDTO editReview = null;
                for (ReviewDTO review : rList) {
                    if (review.getRnum() == rnum) {
                        editReview = review;
                        break;
                    }
                }
                switch (selnum) {
                    case 3:
                        rDAO.reviewMod(editReview.getRnum(), fn.OutText("수정할 리뷰내용"));
                        break;
                    case 4:
                        rDAO.reviewDel(editReview.getRnum());
                        break;
                }
            } else System.out.println("해당 리뷰번호는 찾을 수 없습니다");
        } catch ( Exception e ){
            System.out.println("\t\t !! 예외발생 !! \t\t");
        }
    }
}

 

 

 

 

 

 

 


 

 

 

 

 

 

 

프로그램 시작 후 첫 메뉴 실행  클래스 

package infoDesk;

import DAO.AccessDAO;
import DAO.MembersDAO;
import DTO.MembersDTO;
import funtion.Funtions;
import membershipRounge.Admin;
import membershipRounge.MemberMain;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

// todo : 프로그램 시작 후 메뉴선택 클래스
public class Info {
    // 회원 멤버리스트
    private MembersDTO member = null;
    private MemberMain memberMain = MemberMain.getInstance();
    private Admin adminSelf = Admin.getInstanse();
    private AccessDAO driver = AccessDAO.getInstance();
    private Funtions fn = new Funtions();
    private MembersDAO dao = new MembersDAO();

    // 로그인/회원가입/비회원전용/관리자로그인 메뉴를 출력
    public Info() {
        AccessDAO driver = this.driver;
        boolean flag = true;
        while (flag) {
            fn.linePrt();
            info();
            int sel = Integer.parseInt(fn.OutText("번호"));
            switch (sel) {
                case 1: // 로그인
                    member = login(1);
                    if (member != null) memberMain.info(member);
                    break;
                case 2: // 회원가입
                    member = singUpMember();
                    if (member != null) memberMain.info(member);
                    else System.out.println("회원 정보를 확인 할 수 없습니다");
                    break;
                case 3: // 비회원전용
                    new NoMember();
                    break;
                case 4:// 관리자로그인
                    login(4);
                    break;
                case 5: // 프로그램 종료
                    System.out.println("프로그램을 종료합니다");
                    flag = false;
                    break;
                default:
                    System.out.println("번호가 없습니다.");
            }
        }
    }

    // 회원 로그인 메뉴
    private MembersDTO login(int sel) {
        int loginCnt = 0;
        switch (sel) {
            case 1:
                fn.linePrt();
                System.out.println("회원 로그인 메뉴입니다");
                while (loginCnt < 3) {
                    String tmpId = fn.OutText("아이디");
                    String tmpPw = fn.OutText("비밀번호");
                    this.member = dao.serUser(tmpId, tmpPw);
                    if (member != null) {
                        System.out.println(member.getName() + "님 반갑습니다 정상 로그인 되었습니다");
                        return member;
                    } else {
                        loginCnt++;
                        System.out.println(" [ " + loginCnt + "회/ 3회 ] 시도 횟수 초과 시 초기화면으로 이동합니다");
                    }
                }
                break;
            case 4:
                fn.linePrt();
                System.out.println("관리자 로그인 메뉴입니다");
                while (loginCnt < 3) {
                    String tmpId = fn.OutText("아이디");
                    String tmpPW = fn.OutText("비밀번호");
                    if (tmpId.equals("admin") && tmpPW.equals("human")) {
                        adminSelf.adminInfo();
                        break;
                    } else {
                        loginCnt++;
                        System.out.println(" [ " + loginCnt + "회/ 3회 ] 시도 횟수 초과 시 초기화면으로 이동합니다");
                    }
                }
                break;
        }
        return null;
    }

    // 회원 가입 메뉴
    private MembersDTO singUpMember() {
        MembersDTO member = new MembersDTO();
        fn.linePrt();
        System.out.println("회원 가입 입니다");
        member.setId(fn.OutText("아이디"));
        member.setPw(fn.OutText("비밀번호"));
        member.setName(fn.OutText("이름"));
        if (dao.memberAdd(member) != null) return member;
        return null;
    }

    // 인포 메뉴내용 출력 메서드
    private void info() {
        System.out.println("1. 로그인");
        System.out.println("2. 회원가입");
        System.out.println("3. 비회원전용");
        System.out.println("4. 관리자용 로그인");
    }
}
반응형