'Test'에 해당되는 글 7건

JSP Test - 답

Test 2015. 6. 22. 23:11

1. 아래 조건을 만족하는 웹사이트 구축을 위한 프로그램 작성



조건)

- JSP&JDBC를 이용한 방명록 프로젝트 작성.

- 일반 사용자가 웹페이지에 방문해서 방명록 글을 남길 수 있다. 글쓴이, 패스워드, 글내용을 입력한다. insert 버튼 클릭시 서버로 전송되어서 데이터베이스에 저장된다. 입력시 글자수를 확인해서 출력하도록 자바스크립트로 처리한다. 서버 전송 전에 빈 항목이 없도록 자바스크립트로 통제한다. 

- 일반 사용자가 웹페이지에 방문해서 방명록 글을 볼 수 있다. 번호, 글쓴이, 글내용, 작성일이 출력된다. 작성일은 오늘인 경우로 '오늘'로 출력되고, 오늘 이전 날짜인 경우 날짜가 출력되도록 한다.

- 결혼 날짜는 수료일(2015.7.3)로 작성하고 남은 일수가 자동 계산되어서 출력되도록 한다. 남은 날짜 계산 과정은 자바스크립트 함수를 이용한다.

- 삭제 버튼 선택시 패스워드 입력 여부를 확인하고, 패스워드와 글번호를 서버로 전송하고, 서버에서 패스워드와 글번호를 수신한 다음 데이터베이스 질의를 통해서 패스워드가 맞는 경우 해당 게시글이 삭제가 되도록 한다.


2. 데이터베이스 구성

- 방명록 저장 테이블

CREATE TABLE board (

bid NUMBER --PK

,writer NVARCHAR2(30)

,pw VARCHAR2(30)

,content NVARCHAR2(200)

,writeDay DATE DEFAULT SYSDATE

);


ALTER TABLE board

ADD CONSTRAINT board_bid_pk PRIMARY KEY (bid);


CREATE SEQUENCE boardSeq;


INSERT INTO board (bid, writer, pw, content)

VALUES (boardSeq.nextval, '주인장(홍길동, 박길순)', '1234', '많이 축하해주세요. 추가로 결혼식 사진도 올릴 예정입니다.');

COMMIT;




3. 화면 구성







4. 프로그램 구성


//MyTable.css

//DBConn.java

//Board.java

//BoardDAO.java

//BoardMain.jsp

//BoardInsert.jsp

//BoardDelete.jsp





5. 프로그램 소스 코드

//MyTable.css

@CHARSET "EUC-KR";

#customers

{

font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;

width:100%;

border-collapse:collapse;

}

#customers td, #customers th 

{

font-size:1em;

border:1px solid #98bf21;

 padding:3px 7px 2px 7px;

}

#customers th 

{

font-size:1.1em;

text-align:left;

 padding-top:5px;

padding-bottom:4px; 

background-color:#A7C942;

color:#ffffff;

}

#customers tr.alt td 

{

color:#000000;

background-color:#EAF2D3;

}







//DBConn.java

package com.test;


import java.sql.*;


//데이터베이스 연결 및 마무리 액션 클래스

public class DBConn {

//static 접근제어자

//-> 객체 간의 데이터 공유

//-> 객체 생성 과정 없이 접근 가능

//-> 클래스이름.메소드()

//-> static 멤버는 static 멤버와만 접근 가능

private static Connection conn;

public static Connection getConnection() 

throws ClassNotFoundException, SQLException {

if (conn == null) {

Class.forName("oracle.jdbc.driver.OracleDriver");

conn = DriverManager.getConnection("jdbc:oracle:thin:사용자아이디/패스워드@IP주소:1521:xe");

}

return conn;

}

public static void close() throws SQLException {

if (conn != null) {

conn.close();

}

conn = null;

}


}








//Board.java

package com.test;


public class Board {

private String bid, writer, pw, content, writeday;


public String getWriteday() {

return writeday;

}


public void setWriteday(String writeday) {

this.writeday = writeday;

}


public String getBid() {

return bid;

}


public void setBid(String bid) {

this.bid = bid;

}


public String getWriter() {

return writer;

}


public void setWriter(String writer) {

this.writer = writer;

}


public String getPw() {

return pw;

}


public void setPw(String pw) {

this.pw = pw;

}


public String getContent() {

return content;

}


public void setContent(String content) {

this.content = content;

}


}








//BoardDAO.java

package com.test;


import java.sql.*;

import java.util.*;


public class BoardDAO {

public ArrayList<Board> list(){

ArrayList<Board> result = new ArrayList<Board>();

Connection conn = null;

PreparedStatement pstmt = null;

try {

conn = DBConn.getConnection();

/*

SELECT bid , writer , pw, content 

    , DECODE(TO_CHAR(writeday, 'YYYY-MM-DD'), TO_CHAR(SYSDATE, 'YYYY-MM-DD'), '오늘', TO_CHAR(writeday, 'YYYY-MM-DD')) AS writeday  

    FROM board

    ORDER BY bid;

*/

String sql = "SELECT bid , writer , pw, content, DECODE(TO_CHAR(writeday, 'YYYY-MM-DD'), TO_CHAR(SYSDATE, 'YYYY-MM-DD'), '오늘', TO_CHAR(writeday, 'YYYY-MM-DD')) AS writeday FROM board ORDER BY bid";

pstmt = conn.prepareStatement(sql);

ResultSet rs = pstmt.executeQuery();

while(rs.next()){

Board b = new Board();

b.setBid(rs.getString("bid"));

b.setWriter(rs.getString("writer"));

b.setContent(rs.getString("content"));

b.setWriteday(rs.getString("writeday"));

result.add(b);

}

rs.close();


}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

e.printStackTrace();

}

try {

DBConn.close();

}catch(Exception e){

e.printStackTrace();

}

}

return result;

}

public int add(Board b) {

int result = 0;

Connection conn = null;

PreparedStatement pstmt = null;

try {

conn = DBConn.getConnection();

/*

INSERT INTO board (bid, writer, pw, content)

VALUES (boardSeq.nextval, '주인장(홍길동, 박길순)', '1234', '많이 축하해주세요. 추가로 결혼식 사진도 올릴 예정입니다.');

*/

String sql = "INSERT INTO board (bid, writer, pw, content) VALUES (boardSeq.nextval, ?, ?, ?)";

pstmt = conn.prepareStatement(sql);

//데이터 바인딩

pstmt.setString(1, b.getWriter());

pstmt.setString(2, b.getPw());

pstmt.setString(3, b.getContent());

result = pstmt.executeUpdate();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

e.printStackTrace();

}

try {

DBConn.close();

}catch(Exception e){

e.printStackTrace();

}

}

return result;

}

public int remove(Board b) {

int result = 0;

Connection conn = null;

PreparedStatement pstmt = null;

try {

conn = DBConn.getConnection();

/*

DELETE FROM board

    WHERE bid=1 AND pw='1234';

    */

String sql = "DELETE FROM board WHERE bid=? AND pw=?";

pstmt = conn.prepareStatement(sql);

//데이터 바인딩

pstmt.setString(1, b.getBid());

pstmt.setString(2, b.getPw());

result = pstmt.executeUpdate();


}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

e.printStackTrace();

}

try {

DBConn.close();

}catch(Exception e){

e.printStackTrace();

}

}

return result;

}


}








//BoardMain.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>    

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

StringBuilder sb = new StringBuilder();


BoardDAO dao = new BoardDAO();


for (Board b : dao.list()) {

sb.append(String.format("<tr>"));

sb.append(String.format("<td>%s</td>", b.getBid()));

sb.append(String.format("<td>%s</td>", b.getWriter()));

sb.append(String.format("<td>%s</td>", b.getContent()));

sb.append(String.format("<td>%s</td>", b.getWriteday()));

sb.append(String.format("<td><input type=\"button\" class=\"deleteBtn\" value=\"삭제\"></td>" ));

sb.append(String.format("</tr>\r\n"));

}

%>  

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>홍길동, 박길순의 결혼식 청첩장</title>

<link rel="stylesheet" type="text/css" href="MyTable.css">

<style type="text/css">

div {font-size:10pt;}

h1 {font-size:14pt;}

.red {color:red}

</style>

<script type="text/javascript">

window.onload=function() {


//날짜 계산 출력 함수

dday();

var myForm = document.getElementById("myForm");

var writer = document.getElementById("writer");

var pw = document.getElementById("pw");

var content = document.getElementById("content");

writer.onkeyup=function() {

document.getElementById("writerLength").innerText = writer.value.length;

};

pw.onkeyup=function() {

document.getElementById("pwLength").innerText = pw.value.length;

};

content.onkeyup=function() {

document.getElementById("contentLength").innerText = content.value.length;

};

document.getElementById("insertBtn").onclick=function() {

if (writer.value == "" || pw.value == "" || content.value=="") {

alert("빈 항목(글쓴이, 패스워드, 내용)을 채워야 합니다.");

} else {

myForm.action="BoardInsert.jsp";

myForm.submit();

}

};


var btnNodes = document.getElementsByClassName("deleteBtn");

for (var i=0; i<btnNodes.length; ++i) {

var btn = btnNodes[i];

btn.onclick=function() {

var node = this; //<input type="button">

var pnode = node.parentNode; //<td>

var ppnode = pnode.parentNode; //<tr>

var tdNode = ppnode.firstChild; //<td>

var bid = tdNode.innerText; //번호 

if (pw.value == "") {

alert("빈 항목(패스워드)을 채워야 합니다.");

} else {

if (confirm(bid + "번 자료를 삭제할까요? 패스워드가 일치하면 삭제됩니다.")) {

myForm.action="BoardDelete.jsp?bid="+bid;

myForm.submit();

}

}

};

}

}


function dday() {

var toDay = new Date();

var dDay = new Date("2015-07-03");

var count = Math.floor((dDay.getTime() - toDay.getTime())/86400000)+1;

document.getElementById("day").innerHTML = "(D-" + count +")";

}


</script>

</head>

<body>

<div>

<p>

<a href="">[Admin Login]</a><br> 

<img src="WeddingPhoto.jpg" width="100%">

</p>

<h1>홍길동, 박길순의 결혼식 청첩장 사이트</h1>

<p>

일시 : 2015.07.03 <span  class="red" id="day">(D-0)</span><br>

장소 : SSIT<br> 

찾아오시는 방법 : 지하철 2호선 역삼역 3번 출구 한독빌딩 8층<br>

</p>

<p>방명록에 글을 남겨주세요</p>

<form method="post" id="myForm">

<table id="customers">

<tr>

<td style="width: 100px">글쓴이*</td>

<td><input type="text" id="writer" name="writer" required="required" maxlength="30"> (<span  class="red"  id="writerLength">0</span>/30)</td>

</tr>

<tr>

<td>패스워드*</td>

<td>

<input type="password" id="pw" name="pw" required="required" maxlength="30"> (<span class="red" id="pwLength">0</span>/30)

</td>

</tr>

<tr>

<td>내용*</td>

<td>

<input type="text" style="width: 80%" id="content" name="content" required="required" maxlength="200"> (<span  class="red"  id="contentLength">0</span>/200) 

<input type="button" value="insert" id="insertBtn">

</td>

</tr>

</table>


<table id="customers">

<tr>

<th style="width: 60px;">번호</th>

<th>글쓴이</th>

<th>글내용</th>

<th style="width: 100px;">작성일</th>

<th style="width: 60px;">삭제</th>

</tr>

<!-- 

<tr>

<td>1</td>

<td>주인장(홍길동, 박길순)</td>

<td>많이 축하해주세요. 추가로 결혼식 사진도 올릴 예정입니다.</td>

<td>오늘</td>

<td><input type="button" value="delete" class="deleteBtn"></td>

</tr>

<tr>

<td>2</td>

<td>신랑 홍길동의 친구</td>

<td>축하한다!</td>

<td>오늘</td>

<td><input type="button" value="delete" class="deleteBtn"></td>

</tr>

-->

<%=sb.toString()%> 

</table>

</form>

</div>

</body>

</html>








//BoardInsert.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>    

<%

//데이터 수신

request.setCharacterEncoding("UTF-8");

String writer = request.getParameter("writer");

String pw = request.getParameter("pw");

String content = request.getParameter("content");


//데이터베이스 액션

BoardDAO dao = new BoardDAO();

Board b = new Board();

b.setWriter(writer);

b.setPw(pw);

b.setContent(content);

dao.add(b);


//강제 페이지 전환

response.sendRedirect("BoardMain.jsp");

%>







//BoardDelete.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>    

<%

//데이터 수신

request.setCharacterEncoding("UTF-8");

String bid = request.getParameter("bid");

String pw = request.getParameter("pw");


//데이터베이스 액션

BoardDAO dao = new BoardDAO();

Board b = new Board();

b.setBid(bid);

b.setPw(pw);

dao.remove(b);


//강제 페이지 전환

response.sendRedirect("BoardMain.jsp");


%>





--------------------------------------------



'Test' 카테고리의 다른 글

JSP Test - 문제  (1) 2015.06.22
JDBC TEST - 답  (1) 2015.06.21
JDBC TEST - 문제  (0) 2015.06.21
JavaSE - Test 2 (답)  (0) 2015.06.21
JavaSE - Test 2 (문제)  (0) 2015.06.21
블로그 이미지

알 수 없는 사용자

,

JSP Test - 문제

Test 2015. 6. 22. 23:10

1. 아래 조건을 만족하는 웹사이트 구축을 위한 프로그램 작성

조건)

1. JSP&JDBC를 이용한 방명록 프로젝트 작성.

- 일반 사용자가 웹페이지에 방문해서 방명록 글을 남길 수 있다. 글쓴이, 패스워드, 글내용을 입력한다. insert 버튼 클릭시 서버로 전송되어서 데이터베이스에 저장된다. 입력시 글자수를 확인해서 출력하도록 자바스크립트로 처리한다. 서버 전송 전에 빈 항목이 없도록 자바스크립트로 통제한다. 

- 일반 사용자가 웹페이지에 방문해서 방명록 글을 볼 수 있다. 번호, 글쓴이, 글내용, 작성일이 출력된다. 작성일은 오늘인 경우로 '오늘'로 출력되고, 오늘 이전 날짜인 경우 날짜가 출력되도록 한다.

- 결혼 날짜는 수료일(2015.7.3)로 작성하고 남은 일수가 자동 계산되어서 출력되도록 한다. 남은 날짜 계산 과정은 자바스크립트 함수를 이용한다.

- 삭제 버튼 선택시 패스워드 입력 여부를 확인하고, 패스워드와 글번호를 서버로 전송하고, 서버에서 패스워드와 글번호를 수신한 다음 데이터베이스 질의를 통해서 패스워드가 맞는 경우 해당 게시글이 삭제가 되도록 한다.


2. 데이터베이스 구성

- 방명록 저장 테이블

CREATE TABLE board (

bid NUMBER --PK

,writer NVARCHAR2(30)

,pw VARCHAR2(30)

,content NVARCHAR2(200)

,writeDay DATE DEFAULT SYSDATE

);


ALTER TABLE board

ADD CONSTRAINT board_bid_pk PRIMARY KEY (bid);


CREATE SEQUENCE boardSeq;


INSERT INTO board (bid, writer, pw, content)

VALUES (boardSeq.nextval, '주인장(홍길동, 박길순)', '1234', '많이 축하해주세요. 추가로 결혼식 사진도 올릴 예정입니다.');

COMMIT;


3. 화면 구성





프린트 제출(메모장 편집된 인쇄본) 및 이메일 제출(인쇄본 및 화면 캡쳐)

=> itinstructor@naver.com











'Test' 카테고리의 다른 글

JSP Test - 답  (0) 2015.06.22
JDBC TEST - 답  (1) 2015.06.21
JDBC TEST - 문제  (0) 2015.06.21
JavaSE - Test 2 (답)  (0) 2015.06.21
JavaSE - Test 2 (문제)  (0) 2015.06.21
블로그 이미지

알 수 없는 사용자

,

JDBC TEST - 답

Test 2015. 6. 21. 07:33

1. 아래 조건을 만족하는 JDBC 프로그램을 작성합니다.
- 자바 콘솔 기반 프로그램 (클래스를 아래 목록과 형식으로 작성)
DBConn.java, Schedule.java, ScheduleDAO.java, MenuAction.java, Main.java
- 여러 개의 일정(날짜, 시간, 내용)을 데이터베이스에 저장하고 출력하는 프로그램 작성.
- 일정 입력시 날짜, 시간, 내용을 외부 입력 받고, 데이터베이스에 저장할 수 있도록 작성.
- 출력시 오늘 일정, 특정 일 일정, 특정 월 일정, 특정 단어 포함 일정, 전체 일정을 출력할 수 있도록 작성.
- 출력은 일정 갯수, 번호, 날짜, 시간, 내용이 날짜, 시간 순으로 정렬되어서 출력되도록 작성.
- 아래 내용을 보고 테이블 생성 후 제약조건 추가 쿼리, 샘플 데이터 추가 쿼리, 일정 출력 쿼리를 작성.
- 자바에서 날짜 형식(YYYY-MM-DD) 문자열이 존재하는 날짜인지 검사하는 메소드
 private static boolean dateCheck(String date) {
  boolean result = false;
  try {
   //"yyyy-MM-dd" 형식에서 대소문자 구분
   SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
   df.setLenient(false);
   df.parse(date);
   result = true;
  }catch(Exception e){
  }
  return result;
 }

2. 데이터베이스 구성
--스케줄 테이블 생성
CREATE TABLE schedule (
  sid NUMBER --PK
  ,"date" VARCHAR2(10) --날짜 입력(YYYY-MM-DD)
  ,hour VARCHAR2(2) --시간을 두 자리 문자로 입력(HH)
  ,content NVARCHAR2(200)  --일정 내용 입력(200자 이내)
);

--PK 제약 추가
ALTER TABLE schedule
 ADD CONSTRAINT shedule_sid_pk PRIMARY KEY(sid);

--시퀀스 객체 생성
CREATE SEQUENCE scheduleSeq;

--샘플 데이터 입력
INSERT INTO schedule (sid, "date", hour, content)
 VALUES (scheduleSeq.nextval, '2015-04-01', '09', 'test');
INSERT INTO schedule (sid, "date", hour, content)
 VALUES (scheduleSeq.nextval, '2015-04-23', '09', '테스트');
INSERT INTO schedule (sid, "date", hour, content)
 VALUES (scheduleSeq.nextval, '2015-04-29', '09', '오늘 날짜 일정');
COMMIT;

--SELECT 쿼리(오늘날짜)
SELECT sid, "date", hour, content
 FROM schedule
 WHERE "date" = TO_CHAR(SYSDATE, 'YYYY-MM-DD')
 ORDER BY sid;

--SELECT 쿼리(특정(년월)일)
SELECT sid, "date", hour, content
 FROM schedule
 WHERE "date" = '2015-04-01'
 ORDER BY sid;

--SELECT 쿼리(특정(년)월)
SELECT sid, "date", hour, content
 FROM schedule
 WHERE SUBSTR("date", 1, 7) = '2015-04'
 ORDER BY sid;

--SELECT 쿼리(특정단어(포함))
SELECT sid, "date", hour, content
 FROM schedule
 WHERE content LIKE '%오늘%'
 ORDER BY sid;

--SELECT 쿼리(전체)
SELECT sid, "date", hour, content
 FROM schedule
 ORDER BY sid;

 

 

 

실행 결과)
--- 일정 관리 ---
1. 일정 입력
2. 일정 출력(검색)
선택(1~2, x 종료)?1

--신규 일정 입력--
(x 입력시 입력 종료)
날짜(YYYY-MM-DD)?2015-01-01
시간(HH)?09
내용(200자 이내)?신정 연휴
1개의 일정이 입력되었습니다.

날짜(YYYY-MM-DD)?x

--- 일정 관리 ---
1. 일정 입력
2. 일정 출력(검색)
선택(1~2, x 종료)?2

--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?1

1개 일정이 있습니다.
--------------------------------------------------
번호 날짜       시간 내용
   1 2015-4-23 09   일정관리 프로그램 테스트


--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?2
특정 일(YYYY-MM-DD)?2015-01-01

1개 일정이 있습니다.
--------------------------------------------------
번호 날짜       시간 내용
  22 2015-01-01 09   신정 연휴

--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?3
특정 월(YYYY-MM)?2015-01

1개 일정이 있습니다.
--------------------------------------------------
번호 날짜       시간 내용
  22 2015-01-01 09   신정 연휴


--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?4
특정 단어?연휴

1개 일정이 있습니다.
--------------------------------------------------
번호 날짜       시간 내용
  22 2015-01-01 09   신정 연휴

--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?5

2개 일정이 있습니다.
--------------------------------------------------
번호 날짜       시간 내용
  22 2015-01-01 09   신정 연휴
1  2015-04-23 09   일정관리 프로그램 테스트


--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?x

--- 일정 관리 ---
1. 일정 입력
2. 일정 출력(검색)
선택(1~2, x 종료)?x
프로그램 종료됨!

 


-------------------------------------

//Schedule.java
package com.test;

public class Schedule {
 
 //멤버변수->sid, date, hour, content
 private String sid, date, hour, content;

 public String getSid() {
  return sid;
 }

 public void setSid(String sid) {
  this.sid = sid;
 }

 public String getDate() {
  return date;
 }

 public void setDate(String date) {
  this.date = date;
 }

 public String getHour() {
  return hour;
 }

 public void setHour(String hour) {
  this.hour = hour;
 }

 public String getContent() {
  return content;
 }

 public void setContent(String content) {
  this.content = content;
 }
 
 

}

 

 

//ScheduleDAO.java
package com.test;

import java.util.*;
import java.sql.*;

public class ScheduleDAO {
 
 //일정 입력 메소드
 public int add(Schedule s) {
  int result = 0;
  
  Connection conn = null;
  PreparedStatement pstmt = null;
  try {
   conn = DBConn.getConnection(); 
   
   String sql = String.format("INSERT INTO schedule (sid, \"date\", hour, content) VALUES (scheduleSeq.nextval, ?, ?, ?)");
   pstmt = conn.prepareStatement(sql);
   //데이터 바인딩
   pstmt.setString(1, s.getDate());
   pstmt.setString(2, s.getHour());
   pstmt.setString(3, s.getContent());
   result = pstmt.executeUpdate();
   
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   }catch(Exception e){
   }
   
   DBConn.close();   
  } 
  
  return result;
 }
 
 //일정 출력 메소드(오늘날짜, 특정일, 특정월, 특정단어, 전체)
 public ArrayList<Schedule> list(String key, String value) {
  ArrayList<Schedule> result = new ArrayList<Schedule>();

  Connection conn = null;
  PreparedStatement pstmt = null;
  try {
   conn = DBConn.getConnection(); 
   
   String sql = String.format("SELECT sid, \"date\", hour, content FROM schedule");
   switch (key) {
   case "1": sql +=" WHERE \"date\" = TO_CHAR(SYSDATE, 'YYYY-MM-DD')"; break;
   case "2": sql +=" WHERE \"date\" = ?"; break;
   case "3": sql +=" WHERE SUBSTR(\"date\", 1, 7) = ?"; break;
   case "4": sql +=" WHERE content LIKE ?"; break;
   }
   sql+=" ORDER BY sid";
   
   pstmt = conn.prepareStatement(sql);
   //데이터 바인딩
   switch (key) {
   case "2": case "3":
    pstmt.setString(1, value);
    break;
   case "4":
    pstmt.setString(1, String.format("%%%s%%",value));
    break;
   }
   ResultSet rs = pstmt.executeQuery();
   while(rs.next()) {
    Schedule s = new Schedule();
    s.setSid(rs.getString("sid"));
    s.setDate(rs.getString("date"));
    s.setHour(rs.getString("hour"));
    s.setContent(rs.getString("content"));
    result.add(s);
   }
   rs.close();
   
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try {
    if (pstmt != null) {
     pstmt.close();
    }
   }catch(Exception e){
   }
   
   DBConn.close();   
  }
  
  return result;
 }
 
 
}

 

 

//AddTest.java
package com.test;

public class AddTest {

 public static void main(String[] args) {

  ScheduleDAO dao = new ScheduleDAO();
  
  Schedule s = new Schedule();
  s.setDate("2015-05-25");
  s.setHour("09");
  s.setContent("스케줄 테스트");
  
  int result = dao.add(s);
  System.out.printf("%d개의 행이 삽입되었습니다.%n", result);
  
 }

}

 

 

//ListTest.java
package com.test;

public class ListTest {

 public static void main(String[] args) {

  ScheduleDAO dao = new ScheduleDAO();
  
  //"1" -> 오늘 날짜
  //"2" -> 특정일
  //"3" -> 특정월
  //"4" -> 특정단어
  //"5" -> 전체
  String key = "5"; //"1", "2", "3", "4", "5"
  //value 변수의 값은 2, 3, 4의 경우만 해당
  String value = ""; //"2", "3", "4"
  for (Schedule s : dao.list(key, value)) {
   System.out.printf("%s %s %s %s %n"
     , s.getSid()
     , s.getDate()
     , s.getHour()
     , s.getContent());
  }
  
 }

}

 


//MenuAction.java
package com.test;

import java.util.*;

public class MenuAction {
 
 private ScheduleDAO dao;
 
 public MenuAction() {
  dao = new ScheduleDAO();
 }

 public void method1(Scanner sc) {
  
  System.out.println();
  System.out.print("날짜(YYYY-MM-DD)?");
  String date = sc.nextLine();
  System.out.print("시간(HH)?");
  String hour = sc.nextLine();
  System.out.print("내용(200자 이내)?");
  String content = sc.nextLine();
  
  Schedule s = new Schedule();
  s.setDate(date);
  s.setHour(hour);
  s.setContent(content);
  
  int result = dao.add(s);
  System.out.printf("%d개 일정이 입력되었습니다.%n", result);
  
 }
 
 public void method2(Scanner sc) {
  do {
   System.out.println();
   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.print("선택(1~5, 0 종료)?");
   String m = sc.nextLine();
   if (m.equalsIgnoreCase("0")) {
    break;
   }
   switch (m) {
   case "1": submenu1(); break;
   case "2": submenu2(sc); break;
   case "3": submenu3(sc); break;
   case "4": submenu4(sc); break;
   case "5": submenu5(); break;
   }
   
  }while(true);
  
 }
 
 private void submenu1() {
  schedulePrint("1", "");
 }

 private void submenu2(Scanner sc) {
  System.out.print("특정 일(YYYY-MM-DD)?");
  String date = sc.nextLine();
  schedulePrint("2", date);
 }

 private void submenu3(Scanner sc) {
  System.out.print("특정 월(YYYY-MM)?");
  String month = sc.nextLine();
  schedulePrint("3", month);
 }
 
 private void submenu4(Scanner sc) {
  System.out.print("특정 단어?");
  String value = sc.nextLine();
  schedulePrint("4", value);
 }
 
 private void submenu5() {
  schedulePrint("5", "");
 }
 
 private void schedulePrint(String key, String value) {
  System.out.println();
  System.out.println("--------------------------------------------------");
  System.out.printf("%2s %-9s %s %s %n", "번호", "날짜", "시간", "내용");
  for (Schedule s : dao.list(key, value)) {
   System.out.printf("%-4s %13s %s %s %n"
     , s.getSid()
     , s.getDate()
     , s.getHour()
     , s.getContent());
  }
  System.out.println("--------------------------------------------------");
 }
 
}

 

 


//Main.java
package com.test;

import java.util.*;

public class Main {

 public static void main(String[] args) {

  Scanner sc = new Scanner(System.in);
  MenuAction menu = new MenuAction();
  
  do {
   System.out.println();
   System.out.println("--- 일정 관리(오라클) ---");
   System.out.println("1. 일정 입력");
   System.out.println("2. 일정 출력(검색)");
   System.out.print("선택(1~2, 0 종료)?");
   String m = sc.nextLine();
   if (m.equalsIgnoreCase("0")) {
    break;
   }
   switch (m) {
   case "1": menu.method1(sc); break;
   case "2": menu.method2(sc); break;
   }
   
  }while(true);
  System.out.println("프로그램 종료됨!");
  sc.close();
  
 }

}


-----------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

'Test' 카테고리의 다른 글

JSP Test - 답  (0) 2015.06.22
JSP Test - 문제  (1) 2015.06.22
JDBC TEST - 문제  (0) 2015.06.21
JavaSE - Test 2 (답)  (0) 2015.06.21
JavaSE - Test 2 (문제)  (0) 2015.06.21
블로그 이미지

알 수 없는 사용자

,

JDBC TEST - 문제

Test 2015. 6. 21. 07:32

1. 아래 조건을 만족하는 JDBC 프로그램을 작성합니다.
- 자바 콘솔 기반 프로그램 (클래스를 아래 목록과 형식으로 작성)
DBConn.java, Schedule.java, ScheduleDAO.java, MenuAction.java, Main.java
- 여러 개의 일정(날짜, 시간, 내용)을 데이터베이스에 저장하고 출력하는 프로그램 작성.
- 일정 입력시 날짜, 시간, 내용을 외부 입력 받고, 데이터베이스에 저장할 수 있도록 작성.
- 출력시 오늘 일정, 특정 일 일정, 특정 월 일정, 특정 단어 포함 일정, 전체 일정을 출력할 수 있도록 작성.
- 출력은 일정 갯수, 번호, 날짜, 시간, 내용이 날짜, 시간 순으로 정렬되어서 출력되도록 작성.
- 아래 내용을 보고 테이블 생성 후 제약조건 추가 쿼리, 샘플 데이터 추가 쿼리, 일정 출력 쿼리를 작성.
- 자바에서 날짜 형식(YYYY-MM-DD) 문자열이 존재하는 날짜인지 검사하는 메소드
 private static boolean dateCheck(String date) {
  boolean result = false;
  try {
   //"yyyy-MM-dd" 형식에서 대소문자 구분
   SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
   df.setLenient(false);
   df.parse(date);
   result = true;
  }catch(Exception e){
  }
  return result;
 }

2. 데이터베이스 구성
--스케줄 테이블 생성
CREATE TABLE schedule (
  sid NUMBER --PK
  ,"date" VARCHAR2(10) --날짜 입력(YYYY-MM-DD)
  ,hour VARCHAR2(2) --시간을 두 자리 문자로 입력(HH)
  ,content NVARCHAR2(200)  --일정 내용 입력(200자 이내)
);


실행 결과)
--- 일정 관리 ---
1. 일정 입력
2. 일정 출력(검색)
선택(1~2, x 종료)?1

--신규 일정 입력--
(x 입력시 입력 종료)
날짜(YYYY-MM-DD)?2015-01-01
시간(HH)?09
내용(200자 이내)?신정 연휴
1개의 일정이 입력되었습니다.

날짜(YYYY-MM-DD)?x

--- 일정 관리 ---
1. 일정 입력
2. 일정 출력(검색)
선택(1~2, x 종료)?2

--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?1

1개 일정이 있습니다.
--------------------------------------------------
번호 날짜       시간 내용
   1 2015-4-23 09   일정관리 프로그램 테스트


--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?2
특정 일(YYYY-MM-DD)?2015-01-01

1개 일정이 있습니다.
--------------------------------------------------
번호 날짜       시간 내용
  22 2015-01-01 09   신정 연휴

--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?3
특정 월(YYYY-MM)?2015-01

1개 일정이 있습니다.
--------------------------------------------------
번호 날짜       시간 내용
  22 2015-01-01 09   신정 연휴


--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?4
특정 단어?연휴

1개 일정이 있습니다.
--------------------------------------------------
번호 날짜       시간 내용
  22 2015-01-01 09   신정 연휴

--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?5

2개 일정이 있습니다.
--------------------------------------------------
번호 날짜       시간 내용
  22 2015-01-01 09   신정 연휴
1  2015-04-23 09   일정관리 프로그램 테스트


--- 일정 출력 ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, x 종료)?x

--- 일정 관리 ---
1. 일정 입력
2. 일정 출력(검색)
선택(1~2, x 종료)?x
프로그램 종료됨!

 

 

 

 

 

 

 

 


 

'Test' 카테고리의 다른 글

JSP Test - 문제  (1) 2015.06.22
JDBC TEST - 답  (1) 2015.06.21
JavaSE - Test 2 (답)  (0) 2015.06.21
JavaSE - Test 2 (문제)  (0) 2015.06.21
JavaSE - TEST 1 (문제/답)  (0) 2015.06.21
블로그 이미지

알 수 없는 사용자

,

JavaSE - Test 2 (답)

Test 2015. 6. 21. 07:20

-------------------------------------------------------
//Schedule.java
package com.test;

public class Schedule {
 
 private String dateHour, content;  //날짜/시간, 내용 저장용
 
 public String getDateHour() {
  return dateHour;
 }
 public void setDateHour(String dateHour) {
  this.dateHour = dateHour;
 }
 public String getContent() {
  return content;
 }
 public void setContent(String content) {
  this.content = content;
 }

}

 

 

 


-------------------------------------------------------
//ScheduleDAO.java
package com.test;

import java.util.*;

public class ScheduleDAO {
 
 //저장소(컬렉션) 준비
 private ArrayList<Schedule> list;
 
 //멤버변수 초기화를 위한 생성자 준비
 public ScheduleDAO() {
  this.list = new ArrayList<Schedule>();
  this.init();
 }
 
 //일정관리 초기 데이터 준비
 private void init() {
  Schedule s0 = new Schedule();
  //날짜/시간은 YYYY-MM-DD/HH24 형식으로 저장
  s0.setDateHour("2015-01-01/08");
  //내용은 200자 이내 문장으로 저장. 공백 포함 가능.
  s0.setContent("신정");
  this.list.add(s0);

  Schedule s1 = new Schedule();
  s1.setDateHour("2015-02-19/08");
  s1.setContent("설날");
  this.list.add(s1);

  Schedule s2 = new Schedule();
  s2.setDateHour("2015-03-01/08");
  s2.setContent("삼일절");
  this.list.add(s2);

  Schedule s3 = new Schedule();
  s3.setDateHour("2015-05-05/08");
  s3.setContent("어린이날");
  this.list.add(s3);

  Schedule s4 = new Schedule();
  s4.setDateHour("2015-05-25/08");
  s4.setContent("석가탄신일");
  this.list.add(s4);

  Schedule s5 = new Schedule();
  s5.setDateHour("2015-08-15/08");
  s5.setContent("광복절");
  this.list.add(s5);

  //정렬 출력 상태 확인을 위한 순서가 어긋나는 일정 추가.
  Schedule s6 = new Schedule();
  s6.setDateHour("2015-01-23/09");
  s6.setContent("개발자 과정 개강일");
  this.list.add(s6);
 
  //정렬 출력 상태 확인을 위한 순서가 어긋나는 일정 추가.
  Schedule s7 = new Schedule();
  s7.setDateHour("2015-07-03/18");
  s7.setContent("개발자 과정 종강일");
  this.list.add(s7);
  
  //오늘 일정 확인을 위한 일정 추가.
  Schedule s8 = new Schedule();
  s8.setDateHour("2015-03-23/09");
  s8.setContent("일정 관리 프로그램 작성");
  this.list.add(s8);

 }

 public ArrayList<Schedule> list(int searchKey, String searchValue) {
  ArrayList<Schedule> result = new ArrayList<Schedule>();
  
  switch (searchKey) {
  case 1: result = this.subList1(searchValue); break;
  case 2: result = this.subList1(searchValue); break;
  case 3: result = this.subList1(searchValue); break;
  case 4: result = this.subList2(searchValue); break;
  case 5: result = this.subList3(); break;
  }
  
  Collections.sort(result, new Comparator<Schedule>() {
   @Override
   public int compare(Schedule o1, Schedule o2) {
    return o1.getDateHour().compareTo(o2.getDateHour());
   }
  });
  
  return result;
 }
 
 public ArrayList<Schedule> sourceList() {
  return this.list;
 }

 
 private ArrayList<Schedule> subList1(String searchValue) {
  ArrayList<Schedule> result = new ArrayList<Schedule>();
  
  for (Schedule s : this.list) {
   if (s.getDateHour().substring(0, searchValue.length()).equals(searchValue)) {
    result.add(s);
   }
  }
  
  return result;
 }
 
 private ArrayList<Schedule> subList2(String searchValue) {
  ArrayList<Schedule> result = new ArrayList<Schedule>();
  
  for (Schedule s : this.list) {
   if ( s.getContent().contains(searchValue) ) {
    result.add(s);
   }
  }
  
  return result;
 }

 private ArrayList<Schedule> subList3() {
  ArrayList<Schedule> result = new ArrayList<Schedule>();
  
  for (Schedule s : this.list) {
    result.add(s);
  }
  
  return result;
 }

 public int add(Schedule s) {
  int result = 0;

  if (this.list.add(s)) {
   result = 1;
  }
  
  return result;
 }
 
}

 

 

 


-------------------------------------------------------
//MenuAction.java
package com.test;

import java.util.*;

public class MenuAction {
 
 private ScheduleDAO dao;
 
 public MenuAction() {
  dao = new ScheduleDAO();
 }

 public void method1(Scanner sc) {
  
  System.out.println();
  System.out.print("날짜(YYYY-MM-DD/HH24)?");
  String dateHour = sc.nextLine();
  System.out.print("내용(200자 이내)?");
  String content = sc.nextLine();
  
  Schedule s = new Schedule();
  s.setDateHour(dateHour);
  s.setContent(content);
  
  int result = dao.add(s);
  if (result == 1) {
   System.out.println("1 개 일정이 입력되었습니다.");
  } else {
   System.out.println("일정이 입력되지 않았습니다.");
  }
  
 }
 
 public void method2(Scanner sc) {
  do {
   System.out.println();
   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.print("선택(1~5, 0 종료)?");
   String m = sc.nextLine();
   if (m.equalsIgnoreCase("0")) {
    break;
   }
   switch (m) {
   case "1": submenu1(); break;
   case "2": submenu2(sc); break;
   case "3": submenu3(sc); break;
   case "4": submenu4(sc); break;
   case "5": submenu5(); break;
   }
   
  }while(true);
  
 }
 
 private void submenu1() {
  Calendar cal = Calendar.getInstance();
  String toDay = String.format("%d-%02d-%02d"
    ,cal.get(Calendar.YEAR)
    ,cal.get(Calendar.MONTH)+1
    ,cal.get(Calendar.DATE)); 
  schedulePrint(1, toDay);
 }

 private void submenu2(Scanner sc) {
  System.out.print("특정 일(YYYY-MM-DD)?");
  String sdate = sc.nextLine();
  schedulePrint(2, sdate);
 }

 private void submenu3(Scanner sc) {
  System.out.print("특정 월(YYYY-MM)?");
  String smonth = sc.nextLine();
  schedulePrint(3, smonth);
 }
 
 private void submenu4(Scanner sc) {
  System.out.print("특정 단어?");
  String svalue = sc.nextLine();
  schedulePrint(4, svalue);
 }
 
 private void submenu5() {
  schedulePrint(5, "");
 }
 
 private void schedulePrint(int searchKey, String searchValue) {
  System.out.println();
  System.out.println("--------------------------------------------------");
  System.out.printf("%2s %-9s %s %n", "번호", "날짜/시간", "내용");
  int count = 0;
  for (Schedule s : dao.list(searchKey, searchValue)) {
   System.out.printf("%-4d %13s %s %n"
     , ++count
     , s.getDateHour()
     , s.getContent());
  }
  System.out.println("--------------------------------------------------");
  System.out.printf("%d개 일정이 있습니다.%n", count);
 }
 
}

 

 


-------------------------------------------------------
//Main.java
package com.test;

import java.util.*;

public class Main {

 public static void main(String[] args) {

  Scanner sc = new Scanner(System.in);
  MenuAction menu = new MenuAction();
  
  do {
   System.out.println();
   System.out.println("--- 일정 관리(컬렉션) ---");
   System.out.println("1. 일정 입력");
   System.out.println("2. 일정 출력(검색)");
   System.out.print("선택(1~2, 0 종료)?");
   String m = sc.nextLine();
   if (m.equalsIgnoreCase("0")) {
    break;
   }
   switch (m) {
   case "1": menu.method1(sc); break;
   case "2": menu.method2(sc); break;
   }
   
  }while(true);
  System.out.println("프로그램 종료됨!");
  sc.close();
  
 }

}

 

 

 

 

'Test' 카테고리의 다른 글

JSP Test - 문제  (1) 2015.06.22
JDBC TEST - 답  (1) 2015.06.21
JDBC TEST - 문제  (0) 2015.06.21
JavaSE - Test 2 (문제)  (0) 2015.06.21
JavaSE - TEST 1 (문제/답)  (0) 2015.06.21
블로그 이미지

알 수 없는 사용자

,

JavaSE - Test 2 (문제)

Test 2015. 6. 21. 07:19


1. 아래 조건을 만족하는 자바 콘솔 프로그램을 작성합니다.
- 자바 콘솔 기반 프로그램 (클래스를 아래 목록과 형식으로 작성)
        Schedule.java //날짜/시간 및 내용 저장용 멤버변수를 private String dateHour, content; 로 등록해서 사용.
        ScheduleDAO.java //저장소 운영 및 일정 입력, 출력 관련 메소드 작성
        MenuAction.java //메인 메뉴별 액션 및 서브 메뉴 운영
        Main.java  //메인 메뉴 운영
- 여러 개의 일정(날짜/시간, 내용)을 저장소(컬렉션)에 저장하고 출력하는 프로그램 작성.
- 출력시 오늘 일정, 특정 일 일정, 특정 월 일정, 특정 단어 포함 일정, 전체 일정을 출력할 수 있도록 작성.
- 출력은 일정 갯수, 번호, 날짜/시간, 내용이 날짜/시간순으로 정렬되어서 출력되도록 작성.
-       날짜 시간은 'YYYY-MM-DD/HH24' 형식을 사용할 것.
-       메인 메뉴와 서브 메뉴 운영이 무한 반복되도록 할 것.
-       일정 입력시 내용은 200자 이내(200자 이내 검사 과정은 생략)로 공백을 포함할 수 있도록 할 것. nextLine() 메소드 이용.
-       오늘 날짜를 시스템에 얻는 Java 문장
 Calendar cal = Calendar.getInstance();
 String toDay = String.format("%d-%02d-%02d"
   ,cal.get(Calendar.YEAR)
   ,cal.get(Calendar.MONTH)+1
   ,cal.get(Calendar.DATE)); 


실행 결과)

--- 일정 관리(컬렉션) ---
1. 일정 입력
2. 일정 출력(검색)
선택(1~2, 0 종료)?1

날짜(YYYY-MM-DD/HH24)?2015-03-23/10
내용(200자 이내)?일정 관리 프로그램 테스트
1 개 일정이 입력되었습니다.

--- 일정 관리(컬렉션) ---
1. 일정 입력
2. 일정 출력(검색)
선택(1~2, 0 종료)?2

--- 일정 출력(서브메뉴) ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, 0 종료)?1

--------------------------------------------------
번호 날짜/시간     내용 
1    2015-03-23/09 일정 관리 프로그램 작성
2    2015-03-23/10 일정 관리 프로그램 테스트
--------------------------------------------------
2개 일정이 있습니다.

--- 일정 출력(서브메뉴) ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, 0 종료)?2
특정 일(YYYY-MM-DD)?2015-03-23

--------------------------------------------------
번호 날짜/시간     내용
1    2015-03-23/09 일정 관리 프로그램 작성
2    2015-03-23/10 일정 관리 프로그램 테스트
--------------------------------------------------
2개 일정이 있습니다.

--- 일정 출력(서브메뉴) ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, 0 종료)?3
특정 월(YYYY-MM)?2015-03

--------------------------------------------------
번호 날짜/시간     내용
1    2015-03-01/08 삼일절
2    2015-03-23/09 일정 관리 프로그램 작성
3    2015-03-23/10 일정 관리 프로그램 테스트
--------------------------------------------------
3개 일정이 있습니다.

--- 일정 출력(서브메뉴) ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, 0 종료)?4
특정 단어?일정

--------------------------------------------------
번호 날짜/시간     내용
1    2015-03-23/09 일정 관리 프로그램 작성
2    2015-03-23/10 일정 관리 프로그램 테스트
--------------------------------------------------
2개 일정이 있습니다.

--- 일정 출력(서브메뉴) ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, 0 종료)?5

--------------------------------------------------
번호 날짜/시간     내용
1    2015-01-01/08 신정
2    2015-01-23/09 개발자 과정 개강일
3    2015-02-19/08 설날
4    2015-03-01/08 삼일절
5    2015-03-23/09 일정 관리 프로그램 작성
6    2015-03-23/10 일정 관리 프로그램 테스트
7    2015-05-05/08 어린이날
8    2015-05-25/08 석가탄신일
9    2015-07-03/18 개발자 과정 종강일
10   2015-08-15/08 광복절
--------------------------------------------------
10개 일정이 있습니다.

--- 일정 출력(서브메뉴) ---
1. 오늘 일정
2. 특정 일 일정
3. 특정 월 일정
4. 특정 단어 포함 일정
5. 전체 일정
선택(1~5, 0 종료)?0

--- 일정 관리(컬렉션) ---
1. 일정 입력
2. 일정 출력(검색)
선택(1~2, 0 종료)?0
프로그램 종료됨!


 

'Test' 카테고리의 다른 글

JSP Test - 문제  (1) 2015.06.22
JDBC TEST - 답  (1) 2015.06.21
JDBC TEST - 문제  (0) 2015.06.21
JavaSE - Test 2 (답)  (0) 2015.06.21
JavaSE - TEST 1 (문제/답)  (0) 2015.06.21
블로그 이미지

알 수 없는 사용자

,

JavaSE - TEST 1 (문제/답)

Test 2015. 6. 21. 07:19

문제)
1.  아래 조건을 만족하는 Java 프로그램을 작성합니다.
-  일정 범위(1~max변수의 값)의 난수를 발생시키는 과정에서 중복된 숫자가 나오지 않도록 하는 메소드 구현.
-  난수 발생 메소드 구현용 클래스(Math)와 콘솔 인터페이스 구현 클래스(Main)를 별도로 작성.
-  난수 발생의 결과는 정수형 배열(int[])로 반환하도록 한다.
-  난수 발생 메소드는 아래 형식으로 작성한다. 난수는 1부터 max 범위까지 발생시키고, 배열의 크기는 size로 지정한다.
-  public static int[] randomFromAtoB(int max, int size)
-  결과 출력시 배열 요소를 정렬 시켜서 출력한다.


실행예)
배열 크기(2~n)?10
난수 범위(2~n)?50
발생 난수 : 4 6 9 10 18 25 33 34 43 47


- 1) 1~max 까지 저장할 수 있는 배열 준비 및 1~max를 초기값으로 저장
- 2) 배열 요소 전체를 랜덤하게 뒤섞는다. 처음 요소부터 마지막 요소까지 난수로 발생한 위치의 요소와 바꾸면 된다.
- 3) 배열 요소 중에서 특정 갯수(size개) 만큼만 새로운 배열에 저장
- 4) 새로운 배열 반환

==============================================

답)

--------------------
//Math.java
package com.test;

public class Math {

 //메소드 추가 -> static 멤버
 public static int[] randomFromAtoB(int max, int size) {
  int[] result = new int[size]; //난수가 저장될 결과 배열
  int[] array = new int[max]; //1~max까지의 수 저장용 임시 배열

  for (int i=0; i<array.length; ++i) {
   array[i] = i+1;
  }

  for (int i=0; i<array.length; ++i) {
   int pos = (int)(java.lang.Math.random()*max);
   int temp = array[pos];
   array[pos] = array[i];
   array[i] = temp;
  }

  for (int i=0; i<size; ++i) {
   result[i] = array[i];
  }
  
  return result;
 }

}

--------------------
//Main.java
package com.test;

import java.util.*;

public class Main {

 public static void main(String[] args) {

  //입력 -> 외부 입력 -> Scanner
  Scanner sc = new Scanner(System.in);
  System.out.print("배열범위?");
  int size = sc.nextInt();
  System.out.print("난수범위?");
  int max = sc.nextInt();
  sc.close();

  //처리 -> 추가 액션 -> 메소드 호출
  int[] result = Math.randomFromAtoB(max, size);

  //출력
  System.out.print("발생 난수(정렬전) : ");
  for (int i=0; i<result.length; ++i) {
   System.out.printf("%d ", result[i]);
  }
  System.out.println();
  Arrays.sort(result);
  System.out.print("발생 난수(정렬후) : ");
  for (int i=0; i<result.length; ++i) {
   System.out.printf("%d ", result[i]);
  }

 }

}

 


 

'Test' 카테고리의 다른 글

JSP Test - 문제  (1) 2015.06.22
JDBC TEST - 답  (1) 2015.06.21
JDBC TEST - 문제  (0) 2015.06.21
JavaSE - Test 2 (답)  (0) 2015.06.21
JavaSE - Test 2 (문제)  (0) 2015.06.21
블로그 이미지

알 수 없는 사용자

,