您的位置:首页 > 其它

机房收费系统之退卡

2016-04-06 21:26 288 查看

前言  

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

  基本思路就是把每张表的字段作为一个实体,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和泛型集合转换都相同。

结尾:

  刚开始听到师傅说我的分层不对,应该按照数据库的表进行分层的时候,有点崩溃,一想这么多的代码都得进行改动就有点心烦意乱。但是理清楚了思路之后,就坐在床上开始修改,越修改就越清楚,用了两个多小时就把它们都改完了,虽然不知道改完之后到底对不对,但是思路确实是比之前清楚了很多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: