프로그래밍/웹 프로그래밍

07. [프로젝트 #1-1](설계)수능대비, 연습용 수학문제 출제 프로그램

산을좋아한라쯔 2015. 2. 2. 14:53
반응형

앞에서 다뤘던 웹페이지 작성기술을 이용해서, 실제로 쓸만하고 유용한 웹페이지 프로그래밍을 해보자.

 

작성해볼 것은 '수능대비, 연습용 수학문제 출제 프로그램'이다.
2005년~2015년까지 교육과정평가원에서 출제한 900개의 문제(30회분)를 데이터베이스로 만들고, 웹 페이지에서 사용자의 선택(기간, 출제단원 등)에 의해 PDF형태의 시험지가 만들어지는 프로그램.

 

데이터를 수집하고 가공하는데 시간이 많이 걸릴 것이고, PDF 파일을 생성하기 위해서 iText라는 외부패키지를 이용해야하는 등, 꽤 난이도가 있는 프로젝트가 될 것이다.

 

작성 순서는, [설계] -> [개발]

 

이번 장에서는 [설계]를 하자.

 

1. 요구사항 정의

구현해야할 기능은 다음과 같다.

  • 웹페이지를 통해 사용자가 출제기간, 월, 단원 등을 선택할 수 있다.
  • 사용자는 시험출제 기간별로 무작위로 선택된 30개의 문제로 구성된 시험지를 만들 수 있다.(출제 옵션1)
  • 사용자는 연도 및 월(6,9,11월)을 선택해서 해당 시험지를 만들 수 있다. (출제 옵션2)
  • 사용자는 출제영역을 선택해서 시험지를 만들 수 있다. (출제 옵션3)
  • 시험지는 PDF로 다운로드 된다.
  • 사용자는 작성된 시험지에 매칭되는 답안지를 PDF로 출력할 수 있다.

 

제약 조건들은 다음과 같다.

  • 데이터는 교육과정평가원의 2005년도분~1015년도분까지 10년간 데이터 사용(6월, 9월 11월)
  • 문과 대상(나형, A형) 시험문제만을 대상으로 함
  • 연도표시는 수능표기형태로 한다. 즉, 2015년도분이면 실제 시험이 치뤄진 연도는 2014년

2. 화면 정의

사용자는 웹 브라우저를 통해서 어떤 문제를 출제할 지 선택할 수 있음.

화면 구조는 다음과 같음.

 

 

각각의 옵션별로 '문제생성' 버튼이 있고, 이 버튼을 누르면 문제지와 답지가 PDF파일로 자동 다운로드 되는 구조.

 

3. 프로그램 구조

프로그램 구조는 다음과 같다.

 

 

 

genMathProblem.html

위 '화면 정의'에서 보이는 화면을 구현한 html파일

 

사용자가 웹브라우저를 통해 이 파일을 열게되고, 여기서 시험지 생성에 필요한 선택사항(기간 등)을 입력하고 '입력 완료'버튼을 누르게 된다.

그러면, 선택한 정보가 전달되면서 JSP파일이 실행

 

genMathProblem.jsp

jsp파일에서는 genMathProblem.html에서 선택된 정보들(연도, 월 등)을 가지고 ProbGenerator클래스 객체를 생성하고, 그 객체의 generate() 메서드를 호출해서 시험지와 답안지를 얻어낸다.

 

ProbGenerator.java

jsp에서 호출되는 클래스로, 순수 java로 만들게 되는 클래스이다.

이 클래스에서는 jsp로부터 넘겨진 정보들(연도, 월 등)을 가지고 PDF형태의 시험지와 답안지를 만들어 낸다.

  • MySQL에 접속
  • 문제리스트 생성: jsp로부터 넘겨받은 정보와 MySQL의 su_master테입를 정보를 이용
  • 문제리스트를 이용해서 PDF형태의 시험지와 답안지 생성: PDF생성을 위해 iText패키지 이용
  • 실제 문제들은 하나하나씩 그림파일로 저장되어 있고, 그 경로를 su_master가 가지고 있음

 

4. DB 구조

'su_master'라는 하나의 테이블만 존재한다.

엑셀형태로 본 데이터구조는 다음과 같다.

 

각 칼럼별 설명.

 

칼럼

타입

비고

id

int

AUTO_INCREMENT PRIMARY KEY

office

varchar

출제기관: '평가원'

year

int

출제연도: 2005-2015

month

int

출제월: 6,9,11

prob_num

int

문제번호: 1-30

answer

int

정답

difficulty

int

난이도:6(최상) 5(상) 4(중상) 3(중) 2(중하) 1(하)

point

int

배점:2-4

answer_rate

int

정답률: 0-100

folder_name

varchar

문제이미지가 저장된 폴더이름

file_name

varchar

문제이미지 파일이름

subject

int

출제영역: 11-64

 

 

위 칼럼중에서 subject는 출제영역을 나타내는데, 십의 자리는 대 영역, 일의자리는 소영역으로해서, 문제가 어는 영역에서 출제되었는지를 나타낼 수 있게 한다.

 

subject의 대구분(십의 자리)

 

십의 자리

출제영역(대 영역)

1

수학I(문과)

2

미적분과 통계 기본(문과

3

수학I(이과)

4

수학II(이과)

5

기하와 벡터(이과)

6

적분과 통계(이과)

 

 

sujject의 소구분(일의 자리)

 

십의자리

일의자리

출제영역(소 영역)

1 1 행렬과 그래프
2 지수함수와로그함수
3 수열
4 수열의 극한
2 1 함수의 극한과 연속
2 다항함수의 미분법
3 다항함수의 적분법
4 확률
5 통계
3 1 행렬과 그래프
2 지수함수와 로그함수
3 수열
4 수열의 극한
4 1 방정식과 부등식
2 삼각함수
3 함수의 극한과 연속
4 미분법
5 1 일차변환과 행렬
2 이차곡선
3 공간도형과 공간좌표
4 벡터
6 1 적분법
2 순열과 조합
3 확률
4 통계

 

 

 

이제 대략, 필요한 설계를 마쳤다.

다음 장부터는 개발이다.

 

-끝-

 

 

 

반응형