学习WinForm窗体程序也有一段时间了,今天就来尝试着来一个项目热热身~

在我们通常使用的MySchool管理中,不外乎这几种功能:增、删、改、查、改密码

在过去的C#中确实是挺简单的,但是在学习了WinForm的各种控件以后,我们就能

彻底摆脱控制台程序的low!走上高大上的道路!~

>切记:每个控件的使用前都要先修改他们的Name属性

虽然连接数据库的代码都已经很熟了,但是还是要再次强调一下!

string str = "Data source=.;initial catalog=MySchool;uid=sa";
SqlConnection con = new SqlConnection(str);

>>>验证数据库中的账户和密码来登录,从而才能显示主菜单

再次强调下,连接到功能窗口的方法,比如是连接到新建学生用户的

eg:

  //在单击"新建学生用户"的Click事件的方法中添加如下代码

  FormStudent frm = new FormStudent();

  frm.Show(); 

既然说到了新增学生信息,那么就来认真的解说下具体的步骤吧

//在Student窗体的Load事件中就要把应填入数据信息的text文本框绑定到数据库上

public void LoadAllGrade()
{
//拿到所有的年级
string str = "Data source=.;initial catalog=MySchool;uid=sa";
SqlConnection con = new SqlConnection(str);
string sql = "select gradename from grade";
SqlCommand cmd = new SqlCommand(sql, con);
try
{
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr != null)
{
if (dr.HasRows)
{
while (dr.Read())
{
string gname = dr["gradename"].ToString();
//每读到一个年级名称,我就将"S1",添加到下拉框
cboGrade.Items.Add(gname);
}
}
}
}
catch (Exception)
{
MessageBox.Show("网络异常");
}
finally
{
con.Close();
}
}

上面简单的介绍了怎么把复杂的年级下拉框从数据库中读取出来并绑定到下拉框上

接下就随便找俩个普通的文本框来进行传值吧

使用insert语句向MySchool中添加学生信息

          //编辑学生信息并保存     
      //将获取的学号转化为int类型
int non = Convert.ToInt32(txtStuno.Text);
//添加学生密码
string stupwd = TextNewPwd.Text;
string sql = "insert into Student values('" + stupwd + "','" + stuname + "','" + stugender + "');

接下来就是按照学生姓名来进行模糊查询学生信息了

主要就是在窗体的Load事件中就要遍历Myschool,将所有的学生信息读取到ListView中.

       //加载出所有的学生信息
       string str = "Data source=.;initial catalog=MySchool;uid=sa";
SqlConnection con = new SqlConnection(str);
string sql = "select * from Student;
SqlCommand cmd = new SqlCommand(sql, con);
try
{
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
//将读取出来的信息赋值给对应的TextBox
//姓名
string StuName = dr["studentname"].ToString();
gbStuN.Text = StuName;
//密码
string StuPwd = dr["LoginPwd"].ToString();
TextName.Text = StuPwd;
TextNewPwd.Text = StuPwd;
//电话
string StuPhone = dr["Phone"].ToString();
TextPhone.Text = StuPhone;
//邮箱
string StuEmail = dr["Email"].ToString();
TextEmail.Text = StuEmail;
//地址
string StuAdress = dr["Address"].ToString();
Address.Text = StuAdress; //年级编号
int gid = Convert.ToInt32(dr["gradeid"]);
//- - - 根据年级编号获取对应的年级名称
string gradename = GetGradeNameByGradeId(gid);
cboGrade.Text = gradename; //性别
string gender = dr["gender"].ToString();
if (gender.Equals(""))
{
raonan.Checked = true;
}
else if (gender.Equals(""))
{
raonv.Checked = true;
}
//出生日期
DateTime dt = Convert.ToDateTime(dr["birthday"]);
Dt.Value = dt;
}
dr.Close();
}
catch (Exception)
{
MessageBox.Show("检查代码3333333333!");
}
finally
{
con.Close();
}

那么接下来就只需要在查询语句后面加上where条件就可以进行判断查询了,那么相应的修改和删除也就解决了,具体的就不多说了,抓紧时间进行下一步!

接下来就是修改当前用户的密码了,当然了,也要进行相应的一些判断语句是吧,不然随便就可以更改岂不是乱套了?!~

就像酱紫:

  

判定一下用户输入的原密码是否是正确的,然后在进行相应的操作!,接下来就一起来见证吧~

我们新创建一个窗体添上相应的控件,更改其属性即可,主要代码如下:

 //在单击修改的Click事件中进行判定
//判断原密码是否输入正确来
if (tboldpwd.Text == pwd)
{
//第二次的密码tbpwd第一次的密码tbnewpwd
if (tbpwd.Text == tbnewpwd.Text)
{
string str = "Data Source=.;initial catalog=MySchool;uid=sa";
SqlConnection con = new SqlConnection(str);
con.Open();
string sql = "update Student set LoginPwd='" + tbnewpwd.Text + "' where LoginPwd='" + tboldpwd.Text + "'";
SqlCommand cmd = new SqlCommand(sql, con);
int count = Convert.ToInt32(cmd.ExecuteNonQuery());
if (count > )
{
MessageBox.Show("修改成功!");
}
else
{
MessageBox.Show("修改失败!");
}
}
else
{
MessageBox.Show("两次密码不一致!");
}
}
else
{
MessageBox.Show("请输入正确的原密码!","温馨提示");
}

最主要的就是在用户登录的FormLogin窗体中将用户用来进行登录的密码付给一个公有的变量,

在修改密码的窗体中进行调用,用来和用户输入的原密码进行匹配,当然了,这样的修改密码确实有些鸡肋,

但是我们同样的可以依照这样的方法来把用户输入的密码和数据库中的密码值进行匹配,在这里就不细说了...

时间问题,今天就到这里,明天继续更新!敬请期待

WinForm窗体项目 之 MySchool管理系统终极版的更多相关文章

  1. Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载

    在前面介绍的几篇关于CRM系统的开发随笔中,里面都整合了多个页面的功能,包括多文档界面,以及客户相关信息的页面展示,这个模块就是利用DevExpress控件的XtraTabPage控件的动态加载实现的 ...

  2. Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程

    在上篇随笔<Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示>中介绍了我的整个CRM系统的概貌,本篇继续本系列的文章,介绍如何基于我的<winform ...

  3. 【转】WinForm窗体显示和窗体间传值

    以前对WinForm窗体显示和窗体间传值了解不是很清楚 最近做了一些WinForm项目,把用到的相关知识整理如下 A.WinForm中窗体显示 显示窗体可以有以下2种方法: Form.ShowDial ...

  4. C#实现WinForm窗体逐渐显示效果

    C#实现WinForm窗体逐渐显示效果,这个博客园里面已经有其它人已经实现了,原理很简单,就是通过定时改变窗体的透明度(从0到1,即透明度从完全透明到不透明),我这里也是按照这个思路来实现的,但是我做 ...

  5. .NET vs2010中使用IrisSkin2.dll轻松实现winForm窗体换肤功能

    IrisSkin2.dll是一款很不错的免费皮肤控件,利用它可以轻松的实现winForm窗体换肤! 网上很多朋友说在VS2010中不能使用IrisSkin2.dll,我这里提供一个取巧的办法. Iri ...

  6. Winform开发框架之客户关系管理系统(CRM)的开发总结系列3-客户分类和配置管理实现

    我在本系列随笔的开始,介绍了CRM系统一个重要的客户分类的展示界面,其中包含了从字典中加载分类.从已有数据中加载分类.以及分组列表中加载分类等方式的实现,以及可以动态对这些节点进行配置,实现客户分类的 ...

  7. 客户端(Winform窗体)上传文件到服务器(web窗体)简单例子

    客户端:先创建一个winform窗体的应用程序项目 项目结构

  8. Winform窗体实现简单的二维码生成和保存

    二维码的生成需要用到二维码生成的类库,ThoughtWorks.QRCode.dll 步骤: 第一步:下载二维码生成类库,ThoughtWorks.QRCode.dll 第二步:新建winform项目 ...

  9. 关于WinForm引用WPF窗体---在Winform窗体中使用WPF控件

    项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...

随机推荐

  1. redis学习——数据类型

    一.内容简介 Redis不仅仅是简单的key-value 存储器,同时也是一种data structures server.传统的key-value是指支持使用一个key字符串来索引value字符串的 ...

  2. JavaSE 学习笔记之集合框架(十八)

    集合框架:,用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区 ...

  3. hihoCoder #27

    A QvQ B 题目:http://hihocoder.com/problemset/problem/1470 分析:dfs序+栈+数学 可以发现,对于每组询问,树上是有很多点都只能等于0的 对于每个 ...

  4. Java Number类(数据类型的包装类)

    Java Number 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double等. 例如: int i = 5000; float gpa = 13.65 ...

  5. NetCore实现全局异常捕捉统一处理

    做net项目时候,在Global.asax文件中可以通过Application_Error方法全局捕获异常并处理后统一跳转到自定义的错误页面. 下面是我个人在NetCore项目中实现全局捕获异常并统一 ...

  6. php 类型转换

    PHP数据类型转换 PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: •(int).(integer):转换成整形 •(float).(double).(real):转换成浮点型 •(s ...

  7. C#中方法的详解

    访问修饰符 修饰符 返回值类型 方法名(参数列表){ 语句块;} 访问修饰符:所有类成员访问修饰符都可以使用,如果省略访问修饰符,默认是private. 修饰符:在定义方法时修饰符包括virtual( ...

  8. 论文笔记:目标追踪-CVPR2014-Adaptive Color Attributes for Real-time Visual Tracking

    基于自适应颜色属性的目标追踪 Adaptive Color Attributes for Real-Time Visual Tracking 基于自适应颜色属性的实时视觉追踪 3月讲的第一篇论文,个人 ...

  9. leetcode笔记:Wiggle Sort

    一. 题目描写叙述 Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nu ...

  10. 分布式缓存Redis应用场景解析

    Redis的应用场景非常广泛.虽然Redis是一个key-value的内存数据库,但在实际场景中,Redis经常被作为缓存来使用,如面对数据高并发的读写.海量数据的读写等. 举个例子,A网站首页一天有 ...