会计科目收支(KJKMSZ)
客运返回消费明细(KYFHXFMX)
信息查询:
卡信息(KXX)
个人卡帐户信息(GRKZHXX)
车载机信息(CZJXX)
车队信息(CDXX)
分公司信息(FGSXX)
3.3.5 表的结构
以主要几个数据库表结构为例,列示如下:
表3.1 个人卡帐户信息(GRKZHXX)
字段代码 字段名称 类型 宽度 是否主键
Grzh 个人帐号 Varchar 16 YES
Kyyxlh 卡应用序列号 Char 8
Cjrq 创建日期 Datetime
Zjlxbs 证件类型标识 Char 2
Zjhm 证件号码 Varchar 32
Yj 押金 Decimal (5,2)
Jtzhje 交通帐户金额 Decimal (8,2)
Zhztbs 帐户状态标识 Integer
Ztxgrq 状态修改日期 Datetime
表3.2 卡信息(KXX)
字段代码 字段名称 类型 宽度 是否主键
Kh 卡号 Char 8 YES
Kztbs 卡状态标识 Char 2
Klxbs 卡类型标识 Char 2
Yhcs 优惠次数 Integer
Yhbl 优惠比例 Integer
Yj 押金 Decimal (5,2)
Je 金额 Decimal (6,2)
表3.3 营业记录(YYJL)
字段代码 字段名称 类型 宽度 是否主键
Rq 日期 Datetime YES
Sj 时间 Datetime YES
Yhlx 用户类型 Varchar 30
Yhbh 用户编号 Char 8
Jyfs 交易方式 Varchar 50
Je 金额 Decimal (8,2)
表3.4 单位信息(DWXX)
字段代码 字段名称 类型 宽度 是否主键
Dwbh 单位编号 Char 8 YES
Dwmc 单位名称 varchar 50
Lxdh 联系电话 Char 12
Fzrxm 负责人姓名 Varchar 20
Ypde 月票定额 Decimal (8,2)
Yj 押金 Decimal (8,2)
Khrq 开户日期 Datetime
Zhzt 帐户状态 Varchar 20
Xhrq 销户日期 Datetime
表3.5 营业收支日报表(YYSZRBB)
字段代码 字段名称 类型 宽度 是否主键
Jyrq 交易日期 Datetime YES
Srze 收入总额 Decimal (8,2)
Srbs 收入笔数 Integer
Zcze 支出总额 Decimal (8,2)
Zcbs 支出笔数 Integer
表3.6 支票信息(ZPXX)
字段代码 字段名称 类型 宽度 是否主键
Zph 支票号 Char 10 YES
Gpdwbh 供票单位编号 Char 8
Sqzprq 收取支票日期 Datetime
Zpje 支票金额 Decimal (8,2)
Zpdzrq 支票到帐日期 Datetime
表3.7 车载机信息(CZJXX)
字段代码 字段名称 类型 宽度 是否主键
Bh 编号 Char 12 YES
Zt 状态 Varchar 8
Clbh 车辆编号 Char 6
Cdbh 车队编号 Char 5
Fgsbh 分公司编号 Char 5
Xlbh 线路编号 Char 5
表3.8 个人卡交易明细(GRKJYMX)
字段代码 字段名称 类型 宽度 是否主键
Kh 卡号 Char 8
Rqsj 日期时间 Datetime YES
Scye 上次余额 Decimal (6,2)
Jffse 借方发生额 Decimal (6,2)
Dffse 贷方发生额 Decimal (6,2)
Ye 余额 Decimal (6,2)
表3.9 卡交易记录(KJYJL)
字段代码 字段名称 类型 宽度 是否主键
Jyrq 交易日期 Datetime YES
Xfdbh 消费点编号 Char 6 YES
Jyxh 交易序号 Char 8 YES
Kh 卡号 Char 8
Jyje 交易金额 Decimal (5,2)
Sfje 实付金额 Decimal (5,2)
表3.10 客运分公司运营日报表(KYFGSYYRBB)
字段代码 字段名称 类型 宽度 是否主键
Gzrq 工作日期 Datetime YES
Cjrq 采集日期 Datetime YES
Fgsbh 分公司编号 Char 4 YES
Dryye 当日营业额 Decimal (8,2)
Drxfbs 当日消费笔数 integer
表3.11 消费日报表(XFRBB)
字段代码 字段名称 类型 宽度 是否主键
Czzdh 车载终端号 Char 12 YES
Gzrq 工作日期 Datetime YES
Cjrq 采集日期 Datetime
Dryye 当日营业额 Decimal (8,2)
Drxfbs 当日消费笔数 Integer
表3.12 车队运营日报表(CDYYRBB)
字段代码 字段名称 类型 宽度 是否主键
Gzrq 工作日期 Datetime YES
Cjrq 采集日期 Datetime YES
Cdbh 车队编号 Char 6 YES
Dryye 当日营业额 Decimal (8,2)
Drxfbs 当日消费笔数 Integer
表3.13 客运返回消费明细(KYFHXFMX)
字段代码 字段名称 类型 宽度 是否主键
Czzdh 车载终端号 Char 12 YES
Kyyxlh 卡应用序列号 Char 8
Kjylsh 卡交易流水号 Integer YES
Jyrq 交易日期 Datetime YES
Klx 卡类型 Varchar 50
Jyje 交易金额 Decimal (5,2)
Xflb 消费类别 Varchar 50
3.4 安全性设计
数据库SQL Server 2000 的安全性功能是强大的,相对来说也是复杂的,在本设计中从实际情况出发,对系统安全行进性有针对性的设计。
(1) 采用模拟加密方式对密码进行加密,即采用将密码转化为ASCII码的形式对其进行加密,从而以不可字辨的形式存入后台数据库。
(2) 通过前台的数据库开发工具VisualBasic 6.0对用户登录权限进行严格的控制管理。在系统用户表中见登录用户划分为三类:总管理员、系统管理组和操作组。
① 总管理组员是系统的最高管理者,对其他人员具有添加权和删除权,对系统内的所有菜单具有操作权限。
② 系统管理组内的人员是系统的较高管理者,对其他人员具有添加权限,对系统内的除删除用户外的所有菜单具有操作权限。
③ 操作组内设定的人员,具有操作数据的权限。
(3) 第一次进入系统时,默认总管理员名称为AAA,密码为aaa。由总管理员AAA负责添加操作组人员和系统管理组其他人员。
3.5 界面设计
考虑到实际情况及应用需求,在本系统中,采用了传统的基于菜单选择、填写文本框和简单回答等人机交互方式。界面本着友好、美观、清晰的原则进行设计。下面介绍系统中部分界面及其业务说明。
(1) 用户登录界面
图3.3 用户登录界面:
业务说明:用户输入名称和密码,输入正确则进入系统,不正确则系统给出提示警告。
(2) 系统主界面:
图3.4 系统主界面
业务说明:进入系统后,不同类型的用户可分别根据类型权限通过各个菜单项对系统进行操作管理。
(3) 个人卡租卡界面:
图3.5 个人卡租卡界面
业务说明:输入用户信息及押金数额,进行租卡。若所用证件与后台已有记录重复,则系统给出提示警告。
(4) 个人卡充值界面
图3.6 个人卡充值界面
业务说明:输入卡号后,显示卡信息,若卡状态不符,则系统提示不能充值。输入充值金额确定,若充值超额,则系统给出提示。
(5) 单位集体预充值
图3.7 单位集体预充值界面
业务说明:输入单位编号并选择支付方式,进行充值业务,系统显示单位充值信息,若选择支票方式支付,则系统查对记录,如果未到帐支票金额总数将超过押金总额,系统会提示不能充值。
(6) 个人卡账户更改界面:
图3.8 个人卡账户更改界面
业务说明:本界面应用于检查消费是否合法,若合法则更改用户帐户信息。并在此基础上统计合法消费和非法消费情况。单击界面左上方按钮逐条显示本日消费记录并提示非法或合法,单击执行按钮将信息写入后台数据库。
(7) 卡消费交易统计
图3.9 卡消费统计界面
业务说明:本界面模拟卡脱机交易,输入卡号及交易金额,系统读卡信息并显示并计算实付金额,然后记录此次交易信息。
(8) 营业收支日报
图3.10 营业收支日报界面
业务说明:进入本界面后,自动显始当日收入支出信息,操作员可查对营业记录以保证数据的正确性,单击录入按钮即将数据写入后台数据库。若需修改,应首先单击修改按钮,才可改动数据。
(9) 客运分公司运营日报表
图3.11 客运分公司运营日报界面
业务说明:输入分公司编号,显示该分公司当日运营信息。
(10) 车载非法消费日报表
图3.12 车载非法消费日报界面
业务说明:输入车载终端号,显示该车载机基本信息及当日运营信息。
(11) 应付账款划拨
图3.12 应付账款拨划界面
业务说明:显示各科目帐款划拨情况,若有记录,可以查看记录。
(12) 支票入帐
图3.14 支票入帐界面
业务说明:单位预充值若以支票方式,则系统记录支票信息,在界面中确定支票到帐。
(13) 个人卡信息查询
图3.15 个人卡信息查询界面
业务说明:本界面提供个人卡信息查询功能。输入卡号及租卡证件信息,显示卡信息。
(14) 联机交易统计查询
图3.16 联机交易统计查询界面
业务说明:输入交易日期并选择卡类型,可查询指定日期特定卡的各种联机交易信息。
(15) 车载机信息查询
图3.17 车载机信息查询界面
业务说明:本界面提供车载机基本信息查询功能。输入车载终端号,单击查询按钮,显示指定车载机信息;单击全部信息按钮显示全部车载机信息。
(16) 客运返回消费明细
图3.18 客运返回消费明细界面
业务说明:根据每日脱机交易统计记录,按时间段返回个人卡消费明细。
(17) 会计科目收支信息显示
图3.19 会计科目收支信息显示界面
业务说明:在会计科目收支查询主界面中输入工作日期并选择科目类别,则在此界面中显示所查询内容,并可以通过单击界面右边的按钮查看在此日期前后的记录。
(18) 客运分公司运营信息
图3.20 客运分公司运营信息界面
业务说明:输入分公司编号并选择日期,查询各分公司的运营情况。
4. 系统实现
4.1 开发工具的选择
4.1.1 前端软件工具的选择
(1) Visual Basic 6.0
Visual Basic 6.0 是Visual Studio 6.0 可视化应用程序开发工具组件中的一个成员,是目前最流行的可视化编程工具。在本次设计中,我选择了它作为前台开发工具,因为它拥有许多其他编程工具所不具有的特点和功能。下面对此作以介绍。
Visual Basic 既继承了BASIC 语言具有的语法简单、易学、易用、数据处理能力强的特点,又引入了面向对象的编程机制和可视化程序设计方法,大大降低了开发应用程序的难度,有效地提高了应用程序的效率。同时,Visual Basic 还兼顾了高级编程技术,其编程系统采用了面向对象、事件驱动的编程机制,具有面向对象程序设计语言所具有的对象的创建、对象的继承性、对象的多态性及对象的可预见性的特征。应用Visual Basic 不仅可以编写功能强大的数据库应用程序、多媒体处理程序,还可以用来建立客户与服务器应用程序、创建ActiveX控件以及与其他应用程序紧密集成。因此,Visual Basic 6.0 已经成为最受欢迎的Windows应用程序开发工具。
Visual Basic作为应用程序的开发“利器”也表现在数据库应用程序的开发上,它良好的界面和强大的控件功能使数据库编程变得非常简单。选择Visual Basic作为开发数据库前端应用程序的工具,可以和多种数据库连接。也就是说,目前较为流行的大多数数据库都可以与Visual Basic连接,因而可以用Visual Basic开发相应的前端应用程序,而且使用ODBC驱动程序,可以建立与几乎任何数据库管理系统连接的应用程
程,因此完全有资格作为数据库应用程序的开发环境。Microsoft公司把许多新的数据访问功能加到Visual Basic中,使得该产品成为桌面数据库市场中Access、FoxPto及Paradox for Windows的直接竞争者。与普通的数据库系统相比,用Visual Basic作为数据库开发平台有以下优点:
简单性。Visual Basic提供了数据控件,利用该控件,用户只要编写少量的代码甚至不编写任何代码就可以访问数据库,对数据库进行浏览。
灵活性。Visual Basic不像一般的数据库(如Access)那样局限于特定的应用程序结构,也不需要用某些指令对当前打开的数据库进行操作,因而比较灵活。
可扩充性。Visual Basic是一种可以扩充的语言,其中包括在数据库应用方面的扩充。在Visual Basic中,可以使用ActiveX控件(以前版本中称为VBX或OLE控件),这些控件可以由Microsoft公司提供,也可以由第三方开发者提供。有了这些控件,可以很容易地在Visual Basic中增加新功能,扩充Visual Basic数据存取控制的指令系统。在其它数据库开发平台中,目前还不具备ActiveX控件。
(2) Microsoft ActiveX Data Objects (ADO)
Microsoft ActiveX Data Objects (ADO) 是Microsoft Visual Basic提供的一种新的数据访问方法,使客户端应用程序能够通过 OLE DB 提供者访问和操作在数据库服务器中的数据。ADO对象模型规定了一组可编程的分层对象集合,在Visual Basic 应用程序中通过创建这组对象集合来连接数据库,实现对数据库的各种操作。ADO模型主要由Connection、Command、Parameter、Recordset、Field、Property和Error 7个对象组成,另外还有4个集合对象,分别是:Fields、Properties、Parameters和Errors集合。下面对ADO模型作以图示:
图 4.1 ADO对象模型
ADO的主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。ADO 同时具有远程数据服务 (RDS) 功能,通过 RDS 可以在一次往返过程中实现将数据从服务器移动到客户端应用程序、在客户端对数据进行处理然后将更新结果返回服务器的操作,现在,RDS 已经与 ADO 编程模型合并,以便简化客户端数据的远程操作。ADO必将完全取代DAO和RDO成为Visual Basic数据访问方法的最佳方法。
(3)Visual Basic 概念
为了理解应用程序开发过程,先要理解 Visual Basic 赖以创建的一些关键概念。因为 Visual Basic 是 Windows 开发语言,所以有必要与 Windows 环境保持一定的相似性。如果不熟悉 Windows 编程,就需要明白在 Windows环境下编程和在其它环境下编程的一些根本性的差别。
Windows 的工作方式:窗口、事件和消息
全面地讨论 Windows 的内部工作机制将需要整整一本书的容量。没有必要深入了解所有的技术细节。Windows 的工作机制,简单地说就是三个关键的概念:窗口、事件和消息。不妨简单地将窗口看作带有边界的矩形区域。也许已经了解几种不同类型的窗口:如,Windows 95 的“资源管理器”窗口、文字处理程序中的文档窗口或者弹出提示有约会信息的对话框。除了这些最普通的窗口外,实际上还有许多其它类型的窗口。命令按钮是一个窗口。图标、文本框、选项按钮和菜单条也都是窗口。
Microsoft Windows 操作系统通过给每一个窗口指定一个唯一的标识号(窗口句柄或 hWnd)来管理所有的窗口。操作系统连续地监视每一个窗口的活动或事件的信号。事件可以通过诸如单击鼠标或按下按键的操作而产生,也可以通过程序的控制而产生,甚至可以由另一个窗口的操作而产生。
每发生一次事件,将引发一条消息发送至操作系统。操作系统处理该消息并广播给其它窗口。然后,每一个窗口才能根据自身处理该条消息的指令而采取适当的操作(例如,当窗口解除了其它窗口的覆盖时,重显自身窗口)。
可以想像,处理各种窗口、事件和消息的所有可能的组合将有惊人的工作量。幸运的是,Visual Basic 使您摆脱了所有的低层消息处理。许多消息由Visual Basic 自动处理了,其它的作为事件过程由编程者自行处理。这样可以快速创建强大的应用程序而毋需处理不必要的细节。
事件驱动模型
在传统的或“过程化”的应用程序中,应用程序自身控制了执行哪一部分代码和按何种顺序执行代码。从第一行代码执行程序并按应用程序中预定的路径执行,必要时调用过程。
在事件驱动的应用程序中,代码不是按照预定的路径执行,而是在响应不同的事件时执行不同的代码片段。事件可以由用户操作触发,也可以由来自操作系统或其它应用程序的消息触发,甚至由应用程序本身的消息触发。这些事件的顺序决定了代码执行的顺序,因此应用程序每次运行时所经过的代码的路径都是不同的。
因为事件的顺序是无法预测的,所以在代码中必须对执行时的“各种状态”作一定的假设。当作出某些假设时(例如,假设在运行来处理某一输入字段的过程之前,该输入字段必须包含确定的值),应该组织好应用程序的结构,以确保该假设始终有效(例如,在输入字段中有值之前禁止使用启动该处理过程的命令按钮)。
在执行中代码也可以触发事件。例如,在程序中改变文本框中的文本将引发文本框的 Change 事件。如果 Change 事件中包含有代码,则将导致该代码的执行。如果原来假设该事件仅能由用户的交互操作所触发,则可能会产生意料之外的结果。正因为这一原因,所以在设计应用程序时理解事件驱动模型并牢记在心是非常重要的。
交互式开发
传统的应用程序开发过程可以分为三个明显的步骤:编码、编译和测试代码。但是 Visual Basic 与传统的语言不同,它使用交互式方法开发应用程序,使三个步骤之间不再有明显的界限。
在大多数语言里,如果编写代码时发生了错误,则在开始编译应用程序时该错误就会被编译器捕获。此时必须查找并改正该错误,然后再次进行编译,对每一个发现的错误都要重复这样的过程。Visual Basic 在编程者输入代码时便进行解释,即时捕获并突出显示大多数语法或拼写错误。看起来就像一位专家在监视代码的输入。
除即时捕获错误以外,Visual Basic 也在输入代码时部分地编译该代码。当准备运行和测试应用程序时,只需极短时间即可完成编译。如果编译器发现了错误,则将错误突出显示于代码中。这时可以更正错误并继续编译,而不需从头开始。
由于 Visual Basic 的交互特性,因此可以发现在开发应用程序时,您自己正频繁地运行着您的应用程序。通过这种方式,代码运行的效果可以在开发时进行测试,而不必等到编译完成以后。
(4)设计错误处理程序
错误处理程序是应用程序中捕获和响应错误的例程。对于预感可能会出错的任何过程添加错误处理程序。设计错误处理程序的进程包括三步:
设置或激活错误捕获。On Error 语句激活捕获,并指引应用程序跳转到标记着错误处理例程开始的标号处。
编写错误处理例程。首先添加错误标号。接着编写错误处理程序。通常错误处理程序放在过程的末端,而且在紧靠行标号的前方放有Exit Sub或Exit Function等语句。
退出错误处理例程。当指定的错误处理完成后,应该指引程序跳转到合适的位置继续进行。Resume语句用于推出错误处理程序。
(5)调试方法
介绍调试技术使用 Visual Basic 提供的分析工具。Visual Basic 不能诊断或更正错误,但确实能提供工具来帮助分析运行是如何从过程的一部分流动到另一部分的,分析变量和属性是如何随着语句的执行而改变的。有了调试工具,就能深入到应用程序内部去观察,从而确定到底发生了什么以及为什么会发生。
Visual Basic 的调试支持包括:断点、中断表达式、监视表达式、通过代码一次经过一个语句或一个过程、显示变量和属性的值。Visual Basic 还包括专门的调试功能,比如可在运行过程中进行编辑、设置下一个执行语句以及在应用程序处于中断模式时进行过程测试等。
4.1.2 后台数据库的选择
Microsoft SQL Server 是Microsoft 公司开发的一个基于结构化查询语言(SQL)和客户机/服务器模型的高性能的关系数据库管理系统,SQL Server 2000是MS SQL Server 的最新版本。SQL Server 2000的应用可以稳定运行在小到台式机、笔记本,具有8—16个处理器、若干G字节的内存、若干T字节的外部存储器的对称的多处理服务器。
应该指出的是,SQL Server 2000是一种企业级的数据库管理系统、主要是被设计来支持大容量的事物处理,例如超级市场的销售系统、银行管理系统、网络中的数据库支持应用软件以及其他方面的企业级的应用。尽管SQL Server 2000 可以稳定高效地运行于单机或文件共享系统中,但是需要指出的是,这不是SQL Server 2000在这方面的主要应用领域。目前,随着Internet和Intranet应用的发展,SQL Server 2000在这方面的应用受到越来越多的重视。开发企业级的数据管理已经和Internet 和 Intranet 密不可分了。
在本次设计中,为达到学习并锻炼自己的目的,我选择了SQL Server 2000 作为自己的后台数据库。
4.2 后台数据库的选择
(1) 公用数据库连接
Public Sub cnOpen(ByRef cn As ADODB.Connection)
Set cn = New ADODB.Connection
cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=帐务清算;Data Source=LIYAN"
End Sub
业务说明:打开到数据源的连接。
(2) 公用密码加密
Public Sub changecode(ByVal str1 As String, ByRef str2 As String)
Dim i As Integer
Dim a(10) As String
i = Len(str1)
For j% = 0 To i - 1
a(j%) = Asc(Mid(str1, j% + 1, 1))
str2 = str2 + a(j%)
Next j%
End Sub
业务说明:模拟数据加密功能。具体方法是将密码的每一位分别转化ASCII码写入后台数据库。
(3) 个人卡租卡
Private Sub Form_Load()
lbldate.Caption = Date ‘显示日期
cmdrec.Enabled = False
cmddel.Enabled = False
Call cnOpen(cnk) ‘连接数据库
Set rs6 = New ADODB.Recordset
s6 = "select * from KXX"
rs6.Open s6, cnk, adOpenKeyset, adLockOptimistic
Dim qq As Integer
If rs6.EOF Then
qq = 1
Else
rs6.MoveLast
qq = (Val(rs6!kh) + 1)
End if
Dim X As Integer
X = Len(str(Val(qq)))
txtxh.Text = String((9 - X), "0") & (qq) ‘显示本次租卡卡号
rs6.Close
End Sub
Private Sub Timer1_Timer() ‘显示时间
lbltime.Caption = Time$
End Sub
d = " insert into GRZHXX values('" & (f) & "','" & (txtxh.Text) & "','" & (Now) & "','" & (ee) & "','" & Trim(txth.Text) & "','" & Trim(txtyj.Text) & "','0','0','" & (Date) & "','" & (rr) & "')"
rsh.Open d, cnk, adOpenKeyset, adLockOptimistic
‘建立个人帐户
f = "insert into KXX values('" & (txtxh.Text) & "','00','" & (rr) & "','" & (s3) & "','" & (s4) & "','" & Trim(txtyj.Text) & "','0')"
rsf.Open f, cnk, adOpenKeyset, adLockOptimistic
‘记录卡信息
xx = MsgBox("租卡成功!", vbExclamation, "消息")
‘返回信息
Set rsyy = New ADODB.Recordset
yy = "insert into YYJL values('" & (Date) & "','" & (Time) & "','个人','" & (txtxh.Text) & "','租卡押金','" & Trim(txtyj.Text) & "')"
‘记录交易信息
(4) 个人卡充值
d = "select * from KXX where kh='" & Trim(txtkh.Text) & "'"
rsk.Open d, cnk, adOpenKeyset, adLockOptimistic
X = rsk!je ‘查询帐户现有金额
If (Val(txtc.Text) + X) > 1000 Then
X = (1000 - X) ‘计算本次充值最高额
xx = MsgBox("充值超额!本次充值不应超过“" & (X) & "”元!", vbExclamation, "消息") ‘提示充值超额
gg = "select * from GRZHXX where kyyxlh='" & Trim(txtkh.Text) & "'"
rss.Open gg, cnk, adOpenKeyset, adLockOptimistic
a = rss!jtzhje
b = (a + Val(txtc.Text)) ‘计算帐户更新后金额
g = "update GRZHXX set jtzhje='" & (b) & "' where kyyxlh='" & (txtkh.Text) & "'"
rsh.Open g, cnk, adOpenKeyset, adLockOptimistic‘更改帐户信息
f = "update KXX set je='" & (b) & "' where kh='" & (txtkh.Text) & "'"
rsh.Open f, cnk, adOpenKeyset, adLockOptimistic‘更改卡信息
e = "insert into GRKJYMX values('" & Trim(txtkh.Text) & "','" & (Now) & "','" & (a) & "','0','" & Trim(txtc.Text) & "','" & (b) & "')"
rsh.Open e, cnk, adOpenKeyset, adLockOptimistic‘记录交易信息
(5) 个人卡挂失
e = " update KXX set kztbs='01' where kh='" & (txtkh.Text) &am
公交IC卡交易子系统设计(二)相关范文