이제 완성 된 테이블을 하나씩 공개 해봐야지. 설렌다
1. MemberVo
package member;
public class MemberVo {
private String id;
private String pwd;
private String name;
private String phoneNumber;
public MemberVo() {
}
public MemberVo(String id, String pwd, String name, String number) {
this.id = id;
this.pwd = pwd;
this.name = name;
this.phoneNumber = number;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return phoneNumber;
}
public void setNumber(String number) {
this.phoneNumber = number;
}
@Override
public String toString() {
return "MemberVo [아이디 = " + id + ", 비밀번호 = " + pwd + ", 이름 = " + name + ", 핸드폰 번호 = " + phoneNumber + "]";
}
}
2. MemberDao
Dao에서 JDBC 연동을 이용한 sql 쿼리를 작성 해준다.
내 생각에는 Dao 가 중간 다리 역할을 하는 중요한 부분인 것 같다.
package member;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import conn.DBConnect;
public class MemberDao {
private DBConnect dbconn;
public MemberDao() {
dbconn = DBConnect.getInstance();
}
public MemberVo select(String id) {
MemberVo vo = null;
Connection conn = dbconn.conn();
String sql = "select * from Member where id = ?";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
vo = new MemberVo(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return vo;
}
public void insert(MemberVo vo) {
Connection conn = dbconn.conn();
String sql = "insert into Member values(?, ?, ?, ?)";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, vo.getId());
pstmt.setString(2, vo.getPwd());
pstmt.setString(3, vo.getName());
pstmt.setString(4, vo.getNumber());
int num = pstmt.executeUpdate();
System.out.println("회원가입 되었습니다.");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void update(MemberVo vo) {
System.out.println(vo);
Connection conn = dbconn.conn();
String sql = "update Member set pw = ?, name = ?, phonenumber = ? where id=?";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, vo.getPwd());
pstmt.setString(2, vo.getName());
pstmt.setString(3, vo.getNumber());
pstmt.setString(4, vo.getId());
int num = pstmt.executeUpdate();
System.out.println("정보가 수정 되었습니다");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void delete(String id) {
Connection conn = dbconn.conn();
String sql = "delete from Member where id = ?";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
int num = pstmt.executeUpdate();
System.out.println("회원탈퇴가 성공적으로 이루어졌습니다");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
3. Memberserive
package member;
import java.util.ArrayList;
import java.util.Scanner;
import BookRent.BookRentDao;
import BookRent.BookRentVo;
import VideoRent.VideoRentDao;
import VideoRent.VideoRentVo;
import library.menu;
public class MemberService {
private MemberDao dao;
public static String Loginid;
public MemberService() {
dao = new MemberDao();
}
BookRentDao dao1 = new BookRentDao();
VideoRentDao dao2 = new VideoRentDao();
//회원가입
public void join(Scanner sc) {
System.out.println("< 회원가입 >");
MemberVo vo = new MemberVo();
String id = "";
while(true) {
System.out.println("아이디 : ");
id = sc.next();
MemberVo p = dao.select(id);
if(p == null) {
break;
} else {
System.out.println("중복된 아이디입니다. 다시 입력하세요");
}
}
vo.setId(id);
System.out.print("비밀번호 : ");
vo.setPwd(sc.next());
System.out.print("이름 : ");
vo.setName(sc.next());
System.out.print("핸드폰 번호 : ");
vo.setNumber(sc.next());
dao.insert(vo);
}
//로그인
public void login(Scanner sc) {
System.out.println("< 로그인 >");
System.out.print("아이디 : ");
String id = sc.next();
System.out.print("비밀번호 : ");
String pwd = sc.next();
MemberVo vo = dao.select(id);
if(vo == null) {
System.out.println("없는 아이디");
} else {
if(pwd.equals(vo.getPwd())) {
System.out.println("로그인 성공");
Loginid = id;
} else {
System.out.println("잘못된 비밀번호");
}
}
}
//로그아웃
public void logout() {
if(Loginid != null) {
System.out.println(Loginid + "님이 로그아웃");
Loginid = null;
System.exit(0);
}
}
//내 정보 출력
public boolean printMyInfo() {
if(Loginid == null) {
System.out.println("로그인 먼저 하세요");
return false;
} else {
System.out.println(dao.select(Loginid));
return true;
}
}
// 내 정보 수정
public void editMyInfo(Scanner sc) {
System.out.println("< 내 정보수정 >");
System.out.print("비밀번호 : ");
String pwd = sc.next();
System.out.print("이름 : ");
String name = sc.next();
System.out.print("핸드폰 번호 : ");
String number = sc.next();
dao.update(new MemberVo(Loginid, pwd, name, number));
}
// 탈퇴
public void out() {
BookRentDao dao1 = new BookRentDao();
VideoRentDao dao2 = new VideoRentDao();
ArrayList<BookRentVo> list1 = dao1.selectById();
ArrayList<VideoRentVo> list2 = dao2.selectById();
if (list1.size() == 0 && list2.size() ==0) {
dao.delete(Loginid);
Loginid = null;
System.out.println("이용해 주셔서 감사합니다");
System.exit(0);
} else {
System.out.println("대여 중인 책이나 비디오로 인해 탈퇴할 수 없습니다");
}
}
}
Member package 를 만들면서 속을 썩였던 부분을 뽑자면 단연 탈퇴라고 할 수 있다.
만약에 빌린 책과 비디오 목록이 있으면 탈퇴를 하지 못하게 하고 싶은데 어떻게 해야 할까? 하는 생각에서 시작되었다.
if (list1.size() == 0 && list2.size() ==0) 이러면 바로 실행 되어 져야 하는데 탈퇴를 해도 자꾸 프로그램 종료가 아니라 이전 메뉴로 돌아가는 것이다. 이게 menu 의 문제인지 out 의 문제인지 판단하기도 어려웠다. 그냥 냅다 양쪽 코드들을 고쳐보기 시작했다.
이걸 어떻게 해결 해야 하나 고민이 깊어졌다. 이미 토요일 오후라서 모든 조원들이 지쳐 있는 상태ㅠㅠ 디스코드에서 말도 다들 없어졌어.. 내가 다 들었어. 나도 사실 말 안했어. 그때 우리조 똑똑이가 out() 메서드를 boolean 형태로 만들어서 false로 반환해서 나가는게 어떻게 겠냐고 말했는데 ture 인데도 false false 인데도 false 조차도 실행이 안되는 조용히 카톡으로 코드만 주고 받는 상황에 이르게 되었다.
그러다가 저녁먹고 있는데 진짜로 이 상황이 일어났다
그냥 냅다 프로그램을 종료 시키면 되지 않을까? 생각해서 찾아보니까 System.exit(0); 을 쓰라고 나오는 것이다. 그렇게 해서 완성 된 out 메서드..
public void out() {
BookRentDao dao1 = new BookRentDao();
VideoRentDao dao2 = new VideoRentDao();
ArrayList<BookRentVo> list1 = dao1.selectById();
ArrayList<VideoRentVo> list2 = dao2.selectById();
if (list1.size() == 0 && list2.size() ==0) {
dao.delete(Loginid);
Loginid = null;
System.out.println("이용해 주셔서 감사합니다");
System.exit(0);
} else {
System.out.println("대여 중인 책이나 비디오로 인해 탈퇴할 수 없습니다");
}
}
뿌듯하다.
'프로젝트 > Mini project' 카테고리의 다른 글
[mini project] 6. 도서관 관리 시스템 - 책 관리 테이블 (0) | 2023.03.19 |
---|---|
[mini project] 5. 도서관 관리 시스템 - 게시판 테이블 (0) | 2023.03.19 |
[mini project] 3. (0) | 2023.03.19 |
[mini project] 2. (0) | 2023.03.19 |
[mini project] 1. (0) | 2023.03.19 |