VB.NET版机房收费系统---七仙女之系统登录
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版机房收费系统---七仙女之系统登录的更多相关文章
- VB.NET版机房收费系统---导出Excel表格
datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,能够显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件很easy和直观,大多数情 ...
- VB.NET版机房收费系统---异常处理
异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台 ...
- VB.net版机房收费系统——结账功能实现(调错与优化)
调错部分 上一篇博客<VB.net版机房收费系统--结账功能实现(代码部分>说的是结账功能的实现,亮出了代码.是在为这篇博客做铺垫.尽管结账功能代码是借鉴的巨人的博客.可是自己比着葫芦画瓢 ...
- VB.NET版机房收费系统---报表
报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...
- VB.NET版机房收费系统---组合查询
查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有怎样的惊喜等着我? 啊哦,这个信息并不是我想 ...
- VB.NET版机房收费系统---外观层如何写
外观设计模式,<大话设计模式>第103页详细讲解,不记得这块知识的小伙伴可以翻阅翻阅,看过设计模式,敲过书上的例子,只是学习的第一步,接着,如果在我们的项目中灵活应用,把设计模式用出花儿来 ...
- VB.NET版机房收费系统---外观层怎样写
外观设计模式.<大话设计模式>第103页具体解说,不记得这块知识的小伙伴能够翻阅翻阅,看过设计模式,敲过书上的样例,仅仅是学习的第一步,接着,假设在我们的项目中灵活应用,把设计模式用出花儿 ...
- VB.NET版机房收费系统—数据库设计
之前第一遍机房收费的时候,用的数据库是别人的.认知也仅仅能建立在别人的基础上,等自考中<数据库系统原理>这本书学完了之后,再去看曾经的数据库,发现数据库真的还须要进一步的优化.以下是我设计 ...
- vb.net版机房收费系统——教你七层架构(三)—外观模式
上次我们看到了D层是如何运作的,如今.我简单演示一下我的外观和B层是如何和U层和D层打交道的. 首先我跟大家说的是我的外观是依照界面功能划分的,粒度有点小,大家在做的时候,记得外观有几个即可了,可是不 ...
随机推荐
- C#接口的使用
.接口: 接口与抽象类一样,也是表示某种规则,一旦使用了该规则,就必须实现相关的方法.对于C#语言而言,由于只能继承自一个父类,因此若有多个规则需要实现,则使用接口是个比较好的做法. .接口的定义 i ...
- 利用TOAD实现把EXCEL数据导入oracle数据库
利用TOAD实现把EXCEL数据导入oracle数据库 工具: Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然 ...
- display: -webkit-flex; 手机上图下文字,pad上有浮动。
<article> <div class="boxt"> <div class="boxt-right"><img s ...
- javascript 操作符类型隐性转换
javascript 操作符类型隐性转换 (一).一元操作符只能操作一个值的操作符叫做一元操作符1.递增和递减操作符a. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作 ...
- C++对象数组操作误区
由于语义上的需要导致语法的上缺陷,所以导致对象数组在C++中存在陷阱. C++语境:一个基类指针或引用是可以指向派生类对象的,以此可来表现C++对运行时多态的需求: 创建一个对象数组将返回首元素的首地 ...
- 《asp.net mvc3 高级编程》第一章
以前项目中用过mvc2,虽然mvc4早已出来,但手头只有mvc3的书籍,索性就学学MVC3吧. asp.net mvc 3 概述 (1)友好的试图表达,其中包括新的Razor视图引擎 (2)支持.NE ...
- js监听回车事件
标题通俗的说,也就是绑定当用户按下回车键要执行的事件. 下面,入正题. 第一步,先编写简单的页面代码,这里我们只需要一个按钮就足够了.当然,还有按钮事件. <html> <head& ...
- 如何把PPT变小|PowerPoint文档减肥的几种方法
使用powerpoint制作幻灯片的过程中,经常出现过这样的情况,制作幻灯片时,出于内容的需要和美观的需要,添加了许多图片和Excel表或者OLE对象,成倍增大了文档的体积,结果导致: 1.页面编辑人 ...
- uva 10976 Fractions Again(简单枚举)
10976 Fractions Again It is easy to see that for every fraction in the form 1 k (k > 0), we can a ...
- TCP状态转换图
注意: connect函数导致当前套接字从CLOSE状态(该套接字自从由socket函数创建以来一直所处的状态)转移到SYN_SENT状态 若成功则再转移到ESTABLISHED状态, 若connec ...