개발 ON
  • [정보처리산업기사 | 실기] 백신예약 프로그램
    2023년 08월 16일 12시 14분 09초에 업로드 된 글입니다.
    작성자: 이주여이

    1. 백신예약번호 검색시, 예약번호에 해당하는 주민이 있는 경우와 없는 경우 페이지가 다르게 출력되어야한다.

    조회 페이지에서 예약번호에 해당하는 주민이 있는 경우와 없는 경우의 페이지가 다르게 출력되어야한다.

    어떻게할지 생각해보다가 if문과 else문 내에 스크립틀릿을 구분해 구현하면 다르게 출력되지 않을까 생각하고 만들었다.

     

    <%@page import="java.sql.Date"%>
    <%@page import="java.util.Formatter"%>
    <%@page import="java.text.SimpleDateFormat"%>
    <%@page import="java.sql.ResultSet"%>
    <%@page import="java.sql.PreparedStatement"%>
    <%@ include file="DB.jsp" %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="check.js"></script>
    </head>
    <body>
    <jsp:include page="header.jsp" />
    <%
    request.setCharacterEncoding("UTF-8");
    String resvno = request.getParameter("resvno");
    
    try {
    	String sql = "select v.resvno, j.name, j.jumin, h.hospname, to_char(v.resvdate, 'yyyy\"년\"mm\"월\"dd\"일\"'), v.resvtime, v.vcode, h.hospaddr " +
    					"from tbl_jumin_202108 j, tbl_vaccresv_202108 v, tbl_hosp_202108 h " +
    					"where j.jumin = v.jumin and v.hospcode = h.hospcode and v.resvno = ? " +
    					"group by v.resvno, j.name, j.jumin, h.hospname, v.resvdate, v.resvtime, v.vcode, h.hospaddr";
    	PreparedStatement pstmt = c.prepareStatement(sql);
    	pstmt.setString(1, resvno);
    	ResultSet rs = pstmt.executeQuery();
    	if(rs.next()) {
    		String gender = rs.getString(3).substring(7,8);
    		if(gender.equals("1")) {
    			gender = "남";
    		} else {
    			gender = "여";
    		}
    		String resvtime_ = rs.getString(6);
    		if(resvtime_.length() <= 3) {
    			resvtime_ = "0" + rs.getString(6);
    		}
    		String resvtime = resvtime_.substring(0,2) + ":" + resvtime_.substring(2,4);
    		String vcode = rs.getString(7);
    		switch(vcode) {
    		case"V001":
    			vcode = "A백신";
    			break;
    		case"V002":
    			vcode = "B백신";
    			break;
    		case"V003":
    			vcode = "C백신";
    			break;
    		}
    		String hospaddr = rs.getString(8);
    		switch(hospaddr) {
    		case"10":
    			hospaddr = "서울";
    			break;
    		case"20":
    			hospaddr = "대전";
    			break;
    		case"30":
    			hospaddr = "대구";
    			break;
    		case"40":
    			hospaddr = "광주";
    			break;
    		}
    %>
    
    <section>
    <h2>예약번호 <%=resvno %>님의 조회</h2>
    <form style="flex-direction: column;">
    <table border="1">
    <tr>
    <td>예약번호</td>
    <td>성명</td>
    <td>성별</td>
    <td>병원이름</td>
    <td>예약날짜</td>
    <td>예약시간</td>
    <td>백신코드</td>
    <td>병원지역</td>
    </tr>
    <tr>
    <td><%=rs.getString(1) %></td>
    <td><%=rs.getString(2) %></td>
    <td><%=gender %></td>
    <td><%=rs.getString(4) %></td>
    <td><%=rs.getString(5) %></td>
    <td><%=resvtime %></td>
    <td><%=vcode %></td>
    <td><%=hospaddr %></td>
    </tr>
    </table>
    <input type="button" value="돌아가기" onclick="location.href='search.jsp'" style="margin-top: 10px">
    </form>
    </section>
    <%
    	} else {
    %>
    <section>
    <h2>예약번호 <%=resvno %>로 조회된 결과가 없습니다.</h2>
    <form>
    <input type="button" value="홈으로" onclick="location.href='index.jsp'">
    </form>
    </section>
    <%
    	}
    } catch(Exception e) {
    	e.printStackTrace();
    }
    %>
    
    
    <jsp:include page="footer.jsp" />
    </body>
    </html>

     

    2. 백신예약건수를 모두 합쳐 출력한다.

    제일 밑에 추가 내용이 있다.
    참고한다면 여기 부분은 읽기만 하고 아래 참고 부분을 중점적으로 보자.
    <%@page import="java.security.interfaces.RSAKey"%>
    <%@page import="java.sql.ResultSet"%>
    <%@page import="java.sql.PreparedStatement"%>
    <%@ include file="DB.jsp" %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="check.js"></script>
    </head>
    <body>
    <jsp:include page="header.jsp" />
    
    <section>
    <h2>백신예약</h2>
    <form name="frm" action="action.jsp" method="post">
    <table border="1">
    <tr>
    <td>예약번호</td>
    <td>병원지역명</td>
    <td>접종예약건수</td>
    </tr>
    <%
    request.setCharacterEncoding("UTF-8");
    String sql = "select h.hospaddr, count(v.vcode) " +
    		"from tbl_hosp_202108 h " +
    		"left outer join tbl_vaccresv_202108 v " +
    		"on h.hospcode = v.hospcode " +
    		"group by h.hospaddr " +
    		"order by h.hospaddr";
    try {
    	PreparedStatement pstmt = c.prepareStatement(sql);
    	ResultSet rs = pstmt.executeQuery();
    	while(rs.next()) {
    		String city = rs.getString(1);
    		String sum_ = rs.getString(2);
    
    		switch(city) {
    		case"10":
    			city = "서울";
    			break;
    		case"20":
    			city = "대전";
    			break;
    		case"30":
    			city = "대구";
    			break;
    		case"40":
    			city = "광주";
    			break;
    		}
    %>
    <tr>
    <td><%=rs.getString(1) %></td>
    <td><%=city %></td>
    <td><%=rs.getString(2) %></td>
    </tr>
    <%
    	}
    } catch(Exception e) {
    	c.close();
    	e.printStackTrace();
    }
    %>
    <tr>
    <td colspan="2">총합</td>
    <%
    try {
    	PreparedStatement pstmt = c.prepareStatement(sql);
    	ResultSet rs = pstmt.executeQuery();
    	int result = 0;
    	while(rs.next()) {
    		String sum_ = rs.getString(2);
    		int sum = Integer.parseInt(sum_);
    		result += sum;
    	}
    %>
    <td><%=result %></td>
    <%
    } catch(Exception e) {
    	c.close();
    	e.printStackTrace();
    }
    %>
    </tr>
    </table>
    </form>
    </section>
    
    <jsp:include page="footer.jsp" />
    </body>
    </html>

    sql문은 공유 변수로 사용하기위해 스크립틀릿의 제일 상단으로 옮기고, 총합 부분은 try문을 한번 더 열어 구현했다.

     

    <tr>
    <td colspan="2">총합</td>
    <%
    try {
    	PreparedStatement pstmt = c.prepareStatement(sql);
    	ResultSet rs = pstmt.executeQuery();
    	int result = 0;
    	while(rs.next()) {
    		String sum_ = rs.getString(2);
    		int sum = Integer.parseInt(sum_);
    		result += sum;
    	}
    %>
    <td><%=result %></td>
    <%
    } catch(Exception e) {
    	c.close();
    	e.printStackTrace();
    }
    %>
    </tr>

    해당 소스코드가 첫번째 try문의 while문으로 들어갈 경우, rs.getString(2)의 값을 반복적으로 출력하기 때문에 원하는 출력 결과가 안나오고 try문을 2번으로 나눠 구현해야 가능했다.

    더 좋은 방법이 있을까 생각해봤지만 아직까진 잘 모르겠다.

     

    + 백신예약건수(2023-09-04)

    <%@page import="java.sql.ResultSet"%>
    <%@page import="java.sql.PreparedStatement"%>
    <%@ include file="db.jsp" %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <jsp:include page="header.jsp"></jsp:include>
    
    <section>
    	<form>
    		<table border="1">
    			<tr>
    				<td>병원지역</td>
    				<td>병원지역명</td>
    				<td>접종예약건수</td>
    			</tr>
    			<%
    			request.setCharacterEncoding("UTF-8");
    			String sql = "select h.hospaddr 병원지역, " +
    							"case h.hospaddr when '10' then '서울' when '20' then '대전' when '30' then '대구' when '40' then '광주' end 병원지역명, " +
    							"count(v.hospcode) 접종예약건수 " +
    							"from tbl_hosp_202108 h, tbl_vaccresv_202108 v " +
    							"where h.hospcode = v.hospcode " +
    							"group by h.hospaddr " +
    							"order by count(v.hospcode) desc";
    			PreparedStatement pstmt = c.prepareStatement(sql);
    			ResultSet rs = pstmt.executeQuery();
    			int sum = 0;
    			int result = 0;
    			while(rs.next()) {
    				String sum_ = rs.getString(3);
    				sum = Integer.parseInt(sum_);
    				result += sum;
    				%>
    				<tr>
    					<td><%=rs.getString(1) %></td>
    					<td><%=rs.getString(2) %></td>
    					<td><%=rs.getString(3) %></td>
    				</tr>
    				<%
    			}
    			%>
    				<tr>
    					<td colspan="2">총합</td>
    					<td><%=result %></td>
    				</tr>
    		</table>
    	</form>
    </section>
    
    <jsp:include page="footer.jsp"></jsp:include>
    </body>
    </html>
    댓글