Skip to content

Conversation

@ComaJJo
Copy link

@ComaJJo ComaJJo commented Dec 20, 2022

안녕하세요. JoJo입니다.
학생성적관리시스템 구현 완료하여 PR 보냅니다.


기능구현

Student : 구조체로 만들어 성적추가, 삭제, 전체성적, 평점계산 기능을 추가했습니다.
Grade : 성적을 enum타입으로 정리하고 계산 또는 성적을 보여줄때 필요한 값을 얻기 위해 타입함수를 통해 값을 전환하도록 했습니다.
InputManager : 입력값을 정규표현식 등 조건을 사용하여 에러처리 하였습니다.
GradeMangerSystem : 학생이 추가되면 인스턴스를 찍어낼 수 있도록 하였으며, 딕셔너리를 활용하여 학생 추가, 삭제, 성적수정, 성적삭제, 평점조회 기능을 추가하였습니다.
GradeManager : Bool 값을 활용하여 지속 반복 및 종료 하도록 하였습니다.


아쉬운점

데이터 저장 : 저장해야 하는 데이터가 적어서 UserDefaults를 활용하려고 3가지 방법을 적용했지만 모두 실패하였습니다.

  1. 인스턴스가 없는 Student 구조체에는 Codable 프로토콜이 적용되지 않았습니다
  2. GradeManagerSystem 클래스에서 studentDictionary 데이터를 저장하려 하였지만 이또한 Student구조체를 포함하고 있어서 실패하였습니다.
  3. 구조체를 배열로 전환하는 내용을 overflow에서 찾아서 해당 내용을 통해 데이터를 변환하는데까지는 성공했지만 구조체의 인스턴스여서 그런지 배열 안에서도 다른 형식을 가지고 있어서 저장&불러오기를 하는데 실행되지 않았습니다.

궁금한점

사용자 입력값 처리 : 저는 정규표현식을 활용하여 사용자 입력값을 오류 처리 하였습니다. 만약 데이터에 숫자만 입력되어도 처리가 될텐데.....ex) 학생이름 : 1234 그거 또한 막을 수 있는 방법이 있을까요?̊̈
제가 숫자를 추가한 이유는 동명이인 때문이었습니다. ex) jake1, jake2

 let receivedInput = readLine()
        
        let regexExpression = "^[a-zA-Z0-9]*$"
        let regexTest = NSPredicate(format:"SELF MATCHES %@", regexExpression)
        
        guard let receivedInput = receivedInput, receivedInput != "", regexTest.evaluate(with: receivedInput) else {
            throw InputError.invalidInput
        }
        
        return receivedInput

@ComaJJo ComaJJo changed the title 학생성적관리시스템(JoJo) [JoJo] 학생성적관리시스템 Dec 20, 2022
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