JSP 쇼핑몰 만들기
65. 쇼핑몰 - 차량 구매하기
차량예약하기 버튼을 누르게 되면 정보가 넘겨진다.
CarReserveResult.jsp로 넘기면된다.
전부다 requeset받는 것은 불편하다.
bean클래스를 만들어버리면 편리하다.
guest거나 대여일이 이전이면 불가능하게 해주자.
차량이미지도 띄워주는게 좋다. db접근에서 가져오는 것으로 하자.
65.1 CarReserveBean
Date타입으로 받아야하나 String으로 받아야하나
일단 넘어오는 것은 String이다.
그런데 꺼내서 사용할때 데이터타입이 값을 받을 수 없다.
그래서 String타입으로 받아줘야한다.
public class CarReserveBean {
private int no;
private int qty;
private int dday;
private String rday;
private int usein;
private int usewifi;
private int usenavi;
private int useseat;
//getter setter들
}65.2 CarReserveResult.jsp
guest나 현재 날짜를 비교하기
guest가 아닐 경우 로그인 페이지를 하게 하자.
top따로 컴파일하는 것이기 때문에 null값으로 비교를 해야한다.
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="rbean" class="db.CarReserveBean">
<jsp:setProperty name="rebean" property="*"/>
</jsp:useBean>
<%
String id = (String) session.getAttribute("id");
if (id == null){
%>
<script type="text/javascript">
alert("로그인 후 예약이 가능합니다.");
</script>
<%
response.sendRedirect("RentcarMain.jsp?center=MemberLogin.jsp");
}
%>66. 차량 구매하기 - 로그인편
임의적으로 이미잇는 Member 태그로 하자.
<form action="MemberLoginProc.jsp" method="post">
<table id="table" border="1" >
<tr height="100">
<td align="center" colspan="2">
<font size="6" color="gray">로그인</font>
</td>
</tr>
<tr height="40">
<td width="120" align="center">아이디</td>
<td width="180"> <input type="text" name="id" size="15" /></td>
</tr>
<tr height="40">
<td width="120" align="center">패스워드</td>
<td width="180"> <input type="password" name="pass" size="15" /></td>
</tr>
<tr height="40">
<td colspan="2" align="center">
<input type="submit" value="로그인"/>
</td>
</tr>
</table>
</form>66.2 로그인 확인
간단하게 아이디와 비밀번호가 있다면 인트값을 받도록 하자.
public int getMember(String id, String pass) {
int result = 0; //회원없음
getCon();
try {
String sql = "SELECT COUNT(ID) FROM MEMBER WHERE ID = ? AND PASS1 = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, pass);
rs = pstmt.executeQuery();
if (rs.next()) {
result = rs.getInt(1);
}
} catch(Exception e) {
e.printStackTrace();
}
return result;
}67. 차량 구매하기 - 날짜비교 및 결과
67.1 날짜비교
날짜가 이전날짜보다 크다면 안되게 하기
날짜를 2016-4-4 포맷해주는 클래스 선언하자.
SimpleDateFormat을 사용하면 스트링타입을 파싱해서 Date타입으로 바꿀 수있다.
Date타입이라면 날짜 비교 메소드를 사용할 수 있다.
compareTo메소드를 나오면 0,1,-1가 나온다.
예약하려는 날짜보다 현재 날짜가 크다면 -1
같다면 0 예약날짜가 현재날짜보다 크다면 1
<%
//날짜비교
Date d1 = new Date();
Date d2 = new Date();
//날짜를 2016-4-4 포맷해주는 클래스 선언
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
d1 = sdf.parse(rbean.getRday());
d2 = sdf.parse(sdf.format(d2));
//날짜비교 메소드
int compare = d1.compareTo(d2);
//예약하려는 날짜보다 현재 날짜가 크다면 -1
if (compare < 0 ){ //오늘보다 이전 날짜 선택시
%>
<script type="text/javascript">
alert("현재 시스템 날짜보다 이전 날짜는 선택할수 없습니다.");
history.go(-1);
</script>
<%
}
%>67.2 테이블
회원 ID도 저장해야하니 빈클래스를 수정해주자.
public class CarReserveBean {
private int reserveno;
private String id;
private int no;
private int qty;
private int dday;
private String rday;
private int usein;
private int usewifi;
private int usenavi;
private int useseat;
//getter and setter들
}68. 예약 및 결과
68.1 예약을 저장하는 메소드 예약번호는 알아서 늘어나게 설정했다.
//하나의 예약번호를 저장하는 메소드
public void setReserveCar(CarReserveBean bean) {
getCon();
try {
String sql = "INSERT INTO carreserve(ID, NO, QTY, DDAY, RDAY, USEIN, USEWIFI, USENAVI, USESEAT) "
+ "VALUES(?, ? , ?, ?, ?, ?, ?, ?, ?)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, bean.getId());
pstmt.setInt(2, bean.getNo());
pstmt.setInt(3, bean.getQty());
pstmt.setInt(4, bean.getDday());
pstmt.setString(5, bean.getRday());
pstmt.setInt(6, bean.getUsein());
pstmt.setInt(7, bean.getUsewifi());
pstmt.setInt(8, bean.getUsenavi());
pstmt.setInt(9, bean.getUseseat());
pstmt.executeUpdate();
con.close();
} catch(Exception e) {
e.printStackTrace();
}
}68.2 예약처리
결과적으로 아무런 문제가 없다면 데이터 저장후 결과 보여줘야한다.
<%
//아이디 값이 빈클래스에 없기에 가져오기
String uid = (String) session.getAttribute("id");
rbean.setId(uid);
//db에 저장
RentcarDAO rdao = new RentcarDAO();
rdao.setReserveCar(rbean);
//차량정보 얻어오기
CarListBean cbean = rdao.getOneCar(rbean.getNo());
System.out.println(rbean.getNo());
System.out.println(rbean.getQty());
System.out.println(rbean.getUsein());
//차량금액
int totalCar = cbean.getPrice() * rbean.getQty() * rbean.getDday();
//욥션금액
int usein = 0;
if (rbean.getUsein() == 1 ){
usein = 10000;
}
int usewifi = 0;
if (rbean.getUsein() == 1 ){
usewifi = 10000;
}
int useseat = 0;
if (rbean.getUsein() == 1 ){
useseat = 10000;
}
int totalOption = rbean.getQty() * rbean.getDday() * (usein + usewifi + useseat);
%>
<div align="center">
<table id="table">
<tr height="100">
<td align="center" >
<font size="6" color="gray">차량 예약 완료 화면</font>
</td>
</tr>
<tr>
<td align="center" >
<img src="img/<%=cbean.getImg() %>" width="470" alt="" />
</td>
</tr>
<tr height="50">
<td align="center" >
<font size="5" color="red">차량 총 예약 금액<%= totalCar%></font>
</td>
</tr>
<tr height="50">
<td align="center" >
<font size="5" color="red">차량 총 옵션 금액<%= totalOption %></font>
</td>
</tr>
<tr height="50">
<td align="center" >
<font size="5" color="red">차량 총 금액<%= totalCar + totalOption %></font>
</td>
</tr>
</table>
</div>69. 차량 예약확인
로그인이 되어 있는 상태라면 오늘 날짜보다 이후인 예약내역을 보여줘야한다.
69.1 CarViewBean
join문을 사용해서 이미지도 뽑아주기 위한 bean클래스를 따로 만들어주자.
public class CarViewBean {
private String name;
private int price;
private String img;
private int qty;
private int dday;
private String rday;
private int usein;
private int usewifi;
private int usenavi;
private int useseat;
//getter and setter
}69.2 예약목록 불러오기
//회원의 예약정보를 리턴하는 메소드
public List<CarViewBean> getAllReserve(String id) {
List<CarViewBean> list = new ArrayList<>();
getCon();
try {
String sql = "SELECT * FROM RENTCAR NATURAL JOIN carreserve WHERE date_format(RDAY, '%Y-%m-%d' ) > NOW() AND ID= ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
while (rs.next()) {
CarViewBean bean = new CarViewBean();
bean.setName(rs.getString("NAME"));
bean.setPrice(rs.getInt("PRICE"));
bean.setImg(rs.getString("IMG"));
bean.setQty(rs.getInt("QTY"));
bean.setDday(rs.getInt("DDAY"));
bean.setRday(rs.getString("RDAY"));
bean.setUsein(rs.getInt("USEIN"));
bean.setUsewifi(rs.getInt("USEWIFI"));
bean.setUsenavi(rs.getInt("USENAVI"));
bean.setUseseat(rs.getInt("USESEAT"));
list.add(bean);
}
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}'기초단계 > JSP&Servlet' 카테고리의 다른 글
| 2023.04.03 JSP (0) | 2023.04.03 |
|---|---|
| 2023.04.02 JSP (0) | 2023.04.02 |
| 2023.03.29 JSP (0) | 2023.03.29 |
| 2023.03.28 JSP (0) | 2023.03.29 |
| 2023.03.27 JSP (0) | 2023.03.27 |