vb.net版机房收费系统重构

机房收费系统重构版终于正式开工了!

前几天,刚刚看完三层的视频,在视频中详细的讲解了一个登录功能。天真的我,当时以为三层结构是那么的简单,所以我草草地做完总结之后,就很快就开始机房收费系统的重构了。可是谁想到,当我一打开编程软件,就让我“碰了一鼻子的灰”!首先是不知道vs 怎么用,其次就是看三层的时候,登录的实例使用C#写的,而这次我们需要用VB.NET写,所以对于其中的语法是知之甚少。虽然,前段时间我看了一遍台湾讲师——曹祖胜的《VB.NET
视频》,但是他讲的几乎都是一些底层的应用,关于怎样编程,编程的语法,以及控件等的使用几乎很少讲。所以,备受摧残的我,无奈之下还是选择了,从头来过。

下面就以我自己的亲身实践,说说刚开始机房重构时的历程吧。

一、参考资料

对于当前我需要用一种从没接触过的编程语言去实现一个机房收费系统,如果没有参考,根本不知从何做起。所以,网上的参考资料自然少不了。下面罗列的都是提高班的前辈们的佳作以供参考:

贾琳——重构机房收费系统

三层架构

二、包图设计

在看完一些资料之后,最需要做的就是,要清楚我将要做的机房收费系统是什么样子的了,或者说他的结构是什么样子的。下面是我画的包图:

很明显,这个系统包图是由三层结构演化而来,其中加进了两个设计模式和一个实体。正所谓“万变不离其宗”,这个系统的实现,其实和正常的三层结构没有很大的差别。但是,我个人还是认为,刚学习完三层,对其理解还是一知半解,所以我们有必要先用三层的结构去实现系统的一部分功能。这样,有助于我们对三层的理解,以及便于我们在后面轻松的加入设计模式。

三、数据库设计

在明确了机房收费系统的结构和功能之后,眼看着我们就要开始实现了,所以我们就需要建立数据库了。关于数据库的建立,我感觉我仍然有很多知识的漏洞,所以不在这里卖弄了。给大家推荐一下我师父的博客,希望能给大家带来灵感。

数据库设计第三范式

四、代码实现

在进行这个步骤之前,其实还有一个非常重要的步骤——画时序图。重所周知,正常的软件开发工作都是在完成了各种文档以及各种UML图之后才开始的。但是,由于现阶段的我仍然处于学习阶段,所以部分工作都放在了完成代码之后再去执行。不过,我认为,别的工作可以放一放,但是时序图很有必要画一画。因为,在画时序图的时候,我们就仔细的研究了系统的动作顺序,这个对我们敲代码非常有帮助。让我不至于不知道自己该怎么做。因为时序图中有很多参数,我没有来得及加,所以在这里就不贴出样本来了。

下面,把我的机房收费系统的登陆功能代码贴出来跟大家探讨一下,如果有更好的实现方法,希望不吝赐教!

UI层

Public Class frmLogin
    ''' <summary>
    ''' 用户登录
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub cmdLogin_Click(sender As Object, e As EventArgs) Handles cmdLogin.Click
        '定义一个外观变量
        Dim fac As Facade.LoginFacade
        '定义并实例化一个实体型变量
        Dim user As New Entity.UserInfoEntity

        user.GetUserName = txtUserName.Text.Trim()      '获得用户名
        user.GetPassword = txtPassword.Text()           '获得密码

        fac = New Facade.LoginFacade            '实例化一个外观类

        If fac.FacUserLogin(user) = False Then  '数据处理,调用外观层

            '将登陆用户的用户名保存到模块当中
<span style="white-space: pre; ">		</span>UserName = txtUserName.Text.Trim()
            Me.Hide()
            frmMain.Show()
        Else
            MsgBox("用户名或密码错误,请重新输入!", vbOKCancel + vbExclamation, "提示")
            txtUserName.Text = ""
            txtPassword.Text = ""
            txtUserName.Focus()

        End If
    End Sub

Facade层

Public Class LoginFacade

    ' ''' <summary>
    ' ''' 登录功能的外观方法
    ' ''' </summary>
    ' ''' <param name="userName">用户名</param>
    ' ''' <param name="Password">密码</param>
    ' ''' <returns>
    ' ''' 返回登录是否成功的结果
    ' ''' </returns>
    ' ''' <remarks></remarks>
    ' ''' 

    Public Function FacUserLogin(ByVal user As Entity.UserInfoEntity) As Boolean
        '实例化一个B层变量
        Dim userLog As New BLL.LoginManagerBLL

        '定义一个返回值变量
        Dim bool As Boolean

        bool = userLog.UserLogin(user)
        Return bool
    End Function

End Class

BLL层

Imports IDAL
Imports Factory
Imports Entity

Public Class LoginManagerBLL       'B层
    Public Function UserLogin(ByVal user As Entity.UserInfoEntity) As Boolean
        '定义一个接口变量
        Dim iuser As IDAL.IUser
        '定义并实例化一个工厂变量
        Dim factory As New Factory.UserFactory
        '定义一个实体型变量
        Dim userinfo As Entity.UserInfoEntity

        '实例化
        userinfo = New UserInfoEntity

        iuser = factory.CreatUser()   '用工厂实现一个接口
        Dim bool As Boolean

        userinfo = iuser.QueryUserInfo(user)          '调用D层方法

        If userinfo.GetUserName = "" Then
            bool = True
        End If

        Return bool

    End Function
End Class

Factory层

Imports System.Reflection
Imports System.Configuration
Imports IDAL
Public Class UserFactory       '抽象工厂

    ''' <summary>
    ''' 抽象工厂+反射+配置文件
    ''' </summary>
    ''' <remarks></remarks>
    Private Shared ReadOnly AssemblyName As String = "DAL" '定义程序集名称变量,D层的命名空间的名字
    Private Shared ReadOnly DB As String = ConfigurationManager.AppSettings("DB") '将数据库类型通过文件形式读取到变量db中

    '用于实例化sqlUserDAL 类
    Public Function CreatUser() As IUser
        Dim iuser As IUser
        Dim className As String
        '拼接字符串,得到D层类名
        className = AssemblyName + "." + DB + "UserDAL"
        iuser = CType(Assembly.Load(AssemblyName).CreateInstance(className), IUser)
        Return iuser

    End Function

End Class

IDAL层

Public Interface IUser
    Function QueryUserInfo(ByVal user As Entity.UserInfoEntity) As Entity.UserInfoEntity

    Function ModifyPWD(ByVal user As Entity.UserInfoEntity) As Integer

End Interface

DAL层

Imports IDAL
Imports System.Data.SqlClient
Imports System.Data
''' <summary>
''' 查询用户是否存在
''' </summary>
''' <remarks></remarks>
Public Class sqlUserDAL : Implements IUser

    Private sqlHelper As DBHelper = New DBHelper '实例化一个sqlhelper类
    Public Function QueryUserInfo(ByVal user As Entity.UserInfoEntity) As Entity.UserInfoEntity Implements IUser.QueryUserInfo

        Dim sqlParas As SqlParameter() = {New SqlParameter("@userName", Trim(user.GetUserName)),
                                         New SqlParameter("@Password", user.GetPassword)}
        Dim strsql As String = "SELECT * FROM T_User WHERE UserID [email protected] AND Password = @Password "

        Dim datatable As DataTable = sqlHelper.GetDataTable(strsql, CommandType.Text, sqlParas)

        Dim textUser As New Entity.UserInfoEntity

        If (datatable.Rows.Count <> 0) Then
            textUser.GetUserName = datatable.Rows(0).Item("UserID")
            textUser.GetPassword = datatable.Rows(0).Item("Password")

            Return textUser
        Else
            Return textUser
        End If

    End Function

vb.net版机房收费系统重构

时间: 2024-10-03 14:14:58

vb.net版机房收费系统重构的相关文章

vb.net版机房收费系统重构的成长历程(功能实现篇)

重构机房收费系统,功能是不变的,需求是不变的,系统背后的代码,架构发生了改变.做过vb6.0版的系统 后,利用VS的VB.NET平台, 通过调整程序架构,加入了设计模式,改善软件的质量.性能,提高软件的扩展性和维护性.相比旧版系统,新版系统主要亮点有: 亮点一:代码分层管理,清晰明了 亮点二:加入工厂和接口,代码复用较多,减少了重复或相似的代码. 亮点三:用到了存储过程.一方面减少了代码量,另一方面也相当于是一个事务的执行.比如注册或者结账需要同 时操作多张表,这几个表必须同时被操作成功后才可以

VB.Net版机房收费系统 ---数据库设计

数据库设计是根据用户需求设计数据库结构的过程,具体来说,数据库设计是对于给定的应用环境,在厝数据库理论的指导下,构造最优的数据库模式,在数据库管理系统上建立数据库及其应用系统,使之能有效地存储数据,满足用户的各种需求的过程.到底数据库该如何设计,古往今来,每个人都有每个人的想法,所以数据库设计并没有优劣之分,好坏之别,合适的数据库设计就是最好的. 走过自考--<数据库系统原理>,看过耿建玲老师的视频,对数据库设计有了一点了解,VB版的机房收费系统,直接用原来的脚本生成的数据库,当时对数据库设计

VB.NET版机房收费系统---SqlHelper

SqlHelper,最早接触这个词儿的时候,好像是13年的暑假,那个夏天来的比往年来的稍晚一些,呵呵,sqlhelper,翻译成中文就是数据库助手,帮手.百度百科这样对她进行阐述: SqlHelper是一个基于.NET Framework的数据库操作组件.组件中包含数据库操作方法.SqlHelper用于简化我们重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等.SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,

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

之前第一遍机房收费的时候,用的数据库是别人的,认知也只能建立在别人的基础上,等自考中<数据库系统原理>这本书学完了之后,再去看以前的数据库,发现数据库真的还需要进一步的优化,下面是我设计数据库的一些见解,希望大家多提些意见. 数据库设计 E-R模型: 在观念模型设计阶段,一个系统都是建立在ER模型上的,设计好ER模型,很重要. 我设计的ER图: 系统中的实体:很简单,就是将系统中的名词都抽象出来,再具体了就是转换为数据库的逻辑设计时才要考虑的. 系统中的联系:在图中可以看得很清楚,这里我要重点

VB.NET版机房收费系统—DataGridView应用

事实上,先前刚刚開始敲机房的时候,刚用到DataGridView的时候,总显得力不从心,先要一下子就学会,看了非常多的资料,但是依照写的时候,自己有不知道从什么地方下手,于是,当自己用查询SQL语句,并用DataGridView显示出来,这个功能不能实现,但这里给大家写一下,假设有什么地方不好的会,请大家指出: 第一版: 窗口设计: 须要的控件: DateTimePicker.DataSet.DataGridView 把握的三步骤: 第一步:使用视图,创建出你要的产寻结果的视图(假设是一个表就能

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

datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,可以显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件非常简单和直观,大多数情况下,只需要设置DataSource属性即可,在绑定到包含多个列表或表的数据库源时,只需将DataMember属性设置为绑定的列表或表的字符串即可.机房收费系统多次用到数据表格的显示,并且导出为Excel表格,第一次机房收费系统是用VB版本的,她导出Excel的方法如下: 打开VB-工程-应用-勾选M

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

异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台的异常处理机制更加灵活,而且使用更加方便.是代替日渐衰落的Error Code方法的新法,提供Error Code 所未能具体的优势.异常处理巧妙又不失完美的分离了接收和处理错误代码.这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解. 异常处理(又称为错误处理)功能提供了

VB.NET版机房收费系统---七仙女之系统登录

VB.NET第一版机房收费系统,告一段落,验收的时候,问题也是大大的存在,没有用上设计模式,什么触发器,存储过程,都没有用上,看看其她小伙伴的,七层实现登录?那是什么东东,相比较我的三层而言,多了两倍还加个一,通过查资料,看博客,憋了好几天,终于,憋出了一个七仙女---七层实现系统登录,七个女儿,各司其职,完美配合,衍生出众多美丽的故事. 从三层猛地跳到七层,有种穿越的感觉,说白了就是不会,又是想逃避的感觉,可是人生在世,有的事情不能随着自己的性子来,喜欢了就去做,不喜欢,就不做,没办法,就一直

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

报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据. 比如:民间常常说的豆腐帐,就是卖豆腐的每天将自己的卖出的豆腐记在一个本子上,然后每月都要汇总算算,这种情况下,报表数据和报表格式是紧密结合在一起的,都在同一个本子上.数据也只能有一种几乎只有记帐的人才能理解的表现形式,且这种形式难于修改. VB版机房收费系统的报表采用的是第三方的Grid++Report,