背景
今天写一篇 Java 入门的简单练习题,题目要求如下:
分析功能绘制类
这里需要抽象两个类,一个银行管理系统类,一个卡片类,类图结构:
计思路:
- BankManager 作为管理类,提供开卡、存款、取款、转账、查询、退出等功能;
- Card 是底层的功能类,包含卡号、类型、余额等属性,提供查询、存款、取款、转账方法。
Card 类定义
Card 类代码如下:
import java.math.BigDecimal;
public class Card {
private String id;//卡号
private String type;//卡类型:借记卡、贷记卡
private BigDecimal balance = BigDecimal.ZERO;//卡余额
public Card(String id, BigDecimal balance) {
super();
this.id = id;
this.balance = balance;
}
//查询余额
public BigDecimal queryBalance() {
return balance;
}
//转账
public boolean transfer(Card toCard,BigDecimal amount) {
//参数判断
if(toCard == null || toCard.getBalance()==null || amount == null || amount.compareTo(BigDecimal.ZERO)<=0) {
System.out.println("参数错误!");
return false;
}
if(amount.compareTo(balance)>=0) {
System.out.println("账户余额不足!");
return false;
}
//目标卡加上金额
toCard.setBalance(toCard.getBalance().add(amount));
//当前卡减掉金额
this.setBalance(getBalance().subtract(amount));
System.out.println("转账成功!");
return true;
}
//取款
public boolean withdraw(BigDecimal amount) {
if(getBalance()==null || amount == null ||amount.compareTo(BigDecimal.ZERO)<=0 ) {
System.out.println("参数错误!");
return false;
}
if(amount.compareTo(balance)>=0) {
System.out.println("账户余额不足!");
return false;
}
//当前卡减掉金额
this.setBalance(getBalance().subtract(amount));
System.out.println("取款成功!");
return true;
}
//取款
public boolean save(BigDecimal amount) {
if(amount == null || amount.compareTo(BigDecimal.ZERO)<=0 ) {
System.out.println("参数错误!");
return false;
}
//当前卡加上金额
this.setBalance(getBalance().add(amount));
System.out.println("存款成功!");
return true;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public BigDecimal getBalance() {
return balance;
}
public void setBalance(BigDecimal balance) {
this.balance = balance;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
BankManager 类定义
import java.math.BigDecimal;
import java.util.Scanner;
public class BankManager {
private Card card;
//开卡
public Card createCard() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输出开卡卡号:");
String id = scanner.nextLine();
while(id == null || "".equals(id)) {
System.out.println("请输出开卡卡号:");
id = scanner.nextLine();
}
System.out.println("请输出存入金额:");
BigDecimal amount = scanner.nextBigDecimal();
Card newCard = new Card(id,amount);
scanner.close();
this.card = newCard;
return newCard;
}
public void saveMoney(BigDecimal amount) {
this.card.save(amount);
}
public void withdrawMoney(BigDecimal amount) {
this.card.withdraw(amount);
}
public void transferMoney(Card to,BigDecimal amount) {
this.card.transfer(to,amount);
}
public void queryBalance() {
System.out.println(this.card.queryBalance());
}
public void exit() {
System.out.println("操作完成,推出系统!");
this.card = null;
}
public static void main(String[] args) {
BankManager manager = new BankManager();
manager.createCard();
manager.queryBalance();
manager.saveMoney(new BigDecimal(10));
manager.withdrawMoney(new BigDecimal(100));
manager.transferMoney(null, new BigDecimal(10000));
manager.exit();
}
}
编程启示录
首先,这里的银行管理类只是业务管理类,包含一个 Card 类的实例,然后只需要直接调用候着的业务方法;其次,Card 类的业务方法中参数校验必须符合真实的业务场景,比如转账金额不能小于或等于 0 ,余额不足不允许转账等。