机房收费系统之退卡

前言  

      在这些基本功能快要做完的时候系统意外的错误,让我无法解决。不得已请来了师傅。但是这也是我系统的转折点,因为师傅说我的程序非常不符合七层的思想——“解耦”。所以我就按照师傅的要求。对整个机房的七层都做了相应的整改,整改完成之后,果然思路清晰了很多。

  基本思路就是把每张表的字段作为一个实体,D层是对表增删改查的所有方法,B层同样,这样只需要写一个工厂层,工厂里面写上相应表的工厂方法就可以了。下面以退卡为例,展示一下修改之后的代码

UI层

Public Class frmCancelCard
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnOK.Click
        If txtCardNo.Text = "" Then '判断卡号是否为空
            MsgBox("请输入卡号", 0, "温馨提示")
        End If

        '从学生表中查询卡号是否已经注册且正在使用的卡进行查询
        Dim fac As New Facade.StudentFacade
        Dim card As New Model.StudentModel
        Dim flag As List(Of Model.StudentModel)


        card.CardNo = Trim(txtCardNo.Text)
        card.Ifuse = "使用"
        flag = fac.checkifuse(card)
        txtMoney.Text = Trim(flag(0).Cash)
        If flag.Count > 0 Then
            '将这些退卡信息添加到退卡表中
            Dim fac1 As New Facade.CancelCardFacade
            Dim cancel As New Model.CancelCardModel
            Dim flag1 As Boolean
            cancel.CardNo = Trim(txtCardNo.Text)
            cancel.CancelCash = Trim(txtMoney.Text)
            cancel.CancelDate = Format(DateTime.Now, "yyyy/MM/dd")
            cancel.CTime = Format(DateTime.Now, "hh:mm:ss")
            cancel.UserID = Trim(frmLogin.txtUserID.Text)
            cancel.Status = Trim(flag(0).Status)
            flag1 = fac1.AddCancelRecord(cancel)
            If flag1 = True Then
                '将学生基本信息表中的是否还在使用改成不使用
                Dim flag2 As Boolean
                card.Ifuse = "不使用"
                card.CardNo = Trim(txtCardNo.Text)
                flag2 = fac.UpdateIfuse(card)
                If flag2 = True Then
                    '将选出来的数据显示在界面上
                    txtMoney.Text = Trim(flag(0).Cash)
                    txtMain.Text = "退卡卡号:" & card.CardNo & vbCrLf
                    txtMain.Text = txtMain.Text + "退款金额:" & card.Cash & vbCrLf
                    txtMain.Text = txtMain.Text + "退卡日期:" & Format(DateTime.Now, "yy-mm-dd") & vbCrLf
                    txtMain.Text = txtMain.Text + "退卡时间:" & Format(DateTime.Now, "hh:mm:ss") & vbCrLf
                    txtMain.Text = txtMain.Text + "办理退卡教师:" & Trim(frmLogin.txtUserID.Text())
                Else
                    MsgBox("您输入的卡号没有注册或者已经不再使用,请重新输入", 0, "温馨提示")
                    txtCardNo.Text = ""
                    txtMoney.Text = ""
                End If
            End If
        End If
    End Sub
End Class

Facade层

首先用到的是在学生表中查询该卡是否还是使用状态因此就在studentFacade层写了以下代码

'卡号是否使用查询
    Public Function checkifuse(ByVal userinfo As Model.StudentModel) As List(Of Model.StudentModel)
        Dim ifuse As New BLL.StudentBLL
        Dim myList As List(Of Model.StudentModel)
        myList = ifuse.Checkifuse(userinfo)
        Return myList
    End Function
然后添加到退卡表中是用的退卡的facade

Public Class CancelCardFacade
    '添加退卡信息到退卡表中
    Public Function AddCancelRecord(ByVal userinfo As Model.CancelCardModel) As Boolean
        Dim addrecord As New BLL.CancelCardBLL
        Dim flag As Boolean

        flag = addrecord.AddRecord(userinfo)
        Return flag
    End Function

退卡成功后又需要更新student表,所以在studentFacade中再写一个方法

  '更新学生卡的使用状态
    Public Function UpdateIfuse(ByVal userinfo As Model.StudentModel) As Boolean
        Dim up As New BLL.StudentBLL()
        Dim flag As Boolean
        flag = up.UpdateIfuse(userinfo)
        Return flag
    End Function


BLL层

  每个外观层对应一个Bll层方法

 '查看学生表里输入卡号是否使用
    Public Function Checkifuse(ByVal userinfo As Model.StudentModel) As List(Of Model.StudentModel)
        Dim fac As New Factory.FactoryDB
        Dim Icheckifuse As IDAL.IStudent
        Dim flag As List(Of Model.StudentModel)

        Icheckifuse = fac.Student
        flag = Icheckifuse.CheckIfuse(userinfo)
        Return flag
    End Function
 '在表中添加记录
    Public Function AddRecord(ByVal userinfo As Model.CancelCardModel) As Boolean
        Dim fac As New Factory.FactoryDB
        Dim Ican As IDAL.ICancelCard
        Dim flag As Boolean

        Ican = fac.CancelCard
        flag = Ican.AddCancelrecord(userinfo)
        Return flag
    End Function
'更新学生表
    Public Function UpdateIfuse(ByVal userinfo As Model.StudentModel) As Boolean
        Dim fac As New Factory.FactoryDB
        Dim ifuse As IDAL.IStudent
        Dim flag As Boolean
        ifuse = fac.Student
        flag = ifuse.Updateifuse(userinfo)
        Return flag
    End Function
Factory层

 '创建查看余额接口的方法
    Public Function Student() As IDAL.IStudent
        Return CType(Assembly.Load("DAL").CreateInstance("DAL.StudentDAL"), IDAL.IStudent)
    End Function

'创建退卡表的接口
    Public Function CancelCard() As IDAL.ICancelCard
        Return CType(Assembly.Load("DAL").CreateInstance("DAL.CancelCardDAL"), IDAL.ICancelCard)
    End Function

DAL层

 '从student表中查找状态为使用的且卡号为输入卡号的记录
    Public Function CheckIfuse(userinfo As Model.StudentModel) As List(Of Model.StudentModel) Implements IStudent.CheckIfuse
        Dim cmdText2 As String
        Dim dt2 As DataTable
        Dim myList2 As List(Of Model.StudentModel)
        Dim para As SqlParameter() = {New SqlParameter("@CardNo", userinfo.CardNo),
                                        New SqlParameter("@Ifuse", userinfo.Ifuse)}
        cmdText2 = "SELECT * FROM Student_info where CardNo=@CardNo And Ifuse=@Ifuse "
        dt2 = shelper.ExecSelect(cmdText2, CommandType.Text, para)
        If dt2.Rows.Count > 0 Then
            myList2 = ConvertGenericsHelper.convertToGenerics(Of Model.StudentModel)(dt2)
            Return myList2
        Else
            Return Nothing
        End If

    End Function


 '更改ifuse的状态为不使用
    Public Function Updateifuse(userinfo As StudentModel) As Boolean Implements IStudent.Updateifuse
        '更新student中的使用状态
        Dim para As SqlParameter() = {New SqlParameter("@Ifuse", userinfo.Ifuse),
                                     New SqlParameter("@CardNo", userinfo.CardNo)}
        Dim cmdText As String
        Dim dt As Boolean
        cmdText = "update student_info set Ifuse=@Ifuse where CardNo=@CardNo"
        dt = shelper.ExecAddDelUpdate(cmdText, CommandType.Text, para)
        Return dt
    End Function
 '在退卡表中增加退卡记录
    Public Function AddCancelrecord(Userinfo As CancelCardModel) As Boolean Implements ICancelCard.AddCancelrecord
        Dim cmdText As String
        Dim dt As Boolean
        Dim paras = {New SqlParameter("@CardNo", Userinfo.CardNo),
                     New SqlParameter("@Cancelcash", Userinfo.CancelCash),
                     New SqlParameter("@CancelDate", Userinfo.CancelDate),
                     New SqlParameter("@CTime", Userinfo.CTime),
                     New SqlParameter("@UserID", Userinfo.UserID),
                     New SqlParameter("@Status", Userinfo.Status)}
        cmdText = "insert into CancelCard_info (CardNo,CancelCash,CancelDate,CTime,UserID,Status) values (@CardNo,@Cancelcash,@CancelDate,@CTime,@UserID,@Status)"
        dt = shelper.ExecAddDelUpdate(cmdText, CommandType.Text, paras)
        Return dt
    End Function

接口层IDAL

'创建更改使用状态的接口
    Function Updateifuse(ByVal userinfo As Model.StudentModel) As Boolean
    '创建查询是否使用的接口
    Function CheckIfuse(ByVal userinfo As Model.StudentModel) As List(Of Model.StudentModel)
 '创建增加退卡记录的接口
    Function AddCancelrecord(ByVal Userinfo As Model.CancelCardModel) As Boolean
其他的sqlhelper和泛型集合转换都相同。

结尾:

  刚开始听到师傅说我的分层不对,应该按照数据库的表进行分层的时候,有点崩溃,一想这么多的代码都得进行改动就有点心烦意乱。但是理清楚了思路之后,就坐在床上开始修改,越修改就越清楚,用了两个多小时就把它们都改完了,虽然不知道改完之后到底对不对,但是思路确实是比之前清楚了很多。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值