机房收费系统上机(存储过程+视图)

由于对于存储过程的不够熟悉,我的上机敲了两天,才调试完成。下面就简单说一下我的思路吧,用了不少的嵌套循环,不太合适。

1、查卡号是否存在且是否注销

2、查卡号是否已经上机

3、查该卡的余额是否小于额定的最小金额

4、插入上机表

存储过程:

<span style="font-family:KaiTi_GB2312;font-size:24px;">ALTER PROCEDURE [dbo].[pro_Online]
	@CardNo char(10),
	@ondate date,
	@ontime time(0),
	@status char(8),
	@computer char(50),
	@opt int
	
AS
declare
@studentNo char(11),
@studentName char(10),
@department char(10),
@sex char(6),
@cash nvarchar(10)
BEGIN
	SET NOCOUNT ON;
     
	 
       if @opt=1
	   --查询该卡是否注册,是否可以使用
		begin
		exec('select * from T_Card_Info where CardNo='+@CardNo+'')
		end
  
	   --查询该卡是否正在上机。
	
       if @opt=2
       begin 
	   exec('select * from T_OnOffline_Info where CardNo ='+@CardNo+' and offdate is null')
	   end 	   
      
      if @opt=3
      --查询该卡余额是 否符合最少余额标准
	 begin
	 exec('select studentNo,department, type,studentName,sex,cash from V_CS where CardNo ='+@CardNo+' and cash >limitcash')
	 end
	 if @opt=4
	 begin
	 insert into T_OnOffLine_Info(CardNo,ondate,ontime,status,computer)values(@CardNo,@ondate,@ontime,@status,@computer)
	 end
end</span>

对应B层的判断:

<span style="font-family:KaiTi_GB2312;font-size:24px;">        Dim OnlineFactory As New Factory.LoginFactory
        Dim IUser As IDAL.LoginIDAL

        '调用创建用户的工厂方法
        IUser = OnlineFactory.CreateIUserInfo() '调用工厂的create IUser方法创建Iuser接口实例

        Dim mylist As New List(Of Entity.OnlineEntity)

        Dim opt As Integer
        For opt = 1 To 3
            Onlineentity.opt = opt
            Select Case opt
                Case 1
                    mylist = IUser.Online(Onlineentity)
                    If mylist.Count = 0 Then '存在该卡
                        MsgBox("该卡不存在,请先注册再使用")
                    ElseIf mylist(0).status = "未使用" Then
                        MsgBox("该卡已注销,请先激活!")
                        Return Nothing
                        Exit Function
                    End If
                Case 2
                    mylist = IUser.Online(Onlineentity)
                    If mylist.Count = 0 Then
                    Else
                        MsgBox("该卡正在上机,请勿重复上机!")
                        Return Nothing
                        Exit Function
                    End If
                Case 3
                    mylist = IUser.Online(Onlineentity)
                    If mylist.Count = 0 Then
                        MsgBox("余额不足,少于最小金额" & Entity.OnlineEntity.limitcash & "元,请充值后上机", , "温馨提示")
                        Return Nothing
                        Exit Function
                    End If
                Case 4
                    mylist = IUser.Online(Onlineentity)
                    If mylist.Count <> 0 Then
                        MsgBox("上机成功")
                    End If
            End Select
        Next
        Return mylist</span>
存储过程和B层是紧密相连的。

    存储过程的opt=1,先查询该卡是否注册,所以执行查询语句,如果执行出来的查询语句为空即:B层显示的count=0,则证明数据库没有该卡,则给用户一个提示:该卡不存在。类似的opt=2也是一样的。

    不一样的是opt=3.在opt=3中,我们依旧是执行查询语句,但是加上了对于金额的判断,在这个判断中,用上了视图,因为我们要查一些学生的基本信息,即student表。我们还需要比较金额。卡中的金额设计到card表。最小金额设计到datebasic表。所以视图就是由三个表来组成的。条件就是该卡号以及金额是否符合。如果符合我们就走第四步:插入数据到line表中。至于看是否符合,是由B层的case3决定的。如果它的金额小于最小金额,那么直接退出这个循环,也就不再走case4这条线了。


    总体分析:每次判断都是在重新走一条线。循环太多,不利于后期的维护。

你可能感兴趣的:(机房收费系统上机(存储过程+视图))