银行账户管理系统详细设计说明书

第一部分  引言

 

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最大2000varchar2最4000date不填,number最大38(有效数字个数),宽度以够用为好。

空否:如果不能为空,填N,可以为空,不填。

缺省值:字符型用单引号包围,其它类型不必。

唯一:如果所有记录在此字段上分量没有重复值,填Y,无此限制,不填。

参照:如果此字段信息必须参照其它表(包括自己)的某字段,则其上应该定义外键,

填参照表英文名(参照字段英文名),如果不是,不填。

备注:需要特别说明的信息,比如取值范围,特殊要求等,如没有,不填。

 

表4‑1表名列表

编号

表中文名

表英文名

备注

1

客户表

Client

存储客户的信息

2

银行卡总表

TotalCard

存储所有分行银行卡信息

3

银行卡表

Card

存储某客户银行卡的信息

4

柜员表

Teller

存储柜员的信息

5

分行表

SubBank

存储各个分行的信息

6

交易表

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(柜员表)

编号

中文名

英文名

类型(宽度)

空否

缺省值

唯一

参照

备注

1

身份证号

TELLERID

Char(18)

N

 

Y

 

 

2

柜员姓名

TELLERNAME

Varchar2(10)

N

 

 

 

 

3

柜员密码

TELLERPS

Char(6)

N

 

 

 

 

4

分行编号

SUBBANKID

Char(4)

N

 

 

Y

 

表4‑6 SubBank(分行表)

编号

中文名

英文名

类型(宽度)

空否

缺省值

唯一

参照

备注

1

分行编号

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,这还需要后续学习。

 

由此总结:每做一点,都需要把相关内容彻底弄懂,有一点不懂,就受制于人,就是未来的隐患。

相关推荐
项目名称:Bank Account Management System 银行账户管理系统 简称BAM 项目描述:这是一个基于C/S结构的银行账户在线管理系统,用户可以通过ATM终端界面来操作自己的银行账户. 项目实施方式:这是一个同步练习,随着达内CoreJava课程的深入,这个项目将趋于完整,学员的任务是随着知识点的深入,完成每一个进阶的项目要求. 项目一 练习1:(面向对象基础语法) 写一个账户类(Account),属性: id:账户号码 长整数 password:账户密码 name:真实姓名 personId:身份证号码 字符串类型 email:客户的电子邮箱 balance:账户余额 方法: deposit: 存款方法,参数是double型的金额 withdraw:取款方法,参数是double型的金额 构造方法: 有参和无参,有参构造方法用于设置必要的属性 练习2:(封装) 将Account类作成完全封装,注意:要辨别每个属性的set/get方法是否需要公开 练习3:(继承,多态) 银行的客户分为两类,储蓄账户(SavingAccount)和信用账户(CreditAccount),区别在于储蓄账户不允许透支,而信用账户可以透支,并允许用户设置自己的透支额度. 注意:CreditAccount需要多一个属性 ceiling 透支额度 为这两种用户编写相关的类 同时要求编写Bank类,属性: 1.当前所有的账户对象的集合,存放在数组中 2.当前账户数量 方法: 1.用户开户,需要的参数:id,密码,密码确认,姓名,身份证号码,邮箱,账户类型(int),返回新创建的Account对象 2.用户登录,参数:id,密码 返回Account对象,提示 用s1.equals(s2)判断s1和s2两个字符串内容是否相等 3.用户存款,参数:id,存款数额,返回修改过的Account对象 4.用户取款,参数:id,取款数额,返回修改过的Account对象 5.设置透支额度 参数:id,新的额度 ,返回修改过的Account对象.这个方法需要验证账户是否是信用账户 用户会通过调用Bank对象以上的方法来操作自己的账户,请分析各个方法需要的参数 另外,请为Bank类添加几个统计方法 1.统计银行所有账户余额总数 2.统计所有信用账户透支额度总数 写个主方法测试你写的类 项目二 练习4:(语言高级特性,三个修饰符) 1.修改Account类,银行用户的账号(id)是自动生成的,初始值为100000,第一个开户的用户id为100001,第二个为100002,依此类推. 提示:构造对象的时候采用static属性为id赋值 2.对于Account类,有两个方法,存款方法和取款方法,请修改这两个方法. 存款方法改为不允许子类修改 取款方法根据不同的子类而不同,因此,改为抽象方法,在两个子类中分别实现 3.将Bank类作成单例 项目三 练习5:(接口) 为SavingAccount和CreditAccount各自添加一个子类 LoanSavingAccount类:用户可以贷款,不可以透支 LoanCreditAccount类:用户可以贷款,可以透支 说明:贷款和透支是不一样的,透支指的是账户余额小于0,而贷款用户需要一个贷款额的属性. 在ATM机上,用户可以选择贷款,也可以选择还贷款,而还贷款就是要把账户余额上的资金转到贷款额上 例如:用户余额10000元,贷款额100000元,用户可以选择还款5000元,则用户余额变为5000,贷款额变为95000元. 利用接口来抽象出LoanSavingAccount类和LoanCreditAccount类的共性 接口中的方法: requestLoan:贷款 payLoan:还贷 getLoan:获取用户贷款总额 为Bank类添加三个方法, 贷款:参数 id,贷款额,返回修改过的Account对象 还贷款:参数 id,还款额,返回修改过的Account对象 统计所有账户贷款的总数 练习6:(Object) 为Account类及其子类添加toString方法和equals方法 项目四 练习7:(Exception) 为BAM添加几个异常类 BalanceNotEnoughException :用于取钱的时候余额不足的情况(包括账户余额超过透支额的情况) RegisterException:用于开户异常的情况,例如密码两次输入不一致等情况 LoginException:用户登录异常的情况,例如id错误,密码错误 LoanException:贷款额不能为负数,如果用户试图将贷款额置为负数,则会抛出这个异常 以上四个异常类有一个共同的父类 BusinessException 并妥善的处理这些异常 项目五 练习8:(集合) 改写Bank类,采用集合的方式来管理多个Account对象 为Bank类添加一个方法 打印所有用户的总资产排名 说明:一个用户可能会有多个账号,以身份证号为准.总资产指多个账户余额的总和,不需要考虑贷款账户的贷款额 项目六 练习9:(GUI) 为BAM添加用户界面 需要以下几个类: BAMClient 其中会包含一个Frame,这是用户主界面 MainPanel:主界面,用户可以选择开户或者登录 RegisterPanel:用户开户具体用到的界面 LoginPanel:用户登录需要的界面 BusinessPanel:界面上会显示账户的功能 至少包括存款和取款,对于可透支的用户,还允许用户修改透支额度,对于贷款用户,还允许用户贷款和还贷款 注:本练习的界面布局不做要求,请阅读现有代码,添加事件处理代码 提示:在开户或者登录之后都会跳到BusinessPanel,而用户点击了交易之后,界面停留在BusinessPanel 要随时注意在BusinessPanel上根据数据的变化更新显示信息 项目七 在该加资源保护的地方加上,没有标准 项目八 练习10:(I/O) 修改Bank类,账户信息会采用对象序列化的方式存放在文件中.当Bank对象生成的时候会读取文件,设置账户集合.当账户信息改变的时候,会随时更新文件 设计一个FileDAO类(文件数据访问对象),负责对文件的访问,包括存放账户,提取账户等方法,在Bank类中,会通过FileDAO对象来访问文件 注意:如果已有的账户对象会存在文件中,那么为新的账户对象分配id的做法也应相应的改变,过去的用static属性的做法不再合适,应该改为,把下一个可用的id存放在一个文件中,每创建一个新对象的时候都会读取这个文件,获得新对象的id,并且修改文件中的id,使其加1.这个工作可以放在Account类的构造方法中 项目九 练习11:(网络) 在现有的BAM中,用户是通过界面直接访问Bank对象的,将其改为C/S结构,由界面充当客户端,通过TCP协议访问服务器端的Bank对象. 提示:客户端和服务器端需要通过对象来传递信息,这里会使用对象序列化技术.
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页