您的位置:首页 > 其它

机房收费系统——再回首

2015-07-29 17:38 246 查看
机房收费系统陆陆续续都要结束了,回顾自己敲机房的经历,一路上真的收获了不少。

技术篇

在实现功能的时候,有的东西以前接触的不是很多,像数据导出到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.学习生活化

一开始接触机房,我们肯定对这个系统不是很了解,尤其是像一般用户,操作员,管理员的职能范围还不同,所以我们可以静下来想想,生活中的很多地方都跟我们这个很相似,就像咱们图书馆的上机系统。

咱们去图书馆上网,在屋里的老师就相当于一般用户,可以执行一些简单的查询功能。当我们的卡里余额不足时,就得去新图书馆找专门的老师充值,这个老师就相当于我们的操作员,可以注册,对用户充值,并执行一些相应的查询。再高一级的负责人就相当于管理员,可以添加,删除工作人员,像一般用户,操作员,管理员等,并对相应的数据进行结账,日结账单反映了一天的收益情况,周结账单的记录就反映了一周的收益情况,管理者可以根据这一周的情况进行分析,并对接下来的工作作出指导。

我们也可以把这个系统和网吧的收费联系对比,也可以是其他的,不管怎么理解,合理就好。

下面是对机房整体的回顾,还有每个窗体中用到的数据库中的表,有的窗体中一个功能就可能用到三四张表,所以要好好分析分析,一个都不能落下。





里面的信息可能还有不完善的地方,还请大家多多指教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: