功能实现
此案例可以实现简单的,银行卡注册,登录,以及登陆后,实现存钱、取钱(可跨银行)、以及存取操作完成后的查询余额功能。
1.定义一个Bank类,需要定义银行卡类型,容量;
public class Bank {
private BankCard[]cards;
private int size;
//给定银行容量
private final int INITCAPACITY;
public Bank(){
cards = new BankCard[10];
size = 0;
INITCAPACITY = 10;
}
}
2.定义一个bankCard类,定义id,密码(password),以及存、取的钱数;
public class BankCard {
private int id;
private int passwd;
private int money;
public BankCard(int id,int passwd){
this.id =id;
this.passwd = passwd;
this.money = 0;
}
}
3.定义一个ATM类,这里我们定义两个银行,分别在此类中实现银行卡的注册、登录,以及登录成功后的、取、查询余额的功能;
public class ATM {
private Bank bankGS;
private Bank bankNH;
public ATM() {
bankGS = new Bank();
bankNH = new Bank();
}
//此类实现登录,注册银行卡功能
public void operator() {
}
//此类实现1.存钱 2.取钱 3.转账 4.查余额 5.退卡 功能
private void loginSuccessOperator(BankCard card) {
}
代码实现
Bank类:
public class Bank {
private BankCard[]cards;
private int size;
//给定银行容量
private final int INITCAPACITY;
public Bank(){
cards = new BankCard[10];
size = 0;
INITCAPACITY = 10;
}
public BankCard[] getCards(){
return cards;
}
//确保卡容量足够,若不够需要扩容;
private void ensureCapacity(int capacity){
if(capacity == cards.length){
cards = Arrays.copyOf(cards,cards.length+(cards.length>>1));
}
}
public void add(BankCard card){
ensureCapacity(size);
cards[size] = card;
size++;
}
public int getSize(){
return size;
}
}
bankCard类:
public class BankCard {
private int id;
private int passwd;
private int money;
public BankCard(int id,int passwd){
this.id =id;
this.passwd = passwd;
this.money = 0;
}
public int getId() {
return id;
}
public int getPasswd() {
return passwd;
}
//定义 存钱 取钱
public void saveMoney(int money){
this.money+=money;
}
public void withdraw(int money){
//取钱的数要大于初始数
if(this.money >= money) {
this.money -= money;
}else{
System.out.println("取钱失败");
}
}
public int getMoney(){
return money;
}
}
ATM类:
public class ATM {
//定义两个银行 工商 农行
private Bank bankGS;
private Bank bankNH;
public ATM() {
bankGS = new Bank();
bankNH = new Bank();
}
//搜索卡,若找到则返回卡
private BankCard searchCard(Bank bank, int id, int passwd) {
BankCard[] arr = bank.getCards();
for (int i = 0; i < bank.getSize(); i++) {
if (arr[i].getId() == id && arr[i].getPasswd() == passwd) {
return arr[i];
}
}
return null;
}
//登录(在两个银行分别实现登录)
private BankCard login(String bankName, int id, int passwd) {
if (bankName.equals("农业银行")) {
return searchCard(bankNH, id, passwd);
} else if (bankName.equals("工商银行")) {
return searchCard(bankGS, id, passwd);
}
return null;
}
//实现注册功能
private BankCard register(String bankName, int id, int passwd) {
//是否之前以注册了这张卡,若存在则注册失败
BankCard card = new BankCard(id, passwd);
if (bankName.equals("农业银行")) {
//这里需要用到搜索功能类,查找卡
BankCard searchCard = searchCard(bankNH, id, passwd);
if (searchCard != null) {
System.out.println("注册失败");
return null;
}
bankNH.add(card);
}
if (bankName.equals("工商银行")) {
BankCard searchCard = searchCard(bankGS, id, passwd);
if (searchCard != null) {
System.out.println("注册失败");
return null;
}
bankGS.add(card);
}
return card;
}
//操作(登录,注册)
public void operator() {
while (true) {
System.out.println("1.登陆 2.注册 3.退出");
Scanner scanner = new Scanner(System.in);
int chioce = scanner.nextInt();
//退出直接返回
if (chioce == 3) {
return;
}
System.out.println("请输入银行名:农业银行or工商银行");
String bankName = scanner.next();
System.out.println("请输入账号:");
int id = scanner.nextInt();
System.out.println("请输入密码:");
int passwd = scanner.nextInt();
switch (chioce) {
case 1:
//登录
BankCard successCard = login(bankName, id, passwd);
if (successCard != null) {
//登录成功后的功能
loginSuccessOperator(successCard);
} else {
System.out.println("登陆失败");
}
break;
case 2:
//注册
BankCard card = register(bankName, id, passwd);
if (card != null) {
System.out.println("注册成功");
} else {
System.out.println("注册失败");
}
break;
}
}
}
//登录成功后 实现存、取、转账、查余额功能
private void loginSuccessOperator(BankCard card) {
while (true) {
System.out.println("1.存钱 2.取钱 3.转账 4.查余额 5.退卡");
Scanner scanner = new Scanner(System.in);
int chioce = scanner.nextInt();
//退卡,直接返回
if (chioce == 5) {
return;
}
switch (chioce) {
//存钱
case 1:
System.out.println("输入存款金额:");
int money = scanner.nextInt();
card.saveMoney(money);
break;
//取钱
case 2:
System.out.println("输入取款金额:");
money = scanner.nextInt();
card.withdraw(money);
break;
//转账
case 3:
transfer(card);
break;
//查询余额
case 4:
System.out.println("当前余额:" + card.getMoney());
break;
}
}
}
//实现转账功能
private void transfer(BankCard card) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入转账银行名:");
String bankName = scanner.next();
System.out.println("请输入转账用户id:");
int id = scanner.nextInt();
if (bankName.equals("农业银行")) {
BankCard[] arr = bankNH.getCards();
//获取转账用户的id,只有找到才实现转账功能
for (int i = 0; i < bankNH.getSize(); i++) {
if (arr[i].getId() == id) {
System.out.println("转账金额 :");
int money = scanner.nextInt();
//若转账金额足够,此卡钱减少(取钱),转账的卡钱增加(存钱)
if (money <= card.getMoney()) {
card.withdraw(money);
arr[i].saveMoney(money);
} else {
System.out.println("转账失败");
}
}
}
}
if (bankName.equals("工商银行")) {
BankCard[] arr = bankGS.getCards();
for (int i = 0; i < bankGS.getSize(); i++) {
if (arr[i].getId() == id) {
System.out.println("转账金额:");
int money = scanner.nextInt();
if (money <= card.getMoney()) {
card.withdraw(money);
arr[i].saveMoney(money);
} else {
System.out.println("转账失败");
}
}
}
}
}
}
测试代码:
public class TestDome {
public static void main(String[] args) {
ATM atm = new ATM();
atm.operator();
}
}
运行结果:
这里我们注册了一个农业银行 id为111的卡,给其中存入1000,一个工商银行id为222的卡;111的卡转账580给222的卡 最后的查询余额结果(由于图太长,这里截取一部分)
农业银行 id为111的卡,给其中存入1000,转账580后的余额:
111卡转账后,登录222卡后查询余额 :