机房收费系统之六(上下机窗体)

来源:互联网 发布:stp什么软件打开 编辑:程序博客网 时间:2024/05/17 04:36

上机

1.刚开始进行上下机窗体的时候,想的比较简单,以至于后来遗漏很多问题。所以流程图改了好几遍才算比较完善。

上机模块主要功能就是输入卡号开始计时消费,类似于登陆窗体模块。需要注意的有两点:一是要考虑输入的卡号是否正在上机(卡号不能重复上机),二是考虑余额是否充足(不充足提醒充值)。

2.流程图:


通过多次改进流程图,基本上可以全面了解了上机模块的整个流程。然后再写代码就很顺畅了。

下机

1.下机模块和上机差不多。我觉得最复杂的地方就是计算消费。需要计算消费时间,通过消费时间计算出消费金额。这里需要通过结合基本数据表来判断和计算。我在这里思考了好久。

2.流程图:


3.重要的代码学习:

下机模块代码:

Private Sub cmdxiaji_Click()    Dim txtSQL As String    Dim txtSQL1 As String    Dim txtSQL2 As String    Dim txtSQL3 As String    Dim txtSQL4 As String    Dim msgText As String    Dim mrc As ADODB.Recordset '连接student表    Dim mrc1 As ADODB.Recordset '连接Online表    Dim mrc2 As ADODB.Recordset '连接Line表    Dim mrc3 As ADODB.Recordset '连接Basic表    Dim mrc4 As ADODB.Recordset '连接Online,确认人数    Dim intlinetime As Integer '用于存储实际在线时间    Dim intconsume As Single    Dim curconsume As Single '用于存储真正花费钱的时间    Dim curbalance As Single '用于存储用户的余额    Dim fixedunit As Single '用于存储单位金额    Dim temunit As Single '用于存储单位金额    Dim a As Integer    Dim Remaincash As Single          '模块一:判断卡号是否为空,判断卡号是否为数字        If Trim(txtcardno.Text = "") Then            MsgBox "请输入卡号!", vbOKOnly + vbExclamation, "提示"            Call Clear_Info            txtcardno.SetFocus        Exit Sub        Else                If Not IsNumeric(Trim(txtcardno.Text)) Then                MsgBox "卡号必须输入数字!", vbOKOnly + vbExclamation, "提示"                Call Clear_Info'                txtcardno.Text = ""                txtcardno.SetFocus                Exit Sub                End If        End If                            '模块二:判断卡号是否注册,是否已经退卡。这里先查student_Info        txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'"        Set mrc = ExecuteSQL(txtSQL, msgText)                  If mrc.BOF And mrc.EOF Then            MsgBox "该卡号未注册,请先注册信息!", vbOKOnly + vbExclamation, "提示"            Call Clear_Info            txtcardno.SetFocus        Exit Sub        Else                If Trim(mrc.Fields(10)) = "不使用" Then                    MsgBox "该卡已经退卡", vbOKCancel + vbInformation, "提示"                    Call Clear_Info                    txtcardno.SetFocus                    Exit Sub                End If        End If        ' mrc.Close        ':判断卡号是否在上机,没有上机不能退卡.连接Online表        txtSQL1 = "select * from OnLine_Info where cardno= '" & Trim(txtcardno.Text) & "'"        Set mrc1 = ExecuteSQL(txtSQL1, msgText)                  If mrc1.EOF = True Then            MsgBox "该卡没有上机,不能进行下机处理", vbOKOnly + vbExclamation, "警告"            Call Clear_Info            txtcardno.SetFocus            Exit Sub        End If                '在线时长计算        intlinetime = (Date - DateValue(mrc1!ondate)) * 1440 + (Hour(Time) - Hour(TimeValue(mrc1!OnTime))) * 60 + (Minute(Time) - Minute(TimeValue(mrc1!OnTime))) '时间单位为分钟                                      'txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'" ' 多余        'Set mrc = ExecuteSQL(txtSQL, Msgtext)                   '获得基本表的数据        txtSQL3 = "select * from Basicdata_Info"        Set mrc3 = ExecuteSQL(txtSQL3, msgText) 'mrc3连接basicdata表        mrc3.MoveLast                        '单位时间的费用 (把固定用户,临时用户单位时间的费用分别赋值给费用)                fixedunit = Val(mrc3.Fields(0)) '把固定用户的金额赋值给变量                temunit = Val(mrc3.Fields(1)) '把临时用户的金额赋值给变量                '判断在线时间是否小于准备时间,若小于则 消费金额=0                If intlinetime <= Val(Trim(mrc3.Fields(4))) Then        txtxftime.Text = "0"        Else        '判断在线时间是否小于最低消费时间,若小于则为0             If intlinetime < Val(Trim(mrc3.Fields(3))) Then             txtxftime.Text = "0"             End If        End If                   '在线时间大于单位时间,就按有几个单位时间算,分为固定用户和临时用户        If intlinetime >= Val(Trim(mrc3!leastTime)) And intlinetime And Trim(mrc.Fields(14)) = "固定用户" Then        a = Int(intlinetime / Val(Trim(mrc3!unitTime)))                        If a = intlinetime / Trim(mrc3!unitTime) Then                            curconsume = a                        Else                            curconsume = a + 1                        End If        txtxfjine.Text = Val(curconsume) * Val(fixedunit)                    If txtxfjine.Text = "" Then txtxfjine.Text = "0"        Else              If intlinetime >= Val(Trim(mrc3!leastTime)) And intlinetime And Trim(mrc.Fields(14)) = "临时用户" Then              a = Int(intlinetime / Val(Trim(mrc3!unitTime)))                            If a = intlinetime / Trim(mrc3!unitTime) Then                                curconsume = a                            Else                                curconsume = a + 1                            End If                        txtxfjine.Text = Val(curconsume) * Val(temunit)             End If        End If                            '更新student表        txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'"        Set mrc = ExecuteSQL(txtSQL, msgText)        Remaincash = mrc!cash - Val(txtxfjine.Text)                      mrc.Fields(7) = Remaincash            mrc.Update            mrc.Close                                '下机显示        txtSQL = "select * from OnLine_Info where cardno='" & Trim(txtcardno.Text) & "'"        Set mrc1 = ExecuteSQL(txtSQL, msgText)                  txtxjdate.Text = Format(Date, "yyyy-mm-dd")        txtxjtime.Text = Time        txttype = Trim(mrc1.Fields(1))        txtSID = Trim(mrc1.Fields(2))        txtname = Trim(mrc1.Fields(3))        txtxibie = Trim(mrc1.Fields(4))        txtsex = Trim(mrc1.Fields(5))        txtsjtime = Trim(mrc1.Fields(7))        txtsjdate = Trim(mrc1.Fields(6))        txtxftime.Text = intlinetime        txtcash.Text = Remaincash                       '更新上机记录表line表                  txtSQL2 = "select * from line_Info where cardno='" & Trim(txtcardno.Text) & "'"        Set mrc2 = ExecuteSQL(txtSQL2, msgText)                mrc2.Fields(8) = Trim(txtxjdate.Text)        mrc2.Fields(9) = Trim(txtxjtime.Text)        mrc2.Fields(10) = Trim(txtxftime.Text)        mrc2.Fields(11) = Trim(txtxfjine.Text)        mrc2.Fields(12) = Trim(txtcash.Text)        mrc2.Fields(13) = Trim("正常下机")        mrc2.Update        mrc2.Close                  a = MsgBox("下机成功,欢迎下次再来", vbOKOnly + vbExclamation, "提示")                If a = vbOK Then Call Clear_Info                            '删除online表的信息        mrc1.Delete        mrc1.Update        mrc1.Close               txtSQL4 = "select * from OnLine_Info"       Set mrc4 = ExecuteSQL(txtSQL4, msgText)            Label15.Caption = mrc4.RecordCount  '显示上机人数               mrc4.Close                    End Sub


      总结:遇到问题,多思考,多请教“巨人”。感谢您的阅读!