现在的位置: 首页 > 综合 > 正文

机房收费 过程

2013年09月11日 ⁄ 综合 ⁄ 共 5056字 ⁄ 字号 评论关闭

机房收费系统流程

 

需求分析

也称得上是模型建立阶段。其任务是了解系统的结构与功能,掌握管理者的信息需求,弄清信息交流的实际情况。

期间遇到的困难 就是编程者对软件功能之间的转换和人与机器的区别,

第一个转换是交流与协调的问题, 第二个是人与机器之间的交流与协调问题,,任何机器之间在思维方式,工作方式上都有许多根本的区别。

分析与设计阶段

 任务是进行功能分解与数据分析,完成处理过程及数据库设计。

 回过头来看

功能分析

机房收费系统有三级用户。分别是

管理员

操作员

一般用户

用户级别分别降低,权限也是各有所降低

图像如下

  

数据库设计

为了提高数据库的效率

设计时尽量做到规范化,

  减少数据冗余,

 尽量减少数据更新异常

关系模型

 分析功能结构我们可以看到,数据库的设计要围绕其基本操作设计。

综合设计可以由以下表构成

学生信息表

充值表

退卡表

学生上机记录表

学生上机表

基本数据表

用户表

日结账表

由这几张表就构成了所有的操作。

编程阶段

其任务是完成具体的程序编写

期间涉及到程序的注释

程序的书写格式

变量的名称选择

这里我给出自己的一个标准窗体

窗体的基本功能是完成对卡号的充值,界面如下

 


****************************************

Option Explicit

'模块注释

'*************************************************************************

'**模块 名:addRecharge

'**说    明:YFsoft 版权所有2012 - 2013(C)

'**创建 人:韩艳坤

'**日    期:2012-10-08 15:57:40

'**修改 人:

'**日    期:

'**描    述:本模块实现对卡号的充值,文本框中可以手动输入卡号,

'**            也可以进行刷卡自动识别卡号,输入金额,回车自动充值,并响应ESc退出键

'**版    本:V1.0.0

'*************************************************************************

 
'** depiction:<退出按钮事件>

 
Private Sub cmdExit_Click()

 
    Unload Me                   '卸载窗体

End Sub

 
' depiction:<确定按钮事件>
 

Private Sub cmdOk_Click()
   

    '变量声明

    Dim txtSQL As String

    Dim MsgText As String

    Dim Mrc As ADODB.Recordset

    Const num As Integer = 10

    Dim txtCash As String

    Dim Objstudent As ADODB.Recordset

    

    'if 语句判断卡号是否为空,若为空提示信息,卡号输入框获得焦点,退出过程

    If Not TestTxt(txtCarID.Text) Then

        MsgBox "卡号不能为空,请输入卡号", vbOKOnly + vbInformation, "警告"   '提示信息框

        txtCarID.SetFocus                                                    '卡号文本框获得焦点

        Exit Sub                                                             '退出过程

    End If

    

    'if语句判断数据框金额是否为空,若为空,提示信息,金额狂获得焦点,退出过程

    If Not TestTxt(txt_Cash.Text) Then    '判断卡号是否为空

        MsgBox "金额不能为空,请输入金额", vbOKOnly + vbInformation, "警告"   '提示信息框

        txt_Cash.SetFocus                                                    '金额框获得焦点

        Exit Sub                                                             '退出过程

    End If                                                                   'if结束标识符

    'if 语句判断卡号输入是否超出字符限制,若超出提示超出多少字符,

    '   并选中全部字符,退出过程

    

    If Not Number(txtCarID.Text) Then                                       '若字符超出限制,给出提示,并说明超出多少字符

        MsgBox "卡号超出字符限制," & "超出" & Len(txtCarID.Text) - num & "个字符。", vbOKOnly + vbInformation, "警告"

        txtCarID.SetFocus                                                   '卡号文本框获得焦点

        txtCarID.SelStart = 0                                               '焦点前置

        txtCarID.SelLength = Len(txtCarID.Text)                             '全选文本框文字

        Exit Sub

    End If

    

    'if 语句判断充值金额是否少于最少金额5元,若少于给出提示,退出过程

    If Val(txt_Cash.Text) < 5 Then                                          '判断输入金额是否小于5

        MsgBox "金额少于最少金额,请重新输入", vbOKOnly + vbInformation, "警告" '提示信息框

        txt_Cash.SetFocus                                                      '金额框获得焦点

        txt_Cash.SelStart = 0                                                  '焦点前置

        txt_Cash.SelLength = Len(txt_Cash.Text)                                '全选文本框文字

        Exit Sub

    End If

    

    'if 语句判断卡号输入是否超出字符限制,若超出提示超出多少字符,

    '   并选中全部字符,退出过程

    If Not Number(txt_Cash.Text) Then                                           '若字符超出限制,给出提示,并说明超出多少字符

        MsgBox "金额超出字符限制," & "超出" & Len(txt_Cash.Text) - num & "个字符。", vbOKOnly + vbInformation, "警告"

        txt_Cash.SetFocus                                                       '卡号文本框获得焦点

        txt_Cash.SelStart = 0                                                    '焦点前置

        txt_Cash.SelLength = Len(txt_Cash.Text)                                  '全选文本框文字

        Exit Sub

    End If

    

    'SQL 语句查询学生表中是否存在输入的卡号,

    '若不存在提示,存在打开表,写入充值金额

        txtSQL = "select * from student_info where explaint='固定' and car_ID='" & Trim(txtCarID.Text) & "'" & "and statue='" & Trim("使用") & "'" '选择表的学生字段

        Set Objstudent = ExecuteSQL(txtSQL, MsgText) ' 打开学生表

        

     'if 语句判断查询的SQL结果记录集,如果记录集为空,则卡号不存在,给出提示

     '  并退出过程,若卡号存在,将输入金额写入该卡的卡中,将充值的相关信息同时写入表中,并更新表。
  

    If Objstudent.EOF = True Then '判断卡号是否存在

        '卡号不存在情况,给出提示框,并选中卡号,退出过程

        MsgBox "卡号不存在,请重新输入", vbOKOnly + vbInformation, "警告"   '提示信息

        txtCarID.SetFocus                                                  '输入卡号文本框获得焦点

        txtCarID.SelStart = 0                                              '焦点前置

        txtCarID.SelLength = Len(txtCarID.Text)

        

        Objstudent.Close                                                    '关闭记录集

        Exit Sub                                                            '退出过程

    Else

        'else语句首先判断输入的金额是否为数字,然后将数据同步到学生表中,

        '   并且同时将信息写入充值表中

         

         '嵌套if语句判断输入是否为数字

        If Not IsNumeric(txt_Cash.Text) Then    '判断卡号是否为数字

            MsgBox "金额请输入数字", vbOKOnly + vbInformation, "警告"

            txt_Cash.SetFocus

            txt_Cash.SelStart = 0

            txt_Cash.SelLength = Len(txt_Cash.Text)

            Exit Sub

        End If

        

        '提示信息,用于显示同步数据 ,将数据写入学生信息表中

        MsgBox "请稍等,正在同步数据", vbOKOnly + vbInformation, "同步数据"  '数据同步提示

        txtCash = Objstudent.Fields(7).Value                                '同步金额数据

        Objstudent.Fields(7) = txtCash

        Objstudent.Update                                                    '更新表

        

        'SQL语句用于查询充值表,打开充值表,将充值的相关信息写入表中,并保存

        txtSQL = "select * from recharge_info"                               '选择表的学生字段

        Set Mrc = ExecuteSQL(txtSQL, MsgText)                                ' 打开学生表

        Mrc.AddNew                                                           '表中增加行语句

        

        ' 向表中表中添加充值相关信息

        Mrc.Fields(0) = Trim(txtCarID.Text)                                    '充值卡号

        Mrc.Fields(1) = Trim(txt_Cash.Text)                                   '充值金额

        Mrc.Fields(2) = Trim(Date)                                            '充值日期

        Mrc.Fields(3) = Format(Now, "hh:mm:ss") '                             '充值时间

        Mrc.Fields(4) = Trim(userName)                                        '充值教师

        Mrc!statue = Trim("未结账")                                            '充值状态

        Mrc!student_ID = Objstudent!student_ID                                 '充值学号

        Mrc.Update                                                            '更新表

        Mrc.Close                                                              '关闭记录集

        

        '文本框中显示充值信息

        txtExplaint.Text = "充值卡号:" & txtCarID.Text & Chr(13) & Chr(10) & _

                        "上次卡内余额:" & txtCash & Chr(13) & Chr(10) & "现在卡内余额:" & txtCash + Val(txt_Cash.Text) & _

                        Chr(13) & Chr(10) & "充值日期:" & Trim(Date) & Chr(13) & Chr(10) & "充值时间:" & _

                        Format(Now, "hh:mm:ss") & Chr(13) & Chr(10) & "充值教师:" & Trim(userName)

        

         ' SQL 语句查询学生表,将充值卡号的金额写入学生信息中,保持学生金额最新状态

        txtSQL = "select * from student_info where car_ID='" & Trim(txtCarID.Text) & "'" & "and statue='" & Trim("使用") & "'" '选择表的学生字段

        Set Mrc = ExecuteSQL(txtSQL, MsgText)       ' 打开学生表

        txtCash = Mrc.Fields(7).Value              '取出上次金额

        txtCash = Val(txt_Cash.Text) + txtCash     '将充值金额和上次金额相加得到最新金额

        Mrc.Fields(7) = txtCash                    '最新金额写入表中

        Mrc.Update                                 '更新表

        

        '提示信息框,提示充值成功,并清除卡号和金额

        MsgBox "恭喜您,充值成功!", vbOKOnly + vbInformation, "充值" '提示信息框

        Mrc.Close

        txtCarID.Text = ""                                           '清空文本框信息

        txt_Cash.Text = ""

        txtExplaint.Text = ""

        

    End If                                                            '大if语句结束标志 

End Sub

 

'窗体的键盘事件,响应ESC事件,退出窗体

Private Sub Form_KeyPress(KeyAscii As Integer)

    'if 语句判断是否为ESc的Ascii码,是则退出窗体

    If KeyAscii = 27 Then

        Unload Me              '退出窗体

     End If

End Sub

'窗体加载事件,相应ESC退出按钮

Private Sub Form_Load() '加载事件

    Me.KeyPreview = True                '决定是否在控件的键盘事件之前激活窗体的键盘事件

End Sub

测试问题反馈

对于机房收费系统,在座的过程中遇到的问题也不少,也都基本解决了。有大也有小,下面就对一些典型的问题说明

1 登录用户名的限制,防止注入问题,其次就是用户名的类型在数据库中最好设置为Varchar()类型的,

2 对于一些重复性的语句,要记得使用自定义函数调用,避免重复性的过程

3 对于基本数据的设定,注意没有数据时,防止添加数据报错

4 多用户登录要实现,同一用户不能同时登录的原则

5 对于SStab多页面控件,DateTimePicker日历控件的基本属性要会使用

6 对于充值时要检测卡号是否已经存在,是否是临时用户

7 对于上下机界面,要实现回车键直接上下机,并可以实现实时检测余额是否足够,要可以时时提醒。

8 退卡要实现不能正在上机。

9 报表的设计,基本的SQl语句要学会使用

10 对于数据库连接的实现,可以有多种,但要实现远程访问,软件可以异地部署。

小结

对于机房收费系统,是我们自己独立完成的第一个系统,在这个过程中,首先建立了我们的信息,同时也加强了我们对自己时间的管理,对一些SQL Server的语句实现了基本的了解,加强了我们对编程规范的了解。相信后面的过程可以更好的补充自己。

抱歉!评论已关闭.