C#学生管理系统 进阶(通过接口,继承接口的类,实现接口约束_对List中存储的数据进行排列)

news/2025/3/1 5:28:51/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;namespace _3.List学生管理系统
{internal class Program{static List<Student> list = new List<Student>{new Student(){Id = 1,Name ="凡凡",Age =24,Gender ="男" ,Height=1.80},new Student(){Id = 3,Name ="爽爽",Age =18,Gender ="女" ,Height=1.73},new Student(){Id = 2,Name ="坤坤",Age =21,Gender ="男" ,Height=1.70}};static MyComparer<Student> comparer = new MyComparer<Student>();static void Main(string[] args){while (true){Console.WriteLine("输入你需要的功能\n1.添加 2.删除 3.显示所有 4.查找单个 5.修改 6.排序 7.退出");string a=Console.ReadLine();switch (a){case "1":AddStudent();Console.WriteLine("添加操作完成");break;case "2":Console.WriteLine("输入你需要删除的学生学号");string id1 =Console.ReadLine() ;Cunzai(id1);DeleteStudent(id1);Console.WriteLine("删除操作完成");break;case "3":DisplayStudent();Console.WriteLine("显示所有学生操作完成");break;case "4":Console.WriteLine("输入单个查询的学生学号");string id=Console.ReadLine();Cunzai(id);SearchStudent(id);Console.WriteLine("查询单个学生操作完成");break;case "5":Console.WriteLine("输入修改信息的学生学号");string id2 = Console.ReadLine();Cunzai(id2);ModifyStudent(id2);Console.WriteLine("修改单个学生操作完成");break;case "6":Console.WriteLine("输入你需要的选项:1.根据学号排序 2.根据年龄排序 3.根据身高排序");string b=Console.ReadLine();Paixu(b);break;case "7":Console.WriteLine("退出成功");return;default:Console.WriteLine("你输入的不符合规范");break;}}}/// <summary>/// 根据输入的选项对学生排序/// </summary>/// <param name="pai"></param>static void Paixu(string pai){switch (pai){case "1":comparer.Sort(list);DisplayStudent1(list);Console.WriteLine("根据学号排序操作完成");break;case "2":comparer.Sort1(list);DisplayStudent1(list);Console.WriteLine("根据年龄排序操作完成");break;case "3":comparer.Sort2(list);DisplayStudent1(list);Console.WriteLine("根据身高排序操作完成");break;default:Console.WriteLine("输入的选项不存在");break;}}/// <summary>/// 显示排序后的学生/// </summary>/// <param name="list"></param>static void DisplayStudent1(List<Student> list){foreach (var item in list){Console.WriteLine(item);}}/// <summary>/// 确保学号唯一性/// </summary>/// <param name="id"></param>/// <returns></returns>static string Weiyi(string id){if (id != ""){foreach (var item in list){if (item.Id == int.Parse(id)){return "false";}}}else{return "-1";}return "true";}/// <summary>/// 检查该学号学生是否存在/// </summary>/// <param name="id">输入的学号</param>static void Cunzai(string id){if(Weiyi(id)=="true"){Console.WriteLine("该学号不存在");return;}else if(Weiyi(id)=="-1"){throw new Exception("请不要输入空字符串");}}/// <summary>/// 添加学生/// </summary>static void AddStudent(){Console.WriteLine("输入学号");string id=Console.ReadLine();Console.WriteLine("输入姓名");string name = Console.ReadLine();Console.WriteLine("输入年龄");string age = Console.ReadLine();Console.WriteLine("输入性别(女:0\t男:1)");string gender = Console.ReadLine();Console.WriteLine("输入身高(m)");string height=Console.ReadLine();try{if(Weiyi(id)=="true"){if(double.Parse(height)>2.50){Console.WriteLine("身高输入不符合规范");return;}Student student = new Student(){Id = int.Parse(id),Name = name,Age = int.Parse(age),Gender = gender == "0" ? "女" : "男",Height=double.Parse(height)};list.Add(student);Console.WriteLine("添加成功");}else{Console.WriteLine("此学号已被使用,添加失败");}}catch {Console.WriteLine("输入格式有误");}}/// <summary>/// 显示所有学生/// </summary>static void DisplayStudent(){var student =from x in listselect x.ToString();foreach (var item in student){Console.WriteLine(item.ToString());}}/// <summary>/// 删除单个学生/// </summary>static void DeleteStudent(string id){for (int i = 0; i <list.Count; i++){if (list[i].Id==int.Parse(id)){list.RemoveAt(i);Console.WriteLine("删除成功");}}}/// <summary>/// 显示单个学生信息/// </summary>/// <param name="id"></param>static void SearchStudent(string id){var student = from x in listwhere x.Id == int.Parse(id)select x;foreach (var item in student){Console.WriteLine(item.ToString());}}/// <summary>/// 修改单个学生信息/// </summary>/// <param name="id"></param>static void ModifyStudent(string id){for (int i = 0; i < list.Count; i++){if (list[i].Id == int.Parse(id)){Console.WriteLine("不修改的信息直接跳过");Console.WriteLine("输入修改的姓名");string name = Console.ReadLine();Console.WriteLine("输入修改的年龄");string age = Console.ReadLine();Console.WriteLine("输入修改的性别(女:0\t男:1)");string gender = Console.ReadLine();Console.WriteLine("输入身高(m)");string height = Console.ReadLine();try{if (double.Parse(height) > 2.50){Console.WriteLine("身高输入不符合规范");return;}list[i].Name = name == "" ? list[i].Name : name;list[i].Age = age == "" ? list[i].Age : int.Parse(age);list[i].Gender = gender == "" ? list[i].Gender : gender == "0" ? "女" : "男";list[i].Height = height == "" ? list[i].Height : double.Parse(height);Console.WriteLine("修改成功");}catch (Exception){Console.WriteLine("修改输入格式有误");}}}}}}

创建的学生类


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _3.List学生管理系统
{public interface IComParable<T>                 //接口{int ComPareTo(T other);                     //在list的数组中,想对几种数据进行排列,就要写几个方法int ComPareTo1(T other);                    //这里以三种数据举例:分别是学生的ID,学生的年龄,学生的身高int ComPareTo2(T other);}public class Student:IComParable<Student>       //继承接口的学生类{public int Id { get; set; }                 //学生的学号public string Name { get; set; }public int Age { get; set; }                //学生的年龄public string Gender { get; set; }public double Height { get; set; }          //学生的身高//public Student(int id, string name, int age, string gender)  这里作者不需要构造函数所以就注释掉了//{//    Id = id;//    Name = name;//    Age = age;//    Gender = gender;//}/// <summary>/// 根据ID排序/// </summary>/// <param name="other">传入学生类</param>/// <returns>返回排序结果</returns>public int ComPareTo(Student other)         //根据ID排列{if (other == null) return 1;return this.Id.CompareTo(other.Id);}/// <summary>/// 根据年龄排序/// </summary>/// <param name="other"></param>/// <returns></returns>                 public int ComPareTo1(Student other)        //根据年龄排列{if (other == null) return 1;return this.Age.CompareTo(other.Age);}/// <summary>/// 根据身高排序/// </summary>/// <param name="other"></param>/// <returns></returns>public int ComPareTo2(Student other)        //根据身高排列{if (other == null) return 1;return this.Height.CompareTo(other.Height);}public override string ToString()           //对ToString进行重写{return $"学号:{Id}\t姓名:{Name}\t年龄:{Age}\t性别:{Gender}\t身高{String.Format("{0:F2}",Height)}米";}}/// <summary>/// 使用接口的约束/// </summary>/// <typeparam name="T"></typeparam>internal class MyComparer<T> where T : IComParable<T>{//对列表进行排序public void Sort(List<T> list)              //根据ID排列{//Sort可以立即为只能对值类型的数据进行比较,没办法比较复杂类型list.Sort((x, y) => x.ComPareTo(y));}public void Sort1(List<T> list)             //根据年龄排列{//Sort可以立即为只能对值类型的数据进行比较,没办法比较复杂类型list.Sort((x, y) => x.ComPareTo1(y));}public void Sort2(List<T> list)             //根据身高排列{//Sort可以立即为只能对值类型的数据进行比较,没办法比较复杂类型list.Sort((x, y) => x.ComPareTo2(y));}}
}


http://www.ppmy.cn/news/1575694.html

相关文章

Java中的@JSONField注解详解:用法、场景与实践

目录 1. 注解引入 2. 常用属性及用法 2.1 name 属性 2.2 format 属性 2.3 serialize 和 deserialize 属性 2.4 ordinal 属性 3. 使用场景 3.1 数据交互 3.2 数据安全 3.3 日期格式化 4. 实践注意事项 JSONField 是阿里巴巴开源的 JSON 处理库 FastJSON 提供的一个注…

【小游戏】C++控制台版本俄罗斯轮盘赌

制作团队&#xff1a;洛谷813622&#xff08;Igallta&#xff09; 989571&#xff08;_ayaka_&#xff09; Mod&#xff1a;_ayaka_ 双人模式&#xff1a;Igallta 公告&#xff1a; 原先的9.8改名为 Alpha 1.0&#xff0c;以后每次更新都增加 0.1。 Alpha 1.11 改为 Beta 1…

RabbitMQ系列(二)基本概念之Publisher

在 RabbitMQ 中&#xff0c;Publisher&#xff08;发布者&#xff09; 是负责向 RabbitMQ 服务器发送消息的客户端角色&#xff0c;通常被称为“生产者”。以下是其核心功能与工作机制的详细解析&#xff1a; 一、核心定义与作用 消息发送者 Publisher 将消息发送到 RabbitMQ 的…

鸿蒙Next如何自定义标签页

前言 项目需求是展示标签&#xff0c;标签的个数不定&#xff0c;一行展示不行就自行换行。但是&#xff0c;使用鸿蒙原生的 Grid 后发现特别的难看。然后就想着自定义控件。找了官方文档&#xff0c;发现2个重要的实现方法&#xff0c;但是&#xff0c;官方的demo中讲的很少&…

PHP操作redis

目录 一、安装PHP的redis扩展 1、linux下安装php的redis扩展 2、windows下安装php的redis扩展 二、PHP操作redis 1、面向过程操作redis 2、面向对象操作redis 一、安装PHP的redis扩展 1&#xff09;PHP的redis扩展有2个&#xff0c;分别是phpredis和predis扩展&#xff…

Android Audio实战——音频相关基础概念(附)

Android Audio 开发其实就是媒体源数字化的过程,通过将声波波形信号通过 ADC 转换成计算机支持的二进制的过程叫做音频采样 (Audio Sampling)。采样 (Sampling) 的核心是把连续的模拟信号转换成离散的数字信号。 一、声音的属性 1、响度 (Loudness) 响度是指人类可以感知到的…

Metal 学习笔记六:坐标空间

要在网格上轻松找到一个点&#xff0c;您需要一个坐标系。例如&#xff0c;如果网格恰好是您的 iPhone 15 屏幕&#xff0c;则中心点可能是 x&#xff1a;197、y&#xff1a;426。但是&#xff0c;该点可能会有所不同&#xff0c;具体取决于它所处的空间。 在上一章中&#xf…

Nuxt.js 3【详解】服务器 Server

Nuxt.js 是一个全栈框架&#xff0c;可以在一个项目中&#xff0c;同时完成前端和后端的开发。 服务器架构 Nuxt.js 的服务端由 Nitro 实现&#xff0c;Nitro 由基于 H3 实现。 Nitro 官网 https://nitro.build/guideH3 官网 https://h3.unjs.io/guide 接口路由 基于文件目录自…