亲宝软件园·资讯

展开

C#学生管理系统

提灯寻猫 人气:0

添加3个类,分别实现 IComparer接口,实现对Student类的三个字段的排序。

1、学生类:学号、姓名、年龄
2、请选择:1、添加学生信息。2、删除学生信息 2、查询学生信息。
3、重复的学号不能添加。
4、查询学生信息功能中有:1、查询所有(按学号排序)2、查询所有(按姓名排序),2、查询所有(按年龄排序)4、按学号查询(查没有,则打印查无此学生)5、退出

学生类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _01
{

    class Student
    {
        public string Num { get; set; }//学号
        public string Name { get; set; }//姓名
        public int Age { get; set; }//年龄
        //创建带参的构造方法
        public Student(string num,string name,int age) {
            this.Num = num;
            this.Name = name;
            this.Age = age;
        }
        //创建无参的构造方法,在本次代码中未使用
        public Student() { }
        //重写了Tostring()的方法将字典中的值输出打印
        public override string ToString()
        {

            return $"学号:{Num}姓名:{Name}年龄:{Age}";
        }
        //创建比较器用于比较
        public int CompareTo(Student other)
        {
            return this.Num.CompareTo(other.Num);
        }

    }
}

工具类(Utility)

工具类中封装了一些方法用于调用,使得主方法中的代码简洁

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _01
{
    //判断输入的数字是否正确
    class Utility
    {
        public static int readMenuSelection() {
        int c;
        for (; ; ) {
             c = int.Parse(Console.ReadLine()); 
            if (c != 1 && c != 2 && c != 3 && c != 4) {
                    Console.WriteLine("选择错误,请重新输入:"); 
            } else break;
        }
        return c;
    }
        public static int readMenuSelection2()
        {
            int c;
            for (; ; )
            {
                c = int.Parse(Console.ReadLine());
                if (c != 1 && c != 2 && c != 3 && c != 4&&c!=5)
                {
                    Console.WriteLine("选择错误,请重新输入:");
                }
                else break;
            }
            return c;
        }

        //用于确认选择的输入。该方法从键盘读取‘Y'或'N',并将其作为方法的返回值。
        public static string readConfirmSelection()
        {
            string b;
            for (; ; )
            {
                b = Console.ReadLine();
                //将输入的值转换成小写的字母,用于用户区分大小写的输入
                string c = b.ToLowerInvariant();
                if (c.Equals("y")||c.Equals("n"))
                {
                    break;
                }
                else
                {
                    Console.WriteLine("选择错误,请重新输入:"); 
                }
            }
            return b;
        }
        //创建添加的方法
       public static void AddStudent(Dictionary<string, Student> dc)
        {
            bool Flag = true;
            while (Flag)
            {
                Console.WriteLine("请输入学号:");
                string num = Console.ReadLine();

                Console.WriteLine("请输入姓名:");
                string name = Console.ReadLine();

                Console.WriteLine("请输入年龄:");
                int age = int.Parse(Console.ReadLine());
                Student student = new Student(num, name, age);
                //判断输入的学号是否重复
                if (!dc.ContainsKey(num))
                {
                    dc.Add(student.Num, student);
                    Console.WriteLine("添加成功");
                }
                else
                {
                    Console.WriteLine("已存在,添加失败");
                }

                Console.WriteLine("是否继续添加(Y/N)):");
                string b = Utility.readConfirmSelection();
                if (b.Equals("n"))
                {
                    Flag = false;
                }

            }
            }
        //创建一个输出全部信息的方法
        public static void Print(Dictionary<string,Student> dc) {
            //循环遍历,将 Dictionary<K,V> 类中的值赋值给item
            //需要重写Tostring方法,否则输出的值为该值得命名空间
            foreach (var item in dc.Values)
            {
                Console.WriteLine(item);
            }
        
        }
        //删除学生信息
        public static void DeleteStudent(Dictionary<string, Student> dc) {
            Console.WriteLine("请输入要删除的学生学号");
            string num = Console.ReadLine();
            //判断num值是否在该类中
            if (dc.ContainsKey(num))
            {
                //根据提供的num移除目标
                dc.Remove(num);
                Console.WriteLine("删除成功");
            }
            else
            {
                Console.WriteLine("该学号的学生信息不存在");
            }


        }
        //将排序后的元素输出
        internal static void Print(List<Student> students)
        {
            foreach (var item in students)
            {
                Console.WriteLine(item);
            }
        }
        //按照学号查询,如果没查到返回查无此人
        public static void QueryByNum(Dictionary<string, Student> dc)
        {
            Console.WriteLine("请输入你要查询的学号");
            string num = Console.ReadLine();
            //
            if (dc.ContainsKey(num))
            {
                Console.WriteLine(dc[num]);
            }
            else
            {
                Console.WriteLine("查无此人");
            }
        }
        //按年龄排序
        public static void Age(Dictionary<string, Student> dc)
        {
            List<Student> students = new List<Student>();
            //字典中无序,将字典中的值存放到有序的list集合中
            students.AddRange(dc.Values);
            //调用NameSort的方法
            students.Sort(new AgeSort());
            Utility.Print(students);
        }

        //按名字排序
        public static void NameSort(Dictionary<string, Student> dc)
        {
            List<Student> students = new List<Student>();
            //字典中无序,将字典中的值存放到有序的list集合中
            students.AddRange(dc.Values);
            //调用NameSort的方法
            students.Sort(new NameSort());
            Utility.Print(students);
        }

        //按学号排序
        public static void NumSort(Dictionary<string, Student> dc)
        {
            List<Student> students = new List<Student>();
            //字典中无序,将字典中的值存放到有序的list集合中
            students.AddRange(dc.Values);
            //调用NameSort的方法
            students.Sort(new NumSort());
            Utility.Print(students);

        }
    }
}

比较器

创建三个比较器用于比较排序,使用IComparer<>接口

1.年龄比较器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _01
{
    class NameSort : IComparer<Student>
    {
        public int Compare(Student x, Student y)
        {
            return x.Name.CompareTo(y.Name);
        }
    }
}

2.姓名比较器`

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _01
{
    class NameSort : IComparer<Student>
    {
        public int Compare(Student x, Student y)
        {
            return x.Name.CompareTo(y.Name);
        }
    }
}

3.学号比较器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _01
{
    //构造比较器,进行比较
    class NumSort : IComparer<Student>
    {
        public int Compare(Student x, Student y)
        {
            return x.Num.CompareTo(y.Num);
        }
    }
}

主方法中的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace _01
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu1 = new Student("007","李华",12);
            Student stu2 = new Student("004", "张三", 13);
            //Dictionary<数据类型,数据类型> 对象名 = new Dictionary<数据类型,数据类型>();

            Dictionary<string, Student> ha = new Dictionary<string, Student>();
            //将学生类对象添加到字典中
            ha.Add(stu1.Num,stu1);
            ha.Add(stu2.Num,stu2);

            bool Flag = true;
            while (Flag)
            {
            Console.WriteLine("请选择:1、添加学生信息。2、删除学生信息 3、查询学生信息;4.退出");
            int a = Utility.readMenuSelection();
            switch (a)
            {
                case 1:
                    //添加
                    Utility.AddStudent(ha);
                    //输出
                    Utility.Print(ha);
                    break;
                case 2:
                    //删除
                    Utility.DeleteStudent(ha);
                    Utility.Print(ha);
                    break;
                case 3:
                        //查询
                        Console.WriteLine("1、查询所有(按学号排序)2、查询所有(按姓名排序),3、查询所有(按年龄排序)" +
                       "4、按学号查询(查没有,则打印查无此学生)5、退出");
                        int q = Utility.readMenuSelection2();
                        switch (q)
                        {
                            case 1:
                                //查询所有(按学号排序)
                               Utility.NumSort(ha);
                                break;
                            case 2:
                                //查询所有(按姓名排序)
                                Utility.NameSort(ha);
                                break;
                            case 3:
                                //查询所有(按年龄排序)
                                Utility.Age(ha);
                                break;
                            case 4:
                                //按学号查询(查没有,则打印查无此学生)
                                Utility.QueryByNum(ha);
                                break;
                            case 5:
                                //退出
                                break;
                            default:
                                break;
                        }
                        break;
                case 4:
                    Console.WriteLine("确认是否退出(Y/N)");
                    string b = Utility.readConfirmSelection();
                    if (b.Equals("y"))
                    {
                        Flag = false;
                    }
                    //退出
                    break;
                default:
                    break;
            }

            }
            Console.ReadKey();

        }

 
    }
}

以上就是用一些简单的代码完成一个简易的学生管理系统

加载全部内容

相关教程
猜你喜欢
用户评论