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

机房收费系统

2013年11月05日 ⁄ 综合 ⁄ 共 4437字 ⁄ 字号 评论关闭

        机房收费系统VB版,是我们第一个不参照代码做出来的系统。写一下做这个系统的历程,第一次完完全全自己的系统,值得记录!

 一、功能分析

首先进行功能分析:

机房收费系统总体上分三个级别:一般用户、操作员、管理员。每个权限有每个权限的特定功能。先看一般用户功能:

                                   

一般用户权限是最低的,仅仅能查看数据库中的记录;能修改的只有密码。一般用户仅能使用一般用户的功能。

然后看操作员:

                               

操作员的权限高于一般用户,修改数据库的功能大大增加。操作员可以使用操作员和一般用户的功能。

最后我们看管理员的功能:

                                

管理员拥有最大的权限,可以使用所有的功能。下图是 各级别用户对数据库操作情况。

                               

 

                                                                      

 

 

 

二、数据库分析

以上所有的操作都是在数据库之上进行的。下面我们介绍数据库的情况。

 

 

以上是对数据库进行修改的主要操作,我们可以根据这些信息提取出几张大概的表:用户信息表(UserInfo)、注册表(又称学生表)、充值表、退卡表、上机表、下机表、基本信息表、账单表,其余的功能都可以以这几张表为基础进行操作。

三、界面设计与编码

此系统共用到了25个窗体,下面主要介绍两种对数据库操作的典型窗体。

1、查询

             

查询操作不会对数据库中的表进行修改,仅需要显示出符合条件的记录即可。同时查询操作还有一个特点,查询出的信息大部分是用控件MSHFlexGrid控件显示。MSHFlexGrid控件显示和操作表格数据。其对包含字符串和图片的表格提供了灵活的排序、插入数据和格式编排功能,使用简单操作方便同时满足系统功能的要求。

   (1)我们先来看一个基本查询窗体:

       

 

代码:

Option Explicit
 
'查询上机记录
Private Sub cmdOK_Click()
Dim Up_Rst As ADODB.Recordset
Dim strtxtSQL As String
Dim strMsg As String
Dim RstCount As Integer
On Error GoTo Error_Handle
    '根据卡号查询上机记录
    strtxtSQL = "select *from Up where CardNo='" & txtCardNo.Text & "'"
    Set Up_Rst =QuerySQL(strtxtSQL, strMsg)
    '显示
    With MSHFlexGrid1
      Do While NotUp_Rst.RecordCount = 0
         .Rows = .Rows + 1
         .TextMatrix(.Rows -1, 0) = Up_Rst.Fields(0)
         .TextMatrix(.Rows -1, 1) = Up_Rst.Fields(1)
         .TextMatrix(.Rows -1, 2) = Up_Rst.Fields(2)
         .TextMatrix(.Rows -1, 3) = Up_Rst.Fields(3)
         .TextMatrix(.Rows -1, 4) = Up_Rst.Fields(4)
         .TextMatrix(.Rows -1, 5) = Up_Rst.Fields(5)
         .TextMatrix(.Rows -1, 6) = Up_Rst.Fields(6)
         .TextMatrix(.Rows -1, 7) = Up_Rst.Fields(7)
         .TextMatrix(.Rows -1, 8) = Up_Rst.Fields(8)
           Up_Rst.MoveNext
           If Up_Rst.EOF =True Then
              Exit Do
           End If
        Loop
    End With
 
Exit Sub
‘错误处理
Error_Handle:
    MsgBox Err.Description
    Exit Sub
End Sub

(2)组合查询

          

代码:

' 查询
Private SubcmdInquire_Click()
Dim Up_Rst AsADODB.Recordset
Dim strtxtSQL AsString
Dim strMsg AsString
On Error GoToError_Handle

 '如果仅有一个查询条件
 If cboRelation1.Text = "" Then
      cboRelation2.Enabled = False
      '查询
      strtxtSQL = "select * from Up where" & Trim(cboFileName1.Tag) & " " &Trim(cboSign1.Text) & " '" & Trim(txtInquire1.Text) &"'"
      Set Up_Rst = QuerySQL(strtxtSQL, strMsg)
 Else
      If cboRelation2.Text="" Then
          '查询
          strtxtSQL = "select * from Up where" & Trim(cboFileName1.Tag) & " " &Trim(cboSign1.Text) & "'" & Trim(txtInquire1.Text) &"
                             '" & Trim(cboRelation1.Tag) & "" &Trim(cboFileName2.Tag) & " " & Trim(cboSign2.Text) &" 
                             '" & Trim(txtInquire2.Text) & "'"
          Set Up_Rst = QuerySQL(strtxtSQL, strMsg)
      Else
         '查询并显示符合三个条件的记录
          strtxtSQL = "select * fromUp where " & Trim(cboFileName1.Tag) & " " &Trim(cboSign1.Text) & "'" & Trim(txtInquire1.Text) &"
                              ' " & Trim(cboRelation1.Tag) & "" &Trim(cboFileName2.Tag) & " " & Trim(cboSign2.Text) &" 
                             '" & Trim(txtInquire2.Tag) & "'" &Trim(cboRelation2.Tag) & "" & Trim(cboFileName3.Tag) &" 
                            " & Trim(cboSign3.Text) & " '" &Trim(txtInquire3.Text) & "'"
          Set Up_Rst = QuerySQL(strtxtSQL,strMsg)
      End If
             
  End If

      

     逻辑查询根据逻辑“与” 、“或”、空总共分为3中情况进行考虑:仅有一个查询条件;有两个查询条件;有三中逻辑情况,这样考虑就会简单很多。

2、修改

最基本的对数据库进行修改的操作,我们来看部分主要代码:

        

'存盘
Private SubcmdSave_Click()
Dim Stu_Rst AsADODB.Recordset
Dim Recharge_RstAs ADODB.Recordset
Dim strtxtSQL AsString
Dim strtxtSQL2 AsString
Dim strMsg2 AsString
Dim Stu_Rst2 AsADODB.Recordset
Dim strMsg AsString
Dim User_Rst AsADODB.Recordset
Dim RegisterStateAs String
On Error GoToError_Handle
   
    '判断是否已经注册
    strtxtSQL = "select * from Stu whereCardNo='" & Trim(txtCardNo.Text) & "'and State='使用' "
    Set Stu_Rst = QuerySQL(strtxtSQL, strMsg)
    If Stu_Rst.EOF = False Then
       MsgBox "此卡号已经注册!"
       Stu_Rst.Close
       txtCardNo.SetFocus
       Exit Sub
       '未注册的话将注册信息写入学生表中
    Else
      
        Stu_Rst.AddNew
        Stu_Rst.Fields(0) =Trim(txtCardNo.Text)
        Stu_Rst.Fields(1) =Trim(txtStuID.Text)
        Stu_Rst.Fields(2) =Trim(txtName.Text)
        Stu_Rst.Fields(3) = Trim(cboSexy.Text)
        Stu_Rst.Fields(4) =Trim(txtClass.Text)
        Stu_Rst.Fields(5) =Trim(txtGrade.Text)
        Stu_Rst.Fields(6) =Trim(txtDepart.Text)
        Stu_Rst.Fields(7) = Trim(txtPayMoneyShow.Text)
        Stu_Rst.Fields(8) =Trim(UserName)
        Stu_Rst.Fields(9) =Trim(cboState.Text)
        Stu_Rst.Fields(10) =Trim(txtComment.Text)
        Stu_Rst.Fields(11) = Date
        Stu_Rst.Fields(12) = Time
        Stu_Rst.Fields(13) = "已结帐"
        Stu_Rst.Update
        Stu_Rst.Close
        Msgbox "注册成功!"   
   End If
End Sub

四、问题整理

和学生信息管理系统相比,机房收费系统做完之后感觉自己成长了很多,一些之前犯过的小错误,机房收费系统几乎没有遇到,因为是做完一个窗体调试一个窗体,所以整体测试的时候比较顺利。但是在做机房收费系统时遇到了很多之前没有见过的知识,比如导出Excel打印报表等之前没有遇到过的方面;同时还用到了很多之前没有用过的控件,比如:DateTimePicker、SStab等。


同时还有一些小的问题需要注意一下:

         (1).登录时,判断用户名、密码是否输入若已经输入则执行查询操作,查询是否已经登录;

         (2).将用户名附给全局变量UserName,并将对应的UserType赋值;

         (3).开始需要有一组基本数据;

         (4).在开始时给全局变量LeastTime、LeastMoney、VipPay等赋值;

         (5).上机前查询卡号是否输入、已注册、是否余额充足、是否未登录;

         (6).下机时考虑是否输入卡号、已经上机,上机时间是否小于最小上机时间,考虑递增时间,余额小于最小金额                时给出提示;

         (7).注册时,判断注册信息是否不为空、考虑卡号是否已经注册、学号是否重复;

         (8).充值时,考虑卡号是否已经注册、充值后的余额是否小于最小金额

         (9).退卡时,考虑此卡是否已经注册、是否正在上机;

         (10).日结账单与周结账单:考虑用什么事件触发在数据库中记录周结与日结账单;

 

五、总结

      通过做机房收费系统,不仅完善了自己的知识网,更增加了信心,之前没有想过自己单独完成一个系统,现在敢想了。同时,感觉自己在做系统时很“混乱”没有规划,没有什么规则和约束,想通过以后的学习更加地完善自己!

抱歉!评论已关闭.