Hi大家好,这是我的第一篇博客,前段时间在学Java,给大家分享一道综合性练习题,所以废话少说上代码!!!
银行账户管理系统
项目名称
:Bank Account Management System
银行账户管理系统简称
BAM
项目描述
:
这是一一个银行账户管理系统
,
用户可以操作自己的银行账户
.
项目实施方式
:
这是一个同步练习
,
随着
Java
课程的深入
,
这个项目将趋于完整
,
学员的任务是随着知识点的深入,完成 每一个进阶的项目要求。
1.
账户类代码
public class Account {
private long id;
private static long pid; //用来分配账号的id
private String password;
private String name;
private String personId;
private double balance;
public Account() {
}
public Account(long id, String password, String name, String personId, double balance) {
this.id = id;
this.password = password;
this.name = name;
this.personId = personId;
this.balance = balance;
}
//成员方法
public double deposit(double money) {
balance+=money;
return balance;
}
//取款
public boolean withdraw(double money) {
if (balance>money) {
balance-=money;
return true;
}
else {
System.out.println("取款数目过大");
return false;
}
}
//练习2:封装
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPersonId() {
return personId;
}
public void setPersonId(String personId) {
this.personId = personId;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
2. 信用类账户和储蓄类账户 继承账户类
父类有参数的方法不会自动继承,在子类的构造方法中可以用super(参数)来调用父类构造方法
package entity;
/*
信用账户
*/
public class CreditAccount extends Account {
public CreditAccount(long id,String name,String personId,String password,double balance) {
super(id, password, name, personId, balance);
}
//取款,对父类方法的重写
//信用账户可以透支
@Override
public boolean withdraw(double money) {
if (money>super.getBalance()+10000) {
//取钱透支超过10000元
return false;
}else {
//将余额中的钱减少
super.setBalance(super.getBalance()-money);
return true;
}
}
}
package entity;
/*
储蓄账户
*/
public class SavingAccount extends Account {
public SavingAccount(long id,String name,String personId,String password,double balance) {
super(id, password, name, personId, balance);
}
@Override
public boolean withdraw(double money) {
if (money>super.getBalance()){
return false;
}else {
super.setBalance(super.getBalance()-money);
return true;
}
}
}
Bank类代码
package 银行账户管理系统.biz;
import com.sun.source.tree.IfTree;
import entity.Account;
import entity.CreditAccount;
import entity.SavingAccount;
/*
银行类
1.当前所有账户对象的集合,存放在数组中
2.当前账户数量
方法:
1.用户开户,需要的参数: id,密码,密码确认,姓名,身份证号码,账户类型,返回新创建的Account对象的账号
2.用户登录,参数:id,密码 返回登陆账户的账号
3.用户存款,参数:id,存款数额,返回void
4.用户取款,参数:id,取款数额,返回void
5.查询余额,参数:id,返回该账户的余额double
用户会通过调用Bank对象以上的方法来操作自己的账户
*/
public class Bank {
//当前所有的账户对象的集合,存放在数组中,对数组声明并初始化
private Account accounts[] = new Account[20];//账户集合
private int number; //账户数目
public Bank() {
accounts = new Account[20];
number = 0;
}
private Account selectAccountById(long id) {
Account acu=null;
for (int i=1;i<accounts.length;i++){
if (accounts[i].getId()==id) {
//根据id找到用户 如果从数组中找到相应的卡号和密码,则返回整个对象
acu=accounts[i];
break;
}
}
return acu;
}
//开户方法
public Account openAccount(long id, String pass1, String pass2, String name, String personID, int type) {
//创建一个新帐户
Account acc = null;
//判断两次密码是否一致
if (pass1.equals(pass2)) {
//如果返回为真,则说明密码一致
//账户类型是一个整数,为0的时候表示储蓄账户,为1的时候表示信用账户
if (type == 1) {
acc = new CreditAccount(id, name, pass1, personID, 1);
//刚开卡,可以定义balance=1
}else{acc = new SavingAccount(id, name, pass1, personID, 1);}
return acc;
} else {//如果两次密码不一致,则开卡不成功,返回一个null。
return null;
}
}
//登录
public Account login(long id,String password) {
//遍历数组
Account acu=selectAccountById(id);
if (acu==null) {
return null;
}else {
if (acu.getPassword().equals(password)){
//判断密码是否正确 对了就返回对象
return acu;
}else {return null;}
}
}
//存款
public void saveMoney(long id,double money) {
//直接调用账户类里方法
Account ac=selectAccountById(id);
ac.deposit(money);
}
//取款
public void outputMoney(long id,double money) {
Account ac=selectAccountById(id);
ac.withdraw(money);
}
//查询余额
public double selectMoney(long id){
Account ac=selectAccountById(id);
return ac.getBalance();
}
}
测试页面代码编写思路
1.输出语句主页面编写
2.scanner实现键盘录入数据后,switch循环调用Bank里的方法,当然也可以把主页面编写的方法写在Bank类里,在测试页面里进行调用方法即可。
今天更新就到这里!做的不好的地方请多指教!
版权声明:本文为wuyomhchang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。