随笔 - 8  文章 - 0  评论 - 0  阅读 - 2106

用C#实现简单的学生系统

有点简易...

首先解决如何保存数据。

想了想一个学生应该有学号以及名字,而要实现在一个值中存储多种值这种功能,最简易的情况就只剩下元组和集合了。

系统应该可以支持循环输入,用元组有点麻烦......

所以我们的目光就放到了集合上。

集合是一种数据结构,最常用的就是列表,字典,堆栈,队列

列表是一种能够手动排序且每一项都有一个索引值分配(第一项在0处)的东西。当你改变项时,项的索引会发生改变。例子:

List<string> list=new List<>(string);

字典有键以及值,每个键都必须是唯一的。key以及value可以为任何类型,但key不能为null。

例子:

Dictionary<string,string> list=new Dictionary<string,string>();

堆栈用来实现后进先出(就像在箱子里放东西,你第一个拿到的永远是你最后放进去的),只能访问删除堆栈顶。

Stack list=new Stack();

队列用来实现先进先出,只能访问删除队列前面的项。

Queue list=new Queue();

利用字典的键可以快速找到值,所以字典就是我们的最佳选择

 首先定义两个属性以此来获取字段的值(这里也可以直接用字段,但为了以后可以扩展最好用属性):

    public string ID{get;set;}
    public string Name { get; set; }

属性是一个或一对方法。

private int a;
public int A
{
get
{
return a;
}
set
{
a=value;
}
}

get访问器不带任何参数并必须返回属性所声明的值。set访问器设置值。不应该为set指定任何参数,因为编译器假定它带一个参数,表示为value;

两个访问器中必须有一个为public,否则报错。

当你设置的属性没有逻辑时,你可以把它变为自动属性,此时必须带两个访问器。

public int A{get;set;}

接下来是获取数据的方法:

      Dictionary<string, string> list = new Dictionary<string, string>();
    public void Getname()//获取数据
    {
        do//循环,多次获得数据
        {
            string id = ReadLine();
            string name= ReadLine();
            ID = id;
            Name = name;
          if(list.ContainsKey(ID))//用ContainsKey来检索有无重复键(键只能是唯一的)(bug)
            {
                list.Remove(ID);//有则删除
            }
            list.Add(ID, Name);
            if (ID == "end" || Name == "end")
            {
                list.Remove("end");//删去判断用的输入
                break;
            }
            if (ID == "cha"||Name=="cha")
            {
                p = true;
                list.Remove("cha");//删去判断用的输入
                break;
            }
        } while (true);
        foreach (KeyValuePair<string, string> c in list)
        {
            WriteLine($"输出结果为{c.Key},{c.Value}");
        }
    }

这里可以用TryParse来转换字符串,但有点麻烦 

这里有个小bug,当检测到你输入重复的键时Remove只能删去键的值,导致数据有时会有错。但直接用抛出一个异常有点不合理......

查询方法:

    public void Input()//查询的方法
    {
        string c = ReadLine();
        if (list.ContainsKey(ID))
        {
            WriteLine("结果为{0}", list[c]);
        }
        else
        {
            WriteLine($"查无此值"); 
        }
    }

全部代码:

using System;
using static System.Console;
using System.Collections.Generic;
class A
{
    bool p = false;//用来判断是否输入cha
    public string ID{get;set;}
    public string Name { get; set; }
    Dictionary<string, string> list = new Dictionary<string, string>();
    public void Getname()//获取数据
    {
        do//循环,多次获得数据
        {
            string id = ReadLine();
            string name= ReadLine();
            ID = id;
            Name = name;
          if(list.ContainsKey(ID))//用ContainsKey来检索有无重复键(键只能是唯一的)
            {
                list.Remove(ID);//有则删除
            }
            list.Add(ID, Name);
            if (ID == "end" || Name == "end")
            {
                list.Remove("end");//删去判断用的输入
                break;
            }
            if (ID == "cha"||Name=="cha")
            {
                p = true;
                list.Remove("cha");//删去判断用的输入
                break;
            }
        } while (true);
        foreach (KeyValuePair<string, string> c in list)
        {
            WriteLine($"输出结果为{c.Key},{c.Value}");
        }
    }
    public void Input()//查询的方法
    {
        string c = ReadLine();
        if (list.ContainsKey(ID))
        {
            WriteLine("结果为{0}", list[c]);
        }
        else
        {
            WriteLine($"查无此值"); 
        }
    }
    public static void Main(string[] vs)
    {
        WriteLine("请输入学号然后再次输入名称");
        WriteLine("输入够了按end,想查询某人请按cha并输入学号(当代码把所有东西都输出了才检测到输入)");
        var a = new A();
        a.Getname();
        if(a.p)//调用方法
        {
            a.Input();
        }
        ReadLine();
    }
}

没用的知识第2期:

unity中尽量不要用构造函数。要用Awake和start方法

但你用过unity应该都会知道的吧......

下期见:)

posted on   hopeitdoes  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示