欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

登录界面设计之三:界面搭建

程序员文章站 2022-12-16 18:34:08
登录界面的搭建还是比较简单的,虽然有点简陋,但能用的姑且当做好的吧,如下图: 这里使用的是DevExpress控件,其中值得一看的就是使用LayoutControl控件来进行TextEdit控件的布局。对于一般几个TextEdit并排的布局而言,使用这个控件的效果还是不错的。 既然涉及到了系统的登录 ......

  登录界面的搭建还是比较简单的,虽然有点简陋,但能用的姑且当做好的吧,如下图:

登录界面设计之三:界面搭建

这里使用的是devexpress控件,其中值得一看的就是使用layoutcontrol控件来进行textedit控件的布局。登录界面设计之三:界面搭建对于一般几个textedit并排的布局而言,使用这个控件的效果还是不错的。


  既然涉及到了系统的登录,那么自然少不了数据库的连接等操作了。这里,我自己做的时候也很乱,争取能表述的清楚一些。

首先,如果要访问数据库,那没库不行哈。那么,就赶着手头的东西,赶紧弄个库出来吧。

数据库创建与表设计

  具体流程就是:创立一个access2007格式的数据库文件,这里名称为:boardwages.accdb。别忘了给它创建个密码,不过具体过程就略了,如果有和我一样的小白,没关系,咱稍微搜一下就ok了。然后再创建一个名为tbuser的表,并建立字段,如下图所示:

登录界面设计之三:界面搭建

  其中,id字段为自动编号;name字段为文本格式,保存用户名;password为文本字段,保存密码的md5散列值。为啥是md5格式?因为这样别人即使打开了你的数据库也无法看到真实的密码!如果还有人问为啥不能反推,那我也就不能解释了……

md5函数

  参考代码:

 1     /// <summary>
 2     ///  md5操作类
 3     /// </summary>
 4     public class md5hashing
 5     {
 6         /// <summary>
 7         ///  md5加密算法
 8         /// </summary>
 9         /// <param name="input">要加密的字符串</param>
10         /// <param name="encode">编码类型</param>
11         /// <returns></returns>
12         public static string md5encrypt(string input, encoding encode)
13         {
14             md5 md5 = new md5cryptoserviceprovider();
15             byte[] t = md5.computehash(encode.getbytes(input));
16             stringbuilder sb = new stringbuilder(32);
17             for (int i = 0; i < t.length; i++)
18             {
19                 sb.append(t[i].tostring("x").padleft(2, '0'));
20             }
21             return sb.tostring();
22         }
23     }

  好了,说完数据库,继续说数据库访问的事。最早,自己学习的时候,学了odbc,还有oledb,再之后的ado.net,直接写sql代码,对于很多像我这样的小白而言,是很容易出错的,所以,各位大大们,就弄出了很多的orm组件,解决了小白们的问题。这里,我使用的是秋大的cyq.data,因为这个接触的多,用惯了,也确实很好用。还是老规矩,先把代码贴上再慢慢说:

 1             // 使用自定义的方法,利用validate组件进行验证
 2             // 但要注意的是,需要把控件的tag属性进行设置
 3             if (myvalidator.isempty(txtname,txtpassword) == false)
 4             {
 5                 return;
 6             }
 7 
 8             // 验证没问题之后,获取控件内的用户名和密码
 9             string name = txtname.text.trim();          // 用户名
10             string password = txtpassword.text.trim();  // 密码
11 
12             // 在数据库中进行查询
13             using (maction action = new maction(tbuser, myappconfig.localconn))
14             {
15                 if (!action.exists("name = '" + name + "'"))        //  是否存在用户名?
16                 {
17                     cshowmsg.showwarning(string.format("用户名'{0}'不存在",name));
18                     return;
19                 }
20                 else
21                 {
22                     // 对密码进行md5加密,再进行判断
23                     string md5password = md5hashing.md5encrypt(password, encoding.utf8);
24                     string where = string.format("name = '{0}' and password = '{1}'",name,md5password);
25                     if (!action.exists(where))
26                     {
27                         cshowmsg.showwarning("用户名或者密码不正确!");
28                         return;
29                     }
30                     else
31                     {
32                         // 这一句,就可以关闭当前的页面了。因为在program中进行了处理。
33                         this.dialogresult = system.windows.forms.dialogresult.ok;
34                     }
35                 }
36             }

  注意了,包含在using中的代码就是使用cyq.data的具体代码了,这里先查看是否存在用户名,再查看是否存在用户名和密码都存在的记录。代码是下午写的,现在感觉,这里重复了,直接进行第二组判断应该就可以了。其中,把判断条件添加进去,这里我使用的是string.format方法来组成了字符串来当做查询条件。具体的cyq.data怎么用,我想没有比秋大的博客更好的地方了,大家可以自行搜索。

  需要更多说明的有三个地方:

1、myappconfig.localconn 是自己定义的access的连接字符串,这里是:provider=microsoft.ace.oledb.12.0;data source=.\data\boardwages.accdb;persist security info=true;jet oledb:database password=boardwages!2019
2、cshowmsg.showwarning 是自定义的一个输出方法,其实就是对于 messagebox.show方法的一个封装而已。
3、myvalidator.isempty也是自定义的一个方法,目的是判断指定的控件是否内容为空,如果是,会有相应的提示,例如:

 

登录界面设计之三:界面搭建


这里涉及到了fluentvalidation验证组件的使用,回头需要专门的用一章来说明。

 小结:好了,下午大概就做了这些内容,最后就是在数据库中手动添加一条记录,然后自己在登录界面中,使用正确的用户名和密码进行登录,看是否能够登录成功以验证我们数据访问组件使用的是否正确。写的比较仓促,有问题的地方,大家多多批评指正。