BAM,即银行账户管理系统,是一款功能全面的经典软件。它提供用户友好的界面及详细的源代码,便于学习与二次开发。
项目名称:银行账户管理系统(BAM)
项目描述:
这是一个基于客户端-服务器架构的在线银行账户管理系统,用户可以通过ATM终端界面来操作自己的银行账户。
项目实施方式:
本练习与达内CoreJava课程同步进行,在学习过程中逐步完善该项目。学员的任务是随着知识点的学习深入,完成每一阶段的具体任务要求。
### 项目一
#### 练习1:面向对象基础语法
编写一个账户类(Account),包括以下属性和方法:
- 属性:
- id: 账户号码 (长整数)
- password: 账户密码
- name: 真实姓名
- personId: 身份证号码 (字符串类型)
- email: 客户的电子邮箱
- balance: 账户余额
- 方法:
- deposit:存款方法,参数为double类型的金额。
- withdraw:取款方法,参数为double类型的金额。
构造函数要求实现有参和无参两种形式。其中,有参构造函数用于设置必要的属性值。
#### 练习2: 封装
将Account类设计成完全封装的形式,并注意区分每个属性的get/set方法是否需要对外公开。
#### 练习3:继承与多态
银行客户分为两类:储蓄账户(SavingAccount)和信用账户(CreditAccount)。两者的区别在于,储蓄账户不允许透支,而信用账户可以设定并使用自己的透支额度。
- 为这两种用户编写相关的类;
- 同时需要创建一个Bank类,并实现以下方法:
- 用户开户:参数包括id、密码(两次输入确认)、姓名、身份证号码、邮箱和账户类型(int),返回新创建的Account对象;
- 用户登录:根据提供的用户名和密码,返回对应的Account对象。注意使用s1.equals(s2)来判断两个字符串是否相等。
- 存款操作
- 取款操作
- 设置透支额度(仅信用账户可用)
此外,请为Bank类添加一些统计方法:
- 统计所有账户余额总数;
- 统计所有信用账户的总透支额度。
编写主函数来测试创建的所有类的功能。
### 项目二
#### 练习4:高级特性与修饰符
1. 修改Account类,使得银行用户的账号(id)自动生成。初始值为100000, 第一个开户用户id为100001。
2. 对于Account类中的存款方法和取款方法进行修改:
- 存款不允许子类更改;
- 取款根据不同的账户类型而有所不同,因此将其改为抽象方法,在两个子类中分别实现。
3. 将Bank类设计成单例模式的实例。
### 项目三
#### 练习5:接口
为SavingAccount和CreditAccount添加各自的扩展子类:
- LoanSavingAccount: 用户可以贷款但不能透支;
- LoanCreditAccount: 允许用户进行贷款及还贷操作(注意,这与账户余额不足情况下的透支不同)。
在ATM界面上,应提供选项让用户选择是否要申请或偿还贷款。例如:如果用户的存款为10,000元而其贷款额度是95,000元,则用户可以选择还款5,000元,此时账户余额变为5,000元,同时贷款额减少至94,500元。
在接口中抽象出LoanSavingAccount和LoanCreditAccount的共同特性:
- requestLoan: 贷款申请;
- payLoan: 还贷操作;
- getLoan: 获取用户的总贷款金额;
为Bank类添加以下方法:
- 提供贷款服务
- 支持还款功能
- 统计所有账户的总贷款额。
### 项目四
#### 练习6:Object相关特性
在Account及其子类中实现toString和equals方法。
### 项目五
#### 练习7: 异常处理
为BAM添加一些自定义异常:
- BalanceNotEnoughException :当账户余额不足时抛出
- RegisterException : 开户过程中出现的错误,如密码不匹配等。
- LoginException:登录失败的情况(例如id或密码输入有误)。
- LoanException: 贷款金额不能为负数。
这些异常类有一个共同父类BusinessException。妥善处理上述情况以确保程序健壮性。
### 项目六
#### 练习8:集合
使用集合来管理Bank中的多个Account对象,并添加一个方法用于显示所有用户的总资产排名(总资产指用户名下的账户余额总和,不考虑贷款额度)。
### 项目七
在适当位置加入资源保护机制以确保数据安全。没有具体标准说明如何实现