大家好,又见面了,我是你们的朋友全栈君。
第一部分 引言
1.1 编写目的
本说明对银行账户管理系统项目的各模块、页面、脚本分别进行了实现层面上的要求和说明。
软件开发小组的产品实现成员应该阅读和参考本说明进行代码的编写、测试。
1.2 背景
说明:
A、 软件系统的名称:银行账户管理系统
B、 开发者:魏晓蕾等
本项目将实现基于服务器端Java Web网站的银行账户管理系统的原型部分,并且在该原型的基础上进行功能的扩展和需求的界定,最终完成的版本将在全国范围内推广使用。提供银行账户管理功能。
C、 本系统将作为银行柜员办理事务和银行账户管理的网站。本系统首先在三个异地银行站点推广使用,分别为呼和浩特分行、北京市分行、哈尔滨分行,并在三个站点设置分布式数据库,利用分布式数据库的读取存储优势实现在三个异地银行站点的存取款及转账等服务。
1.3 定义
IPO图 —— 输入/处理/输出图,一般用来描述一个程序的功能和机制;
1.4 参考资料
A、《JSP程序设计(第二版)》,范立锋等著,人民邮电出版社
B、《21天学通Oracle(第三版)》,张朝明等著,电子工业出版社
C、《精通Oracle核心技术与项目实战》,刘丽霞著,电子工业出版社
D、《分布式数据库系统及其应用(第三版)》,徐俊刚、邵佩英著,科学出版社
第二部分 程序系统的结构
2.1 系统实现场景
系统实现场景如图2-1所示。
图2-1 系统实现场景
本系统实现银行柜员处理银行事务的帐户管理功能,为柜员所使用的基于Java Web平台的网站系统。
2.2 系统功能模块设计
系统功能模块划分如图2-2所示。
图2-2 系统功能模块划分
2.3 系统开发及运行环境
开发环境:
A、Windows 7操作系统
B、Eclipse-Jee-Mars-2-win32
C、Oracle 10g 10.2.0
运行环境:
A、Internet Explorer浏览器
2.4 系统项目简介
2.4.1 项目概况
A、工程类型:Java Web项目
B、所用架构:MVC模式
C、所用技术:JavaBean+JSP+Servlet技术
连接Oracle分布式数据库
D、工程名称:BankManagementSystem
2.4.2 项目源码文件
2.4.2.1 JSP页面
o Login.jsp 柜员登录页面
o LoginCheck.jsp 柜员登录检查页面
o LoginFailure.html 柜员登录失败页面
o ClientLogin.jsp 客户登录页面
o ClientLoginOperation.jsp 客户登录成功页面
o MainPage.jsp 柜员事务主页面
o CreateCard.jsp 办卡信息显示页面
o CreateCardPassword.jsp 办卡录入密码页面
o CreateCardOperation.jsp 办卡操作页面
o ChangePassword.jsp 修改密码信息显示页面
o ChangePasswordForm.jsp 修改密码表单页面
o ChangePasswordOperation.jsp 修改密码操作页面
o LostCard.jsp 挂失/解挂信息显示页面
o LostCardOperation.jsp 挂失/解挂操作页面
o ReCreateCard.jsp 补卡信息显示页面
o ReCreateCardOperation.jsp 补卡操作页面
o RemoveCard.jsp 销卡信息显示页面
o RemoveCardOperation.jsp 销卡操作页面
o SaveInMoney.jsp 存款信息显示页面
o SaveInMoneyForm.jsp 存款表单页面
o SaveInMoneyOperation.jsp 存款操作页面
o TakeOutMoney.jsp 取款信息显示页面
o TakeOutMoneyForm.jsp 取款表单页面
o TakeOutMoneyOperation.jsp 取款操作页面
o ShowBalance.jsp 查询余额页面
o ShowHistory.jsp 查询历史记录信息显示页面
o ShowHistoryOperation.jsp 查询历史信息操作页面
o ForwardMoney.jsp 转账信息显示页面
o ForwardMoneyConfirm.jsp 转账信息确认页面
o ForwardMoneyOperation.jsp 转账操作页面
2.4.2.2 JavaBean文件
o Connbean/ConnectionOracle.java 连接Oracle数据库代码
2.4.2.3 图片文件
o images/1.gif 柜员登录界面图片
o images/2.jpg 客户登录界面图片
o images/3.jpg 系统主页面界面图片
o images/4.jpg 信息显示页面界面图片
o images/5.jpg 操作页面界面图片
第三部分 系统设计图表
3.1 用例图
3.1.1 用例表
参与者 |
银行柜员 |
||
客户 |
|||
事件序列1 |
录入客户信息 |
|
|
事件序列2 |
办卡 |
录入密码 |
|
事件序列3 |
修改密码 |
|
|
事件序列4 |
挂失/解挂 |
挂失 |
解挂 |
事件序列5 |
补卡 |
销卡 |
办卡 |
事件序列6 |
销卡 |
返回余额 |
|
事件序列7 |
存款 |
计算手续费 |
|
事件序列8 |
取款 |
计算手续费 |
|
事件序列9 |
转账 |
转账信息核对 |
计算手续费 |
事件序列10 |
查询余额 |
|
|
事件序列11 |
查询交易历史 |
选择时间段 |
|
3.1.2 用例图
3.2 序列图
3.2.1 序列表
事件序列编号 |
事件序列名 |
发出事件人 |
接收事件人 |
事件序列1 |
柜员登录 |
银行柜员 |
数据库 |
事件序列2 |
客户信息录入 |
客户 |
银行柜员 |
事件序列3 |
查询插入客户信息 |
银行柜员 |
数据库 |
事件序列4 |
办卡 |
客户 |
银行柜员 |
事件序列5 |
银行卡信息与客户信息绑定 |
银行柜员 |
数据库 |
事件序列6 |
修改密码 |
客户 |
银行柜员 |
事件序列7 |
更新数据库密码字段 |
银行柜员 |
数据库 |
事件序列8 |
挂失 |
客户 |
银行柜员 |
事件序列9 |
更新数据库银行卡状态字段 |
银行柜员 |
数据库 |
事件序列10 |
解挂 |
客户 |
银行柜员 |
事件序列11 |
更新数据库银行卡状态字段 |
银行柜员 |
数据库 |
事件序列12 |
补卡 |
客户 |
银行柜员 |
事件序列13 |
删除旧银行卡记录,添加新银行卡记录 |
银行柜员 |
数据库 |
事件序列14 |
销卡 |
客户 |
银行柜员 |
事件序列15 |
删除银行卡记录 |
银行柜员 |
数据库 |
事件序列16 |
存款 |
客户 |
银行柜员 |
事件序列17 |
更新银行卡余额字段 |
银行柜员 |
数据库 |
事件序列18 |
取款 |
客户 |
银行柜员 |
事件序列19 |
更新银行卡余额字段 |
银行柜员 |
数据库 |
事件序列20 |
转账 |
客户 |
银行柜员 |
事件序列21 |
更新新旧银行卡余额字段 |
银行柜员 |
数据库 |
事件序列22 |
查询余额 |
客户 |
银行柜员 |
事件序列23 |
查询余额字段 |
银行柜员 |
数据库 |
事件序列24 |
查询历史交易 |
客户 |
银行柜员 |
事件序列25 |
查询交易表某时间段全部信息 |
银行柜员 |
数据库 |
3.2.2 序列图
3.3 状态图
3.3.1 状态表
状态变迁编号 |
开始状态 |
到达状态 |
触发事件 |
状态变迁1 |
INIIT |
UNUSED |
初始化 |
状态变迁1 |
UNUSED |
OPEN |
办卡 |
状态变迁1 |
OPEN |
UNUSED |
销卡 |
状态变迁1 |
OPEN |
LOST |
挂失 |
状态变迁1 |
LOST |
OPEN |
解挂 |
状态变迁1 |
LOST |
TERMINATE |
卡丢失 |
3.3.2 状态图
第四部分 数据库设计
4.1 全局ER图
4.1.1 各实体集及其属性图集及其属性图实体集及其属性图实体集及其属性图
4.1.1.1 银行柜员实体集
4.1.1.2 客户实体集
4.1.1.3 银行卡实体集
4.1.1.4 分行实体集
4.1.2 实体集之间联系图
4.2 全局表结构
说明:
英文名:30个字符以内,符合一般标识符命名规范,不用关键字或保留字及特殊符号。
中文名:30个汉字以内,不要用空格。
主键:组成主键字段英文名列表,如果有多个字段,用半角逗号隔开。
类型:char,varchar2,date,number取其一。
宽度:char最大2000,varchar2最大4000,date不填,number最大38(有效数字个数),宽度以够用为好。
空否:如果不能为空,填N,可以为空,不填。
缺省值:字符型用单引号包围,其它类型不必。
唯一:如果所有记录在此字段上分量没有重复值,填Y,无此限制,不填。
参照:如果此字段信息必须参照其它表(包括自己)的某字段,则其上应该定义外键,
填参照表英文名(参照字段英文名),如果不是,不填。
备注:需要特别说明的信息,比如取值范围,特殊要求等,如没有,不填。
表4‑1表名列表
编号 |
表中文名 |
表英文名 |
备注 |
1 |
客户表 |
Client |
存储客户的信息 |
2 |
银行卡总表 |
TotalCard |
存储所有分行银行卡信息 |
3 |
银行卡表 |
Card |
存储某客户银行卡的信息 |
4 |
柜员表 |
Teller |
存储柜员的信息 |
5 |
分行表 |
SubBank |
存储各个分行的信息 |
交易表 |
Trade |
存储各种交易信息 |
以下列出每个表的明细信息
表4‑2 Client(客户表)
编号 |
中文名 |
英文名 |
类型(宽度) |
空否 |
缺省值 |
唯一 |
参照 |
备注 |
1 |
身份证号 |
CLIENTID |
Char(18) |
N |
|
Y |
|
|
2 |
姓名 |
CLIENTNAME |
Varchar2(10) |
N |
|
|
|
|
3 |
手机号 |
CLIENTTELNO |
Char(11) |
N |
|
|
|
|
表4‑3 TotalCard(银行卡总表)
编号 |
中文名 |
英文名 |
类型(宽度) |
空否 |
缺省值 |
唯一 |
参照 |
备注 |
1 |
银行卡号 |
CARDID |
Char (19) |
N |
|
Y |
|
|
2 |
状态 |
CARDSTATUS |
Char (1) |
N |
UNUSED |
|
|
|
3 |
分行编号 |
SUBBANKID |
Char (4) |
N |
|
|
Y |
|
表4‑4 Card(银行卡表)
编号 |
中文名 |
英文名 |
类型(宽度) |
空否 |
缺省值 |
唯一 |
参照 |
备注 |
1 |
银行卡号 |
CARDID |
Char(19) |
N |
|
Y |
|
|
2 |
状态 |
CARDSTATUS |
Char(1) |
N |
OPEN |
|
|
|
3 |
银行卡密码 |
CARDPS |
Char(6) |
N |
|
|
|
|
4 |
余额 |
CARDBALANCE |
Float(10) |
N |
|
|
|
|
5 |
开户时间 |
CARDCREATETIME |
Date |
N |
|
|
|
|
6 |
身份证号 |
CLIENTID |
Char(18) |
N |
|
|
Y |
|
7 |
身份证号 |
TELLERID |
Char(18) |
N |
|
|
Y |
|
8 |
分行编号 |
SUBBANKID |
Char(4) |
N |
|
|
Y |
|
表4‑5 Teller(柜员表)
编号 |
中文名 |
英文名 |
类型(宽度) |
空否 |
缺省值 |
唯一 |
参照 |
备注 |
身份证号 |
TELLERID |
Char(18) |
N |
|
Y |
|
|
|
2 |
柜员姓名 |
TELLERNAME |
Varchar2(10) |
N |
|
|
|
|
3 |
柜员密码 |
TELLERPS |
Char(6) |
N |
|
|
|
|
4 |
分行编号 |
SUBBANKID |
Char(4) |
N |
|
|
Y |
|
表4‑6 SubBank(分行表)
编号 |
中文名 |
英文名 |
类型(宽度) |
空否 |
缺省值 |
唯一 |
参照 |
备注 |
分行编号 |
SUBBANKID |
Char(4) |
N |
|
Y |
|
|
|
2 |
分行名称 |
SUBBANKNAME |
Varchar2(12) |
N |
|
|
|
|
3 |
分行地址 |
SUBBANKADDR |
Varchar2(20) |
N |
|
|
|
|
表4‑7 Trade(交易表)
编号 |
中文名 |
英文名 |
类型(宽度) |
空否 |
缺省值 |
唯一 |
参照 |
备注 |
1 |
交易编号 |
TRADEID |
Char(6) |
N |
|
Y |
|
|
2 |
源银行卡号 |
FROMCARDID |
Char(19) |
N |
|
Y |
Y |
|
3 |
目标银行卡号 |
TOCARDID |
Char(19) |
N |
|
|
Y |
|
4 |
交易时间 |
TRADETIME |
Date |
N |
|
|
|
|
5 |
交易金额 |
TRADEMONEY |
Float(10) |
N |
|
|
|
|
6 |
手续费 |
TRADEFACTORAGE |
Float(10) |
N |
|
|
|
无手续费以0.00计入 |
7 |
摘要 |
TRADEDIGEST |
Varchar2(20) |
|
|
|
|
|
第五部分 程序界面详细设计与说明
5.1 柜员登录组件
5.1.1 柜员登录界面
5.1.1.1 呼和浩特分行柜员登录
图5-1 呼和浩特分行柜员登录界面
5.1.1.2 北京分行柜员登录
图5-2 北京分行柜员登录界面
5.1.1.3 哈尔滨分行柜员登录
图5-3 哈尔滨分行柜员登录界面
5.1.2 组件描述
5.1.2.1 目的和意义
本组件用于柜员登录,系统设置呼和浩特分行、北京分行、哈尔滨分行三地,每个分行有对应银行柜员。柜员通过本人身份证号和登录密码进行登录。
5.1.2.2 特色说明
本组件不需要选择分行登录地点,直接通过柜员身份证号确定柜员所在分行、客户办理业务分行。
5.1.3 功能描述
输入-处理-输出采用IPO图表示如下:
图5-4 柜员登录组件IPO图
5.1.4 运行结果
点击登录后,通过柜员身份证号查询数据库,登录成功进入录入客户信息界面,登录失败显示登录失败界面。
5.1.4.1 柜员登录成功
5.1.4.2 柜员登录失败
5.2 客户信息录入组件
5.2.1 组件界面
5.2.2 组件描述
5.2.2.1 目的和意义
本组件作为客户录入信息使用。
5.2.2.2 特色说明
当柜员登录成功后,跳转到客户信息录入界面。点击提交,查询数据库中是否存在此客户信息,如果存在,提取出客户信息,如果不存在,插入客户信息,并将插入的客户信息提取出来。
5.2.3 功能描述
输入-处理-输出采用IPO图表示如下:
5.2.4 运行结果
5.3 主页面组件
5.3.1 组件界面
5.3.2 组件描述
5.3.2.1 目的和意义
本组件作为银行账户管理系统的主界面。
5.3.2.2 特色说明
主界面功能包括:办卡、修改密码、挂失/解挂、补卡、销卡、存款、取款、查询余额、查询交易历史、转账。
5.3.3 运行结果
进入各功能页面。
5.4 办卡组件
5.4.1 组件界面
5.4.2 组件描述
5.4.2.1 目的和意义
本组件用于银行柜员为客户办卡使用。
5.4.2.2 特色说明
银行柜员的身份证号与银行分行编号在数据库中已绑定,柜员用身份证号登录,意味着客户在某地分行办理业务。当柜员点击办卡后,出现该分行所有的银行卡列表,银行卡状态为USED为已经办理的卡,状态为UNUSED的为未办理的卡。如果点击状态为USED的卡的“录入密码”,录入密码后出现“此卡已使用,不能选择!返回办卡页面”。如果点击状态为UNUSED的卡的“录入密码”,录入密码后出现“客户信息与银行卡信息绑定页面”。
5.4.3 功能描述
输入-处理-输出采用IPO图表示如下:
5.4.4 运行结果
5.4.4.1 点击银行卡状态为“USED”的银行卡的“录入密码”:
点击“确认”:
5.4.4.2 点击银行卡状态为“UNUSED”的银行卡的“录入密码”:
点击“确认”:
5.5 修改密码组件
5.5.1 组件界面
点击“修改密码”:
5.5.2 组件描述
5.5.2.1 目的和意义
本组件用于客户修改银行卡密码。
5.5.2.2 特色说明
此组件界面会列出该客户所有的银行卡,点击需要修改密码的银行卡信息所在条目的“修改密码”,输入该银行卡的原密码、新密码及确认密码,点击“确认”,提示“该银行卡密码修改成功”。如果输入的新密码和确认密码不同,点击“确认”,提示“该银行卡新密码与确认密码不一致”。如果输入的原密码与数据库中的密码不同,提示“原密码输入错误”。
5.5.3 功能描述
输入-处理-输出采用IPO图表示如下:
5.5.4 运行结果
5.5.4.1 银行卡密码修改成功
5.5.4.2 新密码与确认密码不一致
5.5.4.3 原密码输入错误
5.6 挂失/解挂组件
5.6.1 组件界面
5.6.2 组件描述
5.6.2.1 目的和意义
本组件用于客户对银行卡挂失或者解挂。
5.6.2.2 特色说明
当银行卡状态为“OPEN”,点击“挂失/解挂”,此时使用挂失功能,提示“该银行卡挂失成功”。当银行卡状态为“LOST”,点击“挂失/解挂”,此时使用解挂功能,提示“该银行卡解挂成功”。
5.6.3 功能描述
输入-处理-输出采用IPO图表示如下:
5.6.4 运行结果
5.6.4.1 挂失成功:
5.6.4.2 解挂成功:
5.7 补卡组件
5.7.1 组件界面
5.7.2 组件描述
5.7.2.1 目的和意义
本组件用于客户原卡不能使用,来银行柜员处补卡所用。
5.7.2.2 特色说明
组件界面显示用户所有银行卡信息,在需要补卡的银行卡信息条目上点击“补卡”,提示“该银行卡销卡成功,请重新办卡”,点击“办卡”,跳转到办卡界面,如前所述。
5.7.3 功能描述
输入-处理-输出采用IPO图表示如下:
5.7.4 运行结果
销户成功:
重新办卡:
5.8 销卡组件
5.8.1 组件界面
5.8.2 组件描述
5.8.2.1 目的和意义
本组件用于客户在银行柜员处办理销卡所用。
5.8.2.2 特色说明
在销卡界面显示银行卡信息,包括银行卡余额,点击“销卡”,提示已向用户返回余额,销户成功。
5.8.3 功能描述
输入-处理-输出采用IPO图表示如下:
5.8.4 运行结果
5.9 存款组件
5.9.1 组件界面
点击“选择”:
5.9.2 组件描述
5.9.2.1 目的和意义
本组件为客户到柜台存款所用。
5.9.2.2 特色说明
在银行卡存款页面,显示用户所有银行卡信息,在需要存款的银行卡条目上点击“选择”,进入存款金额填写页面,输入存款金额,点击“存款”,显示存款成功,并显示余额。如果是异地存款(即银行卡所属分行编号与为客户办理业务的柜员所属分行编号不同),则显示余额和手续费。
5.9.3 功能描述
输入-处理-输出采用IPO图表示如下:
5.9.4 运行结果
本地存款:
异地存款:
5.10 取款组件
5.10.1 组件界面
5.10.2 组件描述
5.10.2.1 目的和意义
本组件为客户在柜台取款所用。
5.10.2.2 特色说明
取款界面显示客户所有银行卡信息,在需要取款的银行卡信息条目上点击“选择”,进入“取款金额填写”界面,输入取款金额,点击“取款”,提示取款成功,并显示余额。
如果是异地取款(即银行卡所属分行编号与为客户办理业务的柜员所属分行编号不同),则显示余额和手续费。
5.10.3 功能描述
输入-处理-输出采用IPO图表示如下:
5.10.4 运行结果
本地取款:
异地取款:
5.11 查询余额组件
5.11.1 组件界面
5.11.2 组件描述
5.11.2.1 目的和意义
本组件为客户查询余额所用。
5.11.2.2 特色说明
点击“查询余额”,会显示出用户所有的银行卡余额信息。
5.11.3 功能描述
输入-处理-输出采用IPO图表示如下:
5.12 查询历史交易组件
5.12.1 组件界面
5.12.2 组件描述
5.12.2.1 目的和意义
本组件用于客户在柜台查询历史交易信息。
5.12.2.2 特色说明
查询历史交易信息页面显示客户所有的银行卡信息。可以查询指定银行卡的“近一周”、“近一月”、“近三月”、“近半年”、“近一年”的信息。还可以查询指定银行卡、指定起始日期和结束日期的历史交易信息。
5.12.3 功能描述
输入-处理-输出采用IPO图表示如下:
5.12.4 运行结果
近一周查询结果:
近一月查询结果:
近三月查询结果:
近半年查询结果:
近一年查询结果:
指定转账银行卡、转账起始日期、结束日期查询历史交易信息:
查询结果:
5.13 转账组件
5.13.1 组件界面
5.13.2 组件描述
5.13.2.1 目的和意义
本组件为客户转账所用。
5.13.2.2 特色说明
点击“转账”,核对转账信息。如本次转账为本地转账,转账手续费为0元;如本次转账为异地转账,转账手续费为转账金额的0.1%;如转账手续费小于1元,按1元计;如转账手续费大于50元,按50元计。点击“确认转账”,显示转账成功界面。
5.13.3 功能描述
输入-处理-输出采用IPO图表示如下:
5.13.4 运行结果
本地转账信息确认界面:
异地转账信息确认界面:
转账成功界面:
第六部分 系统后续工作说明
本项目存在以下不足:
1、并未实现分布式数据库,连接的仍是本地集中式数据库。原因如下:
(1)分布式数据库原理理解,但SQL脚本代码部分看不懂。
(2)连接老师服务器上的分布式数据库连接方式不清楚,存在以下问题:
<1>连接集中式Oracle需要额外安装驱动,分布式需要吗?
<2>连接分布式Oracle代码与连接集中式Oracle代码相同吗?
(3)连接分布式Oracle数据库后,需要对程序进行整体改造及调试,还不清楚做法。
2、在办卡、转账时,应向数据库中存入包括日期、时间在内的具体时间,而不是仅包含日期,这样在数据库中存的时间就是日期+00:00:00的时间,不合理。
3、银行卡余额、存取款金额、手续费应为浮点数保留两位小数,我没有保留。要保留需要修改数据库相应字段,如float(10,2),意为最多保存10位有效数字,小数点后保留两位。
4、Oracle和JSP页面之间使用Form表单提交中文内容已经解决,数据库中存的是中文,但JSP页面之间通过超链接传递中文参数仍是乱码??????,这个问题到现在也没有解决。
5、个人电脑上安装Oracle 10g数据库的时区设置问题,当操作系统是(UTC +8:00 北京,重庆,香港特别行政区,乌鲁木齐)时区时,emd.properties这个文件的agentTZRegion=Asia/Chungking设置报错,只有当将操作系统时区调整成(UTC 世界协调时)时区时,emd.properties这个文件的agentTZRegion=GMT,才不会报错,OracleListener服务才可以启动。
6、未实现本科时曾实现的《考勤管理系统》界面的样式。原因如下:
(1)本科项目我只负责编码实现,界面美化由其他小组成员完成,我就没有弄清楚。
(2)想弄清楚需要学会CSS+DIV+JavaScript+Ajax,这还需要后续学习。
由此总结:每做一点,都需要把相关内容彻底弄懂,有一点不懂,就受制于人,就是未来的隐患。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131815.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...