项目名称:Bank Account Management System 银行账户管理系统 简称BAM
项目描述:这是一个基于C/S结构的银行账户在线管理系统,用户可以通过ATM终端界面来操作自己的银行账户.
项目实施方式:这是一个同步练习,随着CoreJava课程的深入,这个项目将趋于完整,学员的任务是随着知识点的深入,完成每一个进阶的项目要求.练习1:(面向对象基础语法)
写一个账户类(Account),属性:
id:账户号码 长整数
password:账户密码 字符串类型
name:真实姓名 字符串类型
identity:身份证号码 字符串类型
email:客户的电子邮箱 字符串类型
balance:账户余额 double方法:
deposit: 存款方法,参数是double型的金额
withdraw:取款方法,参数是double型的金额构造方法:
有参和无参,有参构造方法用于设置必要的属性
主方法测试你写的类练习2:(封装)
将Account类作成完全封装练习3:(继承,多态)
银行的客户分为两类,储蓄账户(SavingAccount)和信用账户(CreditAccount),区别在于储蓄账户不允许透支,而信用账户可以透支,并允许用户设置自己的透支额度.
注意:CreditAccount需要多一个属性 ceiling 透支额度
为这两种用户编写相关的类
同时要求编写Bank类,属性:
1.当前所有的账户对象的集合,存放在数组中 
2.当前账户数量方法:
1.用户开户,需要的参数:id,密码,密码确认,姓名,身份证号码,邮箱,账户类型,返回新创建的Account对象,提示:用s1.equals(s2) 可以比较s1,s2两个字符串的值是否相等.账户类型是一个整数,为0的时候表示储蓄账户,为1的时候表示信用账户
2.用户登录,参数:id,密码 返回Account对象
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元.  利用接口(Loanable)来抽象出LoanSavingAccount类和LoanCreditAccount类的共性
接口中的方法:
requestLoan(double money):贷款
payLoan(double money):还贷
double 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对象来访问文件public class FileDAO{
public Map readMap(){
...
}
public void writeMap(Map map){
...
}
}注意:如果已有的账户对象会存在文件中,那么为新的账户对象分配id的做法也应相应的改变,过去的用static属性的做法不再合适,应该改为,把下一个可用的id存放在一个文件中,每创建一个新对象的时候都会读取这个文件,获得新对象的id,并且修改文件中的id,使其加1.这个工作可以放在Account类的构造方法中练习11:(网络)
在现有的BAM中,用户是通过界面直接访问Bank对象的,将其改为C/S结构,由界面充当客户端,通过TCP协议访问服务器端的Bank对象.
提示:客户端和服务器端需要通过对象来传递信息,这里会使用对象序列化技术.
练习12:(OOAD)
试画出BAM项目的用例图,类图,时序图练习13:(设计模式)
修改原有BAM项目代码
未来BAM项目的数据源可能会移植到数据库中,DAO可能随时会更改,因此需要允许配置数据源
抽象出DAO接口,采用简单工厂模式,写一个DaoFactory类,根据配置文件获得DAO对象分析现有的项目代码是否符合MVC模式的要求练习14:(XML)
现有的配置文件用的是普通的文本文件,请改写为XML文件,并通过DOM和SAX两种方式之一读取配置文件
有可能的话,可以把账户信息也写在XML文件里,并用DAO去访问XML文件,即,为DAO接口添加一个实现类XMLDAO