机房收费个人版这个项目,很早就开始进行了,但是直到现在还没有完成。。原因有两方面,首先是自身的个人管理不到位。做事拖拖拉拉,没有很好的节制自身的不良习惯;其次是思想价值观极端化。世界上没有谁能将所有事情都做得完美无瑕,追求完美是一个美好的过程,但最终还是需要一个结果的。当鱼和熊掌不能兼得时,那么就要放弃,选择最重要的坚持下去!不要去纠结,会让你发疯。。

下面这张导图是我对三层的理解以及敲代码的指导方针。

首先,三层登陆由四部分组成。分别是UI层、BLL层、DAL层和Models实体。UI层的作用是接收用户输入的数据,显示用户查询的数据,为用户提供一种交互式操作界面;BLL层是起到数据的承上启下作用,对数据进行业务逻辑处理;DAL层的作用是具体操作数据库,如连接、查询、更改、删除等;Models层的作用是抽象数据库对象,如表实体、视图实体、存储过程实体等。将一个系统分为三层,会增强系统的逻辑性,使其结构清晰明了。

其次,四部分的关系非常明了。第一,UI、BLL和DAL都会引用Models实体层;第二,UI引用BLL,BLL引用DAL,很有顺序性;第三,当查到最终想要的结果后,会有一个逆向的反馈,其形式是Models,就好比导图中的users

最后,实践是检验真理的唯一标准。纸上谈兵是不行滴,还得看实战能力,下面就是我的三层登陆代码:

UI层

<pre name="code" class="vb"><span style="font-family:SimSun;font-size:18px;">Public Class frmLoginPrivate Sub btnConfirm_Click(sender As Object, e As EventArgs) Handles btnConfirm.Click'实例化业务逻辑层LoginBLL类Dim NewLoginBLL As New BLL.LoginBLL'实例化实体类UserEntityDim user As New Models.UserEntity'实例化实体类UserEntity,user用于BLL层的方法UserLogin()返回的数据类型(实体类型)Dim users As Models.UserEntity'界面业务逻辑:判断用户名和密码不能为空If txtUserName.Text = "" ThenMessageBox.Show("用户名不能为空")ReturnEnd IfIf txtPassword.Text = "" ThenMessageBox.Show("密码不能为空")ReturnEnd If'将界面中的数据传入给实体中UserEntity类的属性值user.UserID = txtUserName.Text.Trim()user.Password = txtPassword.Text.Trim()Try'引用BLL层,执行用户登陆业务逻辑users = NewLoginBLL.UserLoginBLL(user)If (users.UserID Is Nothing And users.Password Is Nothing) ThenMessageBox.Show("登录失败,用户名和密码不匹配")ReturnElseMessageBox.Show("登陆成功!登录用户:" + user.UserID)End If'返回错误信息Catch ex As ExceptionMessageBox.Show(ex.Message.ToString())End TryEnd SubEnd Class</span>

BLL层

''' <summary>
''' 创建登陆类,实现登录过程的逻辑处理
''' </summary>
''' <remarks></remarks>
Public Class LoginBLL'定义登陆函数,验证用户名和密码是否正确Function UserLoginBLL(ByVal user As Models.UserEntity) As Models.UserEntity'引用DAL层,声明必要类Dim NewUserDAL As New DAL.UserDAL'引用Models层,实例化UserEntity类Dim users As Models.UserEntity'引用DAL层users = NewUserDAL.UserLoginDAl(user)Return usersEnd FunctionEnd Class

DAL层

1、链接数据库

<span style="font-family:SimSun;font-size:18px;">''' <summary>
''' 创建连接数据库类DbConnectionString,方便之后各类连接数据库调用,对今后更新数据库提供方便
''' </summary>
''' <remarks></remarks>
Public Class DbConnectionString'定义连接数据库过程Public Shared Function connstring() As Stringconnstring = "Server=192.168.24.101;Database=Library Charge System Personal Edition;User ID=sa;Password=muchen920227"End FunctionEnd Class </span>

2、创建数据访问对象,访问数据表,返回符合条件的数据

<span style="font-family:SimSun;font-size:18px;">''SQL Server的.NET Framework数据提供程序描述了一个类集合,访问托管空间中的数据库,用于查询和更新数据库
Imports System.Data.SqlClient
''提供对表示ADO.NET结构的类的访问,通过ADO.NET可以生成一些组件,用于有效管理多个数据源的数据
Imports System.Data''' <summary>
''' 创建数据访问对象User.DAL,访问表T_User,返回符合条件调用
''' </summary>
''' <remarks></remarks>
Public Class UserDAL'定义选择用户函数,按传入参数返回T_User表中的指定记录Function UserLoginDAL(ByVal user As Models.UserEntity) As Models.UserEntity''创建连接对象Dim conn As New SqlConnection''创建命令对象Dim cmd As New SqlCommand''连接数据库conn = New SqlConnection(DbConnectionString.connstring())cmd.Connection = conn'根据实体中的用户名和密码选中记录内容''定义SQL语句cmd.CommandText = "Select UserID,Password from T_User Where UserID=@UserID and PassWord=@Password"'添加命令参数cmd.Parameters.Add(New SqlParameter("@UserID", user.UserID))cmd.Parameters.Add(New SqlParameter("@Password", user.Password))cmd.CommandType = CommandType.Text'打开连接conn.Open()'执行调查,SqlDataReader提供一种从 SQL Server 数据库读取行的只进流的方式。若要创建 SqlDataReader,必须调用 SqlCommand 对象的 ExecuteReader 方法,而不要直接使用构造函数。Dim reader As SqlClient.SqlDataReaderreader = cmd.ExecuteReader()Dim users As New Models.UserEntity'读取字段While (reader.Read())If users Is Nothing Thenusers = New Models.UserEntityEnd Ifusers.UserID = reader.GetString(reader.GetOrdinal("UserID"))users.Password = reader.GetString(reader.GetOrdinal("Password"))End Whileconn.Close()''返回查询结果Return usersEnd FunctionEnd Class</span>
<span style="font-family:SimSun;font-size:18px;">
</span>

Models层

Public Class UserEntity'声明属性Private _userID As String'用户IDPublic Property UserID() As StringGetReturn _userIDEnd GetSet(value As String)_userID = valueEnd SetEnd Property  

总结

敲三层登陆是一个很好的入门手段,它让我更形象、具体的理解三层的内涵和结构,至于机房收费的其他功能,就更像是换汤不换药,万变不离其宗啦!我的三层登陆还有许多不足,我只是将其核心敲出来了,没有太多的细节,这是我需要进一步完善的。。希望大牛们给我提出宝贵意见,交流让我们的世界更加宽广。。下一篇博客《【机房收费个人版】七层登陆》

【机房收费系统个人版】三层登陆相关推荐

  1. 机房收费系统合作版(一):开始团队合作之旅

    时光荏苒,犹记去年这时开始自己人生的第一个系统(机房收费系统个人版)的开发,又至刚刚弄完的机房收费个人重构版,至此自己对这个系统已开发了二次,趁热打铁于是乎轰轰烈烈的开始了自己对机房收费的第三遍合作之 ...

  2. 机房收费系统合作版(四):一路走来感谢有你相伴

    [前言] 伴随着1月25日米老师首次验收以及1月31日学术再次验收,鹅思晗小组的机房收费系统合作版终于画上一个圆满的句号. 回想这两个大牛和一只小菜的软件开发之旅还是蛮有趣的:特记于此,以此来纪念我这 ...

  3. 机房收费系统=三层+设计模式

    在简单的三层登陆完成之后,我又在其中加入了设计模式,其中包括抽象工厂+反射和外观模式.关于设计模式,在学习三层之前我们已经系统的学习过,可是在这次往机房收费系统中加设计模式时,还是感觉无从下手,出现了 ...

  4. .NET分层登陆——机房收费系统再总结

    去年的时候,我写过一篇机房收费系统登陆的总结文章,那是站在VB的基础上,直接查询数据库实现的登陆.是非常初期的知识.假设想了解详情,请看VB查询数据库之登陆窗口--机房收费系统总结(一). 今天.我要 ...

  5. 机房收费系统系列一:运行时错误‘-2147217843(80040e4d)’;用户‘sa’登陆失败...

    做机房收费系统的时候,首先在SQL server数据库中添加好charge数据库(在对象资源管理器中,右击数据库,点击附加,找到charge的mdf文件,点击确定),然后用ODBC配置好数据库,把机房 ...

  6. 机房收费系统问题集(2)——移动登陆界面+show出子窗体

       安装上机房收费系统样本,连接上数据库,在运行的时候,我很是佩服机房收费系统的高大上    在我亲自敲的时候遇到了下面的问题: (1)登陆界面不能用鼠标移动    在机房收费系统的样本中,登陆界面 ...

  7. 【VB与数据库】机房收费系统开发阶段之登陆

    在机房收费系统中开始就是登陆窗体,在开始的时候如果全局观没有把握好,就会丢掉更新数据库中的数据,我刚开始就忘了更新Onwork _Info中的数据,所以要做一个窗体前,就要给它建立好自己的关系图,牵一 ...

  8. 机房收费系统系列一:运行时错误‘-2147217843(80040e4d)’;用户‘sa’登陆失败

    做机房收费系统的时候,首先在SQL server数据库中添加好charge数据库(在对象资源管理器中,右击数据库,点击附加,找到charge的mdf文件,点击确定),然后用ODBC配置好数据库,把机房 ...

  9. 机房收费系统.Net个人版总结

    机房收费系统.Net版到前两天为止才算是彻底完工了.从寒假开始的初步文档+图设计,以及之后的代码实现,到三月中旬开始的文档规范.图规范.代码规范.这个生命周期真是一个长啊.给自己总结了一下:本次机房收 ...

最新文章

  1. 【ubuntu工具】Atom的简介及安装
  2. 8)排序①排序算法之交换排序[1]冒泡排序法
  3. 转:PHP Liunx 服务安全防范方案
  4. BZOJ 2333 【SCOI2011】 棘手的操作
  5. assign深拷贝_前端深拷贝和浅拷贝
  6. 使用JDK 11在Java字符串上的新方法
  7. python变量和常量_python变量与常量内容:
  8. bash 将二进制转换为十进制_一文帮你详细图解二进制、八进制、十进制、十六进制之间的转换...
  9. 韩顺平php视频笔记72-74 面向对象编程的三大特征3 重载override与重写overload 魔术常量
  10. 小米 11 不送充电器;苹果已修复 iCloud 登录激活问题;Ruby 3.0.0 发布|极客头条...
  11. android通用adapter,Android通用ListViewAdapter的编写。
  12. java基础----对象的创建过程(初始化、析构、清理)
  13. php onvif截图,基于C#的onvif协议之抓图
  14. 3分钟阿里云商标智能注册申请及申请流程图文详解
  15. 台式计算机 按键盘字母键 没反应6,台式电脑键盘没反应怎么回事 键盘按了没反应怎么办...
  16. 【人工智能】【1024】谷歌量子计算突破登Nature封面,号称200秒顶超算10000年!
  17. 按键猫咪完美全键盘版教程
  18. 2019年8月10日工作总结
  19. interFoam求解器分析
  20. SpringMVC实现中英文切换

热门文章

  1. 大数据再出发-19Flink
  2. word中编号样式库内找不到带圈编号的解决方案
  3. docker之卷10
  4. 如何看待人生与技术的价值
  5. 《TCP/IP详解》读书笔记(18章)-TCP连接的建立与中止
  6. oracle 2019 ocp,2019 OCP简介
  7. 使用与破解ExcelVBA密码
  8. KATKO KEM640U开关
  9. powerquery分组_Power Query系列 - 排序Ranking
  10. 应用程序迁移_加速绿色IT-关于应用程序迁移和重新托管的实用指南