机房收费系统之上下机

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

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

        上机,用到两张表,第一张是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
         做系统最关键的问题就是思路,对整个系统的把控,知道第一步该怎么做,接下来该怎么做,一步一步走下去,方能水到渠成......
     



目录
相关文章
|
2月前
|
存储 弹性计算 固态存储
阿里云服务器按量、包月及包年收费价格,云服务器最新活动价格参考
2025年租用阿里云服务器一年多少钱?不同时期阿里云服务器的租用价格不同,2核2G200M轻量应用云服务器特价38元1年起,经济型e实例2核2G3M带宽 40G ESSD Entry云盘特惠价99元1年,通用算力型u1实例2核4G5M带宽80G ESSD Entry云盘特惠价199元1年。2025年阿里云服务器租用价格表如下文所示。
772 2
阿里云服务器按量、包月及包年收费价格,云服务器最新活动价格参考
|
传感器 机器学习/深度学习 数据采集
【航迹关联】基于NNDA、PDA、JPDA三种算法实现航迹关联附matlab代码
【航迹关联】基于NNDA、PDA、JPDA三种算法实现航迹关联附matlab代码
|
2月前
|
人工智能 UED
【下载安装】Adobe XD 免费下载与安装教程
Adobe XD 2025是一款专业的UI/UX设计工具,支持矢量绘图、交互原型制作与响应式布局,兼容PS、AI及Jira、Slack等协作平台。内置动画、语音交互功能,提升设计效率。安装前需关闭杀毒软件,解压后以管理员身份运行安装程序即可。
658 0
|
监控 网络协议 安全
SYN洪水攻击
【8月更文挑战第21天】
481 1
|
11月前
|
Java 图形学 Python
用Python和Pygame打造绚丽烟花效果+节日祝福语
本文介绍了一款基于Python和Pygame库实现的烟花效果程序,模拟烟花发射、爆炸及粒子轨迹,结合动态文本显示祝福语,营造逼真的节日氛围。程序包括烟花类、粒子类、痕迹类和动态文本显示功能,通过随机化颜色、速度和粒子数量增加效果多样性。用户可以看到烟花从屏幕底部发射、上升并在空中爆炸,伴随粒子轨迹和动态祝福语“蛇年大吉”、“Happy Spring Festival”。文章详细解析了核心代码逻辑和技术要点,帮助读者理解如何利用Pygame库实现复杂视觉效果,并提供了未来改进方向,如优化性能、增加特效和增强交互性。
611 20
用Python和Pygame打造绚丽烟花效果+节日祝福语
|
9月前
2025年春节服务公告|阿里云万网
2025年春节服务公告|阿里云万网
183 1
|
10月前
|
供应链 监控 数据可视化
优化酒店供应链结构:实现成本控制与效率提升
本文探讨了酒店行业在激烈竞争中如何通过成本控制和供应链优化提升运营效率。具体措施包括精细化预算管理、优化人力资源配置、节能减排、供应商管理、采购流程优化及库存管理。引入可视化管理工具如板栗看板,可进一步提高项目管理、数据分析和信息共享的效率,助力酒店在不牺牲服务质量的前提下降低运营成本,增强市场竞争力。