在近期的学习中,我们学习了泛型及泛型集合的概念和使用,泛型是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. Ubuntu eclipse安装

    apt-get install eclipse eclipse-cdt eclipse-jdt  # don't include eclipse if you have it already afte ...

  2. IKVM.NET入门(2)

    ikvm.net是什么 http://www.ikvm.net/ ikvm.net是能够运行在mono和.net framework的java虚拟机.它包括了 在.net中实现的一个java虚拟机 j ...

  3. Java多线程和并发基础面试总结

    多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题.收藏起来,希望给予即将找 ...

  4. Zookeeper框架Curator使用

    本文参考自https://blog.csdn.net/wo541075754/article/details/69138878?utm_source=gold_browser_extension ht ...

  5. 一般处理程序中用到session时

    一般处理程序ashx文件使用session 1.先引用System.Web.SessionState这个命名空间, 2.如果是要在HttpHandler中读取Session的内容,就要在实现IHttp ...

  6. 【转】iOS消息推送实现过程记录

    客户端代码:链接地址 服务器代码:链接地址  链接地址 这里记录下iOS消息推送实现的全过程 首先,申请秘钥. 之后进入链接地址开发者,当然你得有啊!!!!! 点击这里 如图: 下面实现创建推送证书( ...

  7. 测试html报告 github python3版本

    github源码下载地址:https://github.com/huilansame/HTMLTestRunner_PY3/archive/master.zip 解压后进入文件找到文件:HTMLTes ...

  8. sar命令使用详解

    一:命令介绍:参考资料:http://linux.die.net/man/1/sar sar(System ActivityReporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工 ...

  9. SSH免密码登录远程linux服务器

    Linux下实现SSH无密码验证登陆 ssh配置 主机A:10.0.5.199 主机B:10.0.5.198 需要配置主机A无密码登录主机A,主机B 先确保所有主机的防火墙处于关闭状态. 在主机A上执 ...

  10. 基于jquery的插件turn.js学习笔记

    基于jquery的插件turn.js学习笔记 简介 turn.js是一个可以实现3d书籍展示效果的jq插件,使用html5和css3来执行效果.可以很好的适应于ios和安卓等触摸设备. How it ...