用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应该都会知道的吧......
下期见:)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!