大家好,又见面了,我是你们的朋友全栈君。
机房收费系统陆陆续续都要结束了,回顾自己敲机房的经历,一路上真的收获了不少。
技术篇
在实现功能的时候,有的东西以前接触的不是很多,像数据导出到Excel,组合查询,做报表等等,不过我们还是通过自己的思考和网络上的知识做到了。下面就具体分享一些具体的小细节
1.下手之前多一份思考
在调用数据库的时候,我们大多用的是select语句,除了要查询的内容外,更新,删除添加都也是先用select语句,然后再用mrc.AddNew , mrc.Delete , mrc.Update等,在看数据库视频的时候,老师很详细的讲过每一种语句的使用方法,而且在模块里也是这么写的
If InStr(“INSERT,DELETE,UPDATE”, UCase$(sTokens(0))) Then
cnn.Execute SQL
MsgString = sTokens(0) & “query successful”
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = rst
MsgString = “查询到” & rst.RecordCount & “条记录”
End If
在代码中也写到了关于Insert,delete的内容,所以我们在遇到一些能使用update,delete 或是 insert 语句的时候,也可以试着直接使用一些这个语句。
比如说在添加和删除用户的窗体中,想要删除某一个用户,就可以这么写
txtSQL = “delect User_Info where “
Call ExecuteSQL(txtSQL, msgText)
添加一个新用户时
txtSQL = “insert into User_Info values(‘” & txtUser.Text & “‘,'” & txtPWD.Text & “‘,'” & comboUserLevel.Text & “‘,'” & txtName.Text & _ “‘,'” & Head & “‘)”
Call ExecuteSQL(txtSQL, msgText)
更新某个用户信息
txtSQL = “update User_Info set UserID = ‘ “
Call Executesql(txtSQL, msgText)
这样就省去了很多代码,而且节省了很多时间,还避免了插入的数据跟数据库中的字段不对应的错误。
2.对功能不断完善
以注册用户信息为例,
首先注册卡号为 “1011”的用户,用户信息为张三的个人信息,用了一段时间,张三退卡了,那么1011这个卡号还可以再次注册,而且用户信息为李四的信息,这样的情况可以吗?
这个问题说明我们的程序还不够完善,所以可以多加一些限定条件,比如说
<pre name="code" class="vb"><span style="font-size:14px;"> txtSQL = "select * from student_Info where cardno= '" & Trim(txtCardno.Text) & "'" '查询卡号
Set mrc = ExecuteSQL(txtSQL, msgText)
If mrc.EOF = False Then
If Trim(mrc.Fields(10)) = Trim("不使用") Then ’判断是否已经退卡
A = MsgBox("此卡已注销,是否要激活?", vbYesNo + vbQuestion, "提示") '如果已退卡,询问是否要激活
If A = vbYes Then
txtSQL = "update student_Info set status= '" & Trim("使用") & "' where cardno = '" & txtCardno.Text & "'"
Call ExecuteSQL(txtSQL, msgText)
Exit Sub
End If
End If</span>
<span style="font-size:14px;"> End If</span>
通过以上代码也可以看出,在这中条件下,卡号和用户是一对一的关系。当然还有其他的处理方法,这只是其中一种,我觉得只要合理就可以。
3.多次重复的代码该怎么办
面向对象的一个好处就是封装好的对象可以服用,我们在敲代码的时候,不妨也可以这么想,如果一段代码总是重复实现,是不是可以写成一个公共的函数来调用呢?
比如说想要清空注册窗体中的内容,是直接就写 text1.Text = ” ” 呢,还是有其他更好的办法。这是在贾文静同学的博客中看到的一种办法
<span style="font-size:14px;"> For Each ctrl In Me.Controls
If TypeOf ctrl Is TextBox Then
ctrl.Text = ""
End If
Next</span>
这里用了一个循环语句,就做到了,而且还避免了遗漏某些文本框的可能。
还有就是在优化的时候,比如说注册用户时班级填错了
首先是txtClass. SetFocus,
然后是txtClass.SelStart = 0
txtClass.SelLength = Len(txtCardno.Text)
其中每一个信息都有可能填错,所以也可以把这几行代码拿出来单独定义为一个函数再调用。
程序中还有很多细节值得我们去思考,去优化,我们可以做的更好。
经验篇
1.just to do it
记得刚开始敲机房的时候,就一个登陆窗体就做了好几天,代码检查了一遍又一遍,就是登陆不了,再加上这是第一次自己敲代码,很受挫,就觉得自己做不下去了,就因为这个还跟师父聊了一晚上,于是又有不得不再继续进行,这不自己也做出来了吗!所以有时候不能因为一点点困难就想到要放弃,没有什么事是过不去的,世上无难事,只要肯登攀!
2.学习生活化
一开始接触机房,我们肯定对这个系统不是很了解,尤其是像一般用户,操作员,管理员的职能范围还不同,所以我们可以静下来想想,生活中的很多地方都跟我们这个很相似,就像咱们图书馆的上机系统。
咱们去图书馆上网,在屋里的老师就相当于一般用户,可以执行一些简单的查询功能。当我们的卡里余额不足时,就得去新图书馆找专门的老师充值,这个老师就相当于我们的操作员,可以注册,对用户充值,并执行一些相应的查询。再高一级的负责人就相当于管理员,可以添加,删除工作人员,像一般用户,操作员,管理员等,并对相应的数据进行结账,日结账单反映了一天的收益情况,周结账单的记录就反映了一周的收益情况,管理者可以根据这一周的情况进行分析,并对接下来的工作作出指导。
我们也可以把这个系统和网吧的收费联系对比,也可以是其他的,不管怎么理解,合理就好。
下面是对机房整体的回顾,还有每个窗体中用到的数据库中的表,有的窗体中一个功能就可能用到三四张表,所以要好好分析分析,一个都不能落下。
里面的信息可能还有不完善的地方,还请大家多多指教。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105788.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...