三层思想的通讯录

     在上一篇博客<<面向对象通讯录>>中,我简单的说了如何用面向对象的方法写通讯录,今天我们就来学习一下三层

 

的思想.


     曾在我的一篇<<三层架构笔记>>中介绍过关于三层的一些理论知识,三层主要是UI(显示层),BLL(逻辑层),DAL(数据

层).我第一个三层的例子是一个登录系统,但是这个例子是我模仿别人敲的,我用别人的程序,调通了一条线在写的,所以

 

就不贴出来了.,以下介绍的通讯录的例子是我自己写的,因为是刚接触三层,难免会有错误.还请高手多多指点,

 

1.界面:

2.主要实现功能:

 

(1).点击"新增"按钮的时候,文本框被清空,输入数据,点击"保存"按钮,数据插入数据表中

 

(2.)修改文本框中的信息,点击保存,可以修改数据库表中对应的信息

 

(3).点击"删除"按钮,可以删除选中的信息.

 

3.数据库设计:

 

利用SQL Server数据库,建了一个“Login”数据库,其中建了一张Relationtable表,数据表内容具体如图:

 

4.实现代码:

(1)UI层

'************************************************* 
'作者:唐欢
'小组:  
'说明:UI层,用户界面
'创建日期:2013-1-6
'版本号:V1.00
'**********************************************'

Imports PersonBLL
Public Class FrmPerson

    Dim Modtype As String = "add" 'add--添加,eidt-修改"
    ''' <summary>
    ''' 新增
    ''' </summary>

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Txtname.Text = ""
        txtphone.Text = ""
        Txtmobibe.Text = ""
        TxtAddress.Text = ""

        Modtype = "add"
    End Sub
    ''' <summary>
    ''' 保存
    ''' </summary>

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim PersonSave As New Personphysical.ClsPersonphysical
        Dim BllCheck As New PersonBLL.ClsPersonBLL
        Dim dt As New DataTable
        Dim val As New SqlClient.SqlCommand

        PersonSave.Name = Trim(Txtname.Text)
        PersonSave.Phone = Trim(txtphone.Text)
        PersonSave.Mobibe = Trim(Txtmobibe.Text)
        PersonSave.Address = Trim(TxtAddress.Text)

        If Modtype = "add" Then
            If BllCheck.SaveUIandPhysical(PersonSave) Then
                MsgBox("添加成功")
            Else
                MsgBox("添加未成功!")
            End If
        Else
            If BllCheck.UpdateUIandPhysical(PersonSave) Then
                MsgBox("修改成功")
            Else
                MsgBox("修改未成功!")
            End If
        End If
            DataGridView1.DataSource = BllCheck.Allperson(dt)

    End Sub
    ''' <summary>
    ''' 窗体加载
    ''' </summary>
    Private Sub FrmPerson_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Dim Physicalfrm As New Personphysical.ClsPersonphysical
        DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect

        Dim dt As New DataTable
        Dim Uiallperson As New PersonBLL.ClsPersonBLL
        DataGridView1.DataSource = Uiallperson.Allperson(dt)

    End Sub

    ''' <summary>
    ''' 选中某行
    ''' </summary>
   
    Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
        Dim Selectionperson As New Personphysical.ClsPersonphysical
        Dim BllSelectionperson As New PersonBLL.ClsPersonBLL

        If DataGridView1.SelectedRows.Count = 0 Then
            Exit Sub
        End If



        Modtype = "edit"
        Dim row As DataGridViewRow = DataGridView1.SelectedRows(0)
        Selectionperson.Name = row.Cells(0).Value.ToString()


        Selectionperson = BllSelectionperson.SelectPerson(Selectionperson)

        Txtname.Text = Selectionperson.Name
        txtphone.Text = Selectionperson.Phone
        Txtmobibe.Text = Selectionperson.Mobibe
        TxtAddress.Text = Selectionperson.Address

    End Sub
    ''' <summary>
    ''' 退出
    ''' </summary>
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Application.Exit()
    End Sub
    ''' <summary>
    ''' 删除选中的信息
    ''' </summary>

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim Deleteperson As New Personphysical.ClsPersonphysical
        Dim BllDeleteperson As New PersonBLL.ClsPersonBLL
        Dim dt As New DataTable

        If DataGridView1.SelectedRows.Count = 0 Then
            Exit Sub
        End If

        Dim row As DataGridViewRow = DataGridView1.SelectedRows(0)
        Deleteperson.Name = row.Cells(0).Value.ToString()

        If BllDeleteperson.DeletePeson(Deleteperson) Then
            MsgBox("删除成功!")
        Else
            MsgBox("删除不成功!")
        End If

        DataGridView1.DataSource = BllDeleteperson.Allperson(dt)

    End Sub
End Class


(2)BLL层(已做修改)

'************************************************* 
'作者:唐欢
'小组:  
'说明:BLL层,进行逻辑判断
'创建日期:2013-1-6
'版本号:V1.00
'**********************************************'
Public Class ClsPersonBLL
    ''' <summary>
    ''' 新添加信息
    ''' </summary>
    ''' <param name="BllName"></param>
    ''' <returns>PhysicalName</returns>
    ''' <remarks>把输入的信息传递给DAL层</remarks>
    Function SaveUIandPhysical(ByVal BllName As Personphysical.ClsPersonphysical) As Boolean 'Personphysical.ClsPersonphysical
        Dim DalName As New PersonDAL.ClsPersonDAL
        Dim PhysicalName As New Personphysical.ClsPersonphysical

        PhysicalName.Name = BllName.Name
        PhysicalName.Phone = BllName.Phone
        PhysicalName.Mobibe = BllName.Mobibe
        PhysicalName.Address = BllName.Address
        'PhysicalName = DalName.Add(PhysicalName)

        'Return PhysicalName
        Return DalName.Add(PhysicalName)

    End Function
    ''' <summary>
    ''' 更新信息
    ''' </summary>
    ''' <param name="BllNameupdate"></param>
    ''' <returns>PhysicalName</returns>
    ''' <remarks>把UI层的输入信息传递给DAL层</remarks>
    Public Function UpdateUIandPhysical(ByVal BllNameupdate As Personphysical.ClsPersonphysical) As Boolean
        Dim DalName As New PersonDAL.ClsPersonDAL
        Dim PhysicalName As New Personphysical.ClsPersonphysical
        Dim val As New SqlClient.SqlCommand
        'Dim Bllval As Integer

        'Dim dt As New DataTable
        PhysicalName.Name = BllNameupdate.Name
        PhysicalName.Phone = BllNameupdate.Phone
        PhysicalName.Mobibe = BllNameupdate.Mobibe
        PhysicalName.Address = BllNameupdate.Address
        'PhysicalName = DalName.Update(PhysicalName)

        Return DalName.Update(PhysicalName)

    End Function

    ''' <summary>
    '''  '获得所有人的信息
    ''' </summary>
    ''' <param name="alldt"></param>
    ''' <returns>AllPersonInformation</returns>
    ''' <remarks>获取这个表的信息</remarks>
    Public Function Allperson(ByVal alldt As DataTable) As DataTable
        Dim dt As New DataTable
        Dim AllPersonInformation As New Personphysical.ClsPersonphysical
        Dim Dalallperson As New PersonDAL.ClsPersonDAL
        dt = Dalallperson.GetAll(dt)
        Return dt
    End Function

    ''' <summary>
    ''' 获取某行的值
    ''' </summary>
 
    Public Function SelectPerson(ByVal SelectInfo As Personphysical.ClsPersonphysical) As Personphysical.ClsPersonphysical
        Dim Phselectperson As New Personphysical.ClsPersonphysical
        Dim Dalselectperson As New PersonDAL.ClsPersonDAL

        Phselectperson.Name = SelectInfo.Name
        Phselectperson = Dalselectperson.Getperson(Phselectperson)
        Return Phselectperson
    End Function

    ''' <summary>
    ''' 删除
    ''' </summary>
    Public Function DeletePeson(ByVal Detperson As Personphysical.ClsPersonphysical) As Boolean ' Personphysical.ClsPersonphysical
        Dim Phdeleteperson As New Personphysical.ClsPersonphysical
        Dim Daldeleteperson As New PersonDAL.ClsPersonDAL

        Phdeleteperson.Name = Detperson.Name

        'Phdeleteperson = Daldeleteperson.Delete(Phdeleteperson)
        'Return Phdeleteperson
        Return Daldeleteperson.Delete(Phdeleteperson)
    End Function

End Class




(3)DAL层(已做修改)

'************************************************* 
'作者:唐欢
'小组:  
'说明:DAL层,对数据库进行操作
'创建日期:2103-1-6
'版本号:V1.00
'**********************************************'
Imports System.Data.SqlClient
Imports System.Object

Public Class ClsPersonDAL

    ''' <summary>
    '''  '数据库连接
    ''' </summary>
    ''' <returns>SqlCn</returns>
    ''' <remarks>连接对象,实现数据库的连接</remarks>
    Private Function GetConnection() As SqlConnection
        Dim SqlCnstr As String = "server=TANGHUAN-PC;Database=login;Uid=sa;Pwd=123456;"
        Dim SqlCn As SqlConnection = New SqlConnection(SqlCnstr)
        Return SqlCn
    End Function
    ''' <summary>
    ''' 往数据库中添加新记录
    ''' </summary>
    ''' <param name="Save"></param>
    ''' <returns>DalName</returns>
    ''' <remarks>插入成功后,把值返回给BLL层</remarks>
    Public Function Add(ByVal Save As Personphysical.ClsPersonphysical) As Boolean 'Personphysical.ClsPersonphysical
        Dim DalName As New Personphysical.ClsPersonphysical
        Dim Sqlcn As SqlConnection = GetConnection()
        Try
            Sqlcn.Open()
            Dim Sqlcmdstr As String = "INSERT INTO  Relationtable(Name,Phone,Mobibe,Address) VALUES (@name,@phone,@mobibe,@address)"
            Dim Sqlcmd As SqlCommand = New SqlCommand(Sqlcmdstr, Sqlcn)


            Dim p1 As SqlParameter = New SqlParameter("@name", Save.Name)
            Dim p2 As SqlParameter = New SqlParameter("@phone", Save.Phone)
            Dim p3 As SqlParameter = New SqlParameter("@mobibe", Save.Mobibe)
            Dim p4 As SqlParameter = New SqlParameter("@address", Save.Address)

            Sqlcmd.Parameters.Add(p1)
            Sqlcmd.Parameters.Add(p2)
            Sqlcmd.Parameters.Add(p3)
            Sqlcmd.Parameters.Add(p4)

            'Sqlcmd.ExecuteNonQuery()
            If Sqlcmd.ExecuteNonQuery > 0 Then
                Return True
            Else
                Return False
            End If

        Finally
            Sqlcn.Close()
        End Try
        'Return DalName
    End Function
    ''' <summary>
    ''' 更新数据
    ''' </summary>
    ''' <param name="updateinfo"></param>
    ''' <returns>DalName</returns>
    ''' <remarks>更新成功的值返回给Bll层</remarks>
    ''' 
    
    Public Function Update(ByVal updateinfo As Personphysical.ClsPersonphysical) As Boolean 'Personphysical.ClsPersonphysical
        Dim DalName As New Personphysical.ClsPersonphysical
        Dim Sqlcn As SqlConnection = GetConnection()


        Try
            Sqlcn.Open()
            Dim Sqlcmdstr As String = "Update Relationtable set Name=@name,Phone=@name,Mobibe =@mobibe,Address=@address where Name='" & updateinfo.Name & "'"
            Dim Sqlcmd As SqlCommand = New SqlCommand(Sqlcmdstr, Sqlcn)

            DalName.Name = updateinfo.Name
            DalName.Phone = updateinfo.Phone
            DalName.Mobibe = updateinfo.Mobibe
            DalName.Address = updateinfo.Address
            Dim p1 As SqlParameter = New SqlParameter("@name", DalName.Name)
            Dim p2 As SqlParameter = New SqlParameter("@phone", DalName.Phone)
            Dim p3 As SqlParameter = New SqlParameter("@mobibe", DalName.Mobibe)
            Dim p4 As SqlParameter = New SqlParameter("@address", DalName.Address)

            Sqlcmd.Parameters.Add(p1)
            Sqlcmd.Parameters.Add(p2)
            Sqlcmd.Parameters.Add(p3)
            Sqlcmd.Parameters.Add(p4)

            'Sqlcmd.ExecuteNonQuery()
            If Sqlcmd.ExecuteNonQuery > 0 Then
                Return True
            Else
                Return False
            End If

        Finally
            Sqlcn.Close()

        End Try

    End Function

  


    ''' <summary>
    ''' 获取所有人员信息
    ''' </summary>
    ''' <param name="Allperson"></param>
    ''' <returns>dt</returns>
    ''' <remarks>整个表的信息</remarks>
    Public Function GetAll(ByVal Allperson As DataTable) As DataTable

        Dim DalAllperson As New Personphysical.ClsPersonphysical
        Dim Sqlcn As SqlConnection = GetConnection()
        Dim sqlstr As String = "select * from Relationtable "
        Dim myDataAdapter As SqlDataAdapter = New SqlDataAdapter(sqlstr, Sqlcn)
        Dim dt As DataTable = New DataTable()
        myDataAdapter.Fill(dt)
        Return dt
        Sqlcn.Close()
    End Function
    ''' <summary>
    ''' 获得某人的信息
    ''' </summary>
    ''' <param name="name"></param>
    ''' <returns>selectoneperson</returns>
    ''' <remarks>把通过姓名查询</remarks>
    Public Function Getperson(ByVal name As Personphysical.ClsPersonphysical) As Personphysical.ClsPersonphysical
        Dim Sqlcn As SqlConnection = GetConnection()
        Sqlcn.Open()
        Dim Sqlstr As String = "select * from Relationtable where Name='" & name.Name & "'"
        Dim SqlCmmd As SqlCommand = New SqlCommand(Sqlstr, Sqlcn)

        Dim reader As SqlDataReader = SqlCmmd.ExecuteReader
        Dim selectoneperson As New Personphysical.ClsPersonphysical
        Try
            If reader.Read And reader.HasRows Then
                selectoneperson.Name = reader("Name")
                selectoneperson.Phone = reader("Phone")
                selectoneperson.Mobibe = reader("Mobibe")
                selectoneperson.Address = reader("Address")

            End If
            Return selectoneperson
        Finally
            Sqlcn.Close()
        End Try

    End Function
    ''' <summary>
    ''' 删除
    ''' </summary>
    ''' <param name="Detperson"></param>
    ''' <returns>PhdeletePerson</returns>
    ''' <remarks>把通过姓名查询到的信息返回BLL层</remarks>
    Public Function Delete(ByVal Detperson As Personphysical.ClsPersonphysical) As Boolean 'Personphysical.ClsPersonphysical
        Dim Sqlcn As SqlConnection = GetConnection()
        Dim PhdeletePerson As New Personphysical.ClsPersonphysical
        Dim val As Integer

        PhdeletePerson.Name = Detperson.Name


        Sqlcn.Open()
        Dim SqlStr As String = "DELETE from Relationtable where Name ='" & PhdeletePerson.Name & "'"
        Dim Sqlcmmd As SqlCommand = New SqlCommand(SqlStr, Sqlcn)
        'Sqlcmmd.ExecuteNonQuery()
        Try
            If val = Sqlcmmd.ExecuteNonQuery = 0 Then

                Return True
            Else
                Return False
            End If
        Finally
            Sqlcn.Close()
        End Try
        Debug.Print(val)
    End Function


End Class

(4)实体层:数据库的映射,为数据库和对象之间架起一座桥

'************************************************* 
'作者:唐欢
'小组:  
'说明:实体层
'创建日期:2013-1-6
'版本号:V1.00
'**********************************************'Imports System.Collections.Generic
Imports System.Linq
Imports System.Text

Public Class ClsPersonphysical
    ''' <summary>   
    '''  姓名 
    ''' </summary>

    Private _name As String
    Public Property Name As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property
    ''' <summary>
    ''' 手机
    ''' </summary>

    Private _phone As String
    Public Property Phone As String
        Get
            Return _phone
        End Get
        Set(ByVal value As String)
            _phone = value
        End Set
    End Property
    ''' <summary>
    ''' 电话
    ''' </summary>
    Private _mobibe As String
    Public Property Mobibe As String
        Get
            Return _mobibe
        End Get
        Set(ByVal value As String)
            _mobibe = value
        End Set
    End Property
    ''' <summary>
    ''' 地址
    ''' </summary>
    Private _address As String
    Public Property Address As String
        Get
            Return _address
        End Get
        Set(ByVal value As String)
            _address = value
        End Set
    End Property

End Class


5.时序图

 

6.总结

 

1.每层如果需要值传递的时候需要定义实体层的对象,UI层定义实体层对象,主要作用是给实体层传值,BLL层定义实体

 

层对象,主要是取值,进行判 断.DAL层定义实体层对象,主要是取值,执行数据库表的查询.或其他的操作.

 

各个层值直接的传递主要是可以用这样一张图进行标示:

 

2.BLL层,DAL层都有类的方法,而且这些方法都设置参数,这些参数都是实体层对象,DAL层返回的参数共BLL层所用,BLL

 

层返回值共UI层所用

 

3.每层都需要有引用,而且每层都需要引用实体层,Bll层需要应用DAL层,UI层应用BLL层. 

 

4. 如果BLL层调用DAL层的某个方法,设置的参数类型必须和函数的参数类型一致. 

 

5.从UI层开始,在UI层结束  三层我们没有学过,但是函数我们学过,三层每个函数的调用和VB里面函数调用是一样的,

 

      如果在学习vb的时候,你已经学会了函数调用,学习三层就更加简单了.现在才开始接触,以后还有很长的路走,踏实走

 

每一步.

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弯_弯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值