Skip to content

Repository files navigation

Project: Implementing a Simple Database Application Due: 2019/02/15 (Fri), 11:59 PM

이번 프로젝트의 목표는 데이터베이스를 이용하는 간단한 어플리케이션을 설계하고 구현하는 것이다. Python 및 pymysql 을 이용하여 대학교 원서 접수를 시뮬레이션 하는 간단한 어플리케이션을 만들어 본다. 이번 프로젝트를 통해 학생들은 어플리케이션과 데이터베이스를 연동하는 방법을 배우게 된다.

1 요구 사항 • 데이터는 관계형 데이터베이스에 저장되어야 한다. • 각 컬럼의 타입은 2 장에 명시된 대로 정의하여야 한다. • 학교 데이터 및 학생 데이터를 추가/삭제할 수 있어야 한다. • 학교 데이터 및 학생 데이터를 출력할 수 있어야 한다. • 학생이 학교에 원서 접수를 할 수 있어야 한다 • 학교 별로 합격이 예상되는 학생의 명단을 출력할 수 있어야 한다.
• 학생 별로 합격이 예상되는 학교의 명단을 출력할 수 있어야 한다.

2 데이터 타입

  1. 학교
  • 학교 ID: 정수 (Primary key)
  • 이름: 문자열 (최대 200 자)
  • 정원: 정수 (1 이상의 값)
  • 군: 문자열 (대문자 ‘A’, ‘B’, ‘C’ 중 1 개의 값을 가져야 함)
  • 최소 점수: 정수 (0 이상의 값)
  • 내신 성적 반영 비율: 실수 (0 이상의 값)
  1. 학생
  • 학생 ID: 정수 (Primary key)
  • 이름: 문자열 (최대 200 자)
  • 수능 성적: 정수 (0 이상 400 이하의 값)
  • 내신 성적: 정수 (0 이상 100 이하의 값)

3 세부 사항 구현한 프로그램은 다음과 같은 기능을 할 수 있어야 한다.

  1. 모든 학교 정보 출력
  • 모든 학교의 정보를 출력한다.
  • 학교 ID, 이름, 정원, 군, 최소 점수, 내신 성적 반영 비율, 지원자 수 순으로 출력
  1. 모든 학생 정보 출력
  • 모든 학생의 정보를 출력한다.
  • 학생 ID, 이름, 수능 성적, 내신 성적 순으로 출력
  1. 학교 추가
  • 새로운 학교를 추가한다.
  • 이름(String), 정원(int), 군(char), 최소 점수(int), 내신 성적 반영 비율(float)을 순서대로 입력 받음
  1. 학교 삭제
  • 학교를 삭제한다.
  • 학교 ID(int)를 입력 받음
  • 학교를 삭제하면 해당 학교에 관련된 원서 접수 내역도 모두 삭제되어야 함
  • 해당 학교가 없다면 에러 메시지 출력
  1. 학생 추가
  • 새로운 학생을 추가한다.
  • 이름(String), 수능 성적(int), 내신 성적(int)을 순서대로 입력 받음
  • 수능 성적, 내신 성적이 정해진 범위를 벗어난다면 에러 메시지 출력
  1. 학생 삭제
  • 학생을 삭제한다.
  • 학생 ID(int)를 입력 받음
  • 학생을 삭제하면 관련된 원서 접수 내역도 모두 삭제되어야 함
  • 해당 학생이 없다면 에러 메시지 출력
  1. 원서 접수
  • 학생을 학교에 원서접수한다.
  • 학생 ID(int) 및 학교 ID(int)를 입력 받음
  • 학교의 정원보다 더 많은 학생이 지원할 수 있음
  • 한 학생은 각 군마다 최대 1 개의 학교에 지원할 수 있음. (예: A 군에 속하는 두 개의 학교에 동시에 지원할 수 없음)
  • 학생이 그 학교에 지원할 수 없는 경우에는 에러 메시지 출력
  1. 학교에 지원한 학생 목록 출력
  • 학교에 지원한 모든 학생의 정보를 출력한다.
  • 학교 ID(int)를 입력 받음
  • 해당 학교에 지원한 학생의 정보를 출력한다.
  • 학생 ID, 학생 이름, 수능 성적, 내신 성적 순으로 출력
  • 해당 학교가 없다면 에러 메시지 출력
  1. 학생의 원서 접수 목록 출력
  • 학생이 지원한 모든 학교의 정보를 출력한다.
  • 학생 ID(int)를 입력 받음
  • 해당 학생이 지원한 학교의 정보를 출력한다.
  • 학교 ID, 이름, 정원, 군, 최소 점수, 내신 성적 반영 비율, 지원자 수 순으로 출력
  • 내신 성적 반영 비율은 소수점 셋째 자리에서 반올림하여 출력한다.
  • 해당 학생이 없다면 에러 메시지 출력
  1. 학교의 예상 합격자 목록 출력
  • 학교에 지원한 학생들 중, 합격이 예상되는 학생의 정보를 출력한다.
  • 학교 ID(int)를 입력 받음
  • 합격이 예상되는 학생의 정보를 출력한다.
  • 학생 ID, 학생 이름, 내신 성적, 수능 성적 순으로 출력
  • 합격 여부는 종합 점수 순으로 결정된다고 가정한다. 종합 점수란 수능 성적과 내신 성적을 각 학교 별로 정해진 내신 성적 반영 비율을 고려하여 합한 값이다.
  • 예: 수능 성적이 300, 내신 성적이 100 인 학생이 내신 반영 비율 1.2 인 학교에 지원한다면 종합 점수는 300 + 100 * 1.2 = 420 이 됨
  • 종합 점수가 동점이라면 내신 성적이 높은 학생을 우선으로 한다.
  • 수능 성적과 내신 성적이 모두 동점인 지원자가 있어 정원을 초과할 경우, 정원의 10% 를 초과하지 않는다면 모두 합격 처리한다. 그렇지 않다면 모두 불합격 처리한다.
  • 이 때, 소수점 단위는 올림한다. 즉, 정원이 91 명인 학교에서는 10 명을 초과하는 것까지 허용된다.
  • 단, 순위가 정원 이내에 들었더라도 종합 점수가 학교 별로 정해진 최소 점수 미만이라면 불합격 처리한다.
  • 해당 학교가 없다면 에러 메시지 출력
  1. 학생의 예상 합격 대학 목록 출력
  • 학생이 지원한 학교들 중, 합격이 예상되는 학교의 정보를 출력한다.
  • 학생 ID(int)를 입력 받음
  • 합격이 예상되는 학교들의 정보를 출력한다
  • 학교 ID, 이름, 정원, 군, 최소 점수, 내신 성적 반영 비율, 지원자 수 순으로 출력
  • 해당 학생이 없다면 에러 메시지 출력
  1. 프로그램 종료
  2. 데이터베이스 리셋 및 생성
  • 기존 모든 테이블 및 데이터가 존재할 경우 삭제
  • 2 장에서 정의한 데이터 타입에 해당하는 새로운 테이블 생성
  • 삭제 실시 전 확인 메시지를 띄우고 y/n 사용자 입력을 받아야 함

기타 사항

  • 입력 시 각 입력의 데이터 타입은 지켜진다고 가정 (예: 정원의 입력으로 String 이 들어오지 않음)
  • 학교 ID, 학생 ID 는 공연장, 공연, 관객이 삽입될 때마다 자동 부여
  • 1 부터 시작
  • AUTO_INCREMENT 옵션을 사용할 것
  • 입력이 데이터 타입에 정의된 값의 범위를 벗어난다면 에러 메시지 출력
  • 단, 문자열의 경우 최대 길이(200 자)보다 길다면 200 자로 truncate 할 것
  • 프로그램 종료 명령을 제외한 명령을 실행한 뒤에는 다음 명령을 입력받는 상태로 돌아가도록 함
  • 여러 개의 입력을 받는 경우, 입력을 차례로 받다가 특정 입력에 대해 에러가 있을 시 그 즉시 에러 메시지를 출력하고 해당 명령을 종료함.
  • 모든 출력은 첫 번째 컬럼에 대해 오름차순으로 정렬되어야 함

4 실행 예시

============================================================ 1. print all universities 2. print all students 3. insert a new university 4. remove a university 5. insert a new student 6. remove a student 7. make an application 8. print all students who applied for a university 9. print all universities a student applied for 10. print expected successful applicants of a university 11. print universities expected to accept a student 12. exit 13. reset database ============================================================ Select your action: 1 -------------------------------------------------------------------------------- id name capacity group cutline weight applied -------------------------------------------------------------------------------- 1 Seoul Nat'l Univ. 100 B 400 0.2 0 2 Nakseong Univ. 80 A 300 0.1 0 --------------------------------------------------------------------------------

Select your action: 2 -------------------------------------------------------------------------------- id name csat_score school_score -------------------------------------------------------------------------------- 1 Ahn Yeonchan 330 87 2 Kim Jihoon 369 84 --------------------------------------------------------------------------------

Select your action: 3 University name: Cheomseong Univ. University capacity: 123 University group: C Cutline score: 350 Weight of high school records: 0.7 A university is successfully inserted.

Select your action: 5 Student name: Choe Byeongseo CSAT score: 288 High school record score: 100 A student is successfully inserted.

Select your action: 1 -------------------------------------------------------------------------------- id name capacity group cutline weight applied -------------------------------------------------------------------------------- 1 Seoul Nat'l Univ. 100 B 400 0.2 0 2 Nakseong Univ. 80 A 300 0.1 0 3 Cheomseong Univ. 123 C 350 0.7 0 --------------------------------------------------------------------------------

Select your action: 2 -------------------------------------------------------------------------------- id name csat_score school_score -------------------------------------------------------------------------------- 1 Ahn Yeonchan 330 87 2 Kim Jihoon 369 84 3 Choe Byeongseo 288 100 --------------------------------------------------------------------------------

Select your action: 7 Student ID: 2 University ID: 3 Successfully made an application Select your action: 7 Student ID: 3 University ID: 1 Successfully made an application

Select your action: 1 -------------------------------------------------------------------------------- id name capacity group cutline weight applied -------------------------------------------------------------------------------- 1 Seoul Nat'l Univ. 100 B 400 0.2 0 2 Nakseong Univ. 80 A 300 0.1 0 3 Cheomseong Univ. 123 C 350 0.7 1 --------------------------------------------------------------------------------

Select your action: 10 University ID: 3 -------------------------------------------------------------------------------- id name csat_score school_score -------------------------------------------------------------------------------- 2 Kim Jihoon 369 84 --------------------------------------------------------------------------------

Select your action: 11 Student ID: 3 -------------------------------------------------------------------------------- id name capacity group cutline weight applied -------------------------------------------------------------------------------- --------------------------------------------------------------------------------

Select your action: 12 Bye!

5 개발 환경 • Python 3.5+ • MySQL  DB 접속 정보  Host: 자신에게 할당된 서버 (ds[1-5].snu.ac.kr)  각 조의 조장의 project DB 를 활용하고, 어떤 자리의 DB 를 사용하였는지 보고서에 명시  ID: 조장의 id (예: ds3_1)  비밀번호: 조장의 비밀번호  DB name: 조장의 id_project (예: ds3_1_project) 6 채점

  1. 구현 완성도 (80%)
  • 기능 완성도 (60%)
  • 1 단계: 데이터베이스 리셋 및 스키마 생성 (10%)
  • 해당 기능: 13
  • 데이터베이스에 있는 데이터와 테이블이 모두 삭제되었는지
  • 설계한 스키마대로 테이블에 create 되는지
  • 2 단계: 데이터의 단순 입출력 (20%)
  • 해당 기능: 1 ~ 6
  • 데이터를 DB 로부터 정확하게 retrieve 하여 표시할 수 있는지
  • 주어진 인풋대로 데이터 레코드를 생성하여 DB 에 저장하고 있는지
  • 지정한 데이터 레코드를 삭제할 수 있는지
  • 3 단계: DB 와 Application 의 복합적 연동 (30%)
  • 해당 기능: 7 ~ 11
  • 잘 설계된 데이터베이스 스키마와 integrity constraint 를 활용하여 명시된 기능을 잘 수행하도록 구현하였는지
  • 적합한 데이터베이스 스키마 설계 (20%)
  • 데이터베이스 스키마 설계가 문제 해결에 적절한지
  • 불필요한 중복이 없고 효율적인지
  1. 레포트 (20%)
  • 하루 Delay 마다 -10%, 3 일 Delay 시 0 점 처리

7 제출

  1. Runnable python script 파일  파일명: main.py
  2. DB  (중요!) 프로젝트 제출시 채점을 위해 자신의 DB 계정 안의 테이블 스키마만 남기고 레코드는 모두 truncate 해야 함  이를 지키지 않았을 시 채점이 제대로 되지 않아 0 점 처리 될 수 있으니 주의!
  3. 리포트  파일명: PRJ_조이름.pdf (예: PRJ_12 조.pdf)  반드시 pdf 포맷으로 제출  포함되어야 하는 내용  핵심 모듈과 알고리즘에 대한 설명  구현한 내용에 대한 간략한 설명  (제시된 요구사항 중 구현하지 못한 부분이 있다면) 구현하지 못한 내용  가정한 것들  컴파일과 실행 방법  프로젝트를 하면서 느낀 점  위의 3 가지 파일을 압축하여 lecture@europa.snu.ac.kr 로 제출  파일명: PRJ_조이름.zip (예: PRJ_12 조.zip)  메일 제목: [DB Project] 조이름 – 조원 이름 1, 조원 이름 2, 조원 이름 3 (예: [DB Project] 12 조 – 홍길동, 김철수, 김영희) 8 References  pymysql  https://readthedocs.org/projects/pymysql/  HeidiSQL  http://www.heidisql.com/

About

Term project by python and mysql

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages