机房收费系统 —— 优化、选中下机

【上机窗体】

1.设置label控件显示的背景色为透明:

(1)属性设置:BackStyle属性:

BackStyle = 0 '设置控件背景透明

BackStyle = 1 '设置控件背景不透明

(2)代码设置:与设置清空所有的文本框方法一样!

   Dim ctl As Control  '定义一个变量,把任何控件装载到里面
   
    '把所有Label控件的背景属性都设置为0-transparent
    For Each ctl In Me.Controls
        If TypeOf ctl Is Label Then ctl.BackStyle = 0
    Next ctl

End Sub

2.上机日期与下机日期的格式不统一:

如图:上机日期显示的格式为yyyy-mm–dd
下机日期显示的格式为:yyyy/mm/dd
在这里插入图片描述 查询代码发现:
上机日期显示的是online 表中的ondate,而下机日期显示的是电脑当前的时间,由于online表中的数据格式是yyyy-mm–dd,当前电脑时间的格式是yyyy/mm/dd,所以读取的数据格式不同。
在这里插入图片描述解决方法:
使用关于时间的Format函数:用于制定字符串或数字的输出格式,根据格式表达式来格式化数据。
更多的关于format函数与时间设置问题请看小编博客:
https://blog.youkuaiyun.com/Ginny97/article/details/86667770
在这里插入图片描述 对于上机窗体,后续优化界面,将不需要输入的文本框Text换成Label控件,并且将其背景设置为透明,界面会更好看呦。

【选中学生下机】——循环检索处理

'定义变量和数组
    Dim txtsql As String
    Dim txtSQLStu As String
    
    Dim msgtext As String
     Dim mrcon As ADODB.Recordset
     Dim mrcBa As ADODB.Recordset
     Dim mrcline As ADODB.Recordset
     Dim mrcStu As ADODB.Recordset
     
    
    '目标存储
    Dim sz(999) As String   '定义数组作为容器,存储选中的卡号
    Dim xh(999) As String   '用来存储选中卡号的行号
    '存储目标要用的存储
    Dim z As Integer     '存储目标行用的变量,与数据库联系
    Dim j, i As Integer '表格的行列变量
    Dim s As Integer     '存储目标行号用到的变量,与表格联系
    
    MyFlexGrid.SelectionMode = flexSelectionByRow '单击的时候选择的是整行
    MyFlexGrid.FocusRect = flexFocusNone '在当前单元的周围画一个焦点框
    MyFlexGrid.HighLight = flexHighlightWithFocus  '该值决定了所选定的单元是否突出显示
    
    '进行查询——标记:连接online表
    txtsql = "select * from online_info"
    Set mrcon = ExecuteSQL(txtsql, msgtext)
    
    If mrcon.EOF = True Then
        MsgBox "当前无人上机!", , "提示"
    Else
         '判断最后一列是否为*,若不是,该行未被选中
        If MyFlexGrid.TextMatrix(MyFlexGrid.RowSel, 5) <> "*" Then
            MsgBox "请先选择数据,再进行修改!", 0 + 48
        Else
            If MyFlexGrid.TextMatrix(MyFlexGrid.RowSel, 5) = "*" Then
                With MyFlexGrid
                '记录选中下机的卡号,将带有*的卡号和行号存入数组,上机卡号唯一,可以唯一标识
                    i = 0
                    For j = 1 To .Rows - 1
                        If .TextMatrix(j, 5) = "*" Then
                            sz(i) = .TextMatrix(j, 0)  '存卡号
                            xh(i) = Val(j)  '存行号
                            i = i + 1
                        End If
                    Next j
重点是把标记的所有行数据进行删除——查询条件为数组(sz(z))中记录的卡号,循环检索进行处理。
   '删除、更新,通过z连接数据库进行循环检索处理
                    For z = 0 To i - 1   '从数组下标为0开始查询,查到 i-1 ,也就是第一个选中的卡号下标为0
                     txtsql = "select * from line_info where cardno='" & sz(z) & "'and status='正常上机'"
                     Set mrcline = ExecuteSQL(txtsql, msgtext)
                    
                           '全部下机——计算时间,消费金额
                         '计算消费时间:
                         spendtime = DateDiff("n", mrcline!OnTime, Time)   '当前时间-上机时间
                         spenddate = DateDiff("n", mrcline!ondate, Date)  '当前日期-上机日期
                         spendalltime = Val(spendtime) + Val(spenddate)  '总时间
                         
                         
                         '计算消费金额——先考虑上机的所有卡号是否都满足>准备时间,<=准备时间不收钱
                         txtsql = "select * from basicdata_info"
                         Set mrcBa = ExecuteSQL(txtsql, msgtext)
                         
                         txtsql = "select * from online_info"
                         Set mrcon = ExecuteSQL(txtsql, msgtext)
                         
                         If spendalltime <= Val(mrcBa.Fields(4)) Then
                             consume = "0"   '消费金额为0
                         Else
                             If mrcon.Fields(1) = "固定用户" Then   '消费金额计算 按分钟算
                                  consume = Round(Val((spendalltime / mrcBa.Fields(2)) * mrcBa.Fields(0))) '消费金额=(消费时间/60分钟)* 每小时费用
                                  'round函数:返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果
                            Else
                                  consume = Round(Val((spendalltime / mrcBa.Fields(2)) * mrcBa.Fields(1)))   '消费金额=(消费时间/60分钟)* 每小时费用
                             End If
                        End If
    
                        ' 连接student表——计算余额
                           'txtSQLStu = "select * from student_info,online_info where student_info.cardno=online_info.cardno"
                           txtSQLStu = "select * from student_info where cardno='" & sz(z) & "'"
                          Set mrcStu = ExecuteSQL(txtSQLStu, msgtext)
                          
                          mrcStu.Fields(7) = mrcStu.Fields(7) - consume '余额=当前余额-消费金额
                          
                          mrcStu.Update
                          
                          '更新line表
                          txtsql = "select * from line_info where cardno='" & sz(z) & "'and status='正常上机'"
                        Set mrcline = ExecuteSQL(txtsql, msgtext)
                        frmMain.cmddownline.Enabled = True
                    
                        Do While mrcline.EOF = False
                            mrcline.Fields(8) = Date
                            mrcline.Fields(9) = Time
                            mrcline.Fields(13) = "正常下机"
                            mrcline.Fields(14) = VBA.Environ("computername")
                            mrcline.MoveNext
                        Loop
                        '更新online表
                            txtsql = "select * from online_info where cardno='" & sz(z) & "'"
                            Set mrcon = ExecuteSQL(txtsql, msgtext)
                            
                            mrcon.Delete
                    Next z
                    '更新表格
                    For s = 0 To i - 1
                        .RemoveItem xh(s)
                    Next s
如果选中的几条数据在删除时只会自动删除第一条记录,请检查代码中的查询条件是否是数组中的卡号条件,并且进行循环检索,进行处理。

其他一些小的问题,相信大家都可以自行解决,小编这里只做简要总结,不做详细赘述咯—

         菜单编辑器窗体优化
登录

登录

(frmLogin)

登录时判断登录用户级别,一般用户登录时隐藏操作员和管理员,操作员登录时隐藏管理员,管理员权限最高,全部显示出来
一般用户 根据实际,一般用户应该是学生,学生自己刷卡上下机,一般用户若为学生,则其下边的有些窗体权限应该移到操作员下,如:选中/所有学生下机等窗体
修改密码(frmchangepassword)

(1)显示当前登录用户,修改本用户的密码,避免多用户误改对方密码问题

(2)可以向某些软件一样,设置密码可视化按钮,方便用户看见自己的密码

操作员注册(frmRegister)既有“充值金额”,又有“金额”,两者重复,删除一个
“状态”只有“使用”一种,不用下拉文本,也不用界面显示,代码中实现输入数据库即可。
注册的充值金额可以设置上限和下限
查找按钮可以将此卡号直接赋值给跳转到查询界面,方便查询此卡信息
可以设置点击卡号,会清空所有内容,方便注册新的卡(不过有清空按钮,可以不这样设置)
充值(frmRecharge) style="width:446px;"

同理(1)充值金额设置上下限;

(2)可以设置点击卡号清空,方便下一个卡的充值

退卡(frmOutcard)

(1)同理,清空问题。

(2)判断条件:未结账的不可退卡

收取金额查询(frmAskcollectcash)开始日期 < 结束日期
金额返还信息查询(FrmAskoutcash)
学生基本信息维护(frmMaintainstudentdata)

(1)代码复杂,可以选择使用数组

 

(2)窗体内当字段名为日期时,最好用日期控件DTPicker显示日期

 

学生上机统计信息(frmonlinecount)
操作员工作记录(frmOpewordrecord)
管理员结账(frmOverbill)

考虑结完账之后若无新数据,则不可再结账

删除和添加用户(rmDelandAdduser)考虑同时选中多个用户删除(与选中下机一样)
基本数据设定(frmSetBasicData)

(1)考虑“递增单位时间”为一小时,固定,不可修改

(2)修改数据均为数字。若并未修改任何数据,则提示未修改

日结账单(frmDailybill)同一天结账的数据为更新数据到checkday ,日结账单显示的为一条数据
周结账单(frmWeeklybill)

数据库中的checkweek表中同一天的数据为更新数据,只能有一条,不可重复添加同一天的数据

 

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ariel_欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值