机房收费系统之上下机

       漫步在校园的小道上,不被南飞的大雁所吸引,不被飘香的丹桂所痴望,只为那飘落一地金黄色的杨树叶所驻足,金黄灿烂,让我流连忘返,如随波荡漾的小船,摇摇摆摆,把灰白色的水泥路点缀的如同天空一般,星星点点,慢慢地,慢慢地,盖住了道路,层层叠叠,给人一种优美,舒适的感觉,伴随着杨树叶子从夏天的斑斓色彩到秋天的色彩斑斓,机房收费系统也从一无所知到略懂一二,现在就上下机的问题,做个小小的总结。

        上机,用到两张表,第一张是Student_info ,第二张表示Online_info,下面用一张图来展示上机是要做哪些相应的判断:

             

   代码如下

             

Private Sub cmdOn_Click()
    Dim strSQL As String, strSQL2 As String, strSQL3 As String
    Dim strMsgText As String, strMsgText2 As String, strMsgText3 As String
    Dim objRst As ADODB.Recordset, objRst2 As ADODB.Recordset, objRst3 As ADODB.Recordset  

    '让下机日期和时间,消费时间和金额为空
    txtOutDate.Text = ""
    txtOutTime.Text = ""
    txtPayTime.Text = ""
    txtPayMoney.Text = ""  

    If txtCardNo.Text = "" Then
        '判断卡号是否为空
        MsgBox "请输入卡号!", vbOKOnly, "警告!"
        txtCardNo.SetFocus
        Exit Sub
    Else
        If Len(txtCardNo.Text) > 10 Then
            '判断输入卡号是否超过设定的长度,防止出错
            MsgBox "卡号过长,请输入长度<10的卡号", vbOKOnly, "警告!"
            txtCardNo.SetFocus
            Exit Sub
        End If
        '查询数据库里学生基本信息表
        Set objRst = New ADODB.Recordset
        strSQL = "select * from student_Info where cardNo='" & Trim(txtCardNo.Text) & "'"
        Set objRst = ExecuteSQL(strSQL, strMsgText)
        If objRst.BOF And objRst.EOF Then
            '判读该卡号是否存在
            MsgBox "该卡号未注册!", vbOKOnly, "警告!"
            txtCardNo.Text = ""
            txtCardNo.SetFocus
            Exit Sub
        Else
            '判断余额是否充足
            If objRst.Fields(3) < GetLeastMoney() Then
               MsgBox "余额只有" & objRst.Fields(3) & ",少于最少金额,请先充值!", vbOKOnly, "警告!"
                Exit Sub
            Else  

                '判断该卡号是否正在上机
                Set objRst3 = New ADODB.Recordset
                strSQL3 = "select * from online_Info where cardNo='" & Trim(txtCardNo.Text) & "' and outDate is null"
                Set objRst3 = ExecuteSQL(strSQL3, strMsgText3)
                If Not (objRst3.BOF And objRst3.EOF) Then
                    Label1.Caption = "该卡正在上机!"
                    txtCardNo.SetFocus
                    Exit Sub
                Else  

                    '显示该卡号的一些基本信息
                    txtStudentNo.Text = checkField(objRst.Fields(0))
                    txtDepartment.Text = checkField(objRst.Fields(4))
                    txtType.Text = checkField(objRst.Fields(14))
                    txtStudentName.Text = checkField(objRst.Fields(1))
                    txtSex.Text = checkField(objRst.Fields(7))
                    txtOnDate.Text = Date
                    'onTime = Time
                    txtOnTime.Text = Time
                    txtAllCash.Text = checkField(objRst.Fields(3))  

                    '将上机前的余额提出来,用于下机时计算余额
                    'curAllCash = checkField(objRst.Fields(3))
                    Label1.Caption = "欢迎光临!"  

                    '将该卡上机的信息填入到online_Info表里
                    Set objRst2 = New ADODB.Recordset
                    strSQL2 = "select * from online_Info "
                    Set objRst2 = ExecuteSQL(strSQL2, strMsgText2)
                    'objRst2.MoveLast
                    objRst2.AddNew
                    objRst2.Fields(0) = txtCardNo.Text
                    objRst2.Fields(1) = txtStudentName.Text
                    objRst2.Fields(2) = Date
                    objRst2.Fields(3) = Time
                    objRst2.Fields(4) = Null
                    objRst2.Fields(5) = Null
                    objRst2.Update
                    '查询此时正在上机的人数。(可以直接加1)
                    lblPeopleCount.Caption = GetPeopleCount()
                    PeopleCount = GetPeopleCount()   '保存正在上机的人数
                    objRst2.Close  

                    objRst.Close
                End If
            End If
        End If
    End If  

End Sub  



        下机,主要用到两张表,第一张Line_info,第二张以及Basicdata_info,同样的,下机也用一种图来表示:

              

   代码如下

           

    Private sub  codoff_click()
    Dim strSQL As String, strSQL2 As String, strSQL3 As String
    Dim strMsgText As String, strMsgText2 As String, strMsgText3 As String
    Dim objRst As ADODB.Recordset, objRst2 As ADODB.Recordset, objRst3 As ADODB.Recordset
    Dim intTime As Single
    Dim fixedRate As Single
    Dim AllMoney As Currency
    Dim pay As Currency

    If txtCardNo.Text = "" Then
        '判断卡号是否为空
        MsgBox "请输入卡号!", vbOKOnly, "警告!"
        txtCardNo.SetFocus
        Exit Sub
    Else
        If Len(txtCardNo.Text) > 10 Then
            '判断输入卡号是否超过设定的长度,防止出错
            MsgBox "卡号过长,请输入长度<10的卡号", vbOKOnly, "警告!"
            txtCardNo.SetFocus
            Exit Sub
        End If
    End If
    Set objRst = New ADODB.Recordset
    strSQL = "select * from student_Info where cardNo='" & Trim(txtCardNo.Text) & "'"
    Set objRst = ExecuteSQL(strSQL, strMsgText)
    If objRst.BOF And objRst.EOF Then
        '判读该卡号是否存在
        MsgBox "该卡号未注册!", vbOKOnly, "警告!"
        txtCardNo.Text = ""
        txtCardNo.SetFocus
        Exit Sub

    End If
    objRst.Close
    strSQL = ""
    strMsgText = ""

    Set objRst = New ADODB.Recordset
    strSQL = "select * from online_Info where cardno='" & Trim(txtCardNo.Text) & "' and outDate is null "
    Set objRst = ExecuteSQL(strSQL, strMsgText)
    If objRst.BOF And objRst.EOF Then
        '判断该卡是否正在上机
        Label1.Caption = "该卡没有上机!"
        txtCardNo.SetFocus
        Exit Sub
    Else
        '显示下机的一些信息
        txtOutDate.Text = Date
        outTime = Time
        txtOutTime.Text = outTime

        onTime = CDate(Format(objRst.Fields("onTime"), "hh:mm:ss"))

        txtCardNo.Text = checkField(objRst.Fields("cardNo"))
        txtStudentName.Text = checkField(objRst.Fields("studentName"))
        txtOnDate.Text = checkField(objRst.Fields("onDate"))
        txtOnTime.Text = checkField(objRst.Fields("onTime"))

        Set objRst3 = New ADODB.Recordset
        strSQL3 = "select * from student_Info where cardNo='" & txtCardNo.Text & "'"
        Set objRst3 = ExecuteSQL(strSQL3, strMsgText3)
        txtStudentNo.Text = objRst3.Fields("studentNo")
        txtDepartment.Text = objRst3.Fields("department")
        txtSex.Text = objRst3.Fields("sex")
        txtType.Text = "固定用户"

        '删除该记录,将此时信息填入online_Info表里
        objRst.Delete
        objRst.AddNew
        objRst.Fields(0) = txtCardNo.Text
        objRst.Fields(1) = txtStudentName.Text
        objRst.Fields(2) = txtOnDate.Text
        objRst.Fields("onTime") = txtOnTime.Text
        objRst.Fields(4) = txtOutDate.Text
        objRst.Fields("outTime") = txtOutTime.Text
        objRst.Fields(9) = "正常下机"
        'intTime = Val(txtOutTime.Text - txtOnTime.Text)

        '计算上机的时间
        intTime = (outTime - onTime) * 24 * 2

         Set objRst2 = New ADODB.Recordset
         strSQL2 = "select * from basicDate_Info "
         Set objRst2 = ExecuteSQL(strSQL2, strMsgText2)
         '查询固定用户30分钟的费用
         fixedRate = Val(objRst2.Fields(0))
         If intTime < (GetPreparTime() / 30) Then
             '判断上机时间是否超过了准备时间,没超过则花费为0
             objRst.Fields("pay") = 0
             objRst.Fields("allCash") = GetAllMoney(txtCardNo.Text)
         Else
             If intTime <= (GetLeastTime() / 30) Then
                 '判断上机时间是否超过半个小时,没则当成已经上了30分钟
                 objRst.Fields("pay") = fixedRate
                 AllMoney = GetAllMoney(txtCardNo.Text) - fixedRate
                 objRst.Fields("allCash") = AllMoney     '将余额写入上机记录表里
                 WriteAllMoney txtCardNo.Text, AllMoney  '将余额写入学生基本信息表里
             Else
                 If intTime > Int(intTime) Then
                     intTime = Int(intTime) + 1
                 Else
                     intTime = Int(intTime)
                 End If
                 pay = fixedRate * intTime
                 objRst.Fields("pay") = pay
                 AllMoney = GetAllMoney(txtCardNo.Text) - pay
                 objRst.Fields("allCash") = AllMoney    '将余额写入上机记录表里
                 WriteAllMoney txtCardNo.Text, AllMoney  '将余额写入学生基本信息表里
             End If
         End If

         '显示消费的时间金额,和余额
         txtPayTime.Text = Format(outTime - onTime, "hh-mm-ss")
         txtPayMoney.Text = objRst.Fields(6)
         txtAllCash.Text = GetAllMoney(txtCardNo.Text)     '- objRst.Fields(6)
         Label1.Caption = "欢迎下次再来!"

         objRst.Fields(7) = txtAllCash.Text    '将余额写到online_Info表里

         lblPeopleCount.Caption = GetPeopleCount()  '显示正在上机人数
         PeopleCount = GetPeopleCount()
         objRst.Update

         objRst.Close
         objRst2.Close
         objRst3.Close

    End If
End Sub

         做系统最关键的问题就是思路,对整个系统的把控,知道第一步该怎么做,接下来该怎么做,一步一步走下去,方能水到渠成......
     



时间: 2025-01-19 11:18:56

机房收费系统之上下机的相关文章

机房收费系统——上下机

  上个月准备考试,机房收费系统就停了,考试完了任务还得继续.说到上下机可能是最令人头疼的,尤其是下机,需要查的表比较多而且数据类型也很多,思路理不清根本无从下手.   上机窗体首先要判断输入的卡号是否已经注册,是否已经上机,只有是已经注册而且未上机的卡号才允许上机.卡号的其他相关信息要从学生信息表中检索出来显示在对应的文本框中,上机日期和时间为当前系统日期时间.然后给正在上机的表中添加一条记录,把文本框的内容赋给各个字段.   下机窗体比较复杂,首先也要判断输入的卡号是否已经注册,是否正在上机

机房收费系统之上机、下机

还记得,从八月一日开始做机房收费系统,到今天已经是八月十二号了.期间,碰到了很多困难,有时候,就想这个机房收费系统能成功吗?解决了一个问题,另一个问题又接踵而至了,心里同样很清楚,下面还有好多好多问题.于是乎,根本不敢想后面的路. 前三天吧,开始了主界面上下机代码的编写.一个主界面,包含了15个文本框要填,可想而知,这真的是一个庞大的工程. 在开始动工之前,自己还是分析了整个流程,不然混乱的自己,早晚会被带沟里去的. 首先是上机: 在这一流程中,要注意的是,在LineRecord表中不可出现相同

机房收费系统的上下机

        机房收费系统的上下机,涉及到对多张表的操作,但是还是从数据库中取数据,读出来,处理,然后放回去.其中,如何上下机的逻辑感觉很重要.      一,上机       在上机时,首先(非空判断什么的不再提)用户是否是一个合法用户,这里的合法性,要求用户不仅要存在与这张表,而且用户不能是已经退卡的用户.         当合法性验证完后,还要看看用户是否是已经在上机了,如果用户没有上机,还要验证用户卡里的钱是否大于运行上机的最小金额,当用户通过了这几层的检验后,才能正式向用户上机表里面

机房收费系统之技术总结

机房收费系统,从最初的迷茫到现在的明朗,这一路,总算是到站了. 看到完工后的系统,自己都惊呆了.总共有27个窗体,一个模块,代码的多少可想而知,那么多那么多,都是自己敲上去的,和学生信息管理系统相比,真的算得上是一次飞跃了吧.前前后后,历时二十多天,不管是技术上还是思想上,自己的收获很大. 从头到尾,自己都是尽心尽力,从新建数据库到新建各个表,从各个窗体设计到各个窗体代码,一个也不容小觑. 先从自己的数据库说起:一共九张表,这个过程很漫长,不是一开始就照着原来的模板建,而是在敲代码的过程中,用到

机房收费系统之组合查询

增删改查,数据库中最基本的四个操作.不论是学生信息管理系统,还是机房收费系统,它们一个都不少.这一次,就来说说"查". 刚开始,看到机房收费系统的查询,傻眼了,横看,四个Label框,所谓的查询条件:竖看,多个文本框.组合框.                                                在运行了很多次系统之后,终于越来越有思路了.首先,我们很清楚查询的两种形式:简单查询和组合查询.这两者的划分,组合关系的选择就是关键了. 所以,根据上面所给的各个控件,

软工文档-机房收费系统:详细设计说明书

详细设计说明书   1引言   1.1编写目的 详细设计说明书是在概要设计的基础上进一步明确系统结构,表示出软件结构的图表,完成算法设计.数据结构设计.物理设计等,详细地描述的逐个模块,包括算法和逻辑流程,为下一步系统的实现和测试做准备. 本文档的预期读者是程序开发人员和程序测试人员. 1.2背景 A.待开发软件名称:机房收费系统 B.项目提出者:米新江教授   开发者:吴士龙   用户:廊坊师范学院全体教职工和学生   实现该软件的计算中心或计算机网络:廊坊师范学院局域网 C.该软件系统同其他

机房收费系统之表

         机房收费系统,主要是用于对学生在机房上机的收费问题,首先要建立的是数据库,数据库中有三个角色,一般用户.管理员.操作员,管理员对操作员进行设置,然后由操作员员对一般用户的信息进行设置,注册.       首先管理员员登陆这个系统,管理员的用户名,密码,姓名,然后将机房的收费标准录入到数据库中.然后将登陆密码交给操作员,让操作员管理的上机.用户进入机房进行上网,此时开始计费,一直到学生出机房,再次刷卡下机.做系统之前,一定要理清楚表之间的关系,以及这张表有什么用,在系统的那块儿用

软工文档-机房收费系统:概要设计说明书

概要设计说明书             1引言 1.1编写目的         本阶段的主要任务是在用户的需求分析阶段的基础上,对机房收费系统做概要设计,为在需求分析阶段得到的目标系统的物理模型确定一个合理的软件系统的体系结构.包括合理地划分组成系统的模块.模块间的调用关系及模块间的接口,并且为软件系统提供所用的数据结构或者数据库结构.同时为下一阶段的详细设计做参考. 本文档的读者是项目设计和项目编码人员. 1.2背景  A.待开发软件名称:机房收费系统 B.项目提出者:米新江教授  开发者:吴

机房收费系统之全局认识

       曾经看过这样一句话:"很多人习惯于在一接受任务就开始编写程序,不重视总体规划和分析,认为没完没了地分析企业现状.讨论各种实施方案是在浪费时间.这种重视程序设计,轻视总体规划的思想是导致系统开发失败的重要原因."     继学生信息管理系统之后,又一根接力棒--机房收费系统,传到了自己手中.为了系统最后的成功,还是需要对其有个全局的认识.     本文将从下面三个部分进行系统分析: 一.主界面逻辑分析     看似简单的两个按钮(上机.下机),其中却隐藏着丰富的逻辑设计.