声明:这里只是用java基础知识来实现,不涉及设计模式。
首先分析ATM的功能:余额查询、存款、取款、转账、修改密码、退出。这些都是我们平时操作ATM时比较深刻的。
所以我们可以根据功能来创建方法。然后界面调用即可。源码如下:
package online.shixun.project;
import java.text.SimpleDateFormat;
import java.util.Scanner;
/**
* @author kent
* 基于JAVA语言实现银行ATM应用,通过console输入输出的行式模拟
*
*/
public class ATMSystem {
//利用二维数组来存储账户信息
private static String[][] accounts = {{"heecoo","123456","1000"},{"kyrie","112233","800"}};
//功能操作数组
private static String[] menus = {"1.余额查询","2.存款","3.取款","4.转账","5.修改密码","0.退出"};
private static Scanner input = new Scanner(System.in);
//界面开始
public static void main(String[] args) {
//初始化账户信息
initAccounts();
//显示登录界面
welcome();
//系统登录,登陆成功后返回账户索引ID
int accountIndex = login();
//登录成功
if (accountIndex != -1){
while(true){
printMenu();
int menuId = input.nextInt();
switch (menuId){
case 1:
queryBalance(accountIndex);
break;
case 2:
deposit(accountIndex);
break;
case 3:
withdraw(accountIndex);
break;
case 4:
int index = transfer(accountIndex);
queryBalance(index);
break;
case 5:
changePassword(accountIndex);
break;
case 0:
System.out.println("系统退出成功!");
System.exit(0);
default:
System.out.println("非法操作");
break;
}
}
}
}
//功能实现方法
//修改密码
private static void changePassword(int accountIndex) {
System.out.println("请输入您需要设置的密码:");
String passwd1 = input.next();
System.out.println("请再输入一次:");
String passwd2 = input.next();
if(passwd1.equals(passwd2)){
System.out.println("密码修改成功!!");
accounts[accountIndex][2]=passwd1;
}else {
System.out.println("您两次输入的密码不一致!请重新操作!");
changePassword(accountIndex);
}
}
//登录初始界面
private static void welcome() {
System.out.println("-----------------------------------------");
System.out.println("*******欢迎来到深圳银行********");
System.out.println("*******请按照菜单进行操作*******");
System.out.println("-----------------------------------------");
}
private static void initAccounts() {
System.out.println("开始初始化.....请稍等...");
}
//登录界面
private static int login() {
//int loginAcountsCount = 0;
int loginPasswdCount = 0;
int valueOfReturn=-1;
int loopNumber = 1;
int index = 0;
System.out.println("请输入账户名:");
String acountsName = input.next();
for (int i=0;i<accounts.length;i++){
if (accounts[i][0].equals(acountsName)){
index = i;
}
}
while(loopNumber==1){
System.out.println("请输入密码:");
if (accounts[index][1].equals(input.next())){
System.out.println("登录成功!");
System.out.println("当前用户:"+acountsName);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(dateFormat.format(System.currentTimeMillis()));
System.out.println("*********************************************");
valueOfReturn = index;
loopNumber=-1;
}else{
loginPasswdCount++;
if (loginPasswdCount >= 5){
System.out.println("对不起,您已经尝试了5次密码输入." +
"您的账户已经被冻结了。" +
"不能操作了," +
"请到柜台办理密码更改业务!");
loopNumber=-1;
valueOfReturn=-1;
}else{
System.out.println("密码错误!!" +
"您还有"+
(5-loginPasswdCount)+
"次机会输入," +
"请确保自己的输入!");
continue;
}
}
}
//System.out.println(valueOfReturn);
return valueOfReturn;
}
//显示操作界面
private static void printMenu() {
for (int i=0;i<menus.length;i++){
System.out.println(menus[i]);
}
}
//余额查询
private static void queryBalance(int accountIndex) {
System.out.println(accounts[accountIndex][0]+",您的余额为:");
System.out.println(accounts[accountIndex][2]);
System.out.println("*********************************************");
}
//存款
private static void deposit(int accountIndex){
System.out.println("*********************************************");
while(true){
System.out.println("存钱规则:每次存钱不能超过1000,存款必须是100的整数!");
System.out.println("请整理好您的钞票,放入出钞口!(输入存款金额):");
int cashCount = input.nextInt();
if (cashCount<1000&&cashCount%100==0){
int i = Integer.parseInt(accounts[accountIndex][2]);
i+=cashCount;
accounts[accountIndex][2]=String.valueOf(i);
System.out.println("存款成功!请确认!");
System.out.println("*********************************************");
break;
}else{
System.out.println("您的操作不符合规范,请仔细阅读存钱规则!");
System.out.println("*********************************************");
continue;
}
}
}
//取款
private static void withdraw(int accountIndex){
System.out.println("*********************************************");
while(true){
System.out.println("取钱规则:每次取钱不能超过1000,取款必须是100的整数!确保您的余额是否满足!");
System.out.println("输入取款金额:");
int cashCount = input.nextInt();
int i = Integer.parseInt(accounts[accountIndex][2]);
// if (cashCount<1000&&cashCount%100==0&&cashCount < i){
// i-=cashCount;
// accounts[accountIndex][2]=String.valueOf(i);
// System.out.println("请取走钞票!请确认!");
// break;
// }
if (cashCount<1000&&cashCount%100==0&&cashCount > 0){
if(cashCount > i){
System.out.println("您的账户余额不足!");
}else {
i-=cashCount;
accounts[accountIndex][2]=String.valueOf(i);
System.out.println("请取走钞票!请确认!");
System.out.println("*********************************************");
break;
}
} else{
System.out.println("您的操作不符合规范,请仔细阅读取钱规则!");
continue;
}
}
}
//转账
private static int transfer(int accountIndex){
System.out.println("*********************************************");
System.out.println("请输入对方账户:");
String theSecondAcount = input.next();
int index=-1;
for (int i=0;i<accounts.length;i++){
if (accounts[i][0].equals(theSecondAcount)){
index = i;
}
}
if (index == -1){
System.out.println("该用户不存在!请核对后再操作!");
}else {
while(true){
System.out.println("转账规则:每次转钱不能超过1000,金额必须是100的整数!确保您的余额是否满足!");
System.out.println("输入转账金额:");
int cashCount = input.nextInt();
int i = Integer.parseInt(accounts[accountIndex][2]);
// if (cashCount<1000&&cashCount%100==0&&cashCount < i){
// i-=cashCount;
// accounts[accountIndex][2]=String.valueOf(i);
// System.out.println("请取走钞票!请确认!");
// break;
// }
if (cashCount<1000&&cashCount%100==0&&cashCount > 0){
if(cashCount > i){
System.out.println("您的账户余额不足!");
}else {
i-=cashCount;
accounts[accountIndex][2]=String.valueOf(i);
System.out.println("转账成功!请对方账户确认!");
System.out.println("*********************************************");
int theI= Integer.parseInt(accounts[index][2]);
theI+=cashCount;
accounts[index][2]=String.valueOf(theI);
System.out.println("您的余额为:");
queryBalance(accountIndex);
System.out.println("*********************************************");
break;
}
} else{
System.out.println("您的操作不符合规范,请仔细阅读转账规则!");
continue;
}
}
}
return index;
}
}
Heecoo寄语:编码时不要全部拷贝别人的代码,要去体会别人的编程思路,对于细节不懂,可以稍加参考!