在近期的学习中,我们学习了泛型及泛型集合的概念和使用,泛型是c#中的一个重要概念,为了巩固我们学习的成果,我们可以使用一个实例来进行练习

题目及要求

要求使用Windows窗体应用程序,制作出如上图的界面,并实现增删改查的功能

StuInfo类的编写

同往常一样,在编写窗体的代码前,我们需要先编写一个StuInfo类用来存放学生的信息

StuInfo.cs代码如下:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace cs学生信息管理系统1121
{
class StuInfo
{
private string sno; //学号
private string name; //姓名
private string sclass; //班级
private string tele; //电话 //定义成员变量的索引器
public string Sno
{
get { return sno; }
set { sno = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public string SClass
{
get { return sclass; }
set { sclass = value; }
}
public string Tele
{
get { return tele; }
set { tele = value; }
} //构造函数
public StuInfo(string sno, string name, string sclass, string tele)
{
Sno = sno;
Name = name;
SClass = sclass;
Tele = tele;
}
}
}

主窗体代码的编写

写好了StuInfo类之后,我们终于可以开始窗体应用程序的编写了,首先我们需要设置一下页面布局

页面布局及我的部分控件命名

接下来我们来编写代码

Form1.cs代码:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace cs学生信息管理系统1121
{
public partial class Form1 : Form
{
//声明值为StuInfo类型数据的泛型字典StuDic
Dictionary<string, StuInfo> StuDic = new Dictionary<string, StuInfo>(); //显示数据方法
private void FillGrid(Dictionary<string, StuInfo> dic)
{
//如果数据网格中没有任何元素,则初始化
if(dataGridViewStuInfo.ColumnCount == )
{
//初始化一个新列
DataGridViewTextBoxColumn col_sno = new DataGridViewTextBoxColumn();
col_sno.HeaderText = "学号"; //设置标题
col_sno.DataPropertyName = "Sno"; //设置数据绑定文本
col_sno.Name = "sno"; //设置该列的名字 DataGridViewTextBoxColumn col_name = new DataGridViewTextBoxColumn();
col_name.HeaderText = "姓名";
col_name.DataPropertyName = "Name";
col_name.Name = "name"; DataGridViewTextBoxColumn col_class = new DataGridViewTextBoxColumn();
col_class.HeaderText = "班级";
col_class.DataPropertyName = "SClass";
col_class.Name = "class"; DataGridViewTextBoxColumn col_tele = new DataGridViewTextBoxColumn();
col_tele.HeaderText = "电话";
col_tele.DataPropertyName = "Tele";
col_tele.Name = "tele"; //向数据网格控件中加入我们刚才定义的列
dataGridViewStuInfo.Columns.Add(col_sno);
dataGridViewStuInfo.Columns.Add(col_name);
dataGridViewStuInfo.Columns.Add(col_class);
dataGridViewStuInfo.Columns.Add(col_tele);
}
//声明数据源绑定对象
BindingSource bs = new BindingSource();
bs.DataSource = dic.Values; //将我们数据字典中的元素绑定到bs中
dataGridViewStuInfo.DataSource = bs; //将bs中的数据与数据网格控件绑定
} public Form1()
{
InitializeComponent();
this.Text = "学生信息管理系统";
PanelEdit.Visible = false; //将编辑面板隐藏 //定义初始的数据
StuInfo zhang = new StuInfo("", "张三", "", "");
StuInfo luo = new StuInfo("", "罗辑", "", "");
StuInfo sun = new StuInfo("", "孙雪", "", "");
StuInfo wang = new StuInfo("", "王莱", "", ""); //将我们定义的数据加入到数据字典中
StuDic.Add(zhang.Sno, zhang);
StuDic.Add(luo.Sno, luo);
StuDic.Add(sun.Sno, sun);
StuDic.Add(wang.Sno, wang); FillGrid(StuDic); //显示数据
} //信息查询方法
private void ButtonQuery_Click(object sender, EventArgs e)
{
PanelEdit.Visible = false; //查询数据时关闭编辑面板
//如果输入框中没有输入数据,则默认显示所有数据
if(textBoxQuery.Text == "")
{
FillGrid(StuDic);
return;
}
//若找不到用户要查询的学生,则弹出错误提示
if(!StuDic.ContainsKey(textBoxQuery.Text))
{
MessageBox.Show("查无此人!", "错误",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
} StuInfo s = StuDic[textBoxQuery.Text]; //找出对应的学生信息
//创建一个新的数据字典,用于存放查询的结果
Dictionary<string, StuInfo> dic = new Dictionary<string, StuInfo>();
dic.Add(s.Sno, s);
FillGrid(dic); //显示数据
} //信息删除方法
private void ButtonDel_Click(object sender, EventArgs e)
{
PanelEdit.Visible = false; //删除数据时关闭编辑面板
//如果找不到用户要删除的数据,报错
if(!StuDic.ContainsKey(textBoxQuery.Text))
{
MessageBox.Show("您要删除的元素不存在!", "错误",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
} StuDic.Remove(textBoxQuery.Text); //删除数据
FillGrid(StuDic); //显示数据
} //修改数据方法
private void ButtonEdit_Click(object sender, EventArgs e)
{
if(!StuDic.ContainsKey(textBoxQuery.Text))
{
MessageBox.Show("您要修改的数据不存在!", "错误",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
} PanelEdit.Visible = true; //修改数据时开启编辑面板
textBoxStuNo.Enabled = false; //学号不允许修改 //新建对象存储要修改的元素
StuInfo s = StuDic[textBoxQuery.Text]; //将数据分别放到各个输入框中
textBoxName.Text = s.Name;
textBoxClass.Text = s.SClass;
textBoxStuNo.Text = s.Sno;
textBoxTele.Text = s.Tele;
} //添加数据方法
private void ButtonAdd_Click(object sender, EventArgs e)
{
//将所有输入框中的数据清零
textBoxStuNo.Text = "";
textBoxName.Text = "";
textBoxClass.Text = "";
textBoxTele.Text = ""; PanelEdit.Visible = true; //添加数据时开启编辑面板
textBoxStuNo.Enabled = true; //启用学号输入框
} //编辑面板区域的确定按钮事件
private void ButtonOK_Click(object sender, EventArgs e)
{
//实行添加方法时
if(textBoxStuNo.Enabled)
{
//要添加的学号已存在时,发出警告
if(StuDic.ContainsKey(textBoxStuNo.Text))
{
MessageBox.Show("学号已存在!", "警告",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
//填写信息不全时,发出警告
if(textBoxStuNo.Text == "" || textBoxName.Text == ""
|| textBoxClass.Text == "" || textBoxTele.Text == "")
{
MessageBox.Show("请将信息填写完整!", "警告",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
} //新建对象s用于存放待添加的数据
StuInfo s = new StuInfo(textBoxStuNo.Text, textBoxName.Text,
textBoxClass.Text, textBoxTele.Text);
StuDic.Add(s.Sno, s); //将数据添加进数据字典
}
//实行修改方法时
else
{
if(textBoxName.Text == "" || textBoxClass.Text == "" || textBoxTele.Text == "")
{
MessageBox.Show("请将信息填写完整!", "警告",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
} //先将数据删除再添加来实现修改
StuDic.Remove(textBoxStuNo.Text); //新建对象s用于存放待添加的数据
StuInfo s = new StuInfo(textBoxStuNo.Text, textBoxName.Text,
textBoxClass.Text, textBoxTele.Text);
StuDic.Add(s.Sno, s); //将数据添加进数据字典
} FillGrid(StuDic); //显示数据 //将所有输入框中的数据清零
textBoxStuNo.Text = "";
textBoxName.Text = "";
textBoxClass.Text = "";
textBoxTele.Text = ""; PanelEdit.Visible = false; //关闭编辑面板
} //取消按键
private void ButtonCel_Click(object sender, EventArgs e)
{
//将所有输入框中的数据清零
textBoxStuNo.Text = "";
textBoxName.Text = "";
textBoxClass.Text = "";
textBoxTele.Text = ""; PanelEdit.Visible = false; //关闭编辑面板
}
}
}

实际效果

查询

删除

修改

添加

关于一些问题的解答

为什么找不到PanelEdit

在我的页面布局的下半段,有一块被虚线围起来的部分,那块部分属于一个Panel控件,需要将他的名字改成PanelEdit

查询/删除等按键无效

很可能是你的控件事件没有和你的方法绑定,以查询为例,在Form1.cs[设计]中,右键点击查询按钮,在属性->事件->Click中,将其值改为ButtonQuery_Click,其他所有的按键都要进行同样的操作后才能使用。

我在Form1.cs中的ButtonQuery_Click等方法,都是通过双击设计界面的控件生成的,所以控件事件会自动和你的方法绑定,而如果你直接复制粘贴我的代码的话,就可能会产生没有绑定的情况。

c#简易学生信息管理系统的更多相关文章

  1. 基于数据库MySQL的简易学生信息管理系统

    通过这几天学习Mysql数据库,对其也有了基本的了解,为了加深印象,于是就写了一个最简易的学生信息管理系统. 一:基本要求 1.通过已知用户名和密码进行登录: 2.可以显示菜单: 3.可以随时插入学生 ...

  2. 一个低级shell简易学生信息管理系统-新增登陆注册功能

    还有bug 不修改了 小声bb一下 这玩意真的要控制版本 随手保存 本来有个超完整的版本 一开心被我rm - f 了 后续还出现了 更多的bug 仔细仔细 源码如下: record=stu.db if ...

  3. Python——面向对象,简易学生信息管理系统

    一.概述 1.1涉及到的知识点 项目开发:创建项目,创建包,导入包: 面向对象:静态方法,继承,内置函数,自定义函数: 数据类型:列表,字典,字符串.列表.字典的转换和自动生成导向: 异常处理:捕获异 ...

  4. Django 小实例S1 简易学生选课管理系统 7 修改个人信息

    Django 小实例S1 简易学生选课管理系统 第7节--修改个人信息 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 用户模块除了注册登录之外,还 ...

  5. Django 小实例S1 简易学生选课管理系统 12 CSS样式完善

    Django 小实例S1 简易学生选课管理系统 第12节--CSS样式完善 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块的逻辑代码到这里 ...

  6. Django 小实例S1 简易学生选课管理系统 11 学生课程业务实现

    Django 小实例S1 简易学生选课管理系统 第11节--学生课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,学生需要拥 ...

  7. Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现

    Django 小实例S1 简易学生选课管理系统 第10节--老师课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,老师将要使 ...

  8. Django 小实例S1 简易学生选课管理系统 8 CSS样式优化

    Django 小实例S1 简易学生选课管理系统 第8节--CSS样式优化 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 前面的几节下来,用户模块基 ...

  9. Django 小实例S1 简易学生选课管理系统 6 实现登录逻辑

    Django 小实例S1 简易学生选课管理系统 第6节--实现登录逻辑 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 1 业务逻辑 本教程第四节里 ...

随机推荐

  1. Hadoop学习之路(十二)分布式集群中HDFS系统的各种角色

    NameNode 学习目标 理解 namenode 的工作机制尤其是元数据管理机制,以增强对 HDFS 工作原理的 理解,及培养 hadoop 集群运营中“性能调优”.“namenode”故障问题的分 ...

  2. c++—— 函数重载(Overroad)

    5 函数重载(Overroad) 函数重载概念 1 函数重载概念 函数重载(Function Overload) 用同一个函数名定义不同的函数 当函数名和不同的参数搭配时函数的含义不同 2 函数重载的 ...

  3. 一条SQL语句执行得很慢原因有哪些

    一条SQL语句执行得很慢,要分两种情况: 1.大多数情况是正常,偶尔很慢 数据库在处理数据忙时候,更新或新增数据都会暂时记录到redo log日志,等空闲时把数据同步到磁盘.假设数据库一直很忙,更新又 ...

  4. Splay普及版

    辣么,我要介绍我自学的\(Splay\)了,虽然跟大佬们讲得会有些重复,但是自认为把一些玄妙的东西点出来了\(qwq\) \(0x01\) 引言 首先,我并没觉得\(Splay\)有多难--代码长的原 ...

  5. iOS下微信语音播放之切换听筒和扬声器的方法解决方案

    [[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; //建议在播放之前设置yes,播放结束设置NO,这个功能是开启红外感应 // ...

  6. 将SharePoint站点另存为模板并根据模板创建站点!

    1,将SharePoint站点模板另存为模板. 在网站设置—网站操作一栏下面可以将网站另存为模板. 这儿应该注意:有的时候“将网站另存为模板这个”链接看不到,这个时候打开管理网站功能链接,查看一下“S ...

  7. block本质探寻六之修改变量

    说明: <1>阅读本文章,请参照前面的block文章加以理解: <2>本文的变量指的是auto类型的局部变量(包括实例对象): <3>ARC和MRC两种模式均适用: ...

  8. 2019北航OO第一单元作业总结

    一.前三次作业内容分析总结 前言 前三次作业,我提交了三次,但是有效作业只有两次,最后一次作业没能实现多项式求导的基本功能因此无疾而终,反思留给后文再续,首先我介绍一下这三次作业,三次作业围绕着多项式 ...

  9. 第一次作业:基于Linux 4.5的进程模型与调度器分析

    1.操作系统是怎么组织进程的? 1.1什么是线程,什么是进程: 刚接触时可能经常会将这两个东西搞混.简单一点的说,进程是一个大工程,线程则是这个大工程中每个小地方需要做的东西(在linux下看作&qu ...

  10. 定心丸!ZipperDown漏洞分析与修复建议

    本文由  网易云发布. 近日,盘古实验室对外披露了ZipperDown漏洞,该漏洞是盘古团队针对不同客户的iOS应用安全审计的过程中发现的,大约有10%的iOS应用会受到此漏洞的影响. 利用此漏洞可以 ...