学生信息管理系统 — 代码构思解析
学生信息管理系统 — 代码构思解析一、整体设计概要设计层次对应类/文件职责数据模型层IStudent接口、ManStudent、WomanStudent定义学生通用属性并实现性别具体类通用业务层AddT、RemoveT、UpdateT、SearchT基于泛型实现增删改查适用于任何实现了IStudent的类型性别视图层ManT、WomanT负责显示对应性别列表并提供功能菜单调用通用业务层主入口Program初始化两个性别列表显示主菜单进入对应性别视图核心思想通过接口 泛型约束让一份 CRUD 代码同时处理ManStudent和WomanStudent避免重复编写同时也保持了性别特有的显示与菜单逻辑独立。二、文件模块详解1. IStudent.cs —— 统一数据契约csharpusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 学生信息管理系统 { //定义学生们的通用属性用于给男生类和女生类使用 internal interface IStudent { //接口的待实现属性 string Name { get; set; } string Sex { get; set; } int Age { get; set; } double Score { get; set; } } }作者构思定义四个公共属性作为所有学生类型的“最小公共集合”。接口使得后续的泛型类可以约束T必须实现该接口从而安全地访问Name、Sex等成员。这种做法遵循面向接口编程原则提高了扩展性未来可增加Teacher类只要实现IStudent即可复用现有泛型代码。2. ManStudent.cs与 WomanStudent.cs —— 具体学生类ManStudent.cscsharpusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static 学生信息管理系统.Program; namespace 学生信息管理系统 { //储存男生的基本信息 public class ManStudent: IStudent { public string Name { get; set; } public string Sex { get; set; } public int Age { get; set; } public double Score { get; set; } public ManStudent(string name, string sex, int age, double score) { Name name; Sex sex; Age age; Score score; } public ManStudent() { } } }WomanStudent.cscsharpusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static 学生信息管理系统.Program; namespace 学生信息管理系统 { //储存女生的基本信息 public class WomanStudent: IStudent { public string Name { get; set; } public string Sex { get; set; } public int Age { get; set; } public double Score { get; set; } public WomanStudent(string name, string sex, int age, double score) { Name name; Sex sex; Age age; Score score; } public WomanStudent(){ } } }构思两个类都实现IStudent接口并自动实现属性。提供有参构造方便初始化示例数据和无参构造满足泛型new()约束用于AddT中创建实例。虽然两类的代码几乎完全相同但作者区分它们是为了在界面显示“男生信息”与“女生信息”时能明确类型同时在AddT中通过typeof(T)自动设置性别保证了数据一致性。3. 通用 CRUD 模块AddT、RemoveT、UpdateT、SearchT这些类都应用了相同的泛型约束where T : IStudent, new()。IStudent确保可使用Name、Sex等属性。new()确保可通过new T()创建对象用于添加功能。Add.cscsharpusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace 学生信息管理系统 { //男女共用的添加功能模块 //这里AddT只是使用IStudent的属性所以无需实现IStudent定义的属性和方法 internal class AddT where T : IStudent, new() { //IStudentT必须实现IStudent接口这样在类内部就可以安全地使用IStudent中定义的属性和方法如 Name、Sex //new()T必须具有一个公共无参构造函数这样在类内部才能使用new T()来创建T的实例 //用这个可以写public void Addd(){} //private ListT list new ListT(); public void Addd(ListT list) { Console.WriteLine(请输入姓名); string name Console.ReadLine(); Console.WriteLine(请输入年龄); int age; int.TryParse(Console.ReadLine(), out age); Console.WriteLine(请输入成绩); double score; double.TryParse(Console.ReadLine(), out score); // T student new T(); 后student 被编译器视为一个实现了 IStudent 的对象 T student new T(); student.Name name; //typeof(T):获取T的类型名称 string sex (typeof(T) typeof(ManStudent)) ? 男 : 女; student.Sex sex; student.Age age; student.Score score; list.Add(student); } } }构思方法接收ListT作为参数直接操作外部列表。通过new T()创建实例然后逐一赋值。关键点性别不由用户输入而是通过typeof(T)判断当前类型是ManStudent还是WomanStudent自动赋值为“男”或“女”。这样既减少用户操作又避免因输入不一致导致数据错误同时也使得添加逻辑与性别解耦。Remove.cscsharpusing System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 学生信息管理系统 { //男女共用的删除功能模块 internal class RemoveT where T : IStudent, new() { //IStudentT必须实现IStudent接口这样在类内部就可以安全地使用IStudent中定义的属性和方法如 Name、Sex //new()T必须具有一个公共无参构造函数这样在类内部才能使用new T()来创建T的实例 public void SRemove(ListT list) { Console.WriteLine(请输入要删除的信息的名字); string name Console.ReadLine(); for (int i 0; i list.Count; i) { if (list[i].Name name) { T removed list[i]; list.RemoveAt(i); //删除索引下标为i的 Console.WriteLine($已删除); return; } } Console.WriteLine($未找到姓名为「{name}」的学生。); } } }构思按姓名查找并删除第一个匹配项简化设计假定姓名唯一。删除后立即return避免继续循环。若未找到则提示。泛型使同一段代码能处理男生和女生列表。Update.cscsharpusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 学生信息管理系统 { //男女共用的修改功能模块 internal class UpdateT where T : IStudent, new() { //IStudentT必须实现IStudent接口这样在类内部就可以安全地使用IStudent中定义的属性和方法如 Name、Sex //new()T必须具有一个公共无参构造函数这样在类内部才能使用new T()来创建T的实例 public void SUpdate(ListT list) { Console.WriteLine(请输入要修改的信息的名字); string name Console.ReadLine(); for (int i 0; i list.Count; i) { if (list[i].Name name) { Console.WriteLine(已找到); Console.Write(请输入新姓名); list[i].Name Console.ReadLine(); Console.Write(请输入新年龄); list[i].Age int.Parse(Console.ReadLine()); Console.Write(请输入新成绩); list[i].Score double.Parse(Console.ReadLine()); break; } if (i list.Count-1) { Console.WriteLine(未找到按任意键重选); Console.ReadKey(); } } } } }构思同样按姓名查找并修改第一个匹配项。更新时性别不可修改因为类型已固定性别自动对应这符合业务逻辑。使用int.Parse和double.Parse但未做异常处理作者可能假设用户输入合法预留改进点。Search.cscsharpusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 学生信息管理系统 { //男女共用的查找功能模块 internal class SearchT where T : IStudent, new() { //IStudentT必须实现IStudent接口这样在类内部就可以安全地使用IStudent中定义的属性和方法如 Name、Sex //new()T必须具有一个公共无参构造函数这样在类内部才能使用new T()来创建T的实例 public void SSearch(ListT list) { Console.WriteLine(请输入要查找的人员的名字); string name Console.ReadLine(); for (int i 0; i list.Count; i) { if (list[i].Name name) { Console.WriteLine(已找到按任意键重选); Console.WriteLine(${list[i].Name}\t{list[i].Sex}\t ${list[i].Age}岁\t{list[i].Score}分); Console.ReadKey(); break; } if (i list.Count - 1) { Console.WriteLine(未找到按任意键重选); Console.ReadKey(); } } } } }构思查找并显示详细信息同样按姓名匹配。找到后显示并等待按键然后退出方法返回上级菜单未找到也会提示。由于使用了泛型list[i].Sex等属性可以安全访问。4. 性别视图层ManT与WomanTMan.cscsharpusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 学生信息管理系统 { //男生信息系统 internal class ManT where T : IStudent, new() { //IStudentT必须实现IStudent接口这样在类内部就可以安全地使用IStudent中定义的属性和方法如 Name、Sex //new()T必须具有一个公共无参构造函数这样在类内部才能使用new T()来创建T的实例 public void SMan(ListT list) { while (true) { Console.Clear(); Console.WriteLine( 男生信息); foreach (T s in list) { Console.WriteLine(${s.Name}\t{s.Sex}\t{s.Age}岁\t{s.Score}分); } Console.WriteLine(请选择功能1、增加 2、删除 3、修改 4、查询 0、回退); string xuan2_1 Console.ReadLine(); switch (xuan2_1) { case 1: AddT add new AddT(); add.Addd(list); break; case 2: RemoveT remove new RemoveT(); remove.SRemove(list); break; case 3: UpdateT update new UpdateT(); update.SUpdate(list); break; case 4: SearchT search new SearchT(); search.SSearch(list); break; case 0: return; } } } } }Woman.cscsharpusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static 学生信息管理系统.WomanStudent; namespace 学生信息管理系统 { internal class WomanTwhere T: IStudent, new() { //IStudentT必须实现IStudent接口这样在类内部就可以安全地使用IStudent中定义的属性和方法如 Name、Sex //new()T必须具有一个公共无参构造函数这样在类内部才能使用new T()来创建T的实例 public void SWoMan(ListT list) { //ListManStudent StudentsMan new ListManStudent(); while (true) { Console.Clear(); Console.WriteLine( 女生信息); foreach (T s in list) { Console.WriteLine(${s.Name}\t{s.Sex}\t{s.Age}岁\t{s.Score}分); } Console.WriteLine(请选择功能1、增加 2、删除 3、修改 4、查询 0、回退); string xuan2_1 Console.ReadLine(); switch (xuan2_1) { case 1: AddT add new AddT(); add.Addd(list); break; case 2: RemoveT remove new RemoveT(); remove.SRemove(list); break; case 3: UpdateT update new UpdateT(); update.SUpdate(list); break; case 4: SearchT search new SearchT(); search.SSearch(list); break; case 0: return; } } } } }构思这两个类的代码几乎完全相同区别仅在于标题文字“男生信息” vs “女生信息”。它们各自负责清屏并显示当前性别列表。提供功能菜单增删改查回退。根据用户选择实例化对应的泛型 CRUD 类并调用其方法。通过将“显示标题”和“菜单”与具体性别绑定实现了界面层与业务层的分离。虽然两个类高度相似但作者可能为了逻辑清晰也方便未来差异化定制而选择分开编写。5. 主程序 Program.cscsharpusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 学生信息管理系统 { internal class Program { static void Main(string[] args) { ListManStudent StudentsMan new ListManStudent(); StudentsMan.Add(new ManStudent(张三, 男, 20, 85.5)); ListWomanStudent StudentsWoman new ListWomanStudent(); StudentsWoman.Add(new WomanStudent(李四, 女, 19, 89.5)); bool b false; while (!b) { Console.Clear(); // 每次刷新界面 Console.WriteLine( 学生信息管理系统 ); Console.WriteLine( 1. 查看男生信息); Console.WriteLine( 2. 查看女生信息); Console.WriteLine( 0. 退出程序); Console.Write(请选择操作); string xuan1_1 Console.ReadLine(); switch (xuan1_1) { case 1: ManManStudent man new ManManStudent(); man.SMan(StudentsMan); //Man(StudentsMan); break; case 2: WomanWomanStudent woman new WomanWomanStudent(); woman.SWoMan(StudentsWoman); break; case 0: return; } } } } }构思初始化两个独立的列表分别存放男生和女生对象并各加入一条示例数据。主循环显示顶级菜单用户选择“1”或“2”后创建对应性别视图类的实例并传入对应的列表。进入子菜单后所有操作都基于该列表进行直到用户选择“回退”返回主菜单。使用bool b控制循环但实际并未修改b而是通过return直接退出程序选择0时—— 这可能是作者的简化处理也可视为一种实现方式。三、待改进方向合并ManT和WomanT为一个类通过参数传入标题。增加输入校验年龄、成绩转换失败时重试。支持按其他字段如年龄、成绩范围查询或修改。添加数据持久化文件或数据库防止程序退出后数据丢失。处理同名学生的冲突当前只操作第一个匹配项。

相关新闻

华为MetaERP Oracle EBS R12 PA VS Fusion Project PA:WBS、FBS(Fusion 中升级为 FPS)全维度核心差异深度解析前置基础定义统一1、WBS(

华为MetaERP Oracle EBS R12 PA VS Fusion Project PA:WBS、FBS(Fusion 中升级为 FPS)全维度核心差异深度解析前置基础定义统一1、WBS(

Oracle EBS R12 PA VS Fusion Project PA:WBS、FBS(Fusion 中升级为 FPS)全维度核心差异深度解析前置基础定义统一1、WBS(Work Breakdown Structure)两套系统含义一致:工作分解结构,业务执行载体…

2026/10/16 11:10:59 阅读更多 →
蓝牙语音通话核心技术:SCO与eSCO链路原理、区别与应用实战

蓝牙语音通话核心技术:SCO与eSCO链路原理、区别与应用实战

1. 项目概述:从通话卡顿到协议演进如果你做过蓝牙音频相关的开发,尤其是涉及语音通话的应用,大概率遇到过这样的问题:在相对复杂的无线环境下,用蓝牙耳机打电话,声音偶尔会断断续续,甚至出现短暂…

2026/10/10 4:14:30 阅读更多 →
IDEA主题美化实战:从配色方案到插件生态,打造高效开发环境

IDEA主题美化实战:从配色方案到插件生态,打造高效开发环境

1. 为什么你的IDEA需要一个新主题? 每天面对同一个开发环境超过8小时,视觉疲劳是真实存在的。我见过太多开发者,他们的IDEA还停留在默认的Darcula或IntelliJ Light主题上,代码配色也千篇一律。这不仅仅是审美问题,一个…

2026/10/17 22:55:03 阅读更多 →

最新新闻

公钥密码学与伪随机数:密钥生成中的随机源与熵池管理

公钥密码学与伪随机数:密钥生成中的随机源与熵池管理

1. 从一个看似矛盾的问题说起公钥密码学里有一个特别反直觉的事实:你用来加密的密钥是公开的,任何人都能拿到,但别人依然解不开你的密文。这件事第一次接触会觉得像魔术,但支撑它的数学基础其实相当朴素——单向函数。正向计算容易…

2026/10/18 0:48:30 阅读更多 →
信息安全意识PPT设计:从知道到做到的行为转化工具包

信息安全意识PPT设计:从知道到做到的行为转化工具包

简介:本资源是一份面向全民网络安全素养提升的国家网络安全宣传周主题PPT课件,适用于企事业单位安全培训、高校通识教育及社区科普宣讲等场景。内容紧扣信息泄露风险防范与网络安全意识培养,系统梳理了网络安全四大核心特征(机密性…

2026/10/18 0:48:30 阅读更多 →
Hy3-oQ2模型卡深度解读:什么是oQ校准量化,2.7 bits/weight意味着什么

Hy3-oQ2模型卡深度解读:什么是oQ校准量化,2.7 bits/weight意味着什么

【免费下载链接】Hy3-oQ2 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Hy3-oQ2 点击查看 免费下载 Hy3-oQ2 是腾讯混元 Hy3(295B MoE)大模型的 MLX oQ 校准量化版本:以 2.7 bits/weight 的有效精度,把…

2026/10/18 0:48:30 阅读更多 →
LayoutLM v3深度解析:多模态文档智能模型微调实战

LayoutLM v3深度解析:多模态文档智能模型微调实战

每次看到开源社区放出的文档智能模型有实质更新,我都要停下来仔细研究一番,LayoutLM系列就是这中间绕不开的名字。这个系列从最初把文本、布局、图像三种模态塞进同一个预训练框架开始,一步步变成了表格解析、票据识别、合同信息抽取这些场景…

2026/10/18 0:46:29 阅读更多 →
Event2Mind:让机器从事件文本中推理意图与反应

Event2Mind:让机器从事件文本中推理意图与反应

每次读到关于事件理解的研究,我都会习惯性地先想一个问题:机器读一句话,真的“读懂了”吗?拿“这个人被公司开除了”来说,字面上是一个解雇事件,但稍微有点常识的人都会接着想:他慌不慌&#xf…

2026/10/18 0:46:29 阅读更多 →
向量与矩阵范数详解:从L1/L2到谱范数的机器学习应用指南

向量与矩阵范数详解:从L1/L2到谱范数的机器学习应用指南

1. 为什么我们要关心“范数”这个数学工具第一次接触“范数”这个词,很多人会觉得它离实际开发很远,像是数学系课本里才会出现的抽象概念。但如果你做过机器学习、数值计算、信号处理,甚至只是用过正则化去调一个过拟合的模型,那你…

2026/10/18 0:46:29 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →