标签:style class blog code http tar
前篇博客只是简单的说了下,机房收费系统下机的简单思路,下面来正式的介绍下整个流程。
分析
由于下机的时候需要涉及到两个表中的数值——StudentInfo表和OnlineInfo表,那么我们的思路就是如何能够简化查
询的操作。
学生表中包含的学生的静态信息,而上机信息表中则包含了有关学生上机的所有的信息。
流程
1.更新学生下机信息
2.触发器触发后,会自动的更新学生的消费时间,消费金额并更新学生余额
3.两张表联合查询有关界面上的所有信息
4.为所有的文本框赋值
注意:其实最有意思的就是触发器的使用了,由于引用了触发器省了很多不必要的麻烦
代码如下
U层
Private Sub btnOff_Click(sender As Object, e As EventArgs) Handles btnOff.Click
'用来验证学生卡号是否存在
Dim BLL_StuInfo As New BLL.B_StuInfo '定义B层用户记录的对象
Dim En_stuinfo As New Entity.En_StuInfo '实例化实体层用户信息表对象
'用来验证学生是否正在上机
Dim Bll_IsOnline As New BLL.B_OnlineInfo
Dim En_Online As New Entity.OnlineInfo
'用来判断输入文本不能为空
If txtCardId.Text = "" Then
MsgBox("卡号不能为空!")
txtCardId.Focus() '该文本框获得焦点
Exit Sub
End If
'为学生卡号赋值
En_stuinfo.En_stuID = txtCardId.Text
'判断学生卡号是否存在
If BLL_StuInfo.BLL_VerifyStu(En_stuinfo) = False Then
txtCardId.Focus() '该文本框获得焦点
Exit Sub
End If
En_Online.En_stuID = txtCardId.Text
If Bll_IsOnline.StuIsOnline(En_Online) = False Then
MsgBox("此用户还未上机")
txtCardId.Focus() '该文本框获得焦点
Exit Sub
End If
'开始更新下机记录
En_Online.En_offTime = TimeOfDay '下机日期
En_Online.En_offDate = Today '下机时间
'开始更新下机记录
Bll_IsOnline.AddOffInfo(En_Online)
'当更新完下机记录后,触发器会自动的更新学生的余额
'直接提取记录即可
Dim StuInfo As New DataTable
StuInfo = BLL_StuInfo.BLL_CheckMoney(En_stuinfo)
'写入学生固定信息
txtStuNumber.Text = StuInfo.Rows(0).Item(1)
txtName.Text = StuInfo.Rows(0).Item(2)
txtDepartment.Text = StuInfo.Rows(0).Item(3)
txtSex.Text = StuInfo.Rows(0).Item(4)
txtType.Text = StuInfo.Rows(0).Item(0)
txtStillBill.Text = StuInfo.Rows(0).Item(5)
'继续写入下机记录
StuInfo = Bll_IsOnline.WriteOnlineInfo(En_Online)
txtOnlineDate.Text = StuInfo.Rows(0).Item(1).ToString
txtOnlineTime.Text = StuInfo.Rows(0).Item(0).ToString
txtOffDate.Text = StuInfo.Rows(0).Item(3).ToString
txtOffTime.Text = StuInfo.Rows(0).Item(2).ToString
txtConsumeTime.Text = StuInfo.Rows(0).Item(4)
txtconsumeMoney.Text = StuInfo.Rows(0).Item(5)
MsgBox("下机成功")
End Sub
B层
''' <summary>
''' 更新下机信息
''' </summary>
''' <param name="En_StuId"> 传递的实体层的参数</param>
''' <remarks></remarks>
Sub AddOffInfo(ByVal En_StuId As Entity.OnlineInfo)
ID_StuOnlineInfo = sqlFactory.OnlineInfo '实例化一个下机对象
ID_StuOnlineInfo.AddOffInfo(En_StuId) '调用D层方法,更新下机信息
End Sub
D层
''' <summary>
''' D层添加下机信息
''' </summary>
''' <param name="En_StuInfo"></param>
''' <remarks></remarks>
Public Sub AddOffInfo(En_StuInfo As Entity.OnlineInfo) Implements IDAL.I_OnlineInfo.AddOffInfo
Dim strConn As String
'传递的参数
Dim paras As SqlParameter() = {New SqlParameter("@stuid", En_StuInfo.En_stuID), _
New SqlParameter("@offlineTime", En_StuInfo.En_offTime.ToString), _
New SqlParameter("@offlineDate", En_StuInfo.En_offDate.ToString)}
Dim sqlHelper As New sqlHelper
strConn = "pro_StuOffOnlineInfo" '存储过程名字
'调用sqlhelper执行更新操作
sqlHelper.ExecAddDelUpdate(strConn, CommandType.StoredProcedure, paras)
End Sub触发器
alter trigger tgr_UpdateOffline on onlineInfo for update--插入触发 as --定义变量 declare @regulareUser float,@instantUser float, @atleastTime float,@prepareTime float,@stuid char(11), @consumeTime float,@money float,@atleastMoney float select @regulareUser =RegularUser,@instantUser =instantUser,@atleastTime=atleastTime,@prepareTime =preparetime,@atleastMoney=AtLeastMoney from BasicData --计算出学生上机消费时间 select @stuid=stuid,@consumeTime= datediff(minute,onlineTime ,offTime ) from inserted --开始判断学生上机花费的时间 --begin...and操作封装计算学生余额操作 begin if @consumeTime -@prepareTime <0 set @money=0 else if @consumeTime -@prepareTime -@atleastTime <0 set @money=@atleastMoney else set @money=@instantUser/60 * @consumeTime end --最后更新学生余额操作 update StudentInfo set money =money-@money where stuid=@stuid --更新消费金额和消费时间信息 update OnlineInfo set consumeMoney=@money,consumeTime=@consumeTime where offtime=(select max(offTime) as offTime from OnlineInfo where stuId=@stuid) and offDate=(select max(offDate) as offTime from OnlineInfo where <a target=_blank href="mailto:stuId=@stuid">stuId=@stuid</a>)
小结
由于引用了触发器,使得下机的时候特别的方便,只需要添加下机信息即可,并且如果所有人强制下机的话,也只要更新下机信息即可。所有的关于学生下机消费信息的算法,全部封装到触发器中。小编不才,上述的触发器也耦合度太大,也正在优化中。具体的思路是,可以把不同类型用户的计算金额的算法封装成数据库中不同的函数,在触发器中调用即可。
标签:style class blog code http tar
原文地址:http://blog.csdn.net/luckyzhoustar/article/details/28456163