Skip to content

[Is] credit manager 구현 - #14

Open
vanism2091 wants to merge 1 commit into
tasty-code:1_isfrom
vanism2091:main
Open

[Is] credit manager 구현#14
vanism2091 wants to merge 1 commit into
tasty-code:1_isfrom
vanism2091:main

Conversation

@vanism2091

Copy link
Copy Markdown

PR 타입

What kind of change does this PR introduce?

  • Bugfix
  • Feature
  • Code style update (formatting, local variables)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • CI related changes
  • Documentation content changes
  • angular.io application / infrastructure changes
  • Other... Please describe:

반영 브랜치

vanism2091/main -> 1_is

What is the current behavior?

Issue Number: N/A

추가한 기능

  • 사용자 입력을 받고 검증합니다
  • 학생을 추가합니다
  • 학생을 삭제합니다
  • 성적을 추가합니다
  • 성적을 삭제합니다
  • 성적의 평균을 보여줍니다
  • 프로그램 실행, 종료 시 데이터를 저장하고 불러옵니다

구조

  • Managers
    • CreditManager
    enumDataFile{staticletname:Stringstaticletdirectory:StringstaticletpathString:StringstaticvarpathUrl:URL}finalclassCreditManager{privatevarstatus:Statusprivatevarstudents:[Student]func run()
    private func parse(input:String)throws-> ParsedInput
    private funcdoWith(_ input:ParsedInput)throws
    private func start(_ input:ParsedInput)throws
    private func add(student input:ParsedInput)throws
    private func delete(student input:ParsedInput)throws
    private func add(score input:ParsedInput)throws
    private func delete(score input:ParsedInput)throws
    private func show(score input:ParsedInput)throws
    private func saveData()
    private func loadData()}
    • IOManager
      enumOutputType{case information
      case reaction
      case error
      }enumIOManager{staticletnameRegexstaticfunc getInput(isStartStatus:Bool)throws-> String static func checkValidity(of str:String)-> Bool
      static func writeMessage(_ message:String, type:OutputType=.information)}
  • Data Struct
    • Specific
      • Score
      enumScore:Float,Codable{case APlus, A, BPlus, B, CPlus, C, DPlus, D, F
      vardescription:Stringinit?(score:String)}
      • Status
      typealiasParsedInput=[Codable]enumStatus:String,Codable{case start
      case addStudent
      case deleteStudent
      case addScore
      case deleteScore
      case showScoreAverage
      case exit
      }extensionStatus{varinfoMessage:Stringfunc resMessage(input:ParsedInput)->String?func parse(input:String)->ParsedInput?}
      • Student
      finalclassStudent:Codable{letname:Stringprivate(set)varscores:[String:Score]varisCourseEmpty:BoolvaraverageScore:FloatvarallScoresDescription:Stringinit(name:String)func update(course:String, score:Score)func remove(course:String)->Score?}struct StudentList: Codable {letstudents:[Student]}
    • General
      • Error
      enumCMError:Error{case invalidStartInput
      case studentAleadyExists(name:String)case studentNotFound(name:String)case emptyCourse(name:String)case courseNotFound(name:String, course:String)case emptyStudents
      case quitProgram
      }enumIOError:Error{case wrongInput
      }
      • Info: StringLiterals
      enumInfo{staticletstart:StringenumStudent{staticletforAdd:Stringstaticfunc added(name:String)->StringstaticletforDelete:Stringstaticfunc deleted(name:String)->String}enum Score {
      staticletforAdd:Stringstaticfunc added(name:String, course:String, score:String)->StringstaticletforDelete:Stringstaticfunc deleted(name:String, course:String)->StringstaticletforAverage:String}enumData{staticfunc saved(names:[String])-> String
      static func loaded(names:[String])->String}enum Warning {
      staticletfailedToLoadData:StringstaticletfailedToLoadReaction:String}}

Does this PR introduce a breaking change?

  • Yes
  • No

Test Checklist

  • 저장
  • 불러오기
  • 입력 검증 테스트
    • 이름
    • 이름, 과목
    • 이름, 과목, 성적

Other information

구현 후 고민하는 점

  • 더 좋은 저장, 불러오기 방식이 무엇일까요?
  • ! 사용을 지양하기 위해 input을 검증하고 parse하는 과정에서 type downcasting 시 오류 체크를 2번 하게 된다. (Status.parse에서 한 번, CreditManager 내 method에서 한 번) 이를 해결하는 방법은 구조를 바꾸는 방법 뿐일까요?
  • 에러를 CMError와 IOError로 나누었는데, 불필요한 분리일까요?

@vanism2091vanism2091 changed the title credit manager 구현[Is] credit manager 구현Dec 20, 2022
Sign up for freeto 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

@vanism2091