From f656d00271e6fe6a17b6b84bcf244f72af613f1d Mon Sep 17 00:00:00 2001 From: SeoDongWook Date: Mon, 19 Dec 2022 11:21:40 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EC=B5=9C=EC=B4=88=20=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 0 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 11550 bytes .../xcschemes/xcschememanagement.plist | 14 ++++++++++++++ 3 files changed, 14 insertions(+) create mode 100644 .DS_Store create mode 100644 Git_ Exercise.xcodeproj/project.xcworkspace/xcuserdata/dongwookseo.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Git_ Exercise.xcodeproj/xcuserdata/dongwookseo.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..973a28c365e69be05bee79a869503ef18cc1dd49 GIT binary patch literal 6148 zcmeHK%}T>S5dOCI5b@HR9{1u^=o`e6;#KGaC{08wDGC07;3aS4OL*|$d+9ejLurW~ z6e&_>VCLIwW+vHhAd>+QCXdw^7y-zrf`fgUFGTK(_GDl?Lt;odBBpr474A^>ynW+8 zG9a}(#2FTNzy;Rpx4=CsdBS>@Xi#z8vaSto>+A8XY?iGar#}CAhGkO}^SYTcGJAb4 zk3U}CPk)o8`hzU(&H8EH_!=(GfHU9>>^uYP*&^A2qFZOc8E^(x49NE(QU!CvPBDEt zXwnEkl;6lCT+1vWG0`wL>=b#25;T;kp}|IspyAw)=9e3GiW-h!!$+_u2b)krdOGvR zLpb~{5r)| j2p6dp(^p#Y5j6?-qb!KIVW-F)ivI{C8r(PoTV>!AlC4I; literal 0 HcmV?d00001 diff --git a/Git_ Exercise.xcodeproj/project.xcworkspace/xcuserdata/dongwookseo.xcuserdatad/UserInterfaceState.xcuserstate b/Git_ Exercise.xcodeproj/project.xcworkspace/xcuserdata/dongwookseo.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..9fce606f842257bd39e6433a04bf111b74392fed GIT binary patch literal 11550 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 S1h0^@WIr4)e#ZW%=l>5!fMK=( literal 0 HcmV?d00001 diff --git a/Git_ Exercise.xcodeproj/xcuserdata/dongwookseo.xcuserdatad/xcschemes/xcschememanagement.plist b/Git_ Exercise.xcodeproj/xcuserdata/dongwookseo.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..9cab2b7 --- /dev/null +++ b/Git_ Exercise.xcodeproj/xcuserdata/dongwookseo.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + Git_ Exercise.xcscheme_^#shared#^_ + + orderHint + 0 + + + + From 2cc0d2871c2023ae9deb709bb239a5150306ad1f Mon Sep 17 00:00:00 2001 From: SeoDongWook Date: Mon, 19 Dec 2022 11:42:01 +0900 Subject: [PATCH 2/3] make Datamanager --- .DS_Store | Bin 6148 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 11550 -> 12699 bytes Git_ Exercise/main.swift | 164 +++++++++++++++++- 3 files changed, 163 insertions(+), 1 deletion(-) diff --git a/.DS_Store b/.DS_Store index 973a28c365e69be05bee79a869503ef18cc1dd49..508ad534507a8bcb89d602d92be4bf64e3137b2c 100644 GIT binary patch delta 29 lcmZoMXffE}!^Bi@cCsJS8O95n6`7y0Ol)A=%+B$b9{{6$3d{fi delta 29 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 delta 5419 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 xyXw2=d*CO2g#qK|{{`>sMVtTt diff --git a/Git_ Exercise/main.swift b/Git_ Exercise/main.swift index 986559b..7702c78 100644 --- a/Git_ Exercise/main.swift +++ b/Git_ Exercise/main.swift @@ -7,5 +7,167 @@ import Foundation -print("Hello, World!") +final class DataManager { + + private let defaults = UserDefaults.standard + + /// students: [ name : [ subject : point ] + var students : [String:[String:String]] = [:] + private let grades: [String:Double] = [ "A+":4.5, "A0":4, "B+":3.5, "B0":3, "C+":2.5, "C0":2, "D+":1.5, "D0":1, "F":0] + + + func setStoredData() { + + let storedData = defaults.dictionary(forKey: "studentsData") + + if storedData?.count != nil { students = storedData as! [String:[String:String]] } + else { students = [:] } + } + + func saveData() { + defaults.set(students, forKey: "studentsData") + UserDefaults.standard.synchronize() + } + + func convertGradeToPoint(grade: String) -> Double?{ + + if let point = grades[grade]{ + return point + } + print(#function) + print("⚠️ Error: convert fail") + return nil + } + + + ///이름 체크 -> 결과에 따라 함수분기 : readLine 입력 받은 후 사용할 것 + ///trueAction : 학생이름 있을때 액션 / falseAction : 학생이름이 없을때 액션 + func nameCheckAndAction(name: String?, trueAction: (_ name: String) -> Void, falseAction: (_ name: String) -> Void) { + + guard let name else { print("⚠️ 입력이 잘못되었습니다. 다시 확인해주세요."); return } + let studentName = name.trimmingCharacters(in: .whitespaces).firstUppercased + + if studentName.isEmpty { + print("⚠️ 입력이 없습니다. 다시 확인해주세요.") + return + } + if students.contains(where: { (key: String, value: [String:String]) in + return key == studentName + }){ + trueAction(studentName) + return + }else{ + falseAction(studentName) + return + } + } + + //학생추가 + func addStudent(){ + print("추가할 학생의 이름을 입력해주세요.") + let studentName: String? = readLine() + + nameCheckAndAction(name: studentName) { name in + print("⚠️ \(name)은 이미 존재하는 학생입니다. 추가하지 않습니다.") + } falseAction: { name in + students[name] = .init([:]) + print("✅ \(name) 학생을 추가했습니다.") + } + } + + //학생삭제 + func deleteStudent(){ + print("삭제할 학생의 이름을 입력해주세요.") + let studentName: String? = readLine() + + nameCheckAndAction(name: studentName) { name in + students[name] = nil + print("✅ \(name) 학생을 삭제하였습니다.") + } falseAction: { name in + print("⚠️ \(name) 학생을 찾지 못했습니다.") + } + } + + //성적추가(변경) + func updateGrades(){ + print("성적을 추가할 학생의 이름, 과목 이름, 성적(A+, A, F 등)을 띄어쓰기로 구분하여 차례로 작성해 주세요.\n입력예) Mickey Swift A+") + let inputData = readLine() + guard let inputData else { print("⚠️ 입력이 잘못되었습니다. 다시 확인해주세요."); return } + let studentData = inputData.split(separator: " ") + if studentData.count < 3 { + print("⚠️ 입력이 잘못되었습니다. 다시 확인해주세요.") + return + } + + let name = String(studentData[0]) + let subject = String(studentData[1]).firstUppercased + let grade = String(studentData[2]).firstUppercased + + if !grades.keys.contains(grade){ + print("⚠️ 잘못된 점수를 입력했습니다. 다시 확인해주세요.") + return + } + + print("[✅ \(name) 학생의 \(subject) 과목이 \(grade)로 추가(변경) 되었습니다. ]") + nameCheckAndAction(name: name) { name in + students[name]?.updateValue(grade, forKey: subject) + } falseAction: { name in + print("⚠️ \(name) 학생을 찾지 못했습니다.") + } + } + + //성적삭제 + func deleteGrade(){ + print("성적을 삭제할 학생의 이름, 과목 이름을 띄어쓰기로 구분하여 차례로 작성해주세요.\n입력예) Mickey Swift") + let inputData = readLine() + guard let inputData else { print("⚠️ 입력이 잘못되었습니다. 다시 확인해주세요."); return } + let studentData = inputData.split(separator: " ") + if studentData.count < 2 { print("⚠️ 입력이 잘못되었습니다. 다시 확인해주세요."); return } + + let name = String(studentData[0]).firstUppercased + let subject = String(studentData[1]).firstUppercased + + print("✅ \(name) 학생의 \(subject) 과목의 성적이 삭제되었습니다.") + nameCheckAndAction(name: name) { name in + students[name]?.removeValue(forKey: subject) + } falseAction: { name in + print("⚠️ \(name) 학생을 찾지 못했습니다.") + } + } + + //평점보기 + func getCredit(){ + print("평점을 알고싶은 학생의 이름을 입력해주세요.") + let inputData = readLine() + nameCheckAndAction(name: inputData) { name in + let datas = students[name]?.compactMap({ (key: String, value: String) in + return (key, value) + }) + var totalPoint = 0.0 + if datas?.count != 0 { + datas?.forEach{ data in + print("\(data.0): \(data.1)") + if let point = convertGradeToPoint(grade: data.1){ + totalPoint += point + } + } + + totalPoint = totalPoint/Double(datas!.count) + let credit = String(format: "%.2f", totalPoint).trimmingCharacters(in: ["0","."]) + print("✅ 평점: \(credit)") + } else { + print("⚠️ 학생의 성적이 없습니다.") + } + + } falseAction: { name in + print("⚠️ \(name) 학생을 찾지 못했습니다.") + } + } +} + + +extension StringProtocol { + var firstUppercased: String { return prefix(1).uppercased() + dropFirst() } + var firstCapitalized: String { return prefix(1).capitalized + dropFirst() } +} From ffe4178fa4b6bdf8c1db5d6054fdee0e51c35090 Mon Sep 17 00:00:00 2001 From: SeoDongWook Date: Mon, 19 Dec 2022 11:44:16 +0900 Subject: [PATCH 3/3] make main loop --- .DS_Store | Bin 6148 -> 6148 bytes .../UserInterfaceState.xcuserstate | Bin 12699 -> 12735 bytes Git_ Exercise/main.swift | 48 ++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/.DS_Store b/.DS_Store index 508ad534507a8bcb89d602d92be4bf64e3137b2c..e8116ce9dfc8820a37f4ac1c5981a4e236f11004 100644 GIT binary patch delta 14 VcmZoMXffE}%f$F`vmetoQ2-}~1t7xe?jH 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 delta 4482 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