Java程序实现ATM自动取款机功能

ATM机执行流程


欢迎使用ATM


请输入卡号:
10086
请输入密码:
10086


请输入你想要操作类型
1.余额查询 2.取款*****
3.存款 4.转账*****
5.打印 6.退卡*****
7.查询转账信息********


1
当前账户余额为:10000.0


请输入你想要操作类型
1.余额查询 2.取款*****
3.存款 4.转账*****
5.打印 6.退卡*****
7.查询转账信息********


2
请选择你要操作菜单的序号
*1.100 2.200
*3.500 4.800
**5.1000 6.2000
*7.其它 8.返回
1
当前余额为9900.0


请输入你想要操作类型
1.余额查询 2.取款*****
3.存款 4.转账*****
5.打印 6.退卡*****
7.查询转账信息********


3
请输入要存款的金额
2000
你当前的余额为:11900.0


请输入你想要操作类型
1.余额查询 2.取款*****
3.存款 4.转账*****
5.打印 6.退卡*****
7.查询转账信息********


4
请输入的转账卡号
10010
请输入转账金额
1900
你当前的余额为:10000.0


请输入你想要操作类型
1.余额查询 2.取款*****
3.存款 4.转账*****
5.打印 6.退卡*****
7.查询转账信息********


7
姓名 卡号 银行名称
张三 10086 工商银行
李四 10010 中国银行
王五 10000 交通银行

张三 10086 工商银行
王五 10000 交通银行
李四 10010 中国银行

王五 10000 交通银行
张三 10086 工商银行
李四 10010 中国银行


请输入你想要操作类型
1.余额查询 2.取款*****
3.存款 4.转账*****
5.打印 6.退卡*****
7.查询转账信息********


5
文件存放路径:I:\m.txt


请输入你想要操作类型
1.余额查询 2.取款*****
3.存款 4.转账*****
5.打印 6.退卡*****
7.查询转账信息********


代码实现

package cn.hp.atm;

/**

  • 银行卡

*/
public class Card {

private String account;  //账号
private String password; //密码
private double balance;  //余额
private String bankName; //银行卡名字
private String name;     //持卡人姓名

public String getAccount() {
	return account;
}
public void setAccount(String account) {
	this.account = account;
}
public String getPassword() {
	return password;
}
public void setPassword(String password) {
	this.password = password;
}
public double getBalance() {
	return balance;
}
public void setBalance(double balance) {
	this.balance = balance;
}
public String getBankName() {
	return bankName;
}
public void setBankName(String bankName) {
	this.bankName = bankName;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}

}

/*
银行信息类
*/

package cn.hp.atm;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class CardInfo {

private List<Card> cardList = null;
private Map<String,Card> cardMap = null;
private Set<Card> cardSet = null;
/**
 * 
 * @return
 */
public List<Card> getCardInfo(){
	// 初始工商银行卡的信息
	Card card = new Card();
	card.setAccount("10086");
	card.setPassword("10086");
	card.setBalance(10000);
	card.setBankName("工商银行");
	card.setName("张三");

	Card card1 = new Card();
	card1.setAccount("10010");
	card1.setPassword("10010");
	card1.setBalance(10000);
	card1.setBankName("中国银行");
	card1.setName("李四");
	
	Card card2 = new Card();
	card2.setAccount("10000");
	card2.setPassword("10000");
	card2.setBalance(10000);
	card2.setBankName("交通银行");
	card2.setName("王五");

	cardList = new ArrayList<Card>();
	cardList.add(card);
	cardList.add(card1);
	cardList.add(card2);
	
	return cardList;
}

public Map<String,Card> getCardInfoMap(){
	
	cardMap = new HashMap<String,Card>();
	
	for(Card card:cardList) {
		cardMap.put(card.getAccount(), card);
	}
	
	return cardMap;
}

public Set<Card> getCardInfoSet(){
	
	cardSet = new HashSet<Card>();
	for(Card card : cardList) {
		cardSet.add(card);
	}
	return cardSet;
}

}

package cn.hp.atm;

/**

  • 定义一个人的类

*/
public class Person {

private static Atm atm = null;

public static void main(String[] args) {
	
	
	//可以操作Atm机
	atm = new Atm();
	
	//显示欢迎信息
	atm.showWelcom();
	
	//定义是否继续执行
	boolean type = true;
	
	while (type) {

		// 显示登录
		atm.login();

		// 操作主菜单
		atm.optionMenu();
					
		type = atm.isType();
		
	   }
	}

}

/*
ATM机功能实现
*/

package cn.hp.atm;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

/**

  • ATM

*/
public class Atm {

private String name; // 名字
private String num; // 编号
private boolean type; // 是否继续循环

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public String getNum() {
	return num;
}

public void setNum(String num) {
	this.num = num;
}

public boolean isType() {
	return type;
}

public void setType(boolean type) {
	this.type = type;
}

// 获取银行卡信息的List,Map,Set集合
private List<Card> cardList = null;
private Map<String, Card> cardMap = null;
private Set<Card> cardSet = null;

private Card card = null;

// ATM机构造方法
public Atm() {
	cardInfo();
}

// 初始化银行卡信息
public void cardInfo() {
	CardInfo cardInfo = new CardInfo();
	cardList = cardInfo.getCardInfo();
	cardMap = cardInfo.getCardInfoMap();
	cardSet = cardInfo.getCardInfoSet();
}

public void showWelcom() {
	// 1、显示一段欢迎的信息
	System.out.println("*****************");
	System.out.println("**欢迎使用ATM**");
	System.out.println("*****************");
}

// 2.3、读卡()
// 登录
public void login() {

	// 2、提示输入卡号
	System.out.println("请输入卡号:");

	// 获取控制台对象
	Scanner scanner = new Scanner(System.in);

	// 获取卡号
	String inAcount = scanner.next();

	// 提示输入密码
	System.out.println("请输入密码:");
	// 3、获取输入密码
	String inPassword = scanner.next();

	// 获取工商银行信息
	card = cardMap.get("10086");

	// 判断,输入的账号和密码是否和初始账号密码一样,如果一样, 显示主菜单,如果不一样,返回,继续输入卡号密码
	if (inAcount.equals(card.getAccount()) && inPassword.equals(card.getPassword())) {
		showMenu();
	} else {
		login();
	}
}

// 显示主菜单
public void showMenu() {
	// 4、显示主菜单。
	System.out.println("***********************************");
	System.out.println("*******请输入你想要操作类型*******");
	System.out.println("******1.余额查询  2.取款***********");
	System.out.println("******3.存款        4.转账***********");
	System.out.println("******5.打印        6.退卡***********");
	System.out.println("******7.查询转账信息**************");
	System.out.println("**********************************");
}

// 显示操作主菜单
public void optionMenu() {
	// 获取控制台对象
	Scanner scanner = new Scanner(System.in);

	// 提示让它选择操作类型
	String chose = scanner.next();

	switch (chose) {
	case "1":
		// 查询余额
		searchMoney();
		// 刷新显示主菜
		showMenu();
		// 操作ATM
		optionMenu() ;
		break;
	case "2":
		// 取款
		getMoney();
		// 刷新显示主菜
		showMenu();
		// 操作ATM
		optionMenu() ;
		break;
	case "3":
		// 存款
		saveMoney();
		// 刷新显示主菜
		showMenu();
		// 操作ATM
		optionMenu() ;
		break;
	case "4":
		// 转账
		tranMoney();
		// 刷新显示主菜
		showMenu();
		// 操作ATM
		optionMenu() ;
		break;
	case "5":
		// 打印
		print();
		// 刷新显示主菜
		showMenu();
		// 操作ATM
		optionMenu() ;
		break;
	case "6":
		// 退卡
		outCard();
		break;
	case "7":
		// 打印转账信息
		printTranInfo();
		// 刷新显示主菜
		showMenu();
		// 操作ATM
		optionMenu() ;
		break;
	default:
		System.out.println("你输入的序号不存在,请重新选择菜单序号输入");
		// 刷新显示主菜
		showMenu();
		// 操作ATM
		optionMenu() ;
		break;
	}
}

// 2.4、查询余额()
public void searchMoney() {
System.out.println(“当前账户余额为:” + card.getBalance());
}

// 2.5、取款()
public void getMoney() {

	// 显示快捷款界面
	showGetMoney();

	Scanner scanner = new Scanner(System.in);
	String chose = scanner.next();
	double money = 0;
	switch (chose) {
	case "1":
		money = 100;
		card.setBalance(card.getBalance() - money);
		break;
	case "2":
		money = 200;
		card.setBalance(card.getBalance() - money);
		break;
	case "3":
		money = 500;
		card.setBalance(card.getBalance() - money);
		break;
	case "4":
		money = 800;
		card.setBalance(card.getBalance() - money);
		break;
	case "5":
		money = 1000;
		card.setBalance(card.getBalance() - money);
		break;
	case "6":
		money = 2000;
		card.setBalance(card.getBalance() - money);
		break;
	case "7":
		// 进入输入其它金额界面
		otherGetMoney();
		break;
	case "8":
		//返回主菜单
		// 刷新显示主菜
		showMenu();
		// 操作ATM
		optionMenu() ;
	default:
		System.out.println("你选择的序号不存在,请重新选择");
		// 重新选择取款金额
		getMoney();
	}
	System.out.println("当前余额为" + card.getBalance());
}

// 显示快捷款界面
public void showGetMoney() {
	System.out.println("*****请选择你要操作菜单的序号*****");
	System.out.println("*****1.100                        2.200****");
	System.out.println("*****3.500                        4.800****");
	System.out.println("*****5.1000                      6.2000***");
	System.out.println("*****7.其它                       8.返回****");
}

// 2.6、存款()
public void saveMoney() {

	System.out.println("请输入要存款的金额");
	// 输入存款金额
	Scanner sc = new Scanner(System.in);
	
	try {	
		double money = sc.nextDouble();
		card.setBalance(card.getBalance() + money);
		System.out.println("你当前的余额为:" + card.getBalance());
	}catch(Exception e) {
		System.out.println("输入的金额不合法,请重新输入");
		saveMoney();
	}
}

//2.7、转账()
public void tranMoney() {
	System.out.println("请输入的转账卡号");
	Scanner scanner = new Scanner(System.in);
	// 获取输入的转账卡号
	String account = scanner.next();

	// 验证当前账号是否存在,存在,则继续,不存在,则重新输入对方账号
	boolean b = (cardMap.get(account) != null);

	if (b == true) {
		// 显示转账信息
		tranMoneyInfo(scanner);
	} else {
		System.out.println("你输入的转账账号不存在,请重新输入");

		// 调用自身方法
		this.tranMoney();
	}
}

// 转账信息
public void tranMoneyInfo(Scanner scanner) {

	System.out.println("请输入转账金额");
	// 输入转账金额

	try {
		Double money = scanner.nextDouble();
		//验证账户是否余额大于输入的金额
		boolean bo = checkMoney(money);
		if(bo==true) {
			card.setBalance(card.getBalance() - money);
			System.out.println("你当前的余额为:" + card.getBalance());
		}else {
			System.out.println("你当前的账户余额不足");
			Scanner sc = new Scanner(System.in);
			//调用自身方法
			this.tranMoneyInfo(sc);
		}


	} catch (Exception e) {
		System.out.println("你输入的金额不正确,输入Y继续操作转账,输入N,返回主菜单:");
		Scanner sc = new Scanner(System.in);
		String inValue = sc.next();
		if ("Y".equals(inValue)) {
			// 继续输入转账
			tranMoney();
		} else if ("N".equals(inValue)) {
			// 显示 主菜单
			showMenu();
			// 操作主菜单
			optionMenu();
		} else {
			System.out.println("输入的不合法,返回主菜单");
			// 显示 主菜单
			showMenu();
			// 操作主菜单
			optionMenu();
		}
	}
}

// 2.8、打印()
public void print() {

	System.out.println("文件存放路径:I:\\m.txt");
	// 打开一个文件
	File file = new File("I:\\m.txt");
	if (file.exists()) {
		file.delete();
	}

	try {
		FileWriter fw = new FileWriter(file);
		fw.write(card.getName() + "\t" + card.getPassword() + "\t" + card.getBalance() + "\t" + card.getBankName());
		fw.flush();
	} catch (IOException e) {

		e.printStackTrace();
	} finally {

	}

}

// 2.9、退卡()
public void outCard() {
System.out.println(“当前用户已退出!”);
type = false;
System.exit(0);
}

// 打印转账信息
public void printTranInfo() {

	// 使用List循环显示用户信息
	System.out.println("姓名\t卡号\t银行名称");

	for (Card card : cardList) {
		System.out.println(card.getName() + "\t" + card.getAccount() + "\t" + card.getBankName());
	}

	// 使用Map循环显示用户信息
	System.out.println("-----------------------");
	for (String str : cardMap.keySet()) {

		Card card = cardMap.get(str);
		System.out.println(card.getName() + "\t" + card.getAccount() + "\t" + card.getBankName());

	}
	// 使用Set循环显示用户信息
	System.out.println("-----------------------");
	Iterator<Card> iterater = cardSet.iterator();
	while (iterater.hasNext()) {
		Card card = iterater.next();
		System.out.println(card.getName() + "\t" + card.getAccount() + "\t" + card.getBankName());
	}

}

// 验证当前账户金额是否足够
public boolean checkMoney(double inMoney) {

	boolean isEnabled = true;

	// 当余额小于输入的金额,则余额不足
	if (card.getBalance() < inMoney) {
		isEnabled = false;
	}
	return isEnabled;
}

// 显示快捷取款中其它金额的操作
public void otherGetMoney() {

	// 获取当前控制台对象
	Scanner scanner = new Scanner(System.in);
	// 提示输入金额
	System.out.println("请输入要取款的金额");

	// 当输入的金额不合法时, 时出现异常, 下面处理异常
	try {

		double inMoney = scanner.nextDouble();
		// 验证余额是否足够取,够了, 则继续操作,不够,则给出提示
		boolean b = checkMoney(inMoney);
		if (b == true) {
			// 余额减去输入的金额
			card.setBalance(card.getBalance() - inMoney);
			
			//显示当前余额
			System.out.println("当前账户余额为:"+card.getBalance());
			// 显示主菜单
			showMenu();
			// 操作主菜单
			optionMenu();
		} else {
			System.out.println("当前余额不足,继续操作请输入Y,输入N,则返回主菜单");
			Scanner sc = new Scanner(System.in);
			String inValue = sc.next();
			if ("Y".equals(inValue)) {
				otherGetMoney();
			} else if ("N".equals(inValue)) {
				// 显示主菜单
				showMenu();
				// 操作主菜单
				optionMenu();
			} else {
				System.out.println("输入的不合法,返回主菜单");
				// 显示主菜单
				showMenu();
				// 操作主菜单
				optionMenu();
			}
		}

	} catch (Exception e) {
		System.out.println("你输入的金额不合法,返回主菜单");
		// 显示主菜单
		showMenu();
		// 操作主菜单
		optionMenu();
	}

}

}

  • 15
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值