* 본 프로젝트의 내용은 KAIST CS101 2013년 가을강좌의 과제를 바탕으로 구성되었습니다.
학생 정보 관리 시스템을 구현해보자!
[부스트코스] 처음 배우는 프로그래밍 (w.파이썬)
FINAL PROJECT #1
학생 정보 관리 시스템
프로젝트에 대한 설명을 주의 깊게 읽고, 프로그램이 명시된 모든 요구사항을 충족하는지 꼭 확인해주세요! 본 프로젝트는 개별로 진행합니다. 친구와 이 문제에 대해 논의할 수는 있지만 함께 프로그래밍하는 것은 지양해주세요.
목표
지금부터 학생 정보를 관리할 수 있는 프로그램을 작성합니다. 이 프로그램은 데이터 파일을 읽고 씁니다. 또한 신입생을 추가하고, 학생 정보를 제거 및 출력하며 정보의 통계를 컴파일합니다.
상세설명
- 프로그램이 시작되면, 기본 데이터 파일을 읽어옵니다 : student_information.txt
- 첫번째 줄에는 속성 ‘names’가 포함되고, 두번째 줄에는 아래와 같은 속성 유형이 포함됩니다.
형식 1. 'student_information.txt'
student_id, name, department, sex, age, nationality, grade
INT, CHAR(20), CHAR(50), CHAR(1), INT, CHAR(3), FLOAT
20118888, Dongyup Shin, Computer Science, M, 26, KOR, 3.84
20129876, Yuna Kim, Graduate School of Culture Technology, F, 24, KOR, 4.29
20135632, Sam Hammington, Management Engineering, M, 30, AUS, 2.04
……
‘CHAR’ 옆에 있는 괄호 안의 숫자는 문자열 속성의 최대 길이입니다. 예를 들어, 부서의 길이는 50보다 짧아야 합니다. 이번 프로젝트에서는 읽은 데이터를 사용하여 튜플의 목록을 만들어야 합니다. 각 튜플에는 한 명의 학생 정보만 포함됩니다. 그 후 프로그램은 사용자에게 주어진 관리 작업 중에서 선택하도록 사용자에게 반복적으로 요청합니다.
이 프로그램에는 추가, 제거, 보기, 통계, 쓰기 등 5가지 관리 작업이 있습니다.
- 추가 기능(Addition)은 학생의 정보를 목록에 추가합니다.
- 제거 기능(Removal)은 조건을 만족하는 학생의 정보를 제거합니다.
- 보기 기능(Shows)은 조건을 만족시키는 목록의 일부를 인쇄합니다.
- 통계 기능(Statistics)는 합계, 평균 및 카운트와 같은 통계 결과를 출력합니다.
- 쓰기 기능(Writing)은 목록을 ‘student_information.txt’ 파일에 저장합니다.
요구사항
이 프로그램에서 학생 정보, 속성 이름 및 속성 유형 리스트에 세 개의 전역 변수를 사용해야 합니다. (다른 전역 변수를 사용하면 안됩니다)
각 전역 변수의 이름은 ‘student_list’, ‘attribute_name’, ‘attribute_type’ 입니다.
- ‘attribute_name’은 ‘Removal()’ 또는 ‘Show()’ 기능에서 조건을 확인할 때 사용되며, ‘Show()’ 기능으로 출력합니다.
- ‘attribute_type’은 ‘Statistics()’ 기능에서 ‘CHAR’ 속성의 길이와 유형을 확인하는데 사용됩니다.
원활한 프로그램을 위해 초기화, 기본 작업, 그리고 각 관리 작업에 대한 7가지 기능을 정의해야 합니다. 유형 오류는 없는 것으로 가정합니다.
1. Initialization()
- Input : None (No parameters)
- Output : None (No return)
- ‘student_information.txt’ 파일을 읽습니다.
- ‘Addition()’ 기능을 사용해 각 학생 정보를 ‘student_list’에 추가합니다.
- 예를 들면, 학생 정보가 3개인 단순 데이터 파일을 초기화합니다.
- 이 기능은 프로그램이 시작될 때 한 번만 호출해야 합니다.
2. Addition()
- Input : 학생 1명의 정보 문자열
- Output : Boolean
- 입력 문자열 형식은 ‘student_information.txt’의 각 행과 동일해야 합니다.
ex) ‘20135632, Sam Hammingotn, Managemnet Engineering, M, 30, AUS, 2.04’ - 입력 문자열을 분할하고 속성 유형을 변환합니다. 새 튜플을 만들고 ‘student_list’에 튜플을 추가합니다.
- 만약 속성 유형이 ‘CHAR’이고 속성 길이가 최대 길이를 초과하는 경우, 새 튜플을 추가하지 않고 ‘False’를 반환합니다.
- 동일한 ‘student_id’의 튜플이 있는 경우, 새 튜플을 추가하지 말고 ‘False’를 반환합니다.
- 그렇지 않으면 ‘True’를 반환합니다.
- 예를 들어, ‘Jihyo Song’ 학생 정보를 추가하고 ‘Show()’ 기능을 이용해 ‘student_list’를 출력합니다.
3. Removal()
- Input : 조건에 맞는 문자열
- Output : Boolean
- 입력 문자열 형식은 Python의 ‘if문’의 조건과 같습니다. 조건에 맞는 ‘attribute_name’을 사용해야 합니다. 예를 들어 ‘student_id == 20129876’은 ID가 20129876 인 학생을 찾는데 사용되며, ‘age >= 30’ 은 30세 이상인 학생을 찾는데 사용됩니다.
- ‘CHAR’ 속성 유형을 제외한 5개의 연산자 ‘==’, ‘>=’, ‘<=’, ‘<’, ‘>’ 를 사용합니다. ‘CHAR’ 속성의 경우 동등 연산자(==)만 사용됩니다.
- 조건을 만족하는 튜플이 있는 경우, 튜플을 제거하고 ‘True’를 반환합니다.
- 입력 문자열이 비어있으면 튜플을 모두 제거하고 ‘True’를 반환합니다.
- 그렇지 않으면, ‘False’를 반환합니다.
- 예를 들어, 국적이 호주인 학생의 정보를 제거하고 ‘Show()’ 기능을 사용하여 ‘student_list’를 출력합니다.
4. Show()
- Input : 조건에 맞는 문자열
- Output : None (No return)
- 입력 조건을 만족하는 ‘student_list’ 의 튜플을 출력합니다.
- 조건의 요구사항은 ‘Removal()’ 기능과 같습니다. 입력 문자열이 비어 있으면, 모든 튜플을 출력합니다.
- 속성 이름을 먼저 출력해야 합니다. 조건에 맞는 튜플이 없을 경우, 속성의 이름만 출력합니다.
- 튜플을 출력할 때, ‘%d’, ‘%f’, ‘%s’와 같은 형식화된 출력을 사용해야 하고 각 속성의 길이를 정의할 수 있습니다.
- 예를 들어, 학생의 성별이 여자인 학생 정보를 출력하고, 모든 학생 정보를 출력합니다.
5. Statistic()
- Input : 조건에 맞는 문자열, 속성 이름인 문자열
- Output : None (No return)
- 조건을 만족하는 튜플 속성의 통계를 출력합니다. 통계는 합계, 평균 그리고 튜플의 개수입니다. 속성 유형이 ‘CHAR’인 경우, 합계 및 평균을 출력하지 않습니다.
- 조건에 대한 요구사항도 ‘Removal()’ 기능과 동일합니다.
- 속성의 이름을 출력해야 합니다. 조건에 만족하는 튜플이 없을 때, 모든 통계량은 0으로 출력됩니다.
- 예를 들어, 학생 ID 가 20110000 보다 크거나 같은 학생을 찾고, 그 학생들의 연령 통계를 출력합니다.
6. Writing()
- Input: None (No parameters)
- Output: None (No return)
- ‘student_information.txt’에 ‘student_list’를 씁니다.
- 상세설명에 있는 형식(형식1)을 사용하여 파일을 덮어씁니다.
- 프로그램이 완료되면 이 기능을 꼭 호출해야 합니다.
7. main()
- Input : None
- Output : None
- 사용자가 관리 작업을 선택할 수 있도록 반복적으로 요청합니다.
- ‘Addition()’과 ‘Removal()’ 기능에서, ‘False’가 반환될 때 ‘Fail to add’ 또는 ‘Fail to remove’를 출력합니다.
제출
코드 작성을 위해 예제 파일(‘student_information.txt)이 제공됩니다. 파일을 저장한 후, 프로젝트 게시판에 모범 답안과 비교해보세요~ 업로드 되어 있는 모범 답안이 꼭 정답은 아니니, 참고하셔서 더 나은 코드를 작성해보세요!
- cs_python_project1 ZIP
- 1) student_information.txt 2) 프로젝트 진행용 파일 : cs_python_project1_sample.py 3) 프로젝트 상세설명.pdf