前言:
一不留神上下机界面就耽误了两天才搞定,本以为挺好整的,结果一遍遍推翻了自己原来的想法,总是认为逻辑顺序不合理包括现在,不过现在想了想,为什么非要做到极致呢?哈哈....
小谈:其实在上下机进行到一半的时候突然醒悟原来这个模块类似于登录模块的;
- 登录和退出界面
表:user_info、work_info、worklog_info
登录:user(if)--->work_info(add all)--->worklog(add some)
退出:work_info(delete)--->worklog(add others)
- 上机和下机界面
表:student、online、line、basicdata
上机:student(if)--->basicdata(if)--->online(add some)--->line(add some)
下机:online(if)--->student(show)--->basicdata(inquiry)--->online(delete)--->line(add others)
准备工作(各不相同,并不统一)
过程:
一、细化表的信息(各个模块细化,非整体)
二、需求分析(流程图)
三、逻辑设计(设计知识点)
- 上机
- 哪些表中增添多大范围信息---全部、某些、几个
- 查询、更新、增添在多个表中的逻辑顺序
- 及时更新上机人数(RecordCount)---引申实时更新,添加到timer控件事件中
- 下机
- 上机模块中涉及的;
- 结账方式(判断用户类型+结算方式)
四、编码
部分重要代码(上机)
'筛选注册表中信息,核查登录登录卡号
CardNo = Val(txtCardNo(0).Text)
txtSQL = "select * from student_Info where cardno='" & CardNo & "'"
Set mrc = ExecuteSQL(txtSQL, msgText)
If mrc.EOF And mrc.BOF Then
MsgBox "不存在此用户,请重新输入!", vbOKCancel + vbExclamation, "警告!"
mrc.Close
txtCardNo(0).Text = ""
txtCardNo(0).SetFocus
Else
'判断是否和正在上机用户冲突
txtSQL = "select * from OnLine_Info"
Set mrc1 = ExecuteSQL(txtSQL, msgText)
If Not (mrc1.EOF And mrc1.BOF) Then '记录集中显示第一个
mrc1.MoveFirst
End If
While (mrc1.EOF = False)
If (Trim(mrc1.Fields(0)) = Trim(CardNo)) Then
MsgBox "此卡号正在上机,请更换卡号后重新操作!", vbOKOnly + vbExclamation, "警告"
txtCardNo(0).Text = ""
txtCardNo(0).SetFocus
Exit Sub
Else
mrc1.MoveNext
End If
Wend
'判断此卡是否不低于最小余额
txtSQL = "select * from BasicData_Info"
Set mrc2 = ExecuteSQL(txtSQL, msgText)
If Trim(mrc.Fields(7)) < Trim(mrc2.Fields(5)) Then
MsgBox "此卡的余额不足,请尽快充值!", vbOKCancel + vbExclamation, "提示"
mrc1.Close
mrc2.Close
txtCardNo(0).Text = ""
txtCardNo(0).SetFocus
Exit Sub
部分重要代码(下机)---结算金钱
txtSQL = "select * from student_Info where cardno='" & CardNo & "'"
Set mrc = ExecuteSQL(txtSQL, msgText)
Call viewData
endTime = Time
endDate = Date
CostDate = DateDiff("n", mrc1.Fields(6), endDate)
CostTime = DateDiff("n", mrc1.Fields(7), endTime)
allTime = CostDate + CostTime
'查询basicdata表中的信息
txtSQL = "select * from BasicData_Info"
Set mrc2 = ExecuteSQL(txtSQL, msgText)
Rate = mrc2.Fields(0)
tmpRate = mrc2.Fields(1)
unitTime = mrc2.Fields(2)
leastTime = mrc2.Fields(3)
prepareTime = mrc2.Fields(4)
'收费情况
If allTime <= prepareTime Then
ConsumeMoney = 0
Else
If allTime <= leastTime Then
ConsumeMoney = Val(Rate / 2)
Else
useTime = allTime - prepareTime
unitNumber = useTime Mod Val(unitTime)
If unitNumber = 0 Then
unitNumber = Int(useTime / unitTime)
Else
unitNumber = Int(useTime / unitTime) + 1
End If
If txtType(3).Text = "固定用户" Then
a = Rate
Else
a = tmpRate
End If
ConsumeMoney = Format(unitNumber * a, "0.0")
End If
End If
txtOffTime(10).Text = endTime
txtOffDate(7).Text = endDate
txtCTime(11).Text = allTime
txtCMoney(12).Text = ConsumeMoney
Cash = txtBalance(8) - ConsumeMoney
txtBalance(8).Text = Cash
总结:其中涉及到命名全局变量、调用过程(两次或多次)、函数和过程区别、变量的数据类型等,总之比较多的知识相结合起来,然后一遍又一遍的加深印象和理解;
体会:其实只要我们按照类似软件工具开发这本书中提到的软件开发过程的几种要点来做的话,虽然有难度,但是却不会让我们望而却步,只不过会死比较多的脑细胞和时间;仅此而已,等下.....,我还有最后一句话;世界上最遥远的距离不是生与死,而是你站到了机房收费系统的大门口,又尼玛关上了!
--------------------欢迎在评论区推荐好的思路和指正其中代码的问题------------Iwait foryou---------