{"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 문과 함께 사용되는 프리페어드 스테이트먼트는 템플릿의 형태를 취하며, 그 템플릿 안으로 특정한 상수값이 매 실행 때마다 대체된다. (출처: 위키백과)

 

콘솔 구현된 회원가입