JDBC 렌터카 예약 프로그램 코드

heubanufi·2024년 5월 29일

JAVA

목록 보기
10/10

CommonJDBCUtil.java

public class CommonJDBCUtil {
	private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
	private static final String URL = "jdbc:oracle:thin:@:xe";
	private static final String USER = "five";
	private static final String PASSWORD = "five";
	
	//static 초기화 구문
	static {
		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//DB연결 Connection 객체 생성
	public static Connection getConnection() {
		try {
			return DriverManager.getConnection(URL, USER, PASSWORD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) {
		try {
			if(rs != null) rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(pstmt != null) pstmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		try {
			if(conn != null) conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
	
	public static void close(Connection conn, PreparedStatement pstmt) {
		try {
			if(pstmt != null) pstmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		try {
			if(conn != null) conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

}

RentalCarController.java

public class RentalCarController {
	private CarService cs = new CarService();
	private RentalCarView cv = new RentalCarView();
	
	// 차량 목록 조회
	public void selectCar() {
		List<CarVO> cList = cs.selectAll();
		cv.displayCar(cList);
	}
	
	//예약 가능 날짜 목록 조회
	public void selectCal(String startDateStr, String endDateStr) {
		List<ScheduleVO> sList = cs.selectCal(startDateStr, endDateStr);
		cv.displayCal(sList);
	}
	public List<ScheduleVO> selectCals(String startDateStr, String endDateStr) {
		List<ScheduleVO> sList = cs.selectCal(startDateStr, endDateStr);
		cv.displayCal(sList);
		return sList;
	}
	
	//날짜 선택 후 가격 조회
	public void selectPrice(String startDateStr, String endDateStr, int no) {
		ScheduleVO totalPrice = cs.selectPrice(startDateStr, endDateStr, no);
		cv.displayPrice(totalPrice);
	}
	
	// 예약 목록 조회 
	public void selectRerservation(String memberId, String memberPw) {
		List<ReservationVO> rList = cs.selectReservation(memberId);
		cv.displayReserve(rList);
	}
	
	//로그인 성공 여부 조회
	public void loginCheck(String memberId, String memberPw) {
		cv.displayLogin(memberId, memberPw);
	}
	
	//아이디 체크
	public void idCheck(String memberId) {
		
	}
	

}

DAO

public class CarDAO {
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;
	
	//자동차 목록 조회
	public List<CarVO> selectAll() {
		List<CarVO> list = null;
		
		try {
			conn = CommonJDBCUtil.getConnection();
			
			//3. Statement 문 실행(SQL 문 실행)
			StringBuilder sql = new StringBuilder();
			sql.append("SELECT CAR_ID, MODEL, TYPE, SEAT, YEAR, FUEL, PRICE ");
			sql.append("  FROM CAR ");
			sql.append(" ORDER BY PRICE ");
			pstmt = conn.prepareStatement(sql.toString());
			
			rs = pstmt.executeQuery();
			
			list = new ArrayList<CarVO>();
			
			//4. SQL 실행 결과에 대한 처리
			//   - SELECT : 조회(검색) 데이터 결과 값에 대한 처리
			while (rs.next()) {
				CarVO vo = new CarVO(rs.getString("CAR_ID"), 
								rs.getString("MODEL"),
								rs.getString("TYPE"),
								rs.getInt("SEAT"),
								rs.getInt("YEAR"),
								rs.getString("FUEL"),
								rs.getInt("PRICE"));
				list.add(vo);
			}
			
		} catch (Exception e) {
			System.out.println("[예외발생] " + e.getMessage());
		} finally {
			CommonJDBCUtil.close(conn, pstmt, rs);
		}
		return list;
	}

}
public class MemberDAO {
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;
	
	public MemberVO selectOne(String id, String password) {
		MemberVO vo = null;
		try {
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("SELECT ID, PASSWORD, NAME, AGE ");
			sql.append("  FROM MEMBER ");
			sql.append(" WHERE ID = ? ");
			sql.append("   AND PASSWORD = ? ");
			pstmt = conn.prepareStatement(sql.toString());
			
			pstmt.setString(1, id);
			pstmt.setString(2, password);
			
			rs = pstmt.executeQuery();
			
			if (rs.next()) {
				vo = new MemberVO(rs.getString("ID"), 
						rs.getString("PASSWORD"),
						rs.getString("NAME"),
						rs.getInt("AGE"));
				System.out.println(vo);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CommonJDBCUtil.close(conn, pstmt, rs);
		}
		
		return vo;
	}

	
	public List<MemberVO> selectAll() {
		List<MemberVO> list = null;
		
		try {
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("SELECT ID, PASSWORD, NAME, AGE ");
			sql.append("  FROM MEMBER ");
			sql.append(" ORDER BY ID ");
			pstmt = conn.prepareStatement(sql.toString());

			
			rs = pstmt.executeQuery();
			
			list = new ArrayList<MemberVO>();
			
			while (rs.next()) {
				MemberVO vo = new MemberVO(
						rs.getString("ID"), 
						rs.getString("PASSWORD"),
						rs.getString("NAME"),
						rs.getInt("AGE"));
				list.add(vo);
			}
			
		} catch (Exception e) {
			System.out.println("[예외발생] " + e.getMessage());
		} finally {
			CommonJDBCUtil.close(conn, pstmt, rs);
		}
		
		return list;
	}
	
	public int insert(String id, String password, String name, int age) {
		int result = 0;
		
		try {
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("INSERT INTO MEMBER ");
			sql.append("       (ID, PASSWORD, NAME, AGE) ");
			sql.append("VALUES (?, ?, ?, ?) ");
			
			pstmt = conn.prepareStatement(sql.toString());
			
			pstmt.setString(1, id);
			pstmt.setString(2, password);
			pstmt.setString(3, name);
			pstmt.setInt(4, age);
			
			result = pstmt.executeUpdate();
			
		} catch (Exception e) {
			result = -1;
			e.printStackTrace();
		} finally {
			CommonJDBCUtil.close(conn, pstmt);
		}
		return result;
	}
	
	public int delete(String id, String pw) {
		int result = 0; 
		
		try {
			
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("DELETE Member ");
			sql.append(" WHERE ID = ? ");
			sql.append(" AND PASSWORD = ? ");
			
			pstmt = conn.prepareStatement(sql.toString());
			
			pstmt.setString(1, id);
			pstmt.setString(2, pw);
			
			result = pstmt.executeUpdate();
			System.out.println("회원 정보가 삭제되었습니다");
			
		} catch (Exception e) {
			result = -1;
			e.printStackTrace();
		} finally {
			CommonJDBCUtil.close(conn, pstmt);
		}
		return result;
	}

	
	public int updateName(String id, String name) {
		int result = 0; 
		
		try {
			
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("UPDATE MEMBER");
			sql.append("   SET NAME = ? ");
			sql.append(" WHERE ID = ? ");
			
			pstmt = conn.prepareStatement(sql.toString());
			
			pstmt.setString(1, name);
			pstmt.setString(2, id);
			
			result = pstmt.executeUpdate();
			System.out.println("이름이 변경되었습니다");
			
		} catch (Exception e) {
			result = -1;
			e.printStackTrace();
		} finally {
			CommonJDBCUtil.close(conn, pstmt);
		}
		return result;
	}
	
	public int updateAge(String id, int age) {
		int result = 0; 
		
		try {
			
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("UPDATE MEMBER ");
			sql.append("   SET AGE = ? ");
			sql.append(" WHERE ID = ? ");
			
			pstmt = conn.prepareStatement(sql.toString());
		
			pstmt.setInt(1, age);
			pstmt.setString(2, id);
			
			result = pstmt.executeUpdate();
			System.out.println("나이가 변경되었습니다");
			
		} catch (Exception e) {
			result = -1;
			e.printStackTrace();
		} finally {
			CommonJDBCUtil.close(conn, pstmt);
		}
		return result;
	}
	
	public int updatePw(String id, String password) {
		int result = 0; 
		
		try {
			
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("UPDATE MEMBER ");
			sql.append("   SET PASSWORD = ? ");
			sql.append(" WHERE ID = ? ");
			
			pstmt = conn.prepareStatement(sql.toString());
			
			pstmt.setString(1, password);
			pstmt.setString(2, id);
			
			result = pstmt.executeUpdate();
			System.out.println("비밀번호가 변경되었습니다");
			
		} catch (Exception e) {
			result = -1;
			e.printStackTrace();
		} finally {
			CommonJDBCUtil.close(conn, pstmt);
		}
		return result;
	}

	
	public int login(String uid, String upw) {
		try {
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("SELECT PASSWORD");
			sql.append("  FROM MEMBER ");
			sql.append(" WHERE ID = ?");
			pstmt = conn.prepareStatement(sql.toString());
			
			pstmt.setString(1, uid);
			
			rs = pstmt.executeQuery();
			if(rs.next()) {
				if (rs.getString(1).contentEquals(upw)) {
					return 1; // 로그인 성공
				} else {
					return 0; //비밀번호 불일치
				}
			}
			return -1; //아이디가 없음

		} catch (Exception e) {
			e.printStackTrace();
		}
		return -2; //DB오류
	}
	
	//아이디 일치 체크
	public boolean idCheck(String uid) {
		try {
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("SELECT COUNT(*)");
			sql.append("  FROM MEMBER ");
			sql.append(" WHERE ID = ?");
			pstmt = conn.prepareStatement(sql.toString());
			
			pstmt.setString(1, uid);
			
			rs = pstmt.executeQuery();
			if(rs.next()) {
				return rs.getInt(1) > 0;
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
	        CommonJDBCUtil.close(conn, pstmt, rs);
	    }
	    return false;
	}
	
}
public class ReservationDAO {
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;
	
	Scanner scan = new Scanner(System.in);

	//예약 추가
	public int insertReservation(String model, String user_id, Date startDate, Date endDate, String reserveDate, int totalPrice, String carId) {
		int result = 0;
		
		try {            
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("INSERT INTO RESERVATION ");
			sql.append("  (RESERVATION_ID, USER_ID, CAR_ID, START_DATE, END_DATE, TOTAL_PRICE, RESERVE_DATE) ");
			sql.append("  VALUES (RESERVE_SEQ.NEXTVAL, ?, ?, ?, ?, ?, ?) ");
			pstmt = conn.prepareStatement(sql.toString());
	
			pstmt.setString(1, user_id);
			pstmt.setString(2, carId);
			pstmt.setDate(3, startDate);
			pstmt.setDate(4, endDate);
			pstmt.setInt(5, totalPrice);
			pstmt.setString(6, reserveDate);
			
			result = pstmt.executeUpdate();
			System.out.println("예약되었습니다");
			
		} catch (Exception e) {
			System.out.println("[예외발생(예약추가)] " + e.getMessage());
			System.out.println(e.getLocalizedMessage());
			e.printStackTrace();
		} finally {
			CommonJDBCUtil.close(conn, pstmt);
		}
		
		return result;
	}
	
		//가격 찾는 메소드
	   public int findPriceByModel(int no) {
	        int price = 0; 
	        try {
		        conn = CommonJDBCUtil.getConnection();
		        
				StringBuilder sql = new StringBuilder();
				sql.append("SELECT PRICE ");
				sql.append("  FROM CAR ");
				sql.append("  WHERE CAR_NO = ? ");
				
				pstmt = conn.prepareStatement(sql.toString());
				
				pstmt.setInt(1, no);
				
				rs = pstmt.executeQuery();
				
		        if (rs.next()) {
		            price = rs.getInt("PRICE");
		        }
		        
		    } catch (Exception e) {
		        System.out.println("[예외발생] " + e.getMessage());
		    } finally {
		        CommonJDBCUtil.close(conn, pstmt, rs);
		    }

	        return price;
	    }

	    // CAR_NO에 해당하는 car_id를 찾는 메서드
	    public String findCarIdByModel(int no) {
	        String carId = " "; 
	        try {
		        conn = CommonJDBCUtil.getConnection();
		        
				StringBuilder sql = new StringBuilder();
				sql.append("SELECT CAR_ID ");
				sql.append("  FROM CAR ");
				sql.append("  WHERE CAR_NO = ? ");
				
				pstmt = conn.prepareStatement(sql.toString());
				
				pstmt.setInt(1, no);
				
				rs = pstmt.executeQuery();
				
		        // 쿼리 결과에서 car_id를 가져옵니다.
		        if (rs.next()) {
		            carId = rs.getString("CAR_ID");
		        }
		        
		    } catch (Exception e) {
		        System.out.println("[예외발생] " + e.getMessage());
		    } finally {
		        CommonJDBCUtil.close(conn, pstmt, rs);
		    }
		        return carId;
	    }
	    
	    // CAR_NO에 해당하는 car_model를 찾는 메서드
	    public String findCarModelByNo(int no) {
	        String carId = " "; 
	        try {
		        conn = CommonJDBCUtil.getConnection();
		        
				StringBuilder sql = new StringBuilder();
				sql.append("SELECT MODEL ");
				sql.append("  FROM CAR ");
				sql.append("  WHERE CAR_NO = ? ");
				
				pstmt = conn.prepareStatement(sql.toString());
				
				pstmt.setInt(1, no);
				
				rs = pstmt.executeQuery();
				
		        // 쿼리 결과에서 car_id를 가져옵니다.
		        if (rs.next()) {
		            carId = rs.getString("MODEL");
		        }
		        
		    } catch (Exception e) {
		        System.out.println("[예외발생] " + e.getMessage());
		    } finally {
		        CommonJDBCUtil.close(conn, pstmt, rs);
		    }
		        return carId;
	    }
	

	//회원 예약 데이터 조회
	public List<ReservationVO> selectReservation(String memberId) {
		List<ReservationVO> list = null;
		
		try {
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("SELECT RESERVATION_ID, USER_ID, CAR_ID, START_DATE, END_DATE, TOTAL_PRICE, RESERVE_DATE");
			sql.append("  FROM RESERVATION ");
			sql.append("  WHERE USER_ID = ? ");
			
			pstmt = conn.prepareStatement(sql.toString());
			
			pstmt.setString(1, memberId);
			
			rs = pstmt.executeQuery();
			
			list = new ArrayList<ReservationVO>();
	 		
			while (rs.next()) {
				ReservationVO vo = new ReservationVO(
						rs.getInt("RESERVATION_ID"), 
						rs.getString("USER_ID"),
						rs.getString("CAR_ID"),
						rs.getDate("START_DATE"),
						rs.getDate("END_DATE"),
						rs.getInt("TOTAL_PRICE"),
						rs.getDate("RESERVE_DATE"));
				list.add(vo);
			}
			
		} catch (Exception e) {
			System.out.println("[예외발생] " + e.getMessage());
		} finally {
			CommonJDBCUtil.close(conn, pstmt, rs);
		}
		
		return list;
	}
	

	
	//예약 목록 삭제
	public int cancel(int reservation_id) {
		int result = 0; 
		
		try {	
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("DELETE FROM RESERVATION");
			sql.append(" WHERE RESERVATION_ID = ? ");

			pstmt = conn.prepareStatement(sql.toString());
			
			pstmt.setInt(1, reservation_id);
			
			result = pstmt.executeUpdate();
			System.out.println("예약 정보가 삭제되었습니다");
			
		} catch (Exception e) {
			result = -1;
			e.printStackTrace();
		} finally {
			CommonJDBCUtil.close(conn, pstmt);
		}
		return result;
	}


}
public class ScheduleDAO {
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;
	
	//날짜 선택 후 가능한 차량 조회
	public List<ScheduleVO> selectCar(String startDateStr, String endDateStr) {
		List<ScheduleVO> list = null;
		
		try {
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("SELECT CAR_NO, MODEL ");
			sql.append("  FROM CAR ");
			sql.append("  WHERE CAR_ID NOT IN (SELECT R.CAR_ID ");
			sql.append("   FROM RESERVATION R ");
			sql.append("   WHERE TO_DATE(?, 'YYYY-MM-DD') BETWEEN R.START_DATE AND R.END_DATE ");
			sql.append("   OR TO_DATE(?, 'YYYY-MM-DD') BETWEEN R.START_DATE AND R.END_DATE)");
			sql.append("   ORDER BY CAR_NO");
			pstmt = conn.prepareStatement(sql.toString());
			
			pstmt.setString(1, startDateStr);
			pstmt.setString(2, endDateStr);
			
			rs = pstmt.executeQuery();
			
			list = new ArrayList<ScheduleVO>();
			
			while (rs.next()) {
				ScheduleVO vo = new ScheduleVO(
						rs.getInt("CAR_NO"),
						rs.getString("MODEL"));
				list.add(vo);
			}
			
		} catch (Exception e) {
			System.out.println("[예외발생] " + e.getMessage());
		} finally {
			CommonJDBCUtil.close(conn, pstmt, rs);
		}
		
		return list;
	}
	
	//차량 선택 후 총 가격 조회
	public ScheduleVO selectPrice(String startDateStr, String endDateStr, int no) {
		ScheduleVO vo = null;
		try {
			conn = CommonJDBCUtil.getConnection();
			
			StringBuilder sql = new StringBuilder();
			sql.append("SELECT (PRICE * (TO_DATE(?, 'YYYY-MM-DD') - "
					+ "TO_DATE(?, 'YYYY-MM-DD'))) AS TOTAL_PRICE ");
			sql.append("  FROM SCHEDULE ");
			sql.append(" WHERE CAR_NO = ? ");
			pstmt = conn.prepareStatement(sql.toString());
			
			pstmt.setString(1, endDateStr);
			pstmt.setString(2, startDateStr);
			pstmt.setInt(3, no);
			
			rs = pstmt.executeQuery();
			
			if (rs.next()) {
			    int totalPrice = rs.getInt("TOTAL_PRICE"); // ResultSet에서 "TOTAL_PRICE" 값을 가져옴
			    vo = new ScheduleVO(totalPrice); // ScheduleVO 객체를 생성할 때 totalPrice 값을 전달
			    //System.out.println(vo); 예약 가능 차량 [null] 총 금액: 168000원?
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			CommonJDBCUtil.close(conn, pstmt, rs);
		}
		
		return vo;
	}
}

public class CarService {
	private CarDAO cd = new CarDAO();
	private MemberDAO md = new MemberDAO();
	private ReservationDAO rd = new ReservationDAO();
	private ScheduleDAO sd = new ScheduleDAO();
	
	// *************** 회원 관련 ***************
	
	//새 회원 등록
	public int signUp(String memberId, String memberPw, String memberName, Integer memberAge) {
	    if (idCheck(memberId)) {
	        System.out.println("이미 존재하는 아이디입니다. 다른 아이디를 입력해주세요.");
	        return 0;
	    } else {
	        int newMember = md.insert(memberId, memberPw, memberName, memberAge);
	        return newMember;
	    }
	}
	
	//회원 정보 조회
	public MemberVO selectOne(String memberId, String memberPw) {
		if (idCheck(memberId)) {
			MemberVO member = md.selectOne(memberId, memberPw);
			return member;
		} else {
	    	System.out.println("아이디 불일치");
	    	return null;
	    }
	}
	
	//회원 나이 수정
	public int updateAge(String memberId, Integer memberAge) {
		if (idCheck(memberId)) {
			int age = md.updateAge(memberId, memberAge);
			return age;
		} else {
	    	System.out.println("아이디 불일치");
	    	return 0;
	    }
	}
	
	//회원 이름 수정
	public int updateName(String memberId, String memberName) {
		if (idCheck(memberId)) {
			int name = md.updateName(memberId, memberName);
			return name;
	    } else {
	    	System.out.println("아이디 불일치");
	    	return 0;
	    }
	}
	
	//회원 비밀번호 수정
	public int updatePw(String memberId, String memberPw) {
		if (idCheck(memberId)) {
			int pw = md.updatePw(memberId, memberPw);
			return pw;
		} else {
	    	System.out.println("아이디 불일치");
	    	return 0;
	    }
	}
	
	//회원 정보 삭제
	public int signOut(String memberId, String memberPw) {
		if (idCheck(memberId)) {
			int signout = md.delete(memberId, memberPw);
			return signout;
		} else {
	    	System.out.println("아이디 불일치");
	    	return 0;
	    }
	}
	
	//로그인 정보
	public int login(String memberId, String memberPw) {
		if (idCheck(memberId)) {
			int result = md.login(memberId, memberPw);
			return result;
		} else {
	    	System.out.println("아이디 불일치");
	    	return 0;
	    }
	}

	
	//아이디 체크
	public boolean idCheck(String memberId) {
		boolean result = md.idCheck(memberId);
		return result;
	}
	
	// ************** 차량 예약 관련 ***************
	
	//모든 차량 정보 조회
	public List<CarVO>selectAll(){
		List<CarVO> cList = cd.selectAll();
		
		return cList;
	}
	
	//날짜 선택 후 예약 가능 차량 조회
	public List<ScheduleVO> selectCal(String startDateStr, String endDateStr){
		List<ScheduleVO> sList = sd.selectCar(startDateStr, endDateStr);
		return sList;
	}
	
	
	//차량 선택 후 가격 조회
	public ScheduleVO selectPrice(String startDateStr, String endDateStr, int no) {
		ScheduleVO totalPrice = sd.selectPrice(startDateStr, endDateStr, no);
		return totalPrice;
	}
	
	//예약 신청
	public int insertReservation(String model, String user_id, Date startDate, Date endDate, String reserveDate, int totalPrice, String carId) {
		int newReservation = rd.insertReservation(model, user_id, startDate, endDate, reserveDate, totalPrice, carId);
		return newReservation;
	}
	
    //String을 DATE 형식으로 변환
    public Date stringToDate(String DateStr) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
        java.util.Date parsedDate;
		try {
			parsedDate = dateFormat.parse(DateStr);
			java.sql.Date changeDate = new java.sql.Date(parsedDate.getTime());
	        return changeDate;
		} catch (ParseException e) {
			System.out.println("날짜 형식에 맞지 않음 (예:2024/03/01)");
		}
		return null;
    }

    //총 가격 구하기
    public int calculateTotalPrice(int no, String startDateStr, String endDateStr) {
    	DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
        LocalDate startDate = LocalDate.parse(startDateStr, formatter);
        LocalDate endDate = LocalDate.parse(endDateStr, formatter);
        
        int price = rd.findPriceByModel(no);
        long diffDays = ChronoUnit.DAYS.between(startDate, endDate);
        return (int) (price * diffDays);
    }
	
    //CAR_no로 car Id 찾기
	public String findCarId(int no) {
		String carId = rd.findCarIdByModel(no);
		return carId;
	}
	
    //car_no로 모델명 찾기
	public String findCarModel(int no) {
		String carId = rd.findCarModelByNo(no);
		return carId;
	}
    
	// 예약 정보 조회
	public List<ReservationVO> selectReservation(String memberId) {
		List<ReservationVO> rList = rd.selectReservation(memberId);
		return rList;
	}
	
	//차량 예약 취소
	public int cancel(int reservation_id) {
		int cancel = rd.cancel(reservation_id);
		return cancel;
	}

}
public class RentalCarView {
	
	//차 목록 출력 뷰
	public void displayCar(List<CarVO> cList) {
		if(cList != null) {
			for(CarVO c : cList) {
				System.out.println(c);
			}
		}else {
			System.out.println("차 목록을 조회할 수 없습니다.");
		}
	}
	
	//날짜 목록 출력 뷰
	public void displayCal(List<ScheduleVO> sList) {
		if(sList != null) {
			for(ScheduleVO s : sList) {
				System.out.println(s);
			}
		}else {
			System.out.println("해당 날짜에 예약 가능한 차량이 없습니다.");
		}
	}
	
	//가격 출력 뷰
	public void displayPrice(ScheduleVO scheduleVO) {
		System.out.println("총 금액: " + scheduleVO.getTotalPrice() + "원");
	}
	
	//예약 목록 출력 뷰
	public void displayReserve(List<ReservationVO> rList) {
		if(rList != null) {
			for(ReservationVO r : rList) {
				System.out.println(r);
			}
		}else {
			System.out.println("예약 목록이 없습니다.");
		}
	}
	
	//로그인 성공 실패 뷰
	CarService cs = new CarService();
	public void displayLogin(String memberId, String memberPw) {
		int result = cs.login(memberId, memberPw);
		switch(result) {
		case 0 : System.out.println("비밀번호 불일치");
			break;
		case 1 : System.out.println("로그인 성공");
			break;
		case -1 : System.out.println("존재하지 않는 아이디"); 
			break;
		case -2 : System.out.println("DB 오류");
			break;
		}
	}
	
}
public class RentalcarMenu2 {
	CarService cs = new CarService();
	RentalCarController cc = new RentalCarController();
	Scanner sc = new Scanner(System.in);
	
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
	Date today = new Date(System.currentTimeMillis());
	String now = today.toString();
	
	public void rentcarMenu() {
		while(true) {
			System.out.println("***FIVE RENTAL CAR***");
			System.out.println("1. 차량조회");
			System.out.println("2. 예약신청");
			System.out.println("3. 예약조회/취소");
			System.out.println("4. 내정보");
			System.out.println("5. 회원가입");
			System.out.println("0. 종료");
			
			int menu = 0;
			
			String input = sc.nextLine();
			if (!input.isEmpty()) {
			    menu = Integer.parseInt(input);
			} else {
			}
			
			switch(menu) {
			case 0 : 
				break;
			case 1 : cc.selectCar();
				break;
			case 2 : try {
				rental();
			} catch (Exception e) {
				break;
			}
			break;
			case 3 : selectDelete();
				break;
			case 4 : myInfo();
				break;
			case 5 : signUp();
			break;
			}
		}
	}
	
	public void myInfo() {
		while(true) {
			System.out.println("***내 정보***");
			System.out.println("1. 내 정보 조회");
			System.out.println("2. 이름 변경");
			System.out.println("3. 비밀번호 변경");
			System.out.println("4. 나이 변경");
			System.out.println("5. 회원 탈퇴");
			System.out.println("0. 뒤로가기");
			
//			int info = Integer.parseInt(sc.nextLine());		
			String input = sc.nextLine();
			int info;

			if (!input.isEmpty()) {
				
			    info = Integer.parseInt(input);
				
				
			switch(info) {
			case 0 :
				return;
			case 1 : cs.selectOne(inputMemberId(), inputMemberPw());
				break;
			case 2 : cs.updateName(inputMemberId(), inputMemberName());
				break;
			case 3 : cs.updatePw(inputMemberId(), inputMemberPw());
				break;
			case 4 : cs.updateAge(inputMemberId(), inputMemberAge());
				break;
			case 5 : cs.signOut(inputMemberId(), inputMemberPw());
				break;
			}

			} else {
			    //System.out.println("입력이 비어 있습니다. 유효한 값을 입력해주세요.");
			    // 유효한 값이 아니므로 적절한 값을 사용하거나 예외 처리를 진행해야 합니다.

			}
		}
	}
		
	//차량 예약 조회/취소
	public void selectDelete() {

		String memberId = inputMemberId();
		String memberPw = inputMemberPw();

		if(!memberId.isEmpty() && !memberPw.isEmpty()) {
			if(cs.login(memberId, memberPw) == 1) {
				cc.selectRerservation(memberId, memberPw);
				System.out.println();
				System.out.println("***********");
				System.out.println("1. 예약 취소");
				System.out.println("0. 뒤로가기");
				int no = Integer.parseInt(sc.nextLine());
				
				switch(no) {
				case 0 :
					break;
				case 1 : cs.cancel(inputReservationId());
					break;
				}
			}
			else {
				System.out.println("회원 정보가 잘못되었습니다. 처음부터 다시하세요");
			}
		} else {
			System.out.println("아이디와 비밀번호를 모두 입력해주세요.");
		}	
		
	}

	public void rental() {
	    boolean isValidSelection = false;
	    String startDateStr = "";
	    String endDateStr = "";
	    Date startDate;
	    Date endDate;
	    
		while(!isValidSelection) {
			System.out.println("시작일을 입력하세요(예:2024/03/01): ");
		    startDateStr = sc.nextLine();
		    startDate = cs.stringToDate(startDateStr);
			if (startDateStr.isEmpty()) {
				System.out.println("시작일이 입력되지 않았습니다. 다시 입력하세요.");
				continue;
			}
			
			int compare = startDate.compareTo(today); //현재 날짜와 시작일 비교
			if (compare < 0) {
				System.out.println("시작일은 현재 날짜 이후로 입력 가능합니다.");
				continue;
			}
			
			System.out.println("반납일을 입력하세요(예:2024/03/01): ");
		    endDateStr = sc.nextLine();
		    endDate = cs.stringToDate(endDateStr);
			if (endDateStr.isEmpty()) {
				System.out.println("반납일이 입력되지 않았습니다. 다시 입력하세요.");
				continue;
			} 
			
			int compare2 = endDate.compareTo(today); //현재 날짜와 반납일 비교
			if (compare2 < 0) {
				System.out.println("반납일은 현재 날짜 이후로 입력 가능합니다.");
				continue;
			}
			
			int compare3 = endDate.compareTo(startDate);
			if (compare3 < 0) {
				System.out.println("반납일은 시작일 이후로 입력 가능합니다.");
				continue;
			}
			else {
	    

		    //날짜 선택 후 예약 가능한 차량 조회
		    System.out.println("[ 예약 가능한 차량 ]");
			List<ScheduleVO> availableCars = cc.selectCals(startDateStr, endDateStr);
			
		    if (availableCars.isEmpty()) {
		        System.out.println("예약 가능한 차량이 없습니다. 다른 날짜를 선택해주세요.");
		        return;
		    } else {
		        for (ScheduleVO car : availableCars) {
	//	            System.out.println(car.getCar_no() + ": " + car.getModel());
		        }
		    }
			
		    System.out.println();
	
		    int no = -1;
		    while (!isValidSelection) {
		        System.out.print("번호를 입력하세요: ");
		        String input = sc.nextLine();
	
		        if (input.isEmpty()) {
		            System.out.println("번호를 입력하지 않으셨습니다. 다시 선택해주세요.");
		            continue;
		        }
	
		        no = Integer.parseInt(input);
		        // 사용자가 선택한 번호가 예약 가능한 차량 목록에 있는지 확인
		        for (ScheduleVO car : availableCars) {
		            if (car.getCar_no() == no) {
		                isValidSelection = true;
		                break;
		            }
		        	
		        }
		        if (!isValidSelection) {
		            System.out.println("예약 가능한 차량 목록에 없는 번호입니다. 다시 선택해주세요.");
		        }
		    }
			
			System.out.println();
	
			// 차량 선택 후 가격 조회
			cc.selectPrice(startDateStr, endDateStr, no);
			int totalPrice = cs.calculateTotalPrice(no, startDateStr, endDateStr);
			
			//reserveDate 
			LocalDate now = LocalDate.now();                
			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yy/MM/dd");         
			String reserveDate = now.format(formatter);      
	
			String carId = cs.findCarId(no);
			String model = cs.findCarModel(no);
			
			//ID, PASSWORD
		    isValidSelection = false;
		    while (!isValidSelection) {
				System.out.print("사용자 ID: ");
				String userId = sc.nextLine();
	
		        if (userId.isEmpty()) {
		            System.out.println("아이디를 입력하지 않으셨습니다. 다시 입력해주세요.");
		            continue;
		        }
		        
				System.out.print("사용자 PW: ");
				String userPw = sc.nextLine();
	
		        if (userPw.isEmpty()) {
		            System.out.println("비밀번호를 입력하지 않으셨습니다. 다시 입력해주세요.");
		            continue;
		        }
	
		        if(cs.login(userId, userPw) == 1) {
					cs.insertReservation(model, userId, startDate, endDate, reserveDate, totalPrice, carId);
					isValidSelection = true;
					break;
				} else {
					System.out.println("예약이 정상적으로 이루어지지 않았습니다.");
				}
		        
		        if (!isValidSelection) {
		            System.out.println("유효하지 않은 회원입니다. 다시 입력해주세요.");
		        }
		    }
			} 
			}

	}
	
	
	//회원가입
	public void signUp()
	{	
		cs.signUp(inputMemberId(), inputMemberPw(), inputMemberName(), inputMemberAge());
	}
	
	public String inputMemberId() {
		System.out.print("회원 아이디:");
		return sc.nextLine();
	}
	
	public String inputMemberPw() {
		System.out.print("회원 비밀번호:");
		return sc.nextLine();
	}	
	
	public String inputMemberName() {
		System.out.print("회원 이름 : ");
		return sc.nextLine();
	}
	
	public int inputMemberAge() {
		System.out.print("회원 나이 : ");
		return sc.nextInt();
	}
	
	public String inputModel() {
		System.out.print("모델명 : ");
		return sc.nextLine();
	}
	
	public int inputReservationId() {
		System.out.println("예약번호: ");
		return sc.nextInt();
	}
}

1개의 댓글

comment-user-thumbnail
2024년 5월 29일

코드 공유 감사합니다!!

답글 달기