Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Jenna] 학생 명단 및 개별 성적 관리 프로그램 #12

Open
wants to merge 1 commit into
base: 1_Jenna
Choose a base branch
from

Conversation

ueunli
Copy link

@ueunli ueunli commented Dec 20, 2022

 
학생 명단 및 학생별 성적을 관리하는 커맨드 라인 툴을 아래와 같이 구현하였습니다. ↓


개요

  1. 조건반복문으로 메뉴 선택 또는 프로그램을 종료합니다.
  2. Student클래스의 생성자 및 소멸자를 통해 학생추가, 삭제를 실행, 안내합니다.
  3. Student클래스 객체의 저장속성을 통해 성적추가(변경), 삭제를 실행, 안내합니다.
  4. 올바른 메뉴선택 및 입력문자 감별은 에러처리 구문으로 작성하였습니다.
  5. Codable프로토콜 및 프로퍼티리스트 파일로 데이터를 백업, 불러올 수 있습니다.

주요기능 구현 방법

0. 메뉴 선택

  • repeat while문 내부에 switch case문 배치
  • X를 입력하면 해당 case의 코드(데이터 백업 및 문구 출력)를 실행한 뒤 반복문이 종료됩니다.

1. 학생 추가

  • 타입속성 딕셔너리 student는 Student객체들을 각각의 name속성(key)에 대응시켜 저장한 공간입니다.
  • 이곳의 key들 중 입력한 이름(input)이 존재하지 않을 경우에만 해당 이름을 가진 새로운 Student객체를 초기화합니다.
  • 실패가능생성자로 student에 새로 생성된 학생객체를 저장합니다.

2. 학생 삭제

  • 입력한 이름(input)에 대응하는 학생(Student객체)을 삭제(소멸)합니다.
  • removeValue(forKey:)가 옵셔널타입이므로, 삭제하고자 하는 값이 있을 경우에만 객체가 지워지며 소멸자가 작동합니다.

3. 성적 추가(변경)

  • 입력받은 문자열을 공백 기준으로 이름-과목-성적 3덩어리로 나누어 사용합니다.
    (자주 쓰이는 문자열 셋(이름-과목-성적)은 지역상수에 재할당하여 사용하기 쉽도록 하였습니다.)
  • 각 Student객체는 과목별 성적을 저장하는 딕셔너리형 타입속성 grades를 가집니다.
  • updateValue(_forKey:)로 없던 과목·성적을 추가하거나 있던 과목 성적을 수정할 수 있습니다.

4. 성적 삭제

  • 입력받은 문자열을 공백 기준으로 이름-과목 2덩어리로 나누어 상수로 할당해 사용합니다.
  • removeValue(_forKey:)grades에서 특정과목(및 대응하는 성적)을 삭제할 수 있습니다.

5. 평점 조회

  • 저장속성 grades와 계산속성 overallScore를 양식에 맞춰 출력합니다.
  • 평점은 학생객체의 계산속성에서 산정되며, 최대 소수점 2째자리까지만 나타납니다.
  • 짧은 과목명이 위에 출력되도록 정렬했습니다.

기타기능 구현 방법

입력문자열 가공 및 에러처리

  • 어절(공백 하나 혹은 여럿 기준)의 개수에 따라 이름만 or 이름과 과목 or 이름 과목 성적 상수에 값을 할당합니다.
  • 영문자 또는 숫자, 메뉴옵션에 해당하지 않는 경우에는 에러를 띄웁니다.

데이터 백업 및 재사용

  • 프로퍼티 리스트를 이용하여 지금까지 생성한 Student객체들을(Student.students) 백업하고 불러오는 코드를 작성했습니다.
  • 기 등록한 학생들의 성적도 정상적으로 조회 또는 변경할 수 있습니다.
     

1. 조건반복문으로 메뉴 선택 또는 프로그램을 종료합니다.
2. Student클래스의 생성자 및 소멸자를 통해 학생추가, 삭제를 실행, 안내합니다.
3. Student클래스 객체의 저장속성을 통해 성적추가(변경), 삭제를 실행, 안내합니다.
4. 올바른 메뉴선택 및 입력문자 감별은 에러처리 구문으로 작성하였습니다.
5. Codable프로토콜 및 프로퍼티리스트 파일로 데이터를 백업, 불러올 수 있습니다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant