diff --git a/Homework/Program.cs b/Homework/Program.cs index b728a41..8aaca96 100644 --- a/Homework/Program.cs +++ b/Homework/Program.cs @@ -1,4 +1,4 @@ -// See https://aka.ms/new-console-template for more information +// See https://aka.ms/new-console-template for more information using System; using System.Collections.Generic; using System.IO; @@ -9,17 +9,21 @@ namespace StudentManagementSystem public enum Grade { // TODO: 定义成绩等级 F(0), D(60), C(70), B(80), A(90) - + F = 0, + D = 60, + C = 70, + B = 80, + A = 90 } // 泛型仓储接口 public interface IRepository { // TODO: 定义接口方法 - // Add(T item) - // Remove(T item) 返回bool - // GetAll() 返回List - // Find(Func predicate) 返回List + void Add(T item); + bool Remove(T item); + List GetAll(); + List Find(Func predicate); } @@ -27,25 +31,36 @@ public interface IRepository public class Student : IComparable { // TODO: 定义字段 StudentId, Name, Age - - + public string StudentId; + public string Name; + public int Age; + + public Student(string studentId, string name, int age) { // TODO: 实现构造方法,包含参数验证(空值检查) - + if (string.IsNullOrWhiteSpace(studentId)) + throw new ArgumentException("学号不能为空", nameof(studentId)); + if (string.IsNullOrWhiteSpace(name)) + throw new ArgumentException("姓名不能为空", nameof(name)); + if (age <= 0) + throw new ArgumentException("年龄必须大于0", nameof(age)); + StudentId = studentId; + Name = name; + Age = age; } public override string ToString() { - // TODO: 返回格式化的学生信息字符串 - + return $"学号: {StudentId}, 姓名: {Name}, 年龄: {Age}"; } // TODO: 实现IComparable接口,按学号排序 // 提示:使用string.Compare方法 public int CompareTo(Student? other) { - + if (other == null) return 1; + return string.Compare(StudentId, other.StudentId, StringComparison.Ordinal); } public override bool Equals(object? obj) @@ -63,18 +78,24 @@ public override int GetHashCode() public class Score { // TODO: 定义字段 Subject, Points - - + string Subject; + public double Points; + public Score(string subject, double points) { // TODO: 实现构造方法,包含参数验证 - + if (string.IsNullOrWhiteSpace(subject)) + throw new ArgumentException("科目不能为空", nameof(subject)); + if (points < 0 || points > 100) + throw new ArgumentException("分数必须在0-100之间", nameof(points)); + Subject = subject; + Points = points; } public override string ToString() { // TODO: 返回格式化的成绩信息 - + return $"{Subject}: {Points:F1}"; } } @@ -83,7 +104,7 @@ public class StudentManager : IRepository { // TODO: 定义私有字段存储学生列表 // 提示:使用List存储 - + List students = new List(); public void Add(Student item) { @@ -96,69 +117,122 @@ public void Add(Student item) public bool Remove(Student item) { // TODO: 实现Remove方法 - + if (item == null) + throw new ArgumentNullException(nameof(item)); + if (students.Contains(item)) + students.Remove(item); + else + return false; + return true; } public List GetAll() { // TODO: 返回学生列表的副本 - + return new List(students); } public List Find(Func predicate) { // TODO: 使用foreach循环查找符合条件的学生 - + List result = new List(); + foreach (var student in students) + { + if (predicate(student)) + result.Add(student); + } + return result; } // 查找年龄在指定范围内的学生 public List GetStudentsByAge(int minAge, int maxAge) { // TODO: 使用foreach循环和if判断实现年龄范围查询 - + List result = new List(); + foreach (var student in students) + { + if (student.Age >= minAge && student.Age <= maxAge) + result.Add(student); + } + return result; } } + // 成绩管理类 public class ScoreManager { // TODO: 定义私有字段存储成绩字典 // 提示:使用Dictionary>存储 - - + Dictionary> scores = new Dictionary>(); public void AddScore(string studentId, Score score) { // TODO: 实现添加成绩的逻辑 // 1. 参数验证 // 2. 初始化学生成绩列表(如不存在) // 3. 添加成绩 - + if (studentId == null || score == null) + throw new ArgumentNullException(); + if (!scores.ContainsKey(studentId)) + scores[studentId] = new List(); + scores[studentId].Add(score); + } public List GetStudentScores(string studentId) { // TODO: 获取指定学生的所有成绩 - + if (scores.ContainsKey(studentId)) + return new List(scores[studentId]); + else + return new List(); } public double CalculateAverage(string studentId) { // TODO: 计算指定学生的平均分 // 提示:使用foreach循环计算总分,然后除以科目数 - + double total = 0; + foreach (var score in scores[studentId]) + { + total += score.Points; + } + if (total==0) + return 0; + else + return total / scores[studentId].Count; } // TODO: 使用模式匹配实现成绩等级转换 public Grade GetGrade(double score) { - + switch (score) + { + case var s when s >= 90: + return Grade.A; + case var s when s >= 80: + return Grade.B; + case var s when s >= 70: + return Grade.C; + case var s when s >= 60: + return Grade.D; + default: + return Grade.F; + } } public List<(string StudentId, double Average)> GetTopStudents(int count) { // TODO: 使用简单循环获取平均分最高的学生 // 提示:可以先计算所有学生的平均分,然后排序取前count个 - + List<(string StudentId, double Average)> result = new List<(string StudentId, double Average)>(); + foreach (var studentId in scores.Keys) + { + double average = CalculateAverage(studentId); + result.Add((studentId, average)); + } + result.Sort((a, b) => b.Average.CompareTo(a.Average)); + return result.GetRange(0, count); } public Dictionary> GetAllScores() @@ -177,7 +251,13 @@ public void SaveStudentsToFile(List students, string filePath) try { // 在这里实现文件写入逻辑 - + using (StreamWriter writer = new StreamWriter(filePath)) + { + foreach (var student in students) + { + writer.WriteLine($"{student.StudentId},{student.Name},{student.Age}"); + } + } } catch (Exception ex) { @@ -194,7 +274,20 @@ public List LoadStudentsFromFile(string filePath) try { // 在这里实现文件读取逻辑 - + using (StreamReader reader = new StreamReader(filePath)) + { + string? line; + while ((line = reader.ReadLine()) != null) + { + string[] parts = line.Split(','); + if (parts.Length != 3) + continue; + string studentId = parts[0]; + string name = parts[1]; + int age = int.Parse(parts[2]); + students.Add(new Student(studentId, name, age)); + } + } } catch (Exception ex) { @@ -264,8 +357,8 @@ static void Main(string[] args) Console.WriteLine($"程序执行过程中发生错误: {ex.Message}"); } - Console.WriteLine("\n程序执行完毕,按任意键退出..."); - Console.ReadKey(); + Console.WriteLine("\n程序执行完毕,按回车键退出..."); + Console.ReadLine(); } } } \ No newline at end of file diff --git a/Homework/bin/Debug/net9.0/Homework.deps.json b/Homework/bin/Debug/net9.0/Homework.deps.json new file mode 100644 index 0000000..d987294 --- /dev/null +++ b/Homework/bin/Debug/net9.0/Homework.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v9.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v9.0": { + "Homework/1.0.0": { + "runtime": { + "Homework.dll": {} + } + } + } + }, + "libraries": { + "Homework/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/Homework/bin/Debug/net9.0/Homework.dll b/Homework/bin/Debug/net9.0/Homework.dll new file mode 100644 index 0000000..b1179da Binary files /dev/null and b/Homework/bin/Debug/net9.0/Homework.dll differ diff --git a/Homework/bin/Debug/net9.0/Homework.exe b/Homework/bin/Debug/net9.0/Homework.exe new file mode 100644 index 0000000..e7ae332 Binary files /dev/null and b/Homework/bin/Debug/net9.0/Homework.exe differ diff --git a/Homework/bin/Debug/net9.0/Homework.pdb b/Homework/bin/Debug/net9.0/Homework.pdb new file mode 100644 index 0000000..061e4b1 Binary files /dev/null and b/Homework/bin/Debug/net9.0/Homework.pdb differ diff --git a/Homework/bin/Debug/net9.0/Homework.runtimeconfig.json b/Homework/bin/Debug/net9.0/Homework.runtimeconfig.json new file mode 100644 index 0000000..b19c3c8 --- /dev/null +++ b/Homework/bin/Debug/net9.0/Homework.runtimeconfig.json @@ -0,0 +1,12 @@ +{ + "runtimeOptions": { + "tfm": "net9.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "9.0.0" + }, + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/Homework/obj/Debug/net9.0/Homework.AssemblyInfo.cs b/Homework/obj/Debug/net9.0/Homework.AssemblyInfo.cs index aa6f005..30118f1 100644 --- a/Homework/obj/Debug/net9.0/Homework.AssemblyInfo.cs +++ b/Homework/obj/Debug/net9.0/Homework.AssemblyInfo.cs @@ -13,7 +13,7 @@ [assembly: System.Reflection.AssemblyCompanyAttribute("Homework")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3439ef5fa11ea974a437d4e71f6d7e82763f847e")] [assembly: System.Reflection.AssemblyProductAttribute("Homework")] [assembly: System.Reflection.AssemblyTitleAttribute("Homework")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/Homework/obj/Debug/net9.0/Homework.AssemblyInfoInputs.cache b/Homework/obj/Debug/net9.0/Homework.AssemblyInfoInputs.cache index 497cd46..c57f646 100644 --- a/Homework/obj/Debug/net9.0/Homework.AssemblyInfoInputs.cache +++ b/Homework/obj/Debug/net9.0/Homework.AssemblyInfoInputs.cache @@ -1 +1 @@ -92fcf719969c7f59361926c468f07a76ab2866f8147167aa553b98c3b9d7ed15 +3e80dbcd1ff00cdcba3863df6d82f161321270261e04e5ccbff3d91e740385e0 diff --git a/Homework/obj/Debug/net9.0/Homework.GeneratedMSBuildEditorConfig.editorconfig b/Homework/obj/Debug/net9.0/Homework.GeneratedMSBuildEditorConfig.editorconfig index 5bddca1..d431b59 100644 --- a/Homework/obj/Debug/net9.0/Homework.GeneratedMSBuildEditorConfig.editorconfig +++ b/Homework/obj/Debug/net9.0/Homework.GeneratedMSBuildEditorConfig.editorconfig @@ -8,7 +8,7 @@ build_property.PlatformNeutralAssembly = build_property.EnforceExtendedAnalyzerRules = build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = Homework -build_property.ProjectDir = C:\Users\ms169\Desktop\Homework\Homework\ +build_property.ProjectDir = E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.EffectiveAnalysisLevelStyle = 9.0 diff --git a/Homework/obj/Debug/net9.0/Homework.assets.cache b/Homework/obj/Debug/net9.0/Homework.assets.cache index e69f95a..512a954 100644 Binary files a/Homework/obj/Debug/net9.0/Homework.assets.cache and b/Homework/obj/Debug/net9.0/Homework.assets.cache differ diff --git a/Homework/obj/Debug/net9.0/Homework.csproj.CoreCompileInputs.cache b/Homework/obj/Debug/net9.0/Homework.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..08e0cc5 --- /dev/null +++ b/Homework/obj/Debug/net9.0/Homework.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +1fd125f1881af0b1d5af23aa715b47d86fb58cf91fb04cb99d729a36a293b95c diff --git a/Homework/obj/Debug/net9.0/Homework.csproj.FileListAbsolute.txt b/Homework/obj/Debug/net9.0/Homework.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..b52d00b --- /dev/null +++ b/Homework/obj/Debug/net9.0/Homework.csproj.FileListAbsolute.txt @@ -0,0 +1,15 @@ +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\bin\Debug\net9.0\Homework.exe +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\bin\Debug\net9.0\Homework.deps.json +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\bin\Debug\net9.0\Homework.runtimeconfig.json +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\bin\Debug\net9.0\Homework.dll +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\bin\Debug\net9.0\Homework.pdb +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\obj\Debug\net9.0\Homework.GeneratedMSBuildEditorConfig.editorconfig +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\obj\Debug\net9.0\Homework.AssemblyInfoInputs.cache +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\obj\Debug\net9.0\Homework.AssemblyInfo.cs +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\obj\Debug\net9.0\Homework.csproj.CoreCompileInputs.cache +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\obj\Debug\net9.0\Homework.sourcelink.json +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\obj\Debug\net9.0\Homework.dll +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\obj\Debug\net9.0\refint\Homework.dll +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\obj\Debug\net9.0\Homework.pdb +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\obj\Debug\net9.0\Homework.genruntimeconfig.cache +E:\summerproject\hw\finished\3\CSharpHomework2025\Homework\obj\Debug\net9.0\ref\Homework.dll diff --git a/Homework/obj/Debug/net9.0/Homework.dll b/Homework/obj/Debug/net9.0/Homework.dll new file mode 100644 index 0000000..b1179da Binary files /dev/null and b/Homework/obj/Debug/net9.0/Homework.dll differ diff --git a/Homework/obj/Debug/net9.0/Homework.genruntimeconfig.cache b/Homework/obj/Debug/net9.0/Homework.genruntimeconfig.cache new file mode 100644 index 0000000..d93dbf9 --- /dev/null +++ b/Homework/obj/Debug/net9.0/Homework.genruntimeconfig.cache @@ -0,0 +1 @@ +69d5b00e3f24486c4f950fabda5f365c9078cd42ae4e6d3db90f28389da708f0 diff --git a/Homework/obj/Debug/net9.0/Homework.pdb b/Homework/obj/Debug/net9.0/Homework.pdb new file mode 100644 index 0000000..061e4b1 Binary files /dev/null and b/Homework/obj/Debug/net9.0/Homework.pdb differ diff --git a/Homework/obj/Debug/net9.0/Homework.sourcelink.json b/Homework/obj/Debug/net9.0/Homework.sourcelink.json new file mode 100644 index 0000000..a370dad --- /dev/null +++ b/Homework/obj/Debug/net9.0/Homework.sourcelink.json @@ -0,0 +1 @@ +{"documents":{"E:\\summerproject\\hw\\finished\\3\\CSharpHomework2025\\*":"https://raw.githubusercontent.com/RhNO3-lx/CSharpHomework2025/3439ef5fa11ea974a437d4e71f6d7e82763f847e/*"}} \ No newline at end of file diff --git a/Homework/obj/Debug/net9.0/apphost.exe b/Homework/obj/Debug/net9.0/apphost.exe new file mode 100644 index 0000000..e7ae332 Binary files /dev/null and b/Homework/obj/Debug/net9.0/apphost.exe differ diff --git a/Homework/obj/Debug/net9.0/ref/Homework.dll b/Homework/obj/Debug/net9.0/ref/Homework.dll new file mode 100644 index 0000000..17a5de3 Binary files /dev/null and b/Homework/obj/Debug/net9.0/ref/Homework.dll differ diff --git a/Homework/obj/Debug/net9.0/refint/Homework.dll b/Homework/obj/Debug/net9.0/refint/Homework.dll new file mode 100644 index 0000000..17a5de3 Binary files /dev/null and b/Homework/obj/Debug/net9.0/refint/Homework.dll differ diff --git a/Homework/obj/Homework.csproj.nuget.dgspec.json b/Homework/obj/Homework.csproj.nuget.dgspec.json index 2ef35da..076567a 100644 --- a/Homework/obj/Homework.csproj.nuget.dgspec.json +++ b/Homework/obj/Homework.csproj.nuget.dgspec.json @@ -1,23 +1,23 @@ { "format": 1, "restore": { - "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj": {} + "E:\\summerproject\\hw\\finished\\3\\CSharpHomework2025\\Homework\\Homework.csproj": {} }, "projects": { - "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj": { + "E:\\summerproject\\hw\\finished\\3\\CSharpHomework2025\\Homework\\Homework.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj", + "projectUniqueName": "E:\\summerproject\\hw\\finished\\3\\CSharpHomework2025\\Homework\\Homework.csproj", "projectName": "Homework", - "projectPath": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj", - "packagesPath": "C:\\Users\\ms169\\.nuget\\packages\\", - "outputPath": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\obj\\", + "projectPath": "E:\\summerproject\\hw\\finished\\3\\CSharpHomework2025\\Homework\\Homework.csproj", + "packagesPath": "C:\\Users\\32492\\.nuget\\packages\\", + "outputPath": "E:\\summerproject\\hw\\finished\\3\\CSharpHomework2025\\Homework\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + "A:\\VSShared\\NuGetPackages" ], "configFilePaths": [ - "C:\\Users\\ms169\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Users\\32492\\AppData\\Roaming\\NuGet\\NuGet.Config", "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" ], @@ -44,7 +44,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.200" + "SdkAnalysisLevel": "9.0.100" }, "frameworks": { "net9.0": { @@ -65,7 +65,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.201/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.102/PortableRuntimeIdentifierGraph.json" } } } diff --git a/Homework/obj/Homework.csproj.nuget.g.props b/Homework/obj/Homework.csproj.nuget.g.props index 9026052..8bf73f1 100644 --- a/Homework/obj/Homework.csproj.nuget.g.props +++ b/Homework/obj/Homework.csproj.nuget.g.props @@ -5,12 +5,12 @@ NuGet $(MSBuildThisFileDirectory)project.assets.json $(UserProfile)\.nuget\packages\ - C:\Users\ms169\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + C:\Users\32492\.nuget\packages\;A:\VSShared\NuGetPackages PackageReference - 6.13.1 + 6.12.2 - - + + \ No newline at end of file diff --git a/Homework/obj/project.assets.json b/Homework/obj/project.assets.json index 907663e..b035737 100644 --- a/Homework/obj/project.assets.json +++ b/Homework/obj/project.assets.json @@ -8,23 +8,23 @@ "net9.0": [] }, "packageFolders": { - "C:\\Users\\ms169\\.nuget\\packages\\": {}, - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} + "C:\\Users\\32492\\.nuget\\packages\\": {}, + "A:\\VSShared\\NuGetPackages": {} }, "project": { "version": "1.0.0", "restore": { - "projectUniqueName": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj", + "projectUniqueName": "E:\\summerproject\\hw\\finished\\3\\CSharpHomework2025\\Homework\\Homework.csproj", "projectName": "Homework", - "projectPath": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj", - "packagesPath": "C:\\Users\\ms169\\.nuget\\packages\\", - "outputPath": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\obj\\", + "projectPath": "E:\\summerproject\\hw\\finished\\3\\CSharpHomework2025\\Homework\\Homework.csproj", + "packagesPath": "C:\\Users\\32492\\.nuget\\packages\\", + "outputPath": "E:\\summerproject\\hw\\finished\\3\\CSharpHomework2025\\Homework\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + "A:\\VSShared\\NuGetPackages" ], "configFilePaths": [ - "C:\\Users\\ms169\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Users\\32492\\AppData\\Roaming\\NuGet\\NuGet.Config", "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" ], @@ -51,7 +51,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "9.0.200" + "SdkAnalysisLevel": "9.0.100" }, "frameworks": { "net9.0": { @@ -72,7 +72,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.201/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.102/PortableRuntimeIdentifierGraph.json" } } } diff --git a/Homework/obj/project.nuget.cache b/Homework/obj/project.nuget.cache index d182034..4400ce9 100644 --- a/Homework/obj/project.nuget.cache +++ b/Homework/obj/project.nuget.cache @@ -1,8 +1,8 @@ { "version": 2, - "dgSpecHash": "Mpgpv19Q1hE=", + "dgSpecHash": "AomzBcPk/pY=", "success": true, - "projectFilePath": "C:\\Users\\ms169\\Desktop\\Homework\\Homework\\Homework.csproj", + "projectFilePath": "E:\\summerproject\\hw\\finished\\3\\CSharpHomework2025\\Homework\\Homework.csproj", "expectedPackageFiles": [], "logs": [] } \ No newline at end of file