本例是模拟银行账户的管理,开发一个银行账户管理系统。设计的指导思想是一切为使用者着想,界面要美观大方,操作尽量简单明了,而且作为一个实用的管理系统要有良好的容错性,在出现误操作时能尽量及时地给出警告,以便用户及时地改正。计算机的资源是受到的,因此要充分利用Visual FoxPro 的功能,设计出功能强大的软件,同时要尽可能地减少对系统资源的占用。鉴于本系统的特殊性,还需要本程序有良好的保密性。
1.系统分析
1.1可行性分析
(1)管理上的可行性
使用管理方面的可行性,在没有使用银行管理系统前,采取的是人工方式,相对而言耗时大,效率低且造成一定的资源浪费。我们通过设计银行管理系统,可以对银行的一般业务进行有序管理,对于客户的个人资料也不需要做大量烦琐的登记工作,变的相对简单容易操作且不用耗费大量人力财力。
(2)技术上的可行性
技术方面,我们选择的是VF操作系统,是我们相对比较熟悉的语言,且应用简便好掌握。这是本小组初次设计银行管理系统,由于技术和知识层面的欠缺,在制作过程中会遇到许多的困难,在编程和设计过程中,感觉到知识积累的不够并且很多知识点已经淡忘。通过老师的指导以及小组成员的一起努力,我们翻越大量资料和操作,我们的系统得以比较顺利的开发出来。但始终因为时间和技术方面的不足,是我们设计的程序依然有很多不完善的地方,我们会在以后的开发中努力学习,使这个系统更完善更适合使用。
(3)经济上的可行性
经济上,由于我们开发的这个系统相对较小也较简单,不需要投入大笔资金,同时又存在着实用性,能改善原使用方法在财力和人力上的过度消耗。因此这个新系统一经使用便可收到很好的成效,做到合理节约和利用资源。银行方面在使用新系统时只需要花一定资金购买一部分计算机与软件就能实现自动化,既提高了工作效率并且也减少了工作人员的工作量,这使银行在处理业务方面得到很大的提升空间。
(4)进度安排
课程设计时间为两周:
1、课程研究 2至3天
2、系统分析 2至3天
3、系统设计 2至3天
4、系统实施 3至4天
5、撰写报告 1至2天
6、发布报告 1天
1.2业务流程与数据流程分析
(1)业务流程分析
银行账户管理系统的业务流程如下图所示:
(2)数据流程分析
①系统关联图
②顶层图
③银行账户管理系统的详细数据流程图如下图所示
1.3数据字典
数据项定义:
1. (表1-1)
数据项编号: | D1-01 |
数据项名称: | 用户姓名 |
数据项别名: | 用户姓名 |
简述: | 进入银行系统的姓名 |
数据长度: | 8位 |
数据类型: | 字符型 |
取值范围: | 无 |
数据项编号: | D1-02 |
数据项名称: | 账号 |
数据项别名: | 账号 |
简述: | 存取款时所要输入的号码 |
数据长度: | 13位 |
数据类型: | 字符型 |
取值范围: | “0000000000000”——“9999999999999” |
数据项编号: | D1-03 |
数据项名称: | 用户密码 |
数据项别名: | 用户密码 |
简述: | 存取款时所要输入的号码 |
数据长度: | 6位 |
数据类型: | 字符型 |
取值范围: | “000000”——“999999” |
数据项编号: | D1-04 |
数据项名称: | 开户时间 |
数据项别名: | 开户时间 |
简述: | 用户开户的世界 |
数据长度: | 8位 |
数据类型: | 日期型 |
取值范围: | “1900-01-01”——“2000-12-31” |
数据项编号: | D1-05 |
数据项名称: | 用户住址 |
数据项别名: | 用户住址 |
简述: | 用户的现居住地址 |
数据长度: | 20位 |
数据类型: | 字符型 |
取值范围: | 无 |
数据项编号: | D1-06 |
数据项名称: | 总金额 |
数据项别名: | 总金额 |
简述: | 用户账号的所有金额 |
数据长度: | 10位 |
数据类型: | 数值型 |
取值范围: | 0000000000-9999999999 |
数据项编号: | D1-07 |
数据项名称: | 取款机ID号 |
数据项别名: | 取款机ID号 |
简述: | 各个取款机的所在位置 |
数据长度: | 3位 |
数据类型: | 字符型 |
取值范围: | “101”——“999” |
数据项编号: | D2-01 |
数据项名称: | 安装时间 |
数据项别名: | 安装时间 |
简述: | 取款机的安装时间 |
数据长度: | 8位 |
数据类型: | 日期型 |
取值范围: | “2000-01-01”——“2010-12-12” |
数据项编号: | D2-02 |
数据项名称: | 拆除时间 |
数据项别名: | 拆除时间 |
简述: | 取款机的拆除时间 |
数据长度: | 8位 |
数据类型: | 日期型 |
取值范围: | “2000-01-01”——“2010-12-12” |
2.1 系统目标设计
通过该银行账户管理系统,使银行的账户管理工作系统化、规范化、自动化,从而达到提高账户管理效率的目的。
系统开发的总体任务是使办公人员可以轻松快捷地完成对账户管理的任务。
2.2 开发设计思想
本系统开发设计思想:
●系统应符合银行账户管理的规定,满足银行相关人员日常使用的需要,并达到操作过程中的直观、方便、实用、安全等要求。
●系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。
●系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。
●尽量采用现有软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。
2.3 开发和运行环境选择
开发工具:Visual FoxPro 6.0 中文版;
运行环境:Windows 9x 或Windows 2000。
2.4 系统功能分析
系统功能分析是在系统开发的总体任务的基础上完成的。本例中的银行账户管理系统需要完成的功能主要有:
●管理员信息管理。
●用户信息修改、开户、销户。
●办卡、挂失卡、换卡。
●存款、取款。
●取款机信息管理。
●报表输出、报表打印。
2.5 系统功能模块设计
在系统功能分析的基础上,根据Visual FoxPro 程序编制的特点,得到如下图所示的系统功能模块图。
3.数据库设计
在 Visual FoxPro 6.0 中,数据库指的是可以存储一个或多个表(.DBF 文件)及视图的关系数据库,所谓的关系数据库就是多个表的集合,每个表通过形成一定关系的公共字段与另外的表相联系。一般来说数据库可按下列步骤进行设计:
(1)确定需要的表。着手把信息分成各个的主题,每个主题对应一个表。
(2)确定所需字段。确定每个表中要保存哪些信息,一个信息为一个字段。
(3)确定表之间的联系。
值得注意的是在创建表时,必须确保一个表中的每个字段都要直接描述该表的主题,每张表应尽可能收集所需的全部信息,如果存在多张表保存同类信息的情况,应该将所有和同一主题相关的信息合并到一个表中。
数据库系统设计时应在全面考虑的前提下,尤其应该仔细考虑用户的各种需求,避免浪费人力和物力。
3.1 数据库需求分析
数据库需求分析是数据库结构设计的第一个阶段。这个阶段主要是收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为以后进一步设计打下基础。
在仔细调查银行账户管理过程的基础上,我们得到本系统所处理的数据流程如下图所示。
针对本实例,通过对银行账户管理的内容和数据流程分析,我们设计的数据项和数据结构如下:
●用户普通信息表。包含所有用户的信息,数据项有:账号、用户姓名、密码、身份证、总金额、状态、住址、开户时间。
●用户卡信息表。包含的数据项有:用户账号、卡号、卡密码、金额、状态。
●取款机信息表。包含的数据项有:取款机 ID 号、安装地点、安装时间以及拆除时间。
●取款机存取款信息表。包含的数据项有:取款机 ID 号、用户账号、用户卡号、存取款时间、存取款金额、存取款摘要、总金额。
●用户银行存取款信息表。包含的数据项有:操作员(管理员)号码、用户账号、用户卡号、存取款时间、存取款金额、存取款摘要、总金额。
●用户存取款信息总表。包含的数据项有:用户账号、存取款时间、存取款地点、存取款金额、存取款摘要、总金额。
●管理员信息表。包含的数据项有:用户、口令。
有了上面的数据结构、数据项和数据流程,我们就能进行下面的数据库设计。
3.2 数据库概念结构设计
这一设计阶段是在需求分析的基础上,设计出能够满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。
根据上面的设计规划本实例中的实体有:管理员实体、账户实体、账户普通信息实体、账户卡信息实体、取款机实体。
实体和实体之间的关系 E-R 图如下图所示
3.3 数据库逻辑结构设计
我们需要将上面的数据库概念结构转化为 Visual FoxPro 数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。
在上面的实体以及实体之间关系的基础上,形成数据库中的表格以及各个表格之间的关系。
注意,本例中的账户相关信息以“某某银行”为例。如银行账号使用 13 位数字,卡号使用16 位数字。
银行账户管理系统数据库中各个表格的设计结果如下面的几个表格所示。每个表格表示在数据库中的一个表。下面各个表为用户基本信息表。
表3-1 USER 用户基本信息表
列 名 | 数据类型 | 可否为空 | 说 明 |
USER_ID | CHARACTER(13) | NOT NULL | 账号(索引) |
USER_NAME | CHARACTER(8) | NULL | 用户姓名 |
USER_PSWD | CHARACTER(6) | NULL | 用户密码 |
USER_IDENTITY | CHARACTER(18) | NULL | 用户身份证 |
USER_ALL | NUMERIC(10,2) | NULL | 总金额 |
USER_STATUS | CHARACTER(4) | NULL | 现在状态 |
USER_ADDRESS | CHARACTER(20) | NULL | 用户住址 |
USER_NEW | DATE | NULL | 开户时间 |
列 名 | 数据类型 | 可否为空 | 说 明 |
USER_ID | CHARACTER(13) | NOT NULL | 用户账号(索引) |
CARD_ID | CHARACTER(16) | NULL | 卡号(索引) |
CARD_PSWD | CHARACTER(6) | NULL | 卡密码 |
CARD_ALL | NUMERIC(10,2) | NULL | 总金额 |
CARD_STATUS | CHARACTER(4) | NULL | 现在状态 |
列 名 | 数据类型 | 可否为空 | 说 明 |
ATM_ID | CHARACTER(3) | NOT NULL | 取款机ID 号(索引) |
USER_ID | CHARACTER(13) | NULL | 用户账号(索引) |
CARD_ID | CHARACTER(16) | NULL | 用户卡号(索引) |
ATM_TIME | DATE | NULL | 存取款时间 |
ATM_OUTIN | CHARACTER(4) | NULL | 存取款摘要 |
ATM_OUT | NUMERIC(4) | NULL | 取款金额 |
ATM_IN | NUMERIC(4) | NULL | 存款金额 |
USER_ALL | NUMERIC(10,2) | NULL | 总金额 |
列 名 | 数据类型 | 可否为空 | 说 明 |
ATM_ID | CHARACTER(3) | NOT NULL | 取款机ID 号(索引) |
ATM_ADDRESS | CHARACTER(20) | NULL | 安装地点 |
ATM_INSTALL | DATE | NULL | 安装时间 |
ATM_DELETE | DATE | NULL | 拆除时间 |
表3-5 BANKOUTIN 用户银行存取款信息表
列 名 | 数据类型 | 可否为空 | 说 明 |
TMS_ID | CHARACTER(6) | NOT NULL | 操作员ID 号(索引) |
USER_ID | CHARACTER(13) | NULL | 用户账号(索引) |
CARD_ID | CHARACTER(16) | NULL | 用户卡号(索引) |
BANK_TIME | DATE | NULL | 存取款时间 |
BANK_OUTIN | CHARACTER(4) | NULL | 存取款摘要 |
BANK_OUT | NUMERIC(10,2) | NULL | 取款金额 |
BANK_IN | NUMERIC(10,2) | NULL | 存款金额 |
USER_ALL | NUMERIC(10,2) | NULL | 总金额 |
列 名 | 数据类型 | 可否为空 | 说 明 |
USER_ID | CHARACTER(13) | NOT NULL | 用户账号(索引) |
CARD_ID | CHARACTER(16) | NULL | 用户卡号(索引) |
OUTIN_TIME | DATE | NULL | 存取款时间 |
OUTIN | CHARACTER(4) | NULL | 存取款摘要 |
USER_OUT | NUMERIC(10,2) | NULL | 取款金额 |
USER_IN | NUMERIC(10,2) | NULL | 存款金额 |
UER_ALL | NUMERIC(10,2) | NULL | 总金额 |
列 名 | 数据类型 | 可否为空 | 说 明 |
TMS_USER | CHARACTER(6) | NOT NULL | 用户名(主键) |
TMS_PSWD | CHARACTER(6) | NOT NULL | 口令 |
列 名 | 数据类型 | 可否为空 | 说 明 |
LAST_USER | CHARACTER(13) | NOT NULL | 最后一个账号 |
LAST_CARD | CHARACTER(16) | NOT NULL | 最后一个卡号 |
在需求分析、概念结构设计的继承上得到数据库的逻辑结构之后,我们就可以在 VisualFoxPro 数据库系统中实现该逻辑结构。
实现数据库的逻辑结构的方式是直接使用 Visual FoxPro 的项目管理器来实现。下面将以本例中的数据表为实例,向读者说明创建这些表格的过程。
在这之前,首先简单介绍一下项目的创建。
在 Visual FoxPro 的主菜单中单击,在弹出的“新建”对话框中选中“项目”,单击“新建文件”按钮。此时弹出存储目录,请将项目名设为“Account”,保存在磁盘中。例如“D:\\Account”文件夹。
项目建立好后,就可以实现数据库结构了。注意,Visual FoxPro 的数据库结构是依靠项目存在的。
打开 account 项目后,在“项目管理器”中展开“数据”文件夹,鼠标选中“数据库”,单击右侧的“新建”按钮,如下图所示,存储路径为D:\\account\\database\\account.dbc。
新 建 数 据 库
在弹出的“数据库设计器”中单击鼠标右键,选择“新建表”命令,如下图所示。
新 建 数 据 表
在选择“新建表”后,存储为“D:\\account\\database\dbf”。这就是为数据库添加的数据表“user”,表的内容见前面的分析:表3-1 至表3-7。下面以表3-1为例。注意,以后新建的表请全部存储在“D:\\account\\database\”目录中,以便管理和引用。
在弹出的“表设计器”中填写表的内容,如下图所示
设 计 表 的 内 容
将其与表 3-1 比较,可以发现表的字段名就是列名。读者要注意的是在以后编写程序的过程中对数据库的数据的操作通常是引用表的字段,因此读者在设计字段名时要挑选容易理解的名称。
字段设置完成后,单击“确定”后为表输入数据。
展开“数据库”→“accout”→“表”→“user”,可以看到表user 的整个结构,如下图所示。
查 看 数 据 表 结 构
其他数据表的建立为类似操作,大家自行完成。
5.各个功能模块的创建
建立功能模块的目的在于:一个是使用者能简单明了地掌握软件功能,另一个是未参加开发的人员也能轻松地进行维护。因此,为您开发的软件创建合理的功能模块是必要的。根据本软件的特点,本系统将分为3 个功能模块,它们是:管理员账户管理、用户存取款查询、ATM 取款机模拟。
在进入各个功能模块前,应该给用户提供一个选择的界面,即系统的主界面。下面,我们按系统开发顺序逐一讲解。
5.1系统主界面的设计
系统主界面的功能在于引导用户进入不同的功能模块。本系统的界面为简单起见,设计界面如下图所示。
界面中包含 3 个按钮,分别为“账户管理”、“用户查询”、“取款机”,引导进入不同的功能模块。为避免单调,加入一幅插图。
实现步骤如下:
展开项目管理器中的文档,选中表单,单击右侧“新建”按钮。如下图所示。
在弹出的对话框中选择“新建表单”命令后,弹出“Form Designer(表单设计器)”的界面。
按需要向表单中添加控件,本表单为3 个CommandButton(按钮)和1 个Image(图像)如下图所示。
设置其属性,如下表所示。
向 表 单 中 添 加 控 件
控件属性更改值表
控件 | Caption | Picture | Stretch |
Form1 | 银行账户管理系统 | ||
Command1 | 账户管理 | ||
Command2 | 用户查询 | ||
Command3 | 取款机 | ||
Command4 | 退出 | ||
Image1 | 2-变比填充 |
有些人以为只有 Image(图像)才能设置Picture 属性,实际上,按钮也是可以设置Picture属性的,它可以让使用者能更形象地使用你所开发的软件。对于Image(图像)控件,则表示显示在其中的图像。其属性值为要显示的图像的路径和文件名。并应设置其Streth 属性为“2-变比填充”以使图像能正确显示。
更改之后的表单如下图 所示。
表单外观设计好之后,就应该为表单各控件设计事件响应了。
双击“账户管理”按钮,此时弹出按钮的“方法与程序”设计栏,选择好要更改的“Procedure(方法与程序)”后,直接在下面的空白出填写代码,如下图所示。
为 控 件 设 计 事 件 响 应
为各控件添加代码如下:
Command1(账户管理)的Click 代码:
do form account\\form\\checker1
* 打开下级表单checker1
Command2(用户查询)的Click 代码:
do form account\\form\\checker2
* 打开下级表单checker2
Command3(取款机)的Click 代码:
do form account\\form\\atm
* 打开下级表单atm
Command4(退出)的Click 代码:
thisform.release
do account\\form\\end
*执行结束表单
主界面的设计到此就完成了,注意结束是将其存为“D:\\account\\form\\main.scx”。
5.2 身份验证界面的设计
因为本系统的特殊性,本系统各处会涉及到密码即身份验证。如管理员身份验证,用户身份验证等。
管理员身份验证界面
下面设计进入“管理员管理账户的界面”的身份验证。界面如下图所示。添加各控件,存储为“D:\\account\\form\\checker1.scx”。因为本表单设计到数据表tms,因此应将其添加到表单的数据环境中。添加方法如下。
管 理 员 身 份 验 证
在表单中单击鼠标右键,选择“数据环境…”,如下图所示。在弹出的“数据环境设计器”中单击鼠标右键,选择“添加”,选择“表”中要添加的表名“tms”。添加完毕后,关闭添加对话框,结果如下图所示。
设 置 表 单 数 据 环 境
添 加 表 后 的 数 据 环 境
接下来,我们为各控件填写事件响应。
表单的 Init 事件代码:
public inpswd1
inpswd1=0
* 声明全局变量作为计数器
“确定”按钮的 Click 事件代码:
if empty(thisform.text1.value) or empty(thisform.text2.value)
* 检查输入的信息是否完整
messagebox("对不起!你输入的信息不完整",48,"信息不全")
thisform.text1.value=''
thisform.text2.value=''
else
5.3 账户管理模块设计
本模块的功能在于管理员通过简单的操作,可以实现银行对账户管理的一般功能。如存款、取款、开户、销户、修改信息、办卡和挂失卡等等,内容丰富,较繁琐。因此,本表单的设计是本系统的重点。
1. 表单
请用户首先创建新的表单“supervise1.scx”。鉴于本表单内容多,这里用页框来实现一个表单多页面的显示。首先向表单中添加控件PageFrame(页框),设置页框的PageCount 属性为7,即页框中包含7 个子页面。在页框上单击鼠标右键,选择“编辑”进入页框的编辑。设置各子页面的Caption(标题)属性,如下表所示。
控件属性更改值表
控件 | Caption 属性 |
Page1 | 存款 |
Page2 | 取款 |
Page3 | 开户 |
Page4 | 销户 |
Page5 | 修改信息 |
Page6 | 办卡 |
Page7 | 挂失卡 |
表 单 的 数 据 环 境
为表单设置Init 事件代码:
public lastuser,lastcard
* 声明全局变量lastuser,lastcard
sele bank
lastuser=alltrim(bank.last_user)
lastcard=alltrim(bank.last_card)
●将表bank 中的值赋给相应变量
2. 存款
存款功能是账户管理中必不可少的一项功能,其模拟过程与现实生活一样,由管理员输入账户的账号或卡号、存款金额。此子页面的界面如图7-17 所示。
向页面中添加控件,如下图所示。
设置其属性,如表 7-9 所示。
存 款 子 页 面
为 OptionGroup(组合框)控件设置外观,如下表所示:
控件属性更改值表
控件 | Caption |
Option1 | 账号 |
Option2 | 卡号 |
if this.option1.value=1
* 如果账户栏被选中
thisform.pageframe1.page1.text1.enabled=.T.
* 将账号栏对应的文本框设为可用
thisform.pageframe1.page1.text2.enabled=.F.
thisform.pageframe1.page1.text1.setfocus
else
* 如果卡号栏被选中
thisform.pageframe1.page1.text2.enabled=.T.
* 将卡号栏对应的文本框设为可用
●更换选项时清空两个文本框中的信息
添加 4 个Text(文本框)控件,设置外观属性,如下表所示
控件属性更改值表
控件 | Enabled | InputMask | Format |
Text1 | .F. | 9999999999999 | 9999999999999 |
Text2 | .F. | 9999999999999999 | 9999999999999999 |
Text3 | .T. | ||
Text4 | .F. |
Text1 的InteractiveChange 事件代码为:
select user
locate for user.user_id=this.value
* 在表user 中查找匹配的记录
this.parent.text4.value=user.user_all
* 将相应记录的“存款”字段写入Text4(文本框4)中
Text2 的InteractiveChange 事件代码为:
select card
locate for card.card_id=this.value
* 在表card 中查找匹配的记录
this.parent.text4.value=card.user_all
* 将相应记录的“存款”字段写入Text4(文本框4)中
这两个 InteractiveChange 事件代码的功能分别为通过获得“用户账号”和“用户卡号”
的方式直接动态的显示用户的相关信息。
取款、开户、销户、修改信息、办卡、挂失卡的页面设计和存款的相似,在这里就不一一举出了。具体界面如下图所示。
3.取款子页面的设计
取 款 子 页 面
4.开户子页面的设计
开 户 子 页 面
5.销户子页面的设计
销 户 子 页 面
6.修改信息子页面的设计
修 改 信 息 子 页 面
7.办卡子页面的设计
办 卡 子 页 面
8.挂失卡子页面的设计
挂 失 卡 子 页 面
5.4用户查询模块的设计
用户可以通过本模块查询自己的存取款记录,并给出各次操作后的存款余额,以便用户对照。在实际生活中表现为用户的存折记录。
本表单存储为“D:\\account\\form\\chaxun.scx”。
1. 视图的创建
这里涉及到了视图的使用,因此,在介绍该部分内容之前,我们先讲一下视图的创建方法。
在项目管理器中选择“数据库”→account→本地视图,单击“新建”→“新建视图”后弹出视图设计器并为视图添加要用的表,如为本例中的视图添加表userall。
选择视图设计器下方的“字段”选项卡,为视图设置可以显示的字段,如本例中将表中的字段全部选中,如下图所示。
设 计 视 图 字 段
“联接”选项卡是在视图含有多个表时设置表之间的联系用的,本视图只有一个表,故不需要设置。
接下来设置“筛选”选项卡,视图可以设置筛选条件,达到根据不同条件显示不同数据的功能。如下图所示
设 置 筛 选 条 件
注意这里设置本视图的参数为 par,在填写筛选条件时要在参数前加问号(?)。在这里设好了参数,但实际上它并没有声明。
要声明视图参数,请选择Visual FoxPro 的主菜单中“查询→视图参数”命令,此时弹出声明参数的对话框,填入par,选择字符型,这样视图参数的设置就完成了。
“排序依据”和“分组依据”选项卡的设置都较简单,况且本例中不涉及,这里不加讲解,读者可以参阅相关书籍。
选择“更新条件”选项卡,选择将字段全部更新。如下图所示
设 置 视 图 的 更 新 条 件
设计完成后将视图储存为“grcx”。注意,视图是包含在数据库中的,不能存在,到此为止,视图设计就完成了。
5.5结束界面的设计
本例在用户单击主界面中的“退出”按钮后执行一个“感谢使用”的结束表单,2 秒后自动消失。它的设计如下图所示
结 束 界 面
改变表单的 Picture 属性,为表单设置背景图片。
为表单添加一个 Timer(计时器)控件,控制表单的显示。
更改 Timer(计时器)的Interval 属性,它表示的是Timer 每隔多少时间执行一次其Timer事件,单位为ms。本例中要求2 秒后表单自动消失,因此这里将其设为2000(ms)。
填写 Timer 控件的Timer 事件的代码:
thisform.release
* 释放表单
clear events
●关闭程序响应
5.6系统主程序的设计
系统中只有表单连编成程序时无法正常运行,需要设计系统主程序初始化环境,使系统能正确等待用户操作。
在项目管理器中选择“代码”→“程序”→“新建”,为本系统新建一个主程序。其中代码为:
clear events
clear all
open database database\\account
do form form\\main
* 打开主表单
_screen.left=-10000
* 将主窗口移开
read events
* 等待响应
close database
在上面的代码中执行了“_screen.left=-10000”语句,因为表单缺省是在主窗口中的,如果不作别的设置,会发现表单与主窗口一起被移到屏幕外了。
因此,我们将所有表单的Desktop 属性设为“.T.”。这样,表单就可以从主窗口中脱离出来了。连编系统后执行程序也不会有讨厌的白框了。
系统主程序要设置为主文件,设置方法如下图所示。
设 置 主 文 件
在要设为主文件的文件名上单击鼠标右键,选择“Set Main(设为主文件)”,设为主文件的文件名会自动变为粗体。
一般情况下系统主文件应该是 Program(程序),若将表单设为主文件,连编之后该表单是无法响应事件的,你会发现表单一闪之后就消失了,这便是这个原因引起的。
6.开发中的难点与解决技巧
6.1开户、办卡中账号、卡号的计算
在本例中碰到了高位数的加法的问题,在Visual FoxPro 中,当位数过高时,加和得到的数系统会自动以科学计数法表示。
在最初设计时,账号的计算的代码设计是这样的:
countid=str(val(lastuser)+1)
其思路是先使用val()函数将lastuser 变量(字符变量)的值转变为数值型,加1 后成为新的账号,再通过str()函数使其重新回到字符型,将其作为新的账号。
运行结果是 countid 的值为“2.22E12”,系统将其自动变为科学计数法。
经改正后使用的代码如下:
lcount=left(lastuser,3)
* 将lastuser 字符串左截取3 位
countid=val(right(lastuser,10))+1
* 右截取lastuser 字符串10 位,转为数值型后加1,赋值给countid
rcount=alltrim(str(countid))
* 将countid 转变为字符型后赋值给rcount
countid=lcount+rcount
* 将lcount 与rcount 连接起来成为新的账号
lastuser=countid
通过这段代码,系统可以正确地显示新的账号。注意,这种计算方法只能容纳99 亿个
帐号,不过基本上足够使用了。
卡号的计算与其类似,读者可自行理解。
6.2 InteractiveChange 和Click 事件
Click 事件和InteractiveChange 事件在本例中频繁使用,这里主要介绍一下两个事件的使用。
Click 事件应用范围极广,几乎所有的控件都可以含有Click 事件。在程序中如果包含触发此事件的代码,如设置命令按钮控件的Value 属性为“真”(.T.);或设置选项按钮控件的Value 属性为“真”(.T.)或为1;或改变复选框控件的Value 属性设置,或者键入Mouse 命令,则将发生该事件。另外用鼠标左键单击复选框、命令按钮、列表框或选项按钮控件时;或用箭头键或按鼠标左键在组合框或列表框中选择一项时;或在命令按钮、选项按钮或复选框有焦点时按空格键(SpaceBar);或当表单中有Default 属性设置为“真”(.T.)的命令按钮并且按回车键(Enter)时;或按一个控件的访问键;或单击表单空白区;或单击微件的文本输入区;或单击废止的控件时,废止控件所在的表单时,则发生本事件。如果指针位于标题栏、控件菜单框或窗口边界上时,则不发生表单的本事件。
InteractiveChange 事件是在使用键盘或鼠标,修改控件的值时发生。每当对象被交互地更改时,该事件就会发生,如每一次击键。
6.3程序的调试和故障分析
创建了应用程序的各个组件后,希望它们能正常工作,但在编写程序中,由于种种原因,
难免会出现这样或那样的错误,于是就要用到Visual FoxPro 提供的调试工具进行调试。
1. 程序的调试
选择使用哪些调试工具,取决于Visual FoxPro 的当前操作环境:调试窗口和跟踪窗口在开发环境和运行环境中都可用,而命令窗口只在开发环境中可用。总的来说在调试程序时可用到以下几种方法:
●在命令窗口中直接输入测试命令:命令窗口允许开发者在开发环境中对单独的代码进行调试。在命令窗口键入命令后,可查看到结果。但不同的命令会产生不同的效果,某些命令(如wait windows)可以立即看到结果;而某些命令仅返回值(如打印命令?,??,???)等等,如果一个命令没有可视结果,可以组合使用命令窗口和调试窗口来查看程序执行的结果。
●跟踪程序和表单:程序在执行时是非常快的,要测试中间结果比较困难,这时可用跟踪窗口来观察到这些代码的执行。通过跟踪窗口可调节程序和方法的执行速度,一步一步地执行命令或跳过已检查的代码并设置断点,可以控制用户子定义代码的执行速度,也可跟踪表单,设置事件代码断点。
●动态显示值:当测试和调试单个命令和用户自定义的代码时,可能需要知道某些变量和函数的值。若要使用命令窗口来测试命令,则必须使用开发环境。如果要在开发环境或运行环境中查看动态值可使用跟踪窗口和查看窗口,而在监视窗口里能观察到代码表达式及它们的当前值,并能够在表达式上设置断点。
●添加测试代码:在程序执行过程中显示阶段性结果也是一种有效的测试代码方法,因此可在代码中添加测试行来显示变量、函数和表达式的值。Wait 命令和messagebox()函数常常用来显示测试信息和挂起程序,等待开发者按下一个键或单击某一键,然后程序继续执行。
2. 常见故障
下面介绍一下具有代表性的错误。
●表单加载错误:当在加载表单时在数据环境中找不到表单中某些文本框绑定的数据源时,会出现此错误。另外,Visual FoxPro 在设置多表之间联系时功能不强,当表单过多时也可能出现这种错误。
●表格使用错误:因为表一般都是以独占方式打开的,当一个表没关闭,另一个命令又要使用该表时会出现错误。系统提示“表正在使用”,“表必须以独占方式打开”。解决的方法一般是表使用完后要即时关闭,以防止上述情况发生。或者是在程序中多使用临时表,因为临时表使用后会自动释放。
●字符匹配错误:在程序设计中,会经常用到字符串的比较,有时候表面看来两个字符串是相同的,但Visual FoxPro 却认为它们不匹配。这是因为,当用户在文本框中输入字符串时,有可能为字符串引入前后空格,当获得该字符串时,已经与数据表中的数据有所区别了,从而导致字符匹配错误。解决方法是使用alltrim()函数,它可以删除字符串两端的空格。
这个错误的出现还有一种可能的原因是用来比较的两个字符串的类型不匹配。这时候,就应该查看错误的比较语句出的两个变量,如类型不匹配,应使用函数将它们变为同种类型。常用函数为val()、str()。
Val()函数可以将数字型字符串转变为数值。
Str()函数可以将数值型变量转变为字符型。
7.系统的编译和发行
7.1系统的编译
设计系统的目的就是要使用者即使不安装 Visual FoxPro,也能运行该程序。要想系统脱离Visual FoxPro 运行,需要对系统进行编译,制作出可单独运行的可执行程序。系统的编译过程简述如下:
首先将系统中涉及到的文件全部包含进“Project Manager(项目管理器)”。读者需要注意的是主界面中用到的图片文件,需要手工添加进来。请将其包含到“Other(其他)”中的“Other Files(其他文件)”项中。
无用的表单、数据表等都要 Remove(移除),最后将它们的源文件从系统目录中删除,如本例为“D:\\account”,请将无关文件从中删除。
单击项目管理器右侧的“Build(连编)”按钮,选择连编选项。请首先选择“Rebuild Project(重新连编全部文件)”,它的功能是将项目管理器中包含的文件作检查,如果你在连编后删掉某些文件,你就需要使用这个按钮对文件重新编译。
“Build Options(连编选项)”如下图所示。
编译结束后,如没有错误,就可以生成可执行文件了。如有错误系统会自动弹出提示,读者应根据提示修改错误。本例中是生成.EXE 文件,即可执行文件,请选择“Build Executable(连编可执行文件)”。系统会弹出对话框选择保存路径。请选择系统的文件目录。如本例选择“D:\\account”。可执行文件的文件名可自定。
这样系统的连编就完成了。你可以单击生成的可执行程序来运行系统了,用户完全不用依赖Visual FoxPro。
7.2系统的发行
系统的发行可使用“向导”中的“安装向导”来完成。它的主要步骤是:
(1)了解应用程序的基本结构:要发布程序,必须首先将系统连编成可以单独执行的可执行程序。
(2)制作发布树:在了解本系统包含的程序之后,将它们全部放到一个目录中。如本例中为“D:\\account\”。那么其发布树目录就为“D:\\account\”目录。
(3)指定应用程序需要的组件:根据编写的系统选择应用程序组件,此系统仅用到了Visual FoxPro 运行时刻组件和ODBC 驱动程序,故选择这两项。
(4)指定磁盘映像,即创建何种安装磁盘:本例以一个软盘的空间为标准,并选择以软盘为输出目标,先把安装程序映像到硬盘上,磁盘映像目录为“D:\银行账户管理系统\DISK\”,此时安装向导已经可以完成,如想要再具体地设计此安装系统,可以单击“下一步”进入后续的步骤设计。
(5)设置安装设置,如“安装对话框”、“版权信息”等:安装对话框标题为“银行账户管理系统安装向导”,版本信息为“1.0 版”。
(6)指定默认安装路径:设置安装程序安装时的默认路径及客户可以修改的选项。本例中设默认目录为“\银行账户管理系统\”,程序组为“银行账户管理系统”,用户可以修改项设为“仅目录”。
(7)改变文件位置。
(8)完成安装过程。
实验小结
本报告提供了系统分析、设计和编写程序等的具体操作过程,熟练掌握这些内容,将为课程设计的成功进行做好充分的准备。通过两个星期辛勤的系统开发,我们小组设计的银行账户管理系统初步完成。
经过这次的实习活动,小组成员对管理信息系统有了更深的了解,同时进一步温习巩固了VFP计算机编程知识和VISIO使用方法;通过实践,提高了系统分析的能力,对数据流程图、数据字典、系统流程图等的含义和制作方法有了更深刻的认识,为以后的工作、学习的进一步提高打下了坚实的基础,初步实现了实习的预期目标。另外很值得一提的是小组所有成员在这次实习过程中养成了严谨的科学研究态度,互学互助,分工负责,在良好的配合中实现了目标,在良好的互动中进一步体味团队精神的可贵。
最后,非常感谢我们的指导老师,正是他们在课程设计整个过程中给予我们莫大的支持和良好的指导、提出了许多有益的建议和意见,才使得此次课程设计能顺利完成。总之这样的一次实践机会,一定让我们大家受益非浅了!再一次感谢指导老师们、感谢每一位小组成员!
附录一:
表一:用户基本信息表
账号 | 用户姓名 | 用户密码 | 用户身份证 | 总金额 | 现在状态 | 用户住址 | 开户时间 |
01 | 小史 | 01 | 01 | 1000 | 01 | 01 | 01/01/01 |
02 | 小汪 | 02 | 02 | 1000 | 02 | 02 | 02/02/02 |
03 | 小许 | 03 | 03 | 1000 | 03 | 03 | 03/03/03 |
04 | 小游 | 04 | 04 | 1000 | 04 | 04 | 04/04/04 |
用户账号 | 卡号 | 卡密码 | 总金额 | 现在状态 |
01 | 01 | 01 | 1000 | 01 |
02 | 02 | 02 | 1000 | 02 |
03 | 03 | 03 | 1000 | 03 |
04 | 04 | 04 | 1000 | 04 |
取款机ID号 | 安装地点 | 安装时间 | 拆除时间 |
01 | 01 | 01/01/01 | 02/02/02 |
02 | 02 | 02/02/02 | 03/03/03 |
03 | 03 | 03/03/03 | 04/04/04 |
04 | 04 | 04/04/04 | 05/05/05 |
取款机ID号 | 用户账号 | 用户卡号 | 存取款时间 | 存取款摘要 | 取款金额 | 存款金额 | 总金额 |
01 | 01 | 01 | 01/01/01 | 01 | 100 | 100 | 1000 |
操作员ID号 | 用户账号 | 用户卡号 | 存取款时间 | 存取款摘要 | 取款金额 | 存款金额 | 总金额 |
01 | 01 | 01 | 01/01/01 | 01 | 100 | 100 | 1000 |
用户账号 | 用户卡号 | 存取款时间 | 存取款摘要 | 取款金额 | 存款金额 | 总金额 |
01 | 01 | 01/01/01 | 01 | 100 | 100 | 1000 |
用户名 | 口令 |
小史 | 01 |
小汪 | 02 |
小许 | 03 |
小游 | 04 |
最后一个账号 | 最后一个卡号 |
01 | 01 |
02 | 02 |
03 | 03 |
04 | 04 |
管理信息系统 课程设计任务书
题目名称:银行账户管理系统 |
1、内容及要求: 用信息系统开发工具(例如VF、VB等)开发一个实用的图书借阅管理系统。 1、合理安排进度,按照系统开发的流程及方法,踏实地开展课程设计活动。 2、课程设计过程中,根据选题的具体需求,在开发各环节中撰写相关的技术文档,最后要求提交详细的课程设计报告。 3、开发出可以运行的图书借阅管理信息系统,通过上机检查。并向指导老师发布最后的成果,并答辩老师所提出的问题。 |
2、主要技术指标: 课程设计报告撰写的基本要求是报告原则上不少于10000字,需在封面注明设计选题、班级、姓名、学号及课程设计日期、地点,其正文至少包括如下几个方面的内容: (1)可行性分析 (2)系统分析报告 1)业务流程图 2)数据流程图 3)数据字典 (3)系统设计报告 1)功能结构图设计 2)新系统信息处理流程设计 3)输出设计 4)数据库设计 5)输入设计 6)代码设计 (4)操作说明书 |
3、进度安排: 课程设计时间为三周。 1、调研 3天 2、系统分析 4天 3、系统设计 4天 4、系统实施 7天 5、撰写报告 2天 6、答辩 1天 |
4、参考文献: 周山芙主编 《管理信息系统》 中国人民大学出版社 2005年第二版 黄梯云主编 《管理信息系统导论》 机械工业出版社 1995年第二版 |
教研室主任签名: 日期: