机房收费系统之退卡
2016-04-06 21:26
288 查看
前言
在这些基本功能快要做完的时候系统意外的错误,让我无法解决。不得已请来了师傅。但是这也是我系统的转折点,因为师傅说我的程序非常不符合七层的思想——“解耦”。所以我就按照师傅的要求。对整个机房的七层都做了相应的整改,整改完成之后,果然思路清晰了很多。基本思路就是把每张表的字段作为一个实体,D层是对表增删改查的所有方法,B层同样,这样只需要写一个工厂层,工厂里面写上相应表的工厂方法就可以了。下面以退卡为例,展示一下修改之后的代码
UI层
Public Class frmCancelCardPrivate 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 FunctionFactory层
'创建查看余额接口的方法
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和泛型集合转换都相同。
结尾:
刚开始听到师傅说我的分层不对,应该按照数据库的表进行分层的时候,有点崩溃,一想这么多的代码都得进行改动就有点心烦意乱。但是理清楚了思路之后,就坐在床上开始修改,越修改就越清楚,用了两个多小时就把它们都改完了,虽然不知道改完之后到底对不对,但是思路确实是比之前清楚了很多。相关文章推荐
- QLineEdit类
- 分类-3-生成学习-3-朴素贝叶斯模型、laplace平滑、多元伯努利事件模型、多项式事件模型
- C++ 二维动态数组创建及越界问题
- quick组件模块的使用以及简单案例
- Android的桌面小图标Widget的学习
- scrollWidth,clientWidth,offsetWidth的区别
- QXmlStreamReader与QXmlStreamWriter的使用
- 常量指针与指针常量
- elseif.php else if($i>3)
- Ubuntu设置环境变量
- 数字在排序数组中出现的次数
- 小小ARC造福无数码农
- 如何实现翻转一串二进制代码:
- 《Linux内核设计与实现》——第3章(进程管理)
- 解决项目打jar包,资源文件不能打包的问题
- python学习3
- XenServer 6.5 For Prepare
- JVM介绍
- 分布式互斥算法学习笔记
- iOS中WebSocket的使用