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();
}
}
코드 공유 감사합니다!!