{"CODING": undefind};/JAVA
[도서관리 프로그램(콘솔구현) 1-1] 회원가입 구현
잼잼미
2021. 7. 6. 01:00
도서관리 세부 기능 소개 이전에
세부 메뉴로 연결 되는 TotalController의 전체 메뉴 구성은 아래와 같다.
interLibrarianDAO ldao = new librarianDAO();
interUserDAO udao = new userDAO();
interBookDAO bdao = new bookDAO();
String menuNo;
String menuNo2;
// menu_Start
public void menu_Start(Scanner sc) {
do {
System.out.println("\n===> 도서대여 프로그램 <===");
System.out.println("1. 사서 전용메뉴 2. 일반회원 전용메뉴 3. 프로그램종료");
System.out.print("=> 메뉴번호선택 : ");
menuNo = sc.nextLine();
switch (menuNo) {
case "1":
librarianMenu(sc);
break;
case "2":
userMenu(sc);
break;
case "3":
ProjectDBConnection.closeConnection();
break;
default:
System.out.println(">> 메뉴에 없는 번호입니다. 다시 입력하세요.\n");
break;
}
} while(!("3".equals(menuNo)));
}
// librarianMenu
private void librarianMenu(Scanner sc) {
librarianDTO ldto = null;
do {
String loginId = (ldto == null)?" ":"["+ ldto.getAdminid() +"님 로그인 중..]";
String addMenu = (ldto == null)?"4. 나가기":"4. 도서정보등록 5. 개별도서등록\n"
+ "6. 도서대여해주기 7. 대여중인도서조회 8. 도서반납해주기 9. 등록도서삭제 10.나가기";
System.out.println("\n===> 사서 전용 메뉴 "+loginId+"<===");
System.out.println("1. 사서가입 2. 로그인 3. 로그아웃 "+addMenu);
System.out.print("=> 메뉴번호선택 : ");
// 로그인 안되어 있을 때
if(ldto == null) {
menuNo = sc.nextLine();
switch (menuNo) {
case "1":
librarianRegister(sc); // 사서 가입하기
break;
case "2":
ldto=login(sc); // 로그인
break;
case "3":
System.out.println(">> 이미 로그아웃 상태입니다! ");
break;
case "4":
System.out.println("\n");
break;
default:
System.out.println(">> 메뉴에 없는 번호입니다. 다시 입력하세요.\n");
break;
}
// 로그인 되어 있을 때
} else {
menuNo2 = sc.nextLine();
switch (menuNo2) {
case "1":
librarianRegister(sc); // 사서 가입하기
break;
case "2":
System.out.println(">> 이미 로그인 상태입니다! 다른 ID로 로그인로 로그인하시려면 로그아웃해주세요~");
break;
case "3":
ldto=logout(); // 로그아웃
break;
case "4":
int n = bookInfoInput(sc); // 도서정보등록
if(n==0) {
System.out.println("\n >>> 도서 등록을 취소하셨습니다. <<<");
break;
}
else if(n==1) {
System.out.println("\n >>> 도서 등록을 완료하셨습니다. <<<");
break;
}
else if(n==-1) {
System.out.println("\n >>> 이미 등록된 도서번호입니다. <<<");
break;
}
else if(n==-2) {
System.out.println("\n >>> ISBN이나 가격에는 숫자만 입력하세요! <<<");
break;
}
break;
case "5":
n = bookDetailNo(sc); // 개별도서등록
if(n==1) {
System.out.println(">> 도서등록 성공!! << \n");
}
else if(n==0) {
System.out.println(">> 도서등록을 취소하셨습니다. <<\n");
}
else if(n==-1) {
System.out.println(">> 입력하신 국제표준도서번호(ISBN)가 존재하지 않으므로 도서등록 실패!! << \n");
}
break;
case "6":
checkOut(sc); // 도서대여해주기
break;
case "7":
checkOutInfo(sc); // 대여중인도서조회
break;
case "8":
returnBook(sc); //도서반납하기
break;
case "9":
deleteBook(null, sc);// 등록도서삭제
break;
case "10":
break;
default:
System.out.println(">> 메뉴에 없는 번호입니다. 다시 입력하세요.\n");
break;
}
}
} while(!("4".equals(menuNo) || "10".equals(menuNo2)));
}
// userMenu
private void userMenu(Scanner sc) {
userDTO udto = null;
do {
String loginName = (udto == null)?"":"["+ udto.getUsername() +"님 로그인 중..]";
String addMenu = (udto == null)?"4. 나가기":"4.도서검색하기 5.나의대여현황보기 6.회원탈퇴하기 7.나가기";
System.out.println("\n===> 일반회원 전용메뉴 "+loginName+"<===");
System.out.println("1.일반회원가입 2. 로그인 3. 로그아웃 "+addMenu);
System.out.print("=> 메뉴번호선택 : ");
// 회원이 로그인 안 되어 있을 때
if(udto == null) {
menuNo = sc.nextLine();
switch (menuNo) {
case "1": //일반회원가입
memberRegister(sc);
break;
case "2": //로그인
udto=userLogin(sc);
break;
case "3": //로그아웃
System.out.println(">> 이미 로그아웃 상태입니다! ");
break;
case "4":
System.out.println("\n");
break;
default:
System.out.println(">> 메뉴에 없는 번호입니다. 다시 입력하세요.\n");
break;
}
// 회원이 로그인 되어 있을 때
} else {
menuNo2 = sc.nextLine();
switch (menuNo2) {
case "1": //일반회원가입
memberRegister(sc);
break;
case "2": //로그인
System.out.println(">> 이미 로그인 상태입니다! 다른 ID로 로그인로 로그인하시려면 로그아웃해주세요~");
break;
case "3": //로그아웃
udto=userLogout();
break;
case "4": //도서검색하기
bookSearch(sc);
break;
case "5": //일반회원 도서대여현황 조회
rentalStatus(udto);
break;
case "6": //회원탈퇴
udto = leaveMember(udto, sc);
break;
case "7":
System.out.println("\n");
break;
default:
System.out.println(">> 메뉴에 없는 번호입니다. 다시 입력하세요.\n");
break;
}
}
} while(!("4".equals(menuNo) || "7".equals(menuNo2)));
}
회원가입 구현
콘솔 구현 도서관리 프로그램의 회원가입 구현 부분이다.
1. TotalController
private void memberRegister(Scanner sc) {
int n = 0;
do {
System.out.println("\n >> ======== 일반회원가입 ======== <<");
System.out.print("▶ 아이디 : ");
String userid= sc.nextLine();
System.out.print("▶ 암호: ");
String passwd = sc.nextLine();
System.out.print("▶ 성명 : ");
String username = sc.nextLine();
System.out.print("▶ 연락처(휴대폰) : ");
String mobile = sc.nextLine();
userDTO udto = new userDTO();
udto.setUserid(userid);
udto.setPasswd(passwd);
udto.setUsername(username);
udto.setMobile(mobile);
n = udao.memberRegister(udto, sc);
if(n == 0) {
System.out.println("\n >> 회원가입을 취소하셨습니다. ");
} else if(n == 1) {
System.out.println("\n >> 회원등록 성공! ");
} else if(n == -1) {
System.out.println("\n >> "+userid+"가 이미 사용중이므로 다른 아이디를 입력하세요. ");
} else if(n == -2) {
System.out.println("\n >> SQL 구문에 오류가 발생함 ");
}
} while (!(n == 0||n == 1));
}
Scanner를 이용해 아이디, 비밀번호, 성명, 연락처를 입력받은 뒤
userDAO의 memberRegister 로 연결
2. userDAO
@Override
public int memberRegister(userDTO udto, Scanner sc) {
int result = 0;
try {
conn = ProjectDBConnection.getConn();
String sql = "insert into lib_member(userseq, userid, passwd, username, mobile)\n"+
"values(userseq.nextval, ?, ?, ?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, udto.getUserid());
pstmt.setString(2, udto.getPasswd());
pstmt.setString(3, udto.getUsername());
pstmt.setString(4, udto.getMobile());
result = pstmt.executeUpdate();
if(result == 1) {
String yn = "";
do {
System.out.print(">> 회원가입을 정말로 하시겠습니까?[Y/N] ");
yn = sc.nextLine();
if("Y".equalsIgnoreCase(yn)) {
conn.commit(); // 커밋
}
else if("N".equalsIgnoreCase(yn)) {
conn.rollback(); // 롤백
result = 0;
}
else {
System.out.println(">>> Y 또는 N 만 입력하세요!! \n");
}
} while (!("Y".equalsIgnoreCase(yn) || "N".equalsIgnoreCase(yn)));
}//end of if(result == 1) ---------------
}catch(SQLIntegrityConstraintViolationException e) {
if(e.getErrorCode() == 1)
result = -1;
}catch(SQLException e) {
result = -2;
}finally {
close();
}
return result;
}
DB와 연결 후 insert 쿼리 통해서 회원 테이블에 새로운 회원 insert
*프리페어드 스테이트먼트(prepared statement) 데이터베이스 관리 시스템(DBMS)에서 동일하거나 비슷한 데이터베이스 문을 높은 효율성으로 반복적으로 실행하기 위해 사용되는 기능이다. 일반적으로 쿼리나 업데이트와 같은 SQL 문과 함께 사용되는 프리페어드 스테이트먼트는 템플릿의 형태를 취하며, 그 템플릿 안으로 특정한 상수값이 매 실행 때마다 대체된다. (출처: 위키백과)