Codemental

[일학습병행제 SW개발 L5] 외부평가 준비 및 자료(4) - 작업형 공개문제 풀이 본문

자격증/일학습병행제 SW L5

[일학습병행제 SW개발 L5] 외부평가 준비 및 자료(4) - 작업형 공개문제 풀이

s.a 2022. 6. 13. 00:45
반응형

[공개자료]SW개발_L5_20V1_2021-06-01.hwp
0.19MB

 

 

 

 

다들 작업형은 공개문제랑 비슷한 수준으로 나온다고 하니, 공개문제 중 가장 최신 파일을 풀어보고자 한다.

파일은 위에서 다운 받을 수 있다. 

 

[ 요구사항 ] 

 

[ 제 1과제 ] 데이터베이스 구현 실무

 

( 작업 1 ) DM발송목록 테이블을 생성하시오.

풀이 V

더보기
CREATE TABLE DM_TBL (
    dmno NUMBER(8) NOT NULL PRIMARY KEY,
    custid VARCHAR2(10),
    maildate DATE,
    contents VARCHAR2(13),
    dept CHAR(2),
    grade CHAR(1),
    canpain CHAR(2)
);

--COMMENT ON COLUMN [테이블명].[컬럼명] IS '[Comment]';
COMMENT ON COLUMN DM_TBL.dmno IS 'DM발송번호';
COMMENT ON COLUMN DM_TBL.custid IS '고객ID';
COMMENT ON COLUMN DM_TBL.maildate IS '발송일자';
COMMENT ON COLUMN DM_TBL.contents IS 'DM내용';
COMMENT ON COLUMN DM_TBL.dept IS '발송부서';
COMMENT ON COLUMN DM_TBL.grade IS '고객등급';
COMMENT ON COLUMN DM_TBL.canpain IS '캠페인구분';

-- 잘 생성 되었는지 확인 
DESC DM_TBL;

 

( 작업 2 ) 고객정보 테이블을 생성하시오.

풀이 V

더보기
CREATE TABLE bookinfo_tbl (
 custid VARCHAR2(10) NOT NULL PRIMARY KEY,
 author VARCHAR2(20),
 goods CHAR(2),
 phone VARCHAR2(13),
 email VARCHAR2(20),
 area VARCHAR2(20)
);

--COMMENT ON COLUMN [테이블명].[컬럼명] IS '[Comment]';
COMMENT ON COLUMN bookinfo_tbl.custid IS '고객아이디';
COMMENT ON COLUMN bookinfo_tbl.author IS '성명';
COMMENT ON COLUMN bookinfo_tbl.goods IS '관심상품';
COMMENT ON COLUMN bookinfo_tbl.phone IS '전화번호';
COMMENT ON COLUMN bookinfo_tbl.email IS '이메일';
COMMENT ON COLUMN bookinfo_tbl.area IS '거주지역';

-- 잘 생성 되었는지 확인 
DESC bookinfo_tbl;

 

( 작업 3 ) 샘플데이터를 참조하여 DM발송 내역정보와 고객정보 테이블에 데이터를 생성하시오.

[ DM발송내역 샘플 데이터]

 

[ 고객정보 샘플 데이터 ]

 

더보기
-- DM발송내역 샘플데이터 등록(DM_TBL)
INSERT INTO DM_TBL VALUES(1, 'aaa', TO_DATE('20171201'), '안녕하세요?','10', '1', 'C1');
INSERT INTO DM_TBL VALUES(2, 'bbb', TO_DATE('20171201'), '안녕하세요?','10', '2', 'C1');
INSERT INTO DM_TBL VALUES(3, 'ccc', TO_DATE('20171201'), '안녕하세요?','10', '3', 'C1');
INSERT INTO DM_TBL VALUES(4, 'ddd', TO_DATE('20171224'), '안녕하세요?','20', 'V', 'C2');
INSERT INTO DM_TBL VALUES(5, 'eee', TO_DATE('20171224'), '안녕하세요?','20', 'VV', 'C2');
INSERT INTO DM_TBL VALUES(6, 'fff', TO_DATE('20171224'), '안녕하세요?','30', '1', 'C3');

-- 제대로 등록되었는지 확인
SELECT * FROM DM_TBL;


-- 고객정보 샘플데이터 등록(bookinfo_tbl)
INSERT INTO bookinfo_tbl VALUES('aaa', '김고객','의류','010-1111-1111','aaa@korea.com','서울');
INSERT INTO bookinfo_tbl VALUES('bbb', '이고객','의류','010-1111-1112','bbb@korea.com','서울');
INSERT INTO bookinfo_tbl VALUES('ccc', '박고객','식료품','010-1111-1113','ccc@korea.com','경기');
INSERT INTO bookinfo_tbl VALUES('ddd', '홍고객','공산품','010-1111-1114','ddd@korea.com','대전');
INSERT INTO bookinfo_tbl VALUES('eee', '조고객','컴퓨터','010-1111-1115','eee@korea.com','대전');
INSERT INTO bookinfo_tbl VALUES('fff', '백고객','관광','010-1111-1116','fff@korea.com','울산');


-- 제대로 등록되었는지 확인
SELECT * FROM bookinfo_tbl;

 

 

( 작업 4 ) 고객발송내역 조회 SQL문을 작성하시오.

- 날짜 형식의 데이터는 아래와 같이 편집하여 출력한다.

 

더보기
SELECT A.dmno as 발송번호,  
       A.custid as 고객ID, 
       B.author as 고객명, 
       A.maildate as 발송일, 
       A.contents as 내용, 
       A.campain as 캠페인구분 
FROM DM_TBL A LEFT JOIN bookinfo_tbl B ON A.custid = B.custid

 

( 작업 5 ) 고객등록 입력 화면을 위해 고객정보저장을 위한 SQL을 작성하시오.

더보기
INSERT INTO bookinfo_tbl(?, ?, ?, ?, ?, ?);

 

( 작업 6 ) 지역별 DM 발송건수 통계를 구하는 SQL문을 작성 하시오.

더보기
SELECT B.area as 지역, COUNT(A.dmno) as 발송건수
FROM DM_TBL A LEFT JOIN bookinfo_tbl B ON A.custid = B.custid
GROUP BY B.area, A.dmno

 

 

[ 제 2과제 ] 통합 인터페이스 구현 실무

 

 

 

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>입력화면</title>
</html>
<body>
    <form action="result.jsp">
        <h1>제조사명 조회</h1>
        <table border="1">
            <tr>
                <td colspan="2">제품코드(4) 입력</td>
            </tr>
            <tr>
                <td>제품코드</td>
                <td><input name="code" value=""/></td>
            </tr>
            <tr>
                <td colspan="2"><button>확인</button></td>
            </tr>
        </table>
    </form>
</body>
</html>

result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
    import="kr.ac.kope.*"
%>
<%
    UserInfo user = new UserInfo("한국인", "1004","2019-10-31");

    ProductInfo product = new ProductInfo();

    String code = request.getParameter("code");
    product.setCode(code);
    product.find();
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>조회결과</title>
</head>
<body>
    <h1>제품코드 조회 결과</h1>
    <hr>
    <table border="1">
        <tr>
            <td>제조사 조회 결과</td>
        </tr>
        <tr>
            <td>제품코드</td>
            <td><%= product.getCode() %></td>
        </tr>
        <tr>
            <td>제조사명</td>
            <td><%= product.getVender() %>/td>
        </tr>
        <tr>
            <td>조회일시</td>
            <td><%= product.getDate() %></td>
        </tr>
    </table>
    <hr>
    <div>
        작성자 : <%= user.getName() %>  비번 : <%= user.getPassword() %>  작성일 : <%= user.getDate() %>
    </div>


</body>
</html>

 

UserInfo.java

package kr.ac.kope;

public class UserInfo {
    private String name;
    private String password;
    private String date;

    public UserInfo(String name, String password, String date){
        super();
        this.name = name;
        this.password = password;
        this.date = date;
    }

    public String getName(){
        return name;
    }
    public String setName(String name){
        thie.name = name;
    }
    public String getPassword(){
        return name;
    }
    public String setPassword(String password){
        thie.password = password;
    }
    public String getDate(){
        return date;
    }
    public String setData(String date){
        thie.date = date;
    }
}

 

ProductInfo.java

package kr.ac.kope;

public class ProductInfo {
    private String code;
    private String vender;
    private String date;

    public String getCode(){
        return code;
    }
    public String setCode(String code){
        thie.code = code;
    }
    public String getVender(){
        return vender;
    }
    public String setVender(String vender){
        thie.vender = vender;
    }
    public String getDate(){
        return date;
    }
    public String setData(String date){
        thie.date = date;
    }

    public void find(){
        HashMap<String, String> map = new HashMap<>();

        map.put("A100","삼성전자");
        map.put("A200","LG전자");
        map.put("A300","하이닉스");

        vender = map.get(code);
        if(vender == null){
            vender = "등록되지 않은 제품입니다!!";
        }
        date = new Date();
    }
}

 

 

[ 제 3과제 ] 서버프로그램 개발 실무

 

더보기
CREATE TABLE custon_01 (
    p_id VARCHAR2(10) NOT NULL PRIMARY KEY,
    p_pw VARCHAR2(10),
    c_name VARCHAR2(20),
    c_email VARCHAR2(20),
    c_tel VARCHAR2(14)
);

-- COMMENT ON COLUMN [테이블명].[컬럼명] IS '[Comment]';
COMMENT ON COLUMN custon_01.p_id IS '회원ID';
COMMENT ON COLUMN custon_01.p_pw IS '비번';
COMMENT ON COLUMN custon_01.c_name IS '회원명';
COMMENT ON COLUMN custon_01.c_email IS '회원email';
COMMENT ON COLUMN custon_01.c_tel IS '연락처';


-- 테이블 생성 잘 되었는지 확인
DESC custon_01;

INSERT INTO custon_01 VALUES('aaa', '1234','김회원','aaa@korea.com','010-111-1111');
INSERT INTO custon_01 VALUES('bbb', '1234','이회원','bbb@korea.com','010-111-1112');
INSERT INTO custon_01 VALUES('ccc', '1234','박회원','ccc@korea.com','010-111-1113');
INSERT INTO custon_01 VALUES('ddd', '1234','오회원','ddd@korea.com','010-111-1114');
INSERT INTO custon_01 VALUES('eee', '1234','최회원','eee@korea.com','010-111-1115');
INSERT INTO custon_01 VALUES('fff', '1234','조회원','fff@korea.com','010-111-1116');

-- 샘플 데이터 잘 들어갔는지 확인
SELECT * FROM custon_01;

 

 

ojdbc가 시험장 PC에 설치되어있음. 필요한 프로젝트로 옮겨주는 작업 필요!!

** 설치 위치 : Windows(:C)> oraclexe> app> oracle> product> 11.2.0> server> jdbc> lib > ojdbc6.jar

** 프로젝트에 옮길 위치 : src > main > webapp > WEB-INF > lib (드래그앤 드롭으로 넣어줌)

 

add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원등록</title>
</head>
<body>
    <h1>회원 등록</h1>
    <form action="add_apply.jsp">
        <table border="1">
            <tr>
                <td>아이디</td>
                <td><input type="text" name="p_id" value=""/></td>
            </tr>
            <tr>
                <td>비밀번호</td>
                <td><input type="text" name="p_pw" value=""/></td>
            </tr>
            <tr>
                <td>성명</td>
                <td><input type="text" name="c_name" value=""/></td>
            </tr>
            <tr>
                <td>이메일</td>
                <td><input type="text" name="c_email" value=""/></td>
            </tr>
            <tr>
                <td>연락처</td>
                <td><input type="text" name="c_tel" value=""/></td>
            </tr>
            <tr>
                <td colspan="2">
                    <button type="submit">등록</button>
                    <a href="find.jsp"><button type="button">조회</button></a>
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

 

 

add_apply.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
    import="java.sql.*"
%>
<%
    Class.forName("oracle.jdbc.driver.OracleDriver");

    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@lacalhost:1521:xe", "system","1234");

    PreparedStatement stmt = conn.preparedStatement("INSERT INTO custom_01 VALUES(?, ?, ?, ?, ?)");

    stmt.setString(1, request.getParameter("p_id"));
    stmt.setString(2, request.getParameter("p_pw"));
    stmt.setString(3, request.getParameter("c_name"));
    stmt.setString(4, request.getParameter("c_email"));
    stmt.setString(5, request.getParameter("c_tel"));

    stmt.excute();
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원등록</title>
</head>
<body>
    <a href="add.jsp">등록화면</a>
</body>
</html>

 

find.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
    import="java.sql.*"
%>
<%
    Class.forName("oracle.jdbc.driver.OracleDriver");

    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@lacalhost:1521:xe", "system","1234");
    Statement stmt = conn.createStatement();

    ResultSet rs = stmt.excuteQuery("SELECT p_id, c_name, c_email, c_tel FROM custom_01");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원목록조회</title>
</head>
<body>
    <h1>회원목록조회</h1>
    <hr>
        <table border="1">
            <thead>
                <tr>회원아이디</tr>
                <tr>회원이름</tr>
                <tr>이메일</tr>
                <tr>연락처</tr>
            </thead>
            <tbody>
                <% while (rs.next()){ %>
                <tr><%= rs.getString(1) %></tr>
                <tr><%= rs.getString(2) %></tr>
                <tr><%= rs.getString(3) %></tr>
                <tr><%= rs.getString(4) %></tr>
                <% } %>
            </tbody>
        </table>
    <hr>
    <h3>HRDKOREA Copyright&copy;2015 All rights reserved. Human Resources Development Service of Korea.</h3>
</body>
</html>

 

 

[ 제 4과제 ] 화면설계 실무

 

종류에다 쓰는 것이 중요함. 나머지는 요구사항 명세서에 있음.

** 종류 : 대부분 button, TextField, choice 중에 고르면 됨. ( 걍 3개 중에 고르자.)