본문 바로가기
공부기록/실습

4월 28일 Java - 회원 관리 프로그램

by project100 2023. 4. 28.
package com.dto;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class MemberDto {
    private String uid;
    private String upass;
    private String uname;
    private int uage;
    private String uaddr;

    @Override
    public String toString(){
        return "ID : " + uid + "\n"
                + "NAME : " + uname + "\n"
                + "AGE : " + uage + "\n"
                + "ADDRESS : " + uaddr;
    }
}
package com.dao;

import com.dto.MemberDto;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class MemberDao {
    // DB 연동에 필요한 정보
    private String drv = "com.mysql.cj.jdbc.Drive";
    private String url = "jdbc:mysql://127.0.0.1:3306/jdbc_db";
    private String dbuser = "dbuser";
    private String dbpass = "비밀번호";

    // DB 연동관련 객체
    private Connection conn;
    private PreparedStatement pstmt;
    private ResultSet rs;

    // Driver 로드 -> 생성자로 처리
    public MemberDao() {
        try {
            Class.forName(drv);
        } catch (ClassNotFoundException e) {
        }
    } // 생성자 끝

    // 메모리 해제용 메소드
    public void close() {
        try {
            if (rs != null) rs.close();
            if (pstmt != null) pstmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {}
    }

    // 입력용 메소드
    public void insertMember(MemberDto member) throws SQLException {
        // SQL 쿼리문 작성
        String query = "INSERT INTO membertb VALUES (?, ?, ?, ?, ?)";
        conn = DriverManager.getConnection(url, dbuser, dbpass);
        pstmt = conn.prepareStatement(query);
        // query의 ? 부분 채우기
        pstmt.setString(1, member.getUid());
        pstmt.setString(2, member.getUpass());
        pstmt.setString(3, member.getUname());
        pstmt.setInt(4, member.getUage());
        pstmt.setString(5, member.getUaddr());
        // 왼성된 query문 실행
        // insert, update, delete 실행은 executeUpdate()를 사용한다.
        pstmt.executeUpdate();
    }

    // 출력용 메소드
    public List<MemberDto> getList() throws SQLException{
        List<MemberDto> mList = null;
        // 쿼리문 만들기
        String query = "SELECT * FROM membertb";

        conn = DriverManager.getConnection(url, dbuser, dbpass);
        pstmt = conn.prepareStatement(query);
        rs = pstmt.executeQuery();

        // 배열에서 한 행씩 꺼내기
        while (rs.next()){
            if(mList == null){
                // list가 없으면 list 만들어서 사용, 처음 한번만 만들기
                mList = new ArrayList<>();
            }
            // 한 행을 담을 수 있는 공간(Dto) 생성
            MemberDto md = new MemberDto();
            md.setUid(rs.getString("uid"));
            md.setUname(rs.getString(3));
            md.setUage(rs.getInt(4));
            md.setUaddr(rs.getString(5));

            // dto -> list
            mList.add(md);
        }
        return mList; // null 이거나 목록이거나
    }

    // 검색용 메소드
    public MemberDto selectMember(String id) throws SQLException {
        MemberDto member = null;

        String query = "SELECT * FROM membertb WHERE uid = ?";
        conn = DriverManager.getConnection(url, dbuser, dbpass);
        pstmt = conn.prepareStatement(query);
        pstmt.setString(1, id); //  public MemberDto selectMember(String id)
        rs = pstmt.executeQuery();

        // 정보가 있거나 없거나 확인, if문 사용
        if(rs.next()){
            member = new MemberDto();
            member.setUid(rs.getString(1));
            member.setUname(rs.getString(3));
            member.setUage(rs.getInt(4));
            member.setUaddr(rs.getString(5));
        } // 값이 없는 경우 false 처리 null이 넘어간다.
        return member; // null 이거나 member.dto이거나(한명의 정보)
    }

} // class end
package com.controller;

import com.dto.MemberDto;
import com.service.MemberService;
import com.view.MemberView;
import java.util.List;

public class MemberController {
    // 화면 처리용 객체
    private MemberView mView = new MemberView();
    // 서비스 객체
    private MemberService mServ = new MemberService();
    // 프로그램 전체 제어용 메소드
    public void run() {
        // 메뉴 번호 저장 변수
        int m = -1;
        // 타이틀 출력(view 클래스 메소드 사용)
        mView.viewTitle("회원 관리 프로그램");
        while (true) { //종료 명령 전까지 무한 반복
            // 메뉴 출력과 메뉴 번호 입력 - view 메소드
            m = mView.showMenu(1); // 번호 입력 시 메인메뉴와 서브 메뉴 출력
            // 종료 처리(사용자가 0을 입력)
            if (m == 0) {
                // 종료 메세지 출력(view 메소드)
                mView.prMsg("프로그램 종료");
                // 메소드 종료
                return;
            }
            // 나머지 메뉴 처리
            switch (m) {
                case 1:// 회원 정보 입력
                    inputMember();
                    break;
                case 2:// 회원 정보 출력
                    outputMember();
                    break;
                case 3: // 회원 정보 검색
                    searchMember();
                    break;
                default:
                    mView.prMsg("0~3번을 입력하세요.");
            }
        }
    }

// 검색
    private void searchMember() {
        // 서브 타이틀 출력
        mView.viewTitle("회원 정보 출력");
        // 검색 키워드 입력 받기 WHERE uid = 'hong';
        String searchId = mView.getSearch("ID : ");
        // 서비스에 검색 키워드 넘기고 결과 받기
        MemberDto member = mServ.getMember(searchId);
        // view로 검색 결과 출력
        if(member != null){
            mView.outputMember(member);
        } else {
            mView.prMsg("검색할 회원이 없습니다.");
        }
    }

//출력
    private void outputMember() {
        // 서브 타이틀 출력
        mView.viewTitle("회원 정보 출력");
        // 서비스로부터 회원 목록 받기(List)
        List<MemberDto> mList = mServ.getList();
        // 회원 목록을 view로 출력
        if (mList != null) {
            mView.outputList(mList);
        } else {
            mView.prMsg("저장된 회원이 없습니다.");
        }
    }

// 입력
    private void inputMember() {
        // 서브 타이틀 출력
        mView.viewTitle("회원 정보 입력");
        // 회원정보 저장 객체 생성
        MemberDto member = new MemberDto();
        // 회원 정보 입력 view 메소드
        mView.inputMember(member);
        // 서비스에 회원정보 전달 및 결과 받기
        String msg = mServ.inputMember(member);
        // 결과 출력 view 메소드
        mView.prMsg(msg);
    }
} // class end
package com.view;

import com.dto.MemberDto;
import java.util.List;

public class MemberView {
    // 모니터 출력 및 키보드 입력 처리 메소드
    InOutClass ioc = new InOutClass();
    // 타이틀 출력 메소드
    public void viewTitle(String title) {
        ioc.tlPrint("------------------------");
        ioc.tlPrint("<< " + title + " >>");
        ioc.tlPrint("------------------------");
    }
    // 메뉴 출력 메소드(메인 메뉴, 서브 메뉴 모두 처리)
    public int showMenu(int cNum) {
        //cNum에 들어오는 값에 따라 메인과 서브 선택 출력
        int menu = -1; // 메뉴 번호 저장 변수
        ioc.tlPrint("");// 메뉴 출력 전 한줄 띄어주기
        ioc.tlPrint("메뉴>");
        switch (cNum) {
            case 1:// 메인 메뉴 출력
                ioc.tlPrint("1. 회원 정보 입력");
                ioc.tlPrint("2. 회원 정보 출력(전체)");
                ioc.tlPrint("3. 회원 정보 검색");
                ioc.tlPrint("0. 프로그램 종료");
                break;
            case 2:// 검색 후 서브 메뉴 출력
                ioc.tlPrint("회원 정보 수정");
                ioc.tlPrint("회원 정보 삭제");
                break;
        }
        // 메뉴 번호 입력 받기
        menu = ioc.intNum("선택> ");
        return menu; // 입력 받은 메뉴 번호를 컨트롤러로 전달
    }
    
    // 메세지 출력용 메소드
    public void prMsg(String msg) {
        ioc.tlPrint(msg);
    }

    public void inputMember(MemberDto member) {
        member.setUid(ioc.inStr("ID : "));
        member.setUpass(ioc.inStr("PASSWORD : "));
        member.setUname(ioc.inStr("NAME : "));
        member.setUage(ioc.intNum("AGE : "));
        member.setUaddr(ioc.inStr("ADDRESS : "));
    }

    public void outputList(List<MemberDto> mList) {
        for (MemberDto m : mList) {
            ioc.tlPrint(m.toString());
            ioc.tlPrint("=========================");
        }
    }

    public String getSearch(String s) {
        String keyword = ioc.inStr(s);
        ioc.tlPrint("▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼");
        return keyword;
    }

    public void outputMember(MemberDto member) {
        ioc.tlPrint(member.toString());
        ioc.tlPrint("▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲");
    }
} // class end
package com.service;

import com.dao.MemberDao;
import com.dto.MemberDto;
import java.sql.SQLException;
import java.util.List;

public class MemberService {
    // Dao 객체
    private MemberDao mDao = new MemberDao();
    // 회원 정보 저장 메소드
    public String inputMember(MemberDto member) {
        // DB 처리 결과 메세지 저장 변수
        String msg = null;
        // Dao의 insert 메소드를 사용해서 정보를 저장
        try {
            mDao.insertMember(member);
            msg = "저장 성공";
        } catch (SQLException e) {
           msg = "저장 실패";
        } finally {
            mDao.close();
        }
        return msg;
    }

    public List<MemberDto> getList() {
        //Dao의 테이블 내용을 받아오는 메소드 실행
        List<MemberDto> mList = null;
        try {
            mList = mDao.getList();
        } catch (SQLException e) {}
        finally {
            mDao.close();
        }
        return mList;
    }

    public MemberDto getMember(String searchId) {
        MemberDto member = null;
        try {
            member = mDao.selectMember(searchId);
        } catch (SQLException e) {}
        finally {
            mDao.close();
        }
        return member;
    }
} // class end