VB.NET第一版机房收费系统,告一段落,验收的时候。问题也是大大的存在,没实用上设计模式,什么触发器。存储过程,都没实用上。看看其她小伙伴的,七层实现登录?那是什么东东,相比較我的三层而言,多了两倍还加个一,通过查资料,看博客。憋了好几天,最终,憋出了一个七仙女---七层实现系统登录。七个女儿,各司其职,完美配合,衍生出众多漂亮的故事。

从三层猛地跳到七层,有种穿越的感觉。说白了就是不会,又是想逃避的感觉,但是人生在世,有的事情不能随着自己的性子来。喜欢了就去做。不喜欢。就不做,没办法。就一直憋。一直憋,最终,系统登录实现了。接下来。总结一下七层系统登录的相关知识。俗话说,一张图。能够表达文字所不能描绘的情感和世界,如今让我们来看看一下机房收费系统的包图。例如以下:





      首先,我们来分析一下系统登录。我们须要做哪些工作,推断用户是否存在,推断username和password是否一致。登录成功之后。须要在worklog表中加入一条工作记录。该博文就实现系统登录简单描写叙述,加入工作记录再此不赘述。

接下来,代码实现部分:

第一层:IDAL-数据接口訪问层。放置接口函数。

<span style="font-size:18px;"><span style="font-size:18px;">'**********************************************
'文 件 名: IUser
'命名空间: IDAL
'内 容: 实现接口
'功 能: 创建接口
'文件关系:
'作 者:丁国华
'小 组:宝贝计划
'生成日期: 2014/7/9 8:44:27
'版本:V2.0
'改动日志:
'版权说明:
'**********************************************
Public Interface IUser
'/// <summary>
'/// depiction:<选择用户>
'/// </summary>
'/// <param name="<enUser>"><用户实体></param>
'/// <returns>
'///<返回一个用户实体>
'/// </returns>
Function SelectUser(ByVal enUser As Entity.UserEntity) As List(Of Entity.UserEntity) End Interface</span></span>

第二层:D层-数据訪问层,通过向SqlHelper中传递sql语句来实现详细的增删改查等功能。

<span style="font-size:18px;"><span style="font-size:18px;">'**********************************************
'文 件 名: T_UserDAL
'命名空间: DAL
'内 容: username与password推断
'功 能: 查询username与password是否正确
'文件关系:
'作 者:丁国华
'小 组:宝贝计划
'生成日期: 2014/7/9 9:03:17
'版本:V2.0
'改动日志:
'版权说明:
'********************************************** Imports System.Data.SqlClient
Imports IDAL Public Class T_UserDAL : Implements IUser
'/// <summary>
'/// depiction:<查询username与password是否正确>
'/// </summary>
'/// <param name="<enUser>"><用户实体></param>
'/// <returns>
'///<返回一个用户实体的集合>
'/// </returns>
Public Function SelectUser(ByVal enUser As Entity.UserEntity) As List(Of Entity.UserEntity) Implements IUser.SelectUser
Dim strText As String = "select * from T_User where UserID=@UserID and password=@password" 'sql语句
Dim cmdType As CommandType = CommandType.Text '命令类型
Dim Parameter As SqlParameter()
'传參
Parameter = {New SqlParameter("@UserID", enUser.userID),
New SqlParameter("@password", enUser.password)} Dim SqlHelper As New SqlHelper '实例化SqlHelper这个类的一个对象
Dim dt As New DataTable
Dim myList As List(Of Entity.UserEntity) dt = SqlHelper.ExecuteReaderTable(strText, cmdType, Parameter) '调用sqlhelper中executereadertable的方法
myList = EntityHelper.convertToList(Of Entity.UserEntity)(dt) Return myList
End Function End Class
</span></span>

第三层:Factory-工厂层,大话设计模式中对抽象工厂和配置文件这块有具体介绍。不明确的小伙伴能够查询《大话设计模式》第一百四十一页,工厂层的主要作用是应用配置文件和反射实现数据库的更换功能。

<span style="font-size:18px;"><span style="font-size:18px;">'**********************************************
'文 件 名: DataAccess
'命名空间: Factory
'内 容: 创建接口
'功 能: 创建接口
'文件关系:
'作 者:丁国华
'小 组:宝贝计划
'生成日期: 2014/7/9 8:41:23
'版本:V2.0
'改动日志:
'版权说明:
'**********************************************
Imports System.Reflection
Public Class DataAccess
'/// <summary>
'/// depiction:<创建用户接口>
'/// </summary>
'/// <param name="<>"><></param>
'/// <returns>
'///<返回IUserDAL>
'/// </returns>
Public Function CreateIUser() As IDAL.IUser
Return CType(Assembly.Load("DAL").CreateInstance("DAL.T_UserDAL"), IDAL.IUser)
End Function
End Class</span></span>

第四层:BLL层-业务逻辑层,查询username和password是否正确,实例化工厂,然后定义接口变量,调用工厂中的方法。返回一个用户实体的集合。

<span style="font-size:18px;"><span style="font-size:18px;">Imports IDAL

'**********************************************
'文 件 名: T_UserBLL
'命名空间: BLL
'内 容: 业务逻辑层
'功 能: 查询username和password是否正确
'文件关系:
'作 者:丁国华
'小 组:宝贝计划
'生成日期: 2014/7/9 9:02:30
'版本:V2.0
'改动日志:
'版权说明:
'********************************************** Public Class T_UserBLL
'/// <summary>
'/// depiction:<查询username和password是否正确>
'/// </summary>
'/// <param name="<enUser>"><用户实体></param>
'/// <returns>
'///<返回一个用户实体的集合>
'/// </returns>
Public Function SelectUser(ByVal enUser As Entity.UserEntity) As List(Of Entity.UserEntity)
Dim factory As New Factory.DataAccess
Dim IUser As IDAL.IUser
Dim myList As List(Of Entity.UserEntity) IUser = factory.CreateIUser()
myList = IUser.SelectUser(enUser) Return myList End Function
End Class
</span></span>

第五层:Facade-外观层,《大话设计模式》一百零三页有详细的相关介绍。

<span style="font-size:18px;"><span style="font-size:18px;">'**********************************************
'文 件 名: LoginFacade
'命名空间: Facade
'内 容:
'功 能:
'文件关系:
'作 者:丁国华
'小 组:宝贝计划
'生成日期: 2014/7/9 8:41:05
'版本:V2.0
'改动日志:
'版权说明:
'********************************************** Public Class LoginFacade
'/// <summary>
'/// depiction:<选择用户>
'/// </summary>
'/// <param name="<enUser>"><用户实体></param>
'/// <returns>
'///<返回一个用户实体的集合>
'/// </returns> Public Function SelectUser(ByVal enUser As Entity.UserEntity) As List(Of Entity.UserEntity)
Dim userBLL As New BLL.T_UserBLL
Dim myList As List(Of Entity.UserEntity) myList = userBLL.SelectUser(enUser) If myList.Count = 0 Then
Throw New Exception("username或password输入错误")
Else
Return myList
End If
End Function
End Class</span></span>

第六层:UI层-用户显示层,U层负责数据的输入与输出。调用Façade层验证用户类的查询方法来确认该用户是否存在。最后通过调用Façade层的方法登录。

<span style="font-size:18px;"><span style="font-size:18px;">Imports System.Windows.Forms

'**********************************************
'文 件 名: frmLogin
'命名空间: UI
'内 容: 用户显示层
'功 能: 确认用户是否存在
'文件关系:
'作 者:丁国华
'小 组:宝贝计划
'生成日期: 2014/7/8 17:51:07
'版本:V2.0
'改动日志:
'版权说明:
'**********************************************
Public Class frmLogin Public Shared enLogin As New Entity.UserEntity '/// <summary>
'/// depiction:<确认用户是否存在>
'/// </summary>
'/// <param name="<>"><></param>
'/// <returns>
'///<登录失败给出提示,登录成功进入主界面>
'/// </returns>
Private Sub btnConfirm_Click(sender As Object, e As EventArgs) Handles btnConfirm.Click
Dim facade As New Facade.LoginFacade
Dim myList As New List(Of Entity.UserEntity)
Dim enUser As New Entity.UserEntity '封装实体
Dim flag As Boolean
Try
enUser.userID = txtUserName.Text.Trim()
enUser.password = txtPassword.Text.Trim() myList = facade.SelectUser(enUser) If myList.Count > 0 Then
MsgBox("登录成功") Dim enWorklog As New Entity.WorklogEntity
enWorklog.userID = txtUserName.Text.Trim()
enWorklog.loginDate = CStr(Format(Now(), "yyyy-MM-dd"))
enWorklog.loginTime = CStr(Format(Now(), "HH:mm:ss"))
enWorklog.status = "正在值班"
enWorklog.computer = Environment.GetEnvironmentVariable("USERNAME") flag = facade.InsertWorklog(enWorklog) enLogin.userID = myList.Item(0).userID
enLogin.level = myList.Item(0).level End If
Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
txtUserName.Focus()
txtUserName.SelectAll()
txtPassword.Text = "" End Try
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
End Class
</span></span>

第七层:SqlHelper。前面的博文有相关介绍。在这里,就不一一介绍了。

自此。一个小小的登录功能就实现了,在七层登录还没有成型的时候。各种纠结。各种不想做,有种快到临界点的感觉。但是走过之后。发现。这个临界点是打开三界的结界。打开之后,发现这个世界如此漂亮多彩。一如七仙女的故事。我们的七层登录也是各司其职,在自己的工作岗位履行着自己的职责。

第二版机房收费系统,未完,待续......

VB.NET版机房收费系统---七仙女之系统登录的更多相关文章

  1. VB.NET版机房收费系统---导出Excel表格

    datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,能够显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件很easy和直观,大多数情 ...

  2. VB.NET版机房收费系统---异常处理

    异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台 ...

  3. VB.net版机房收费系统——结账功能实现(调错与优化)

    调错部分 上一篇博客<VB.net版机房收费系统--结账功能实现(代码部分>说的是结账功能的实现,亮出了代码.是在为这篇博客做铺垫.尽管结账功能代码是借鉴的巨人的博客.可是自己比着葫芦画瓢 ...

  4. VB.NET版机房收费系统---报表

    报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...

  5. VB.NET版机房收费系统---组合查询

    查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有怎样的惊喜等着我? 啊哦,这个信息并不是我想 ...

  6. VB.NET版机房收费系统---外观层如何写

    外观设计模式,<大话设计模式>第103页详细讲解,不记得这块知识的小伙伴可以翻阅翻阅,看过设计模式,敲过书上的例子,只是学习的第一步,接着,如果在我们的项目中灵活应用,把设计模式用出花儿来 ...

  7. VB.NET版机房收费系统---外观层怎样写

    外观设计模式.<大话设计模式>第103页具体解说,不记得这块知识的小伙伴能够翻阅翻阅,看过设计模式,敲过书上的样例,仅仅是学习的第一步,接着,假设在我们的项目中灵活应用,把设计模式用出花儿 ...

  8. VB.NET版机房收费系统—数据库设计

    之前第一遍机房收费的时候,用的数据库是别人的.认知也仅仅能建立在别人的基础上,等自考中<数据库系统原理>这本书学完了之后,再去看曾经的数据库,发现数据库真的还须要进一步的优化.以下是我设计 ...

  9. vb.net版机房收费系统——教你七层架构(三)—外观模式

    上次我们看到了D层是如何运作的,如今.我简单演示一下我的外观和B层是如何和U层和D层打交道的. 首先我跟大家说的是我的外观是依照界面功能划分的,粒度有点小,大家在做的时候,记得外观有几个即可了,可是不 ...

随机推荐

  1. Linux svn直接删除版本库文件

    业务目录:/home/web/oa.youxi.com/htdocs/materialsvn地址:svn://192.168.13.61:/oa.youxi.com/htdocs/material m ...

  2. iOS开发UI篇——简单的浏览器查看程序

    一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件的对象,需要添加监听方法 左边按钮 右边 ...

  3. cer, pfx 创建,并且读取公钥/密钥,加解密 (C#程序实现)

    PKI技术(public key infrastructure)里面,cer文件和pfx文件是很常见的.通常cer文件里面保存着公钥以及用户的一些信息,pfx里面则含有私钥和公钥. 用makecert ...

  4. 跟我学android-常用控件之EditText

    EditText 是TextView的直接子类,它与TextView的区别在于,EditText可以接受用户输入. 下面通过一个实例来说明EditText的用法 实例:sina 微博的登录界面(注意, ...

  5. mysql操作1

    一.连接MYSQL.格式: mysql -h主机地址 -u用户名 -p用户密码1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root - ...

  6. C# FTP操作

    using System; using System.Collections.Generic; using System.Net; using System.IO; namespace FTP操作 { ...

  7. css阴影

    文字阴影:text-shadow:[颜色 x轴 y轴 模糊半径],[颜色 x轴 y轴 模糊半径]... 区域阴影:box-shadow:[颜色 x轴 y轴 模糊半径],[颜色 x轴 y轴 模糊半径]. ...

  8. JQ之路——layer第三方弹窗

    layer官网 <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script&g ...

  9. ATR的基本结构与意义(无历史字符部分)

    Reset 3B FA 13 00 00 81 31 FE 45 4A 43 4F 50 34 31 56 32 32 31 96 复位应答 ATR TS( The Initial character ...

  10. 如何使用mysql

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...