Java 实现银行卡功能练习题

背景

今天写一篇 Java 入门的简单练习题,题目要求如下:
在这里插入图片描述

分析功能绘制类

这里需要抽象两个类,一个银行管理系统类,一个卡片类,类图结构:
在这里插入图片描述
计思路:

  1. BankManager 作为管理类,提供开卡、存款、取款、转账、查询、退出等功能;
  2. 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 ,余额不足不允许转账等。

猜你喜欢

转载自blog.csdn.net/wojiushiwo945you/article/details/105592865