第一步

第二步 开户

第三步 登录页面






package com.flowerDance.ATM;
/**
* 账户类
* */
public class Account {
private String cardId;
private String userName;//用户名称
private String passWord;//账户密码
private double money;//银行余额
private double quotaMoney;//取现额度
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getQuotaMoney() {
return quotaMoney;
}
public void setQuotaMoney(double quotaMoney) {
this.quotaMoney = quotaMoney;
}
}
package com.flowerDance.ATM;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATMSystem {
public static void main(String[] args){
//1.定义账户类
//2、定义一个集合容器,存储全部的账户对象,进行相关的业务操作
ArrayList<Account> accounts = new ArrayList<>();
//3、展示系统的页面
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("=========毛富贵银行============");
System.out.println("1、账户登录");
System.out.println("2、账户开户");
System.out.println("请您选择操作:");
int command = sc.nextByte();
switch (command){
case 1:
//账户登录
login(accounts,sc);
break;
case 2:
//账户开户(Alt+回车)
register(accounts,sc);
break;
default:
System.out.println("无此操作");
}
}
}
/**
* 用户登录函数
* @param accounts 账户集合
* @param sc 扫描器
*/
private static void login(ArrayList<Account> accounts, Scanner sc) {
System.out.println("===========用户登录===========");
//1、查询账户集合是否有账户,没有的话请用户先行注册
if(accounts.size() == 0){
System.out.println("该系统暂无用户,请现行注册");
return;
}
//登录操作
//通过卡号找账户
System.out.println("请输入卡号:");
String cardId = sc.next();
Account acc = getAccountById(accounts,cardId);
if(acc != null){
while (true) {
//有账户
System.out.println("请输入密码:");
String passWord = sc.next();
if(passWord.equals(acc.getPassWord())) {
//密码输入正确
System.out.println(acc.getUserName()+",欢迎您,您的卡号是"+acc.getCardId());
//后续进行一系列操作
//进入用户操作页
showUserCommand(sc,acc,accounts);
return;
}else {
//密码输入错误
System.out.println("密码输如错误");
}
}
}else {
//查无此账户
System.out.println("账户id输入错误");
return;
}
}
/**
* 用户操作页面
* @param sc 扫描器
* @param acc 用户账户
*/
private static void showUserCommand(Scanner sc, Account acc, ArrayList<Account> accounts) {
while (true) {
System.out.println("===========毛富贵银行用户操作页面===========");
System.out.println("1、查询账户");
System.out.println("2、存款");
System.out.println("3、取款");
System.out.println("4、转账");
System.out.println("5、修改密码");
System.out.println("6、退出");
System.out.println("7、注销账户");
System.out.println("请选择:");
int command = sc.nextInt();
switch (command){
case 1:
//查询账户
showAccount(acc);
break;
case 2:
//存款
depositMoney(acc,sc);
break;
case 3:
//取款
drawMoney(acc,sc);
break;
case 4:
//转账
transferMoney(sc,acc,accounts);
break;
case 5:
//修改密码
updatePassword(acc,sc);
return;
case 6:
//退出
System.out.println("退出成功,欢迎下次光临");
return;
case 7:
//注销账户
boolean deleteAccount = deleteAccount(acc, sc, accounts);
if (deleteAccount)
return;
else
break;
default:
System.out.println("没有该操作功能");
}
}
}
/**
*用户销户操作
* @param acc 当前用户
* @param sc 扫描器
* @param accounts 用户集合
*/
private static boolean deleteAccount(Account acc, Scanner sc, ArrayList<Account> accounts) {
System.out.println("===========用户密码修改===========");
System.out.println("请确认是否真的进行操作(Y/N):");
String rs = sc.next();
switch (rs){
case "Y":
if(acc.getMoney() > 0){
System.out.println("账户还有钱,不允许进行销户操作");
}else {
accounts.remove(acc);
System.out.println("账户销户成功");
return true;
}
break;
default:
System.out.println("好的,当前用户继续保留");
}
return false;
}
/**
* y用户修改密码操作
* @param acc 用户账户
* @param sc 扫描器
*/
private static void updatePassword(Account acc, Scanner sc) {
System.out.println("===========用户密码修改===========");
while (true) {
System.out.println("请输入用户密码:");
String passWord = sc.next();
if(passWord.equals(acc.getPassWord())){
//用户密码输入正确
while (true) {
System.out.println("请输入新密码:");
String passWord1 = sc.next();
System.out.println("请再次输入新密码:");
String passWord1Again = sc.next();
if (passWord1.equals(passWord1Again)){
//修改密码成功
acc.setPassWord(passWord1Again);
System.out.println("密码修改成功");
return;
}else {
System.out.println("两次密码输入不一致");
}
}
}else {
System.out.println("用户密码输入错误");
}
}
}
/**
* 转账操作
* @param sc 扫描器
* @param acc 用户账户
* @param accounts 账户集合
*/
private static void transferMoney(Scanner sc, Account acc, ArrayList<Account> accounts) {
System.out.println("===========用户转账===========");
//首先判断系统中是否有2个及以上账户
if(accounts.size()<2){
System.out.println("该系统无其他账户,无法进行转账操作");
return;
}
//判断自己账户是否有钱
if(acc.getMoney()==0){
System.out.println("没钱,莫转");
return;
}
//正式进入转账流程
while (true) {
System.out.println("请输入对方账户id:");
String cardId = sc.next();
if(cardId.equals(acc.getCardId())){
System.out.println("不能给自己转账");
continue;
}
//判断账户是否存在
Account accountById = getAccountById(accounts, cardId);
if(accountById == null){
//账户不存在
System.out.println("对方账户不存在");
}else
{//账户存在
//验证对方户主姓氏
String name = accountById.getUserName();
String tip = "*" + name.substring(1);
System.out.println("对方账户名为"+tip+",请输入姓氏:");
String lastName = sc.next();
if(name.startsWith(lastName)){
//验证信息成功
//开始转账
while (true) {
System.out.println("请输入转账金额:");
double transferMoney = sc.nextDouble();
if (transferMoney > acc.getMoney()){
System.out.println("对不起,您的账户并没有那么多钱,您账户余额为"+acc.getMoney());
}else {
//有钱,可以进行转账
acc.setMoney(acc.getMoney() - transferMoney);
accountById.setMoney(accountById.getMoney() + transferMoney);
System.out.println("转账成功");
showAccount(acc);
return;
}
}
}else{
//验证信息错误
System.out.println("对方户主姓氏输入错误");
}
}
}
}
/**
* 取钱功能
* @param acc 用户账户
* @param sc 扫描器
*/
private static void drawMoney(Account acc, Scanner sc) {
System.out.println("===========用户取钱===========");
//1、先判断账户是否有钱
if (acc.getMoney() < 100){
System.out.println("账户余额小于100,请先存钱");
return;
}
//账户有钱的情况
while (true) {
System.out.println("请输入取款金额:");
double drawMoney = sc.nextDouble();
if (drawMoney > acc.getQuotaMoney()){
System.out.println("取款超过当次取款最大额");
}else{
if(drawMoney > acc.getMoney()){
System.out.println("账户没有那么多钱,当前您账户余额为"+acc.getMoney());
}else {
//可以取钱了
System.out.println("取款成功");
acc.setMoney(acc.getMoney()-drawMoney);
showAccount(acc);
return;
}
}
}
}
/**
* 用户存钱操作
* @param acc 用户账户
* @param sc 扫描器
*/
private static void depositMoney(Account acc, Scanner sc) {
System.out.println("===========用户存钱===========");
System.out.println("请输入存款金额:");
double money = sc.nextDouble();
acc.setMoney(acc.getMoney() + money);
System.out.println("恭喜您,存钱成功,当前账户信息如下:");
showAccount(acc);
}
/**
* 展示用户信息
* @param acc 用户账户
*/
private static void showAccount(Account acc) {
System.out.println("===========用户详细信息===========");
System.out.println("卡号:"+acc.getCardId());
System.out.println("户主:"+acc.getUserName());
System.out.println("余额:"+acc.getMoney());
System.out.println("限额:"+acc.getQuotaMoney());
}
/**
*用户开户功能
* @param accounts 账户集合
*/
private static void register(ArrayList<Account> accounts,Scanner sc) {
//1、创建一个Account账户类的对象用于封装账户信息
//姓名 密码 当次限额 卡号
Account acc = new Account();
System.out.println("===========用户开户===========");
System.out.println("请输入用户姓名:");
String userName = sc.next();
acc.setUserName(userName);
//密码设置 surround with crtl+alt+t
while (true) {
System.out.println("请输入用户密码:");
String passWord = sc.next();
System.out.println("请再次输入密码");
String okWord = sc.next();
if(passWord.equals(okWord)){
System.out.println("密码设置成功");
acc.setPassWord(okWord);
break;
}else {
System.out.println("两次密码输入不一致");
}
}
System.out.println("请输入账户当次限额:");
double quotaMoney = sc.nextDouble();
acc.setQuotaMoney(quotaMoney);
//设置8位数的卡号
String cardId = getRandomCardId(accounts);
acc.setCardId(cardId);
//将账户存储账户数组
accounts.add(acc);
System.out.println(acc.getUserName()+"您好,您的账户已成功创建,账号为"+acc.getCardId());
}
/**
* 随机产生8位数卡号,且不重复
* @return 8位数卡号
*/
private static String getRandomCardId(ArrayList<Account> accounts) {
while (true) {
//产生8位数卡号
String cardId = "";
Random r = new Random();
for (int i = 0; i < 8; i++) {
cardId += r.nextInt(10);
}
//验证卡号是否有重复
Account acc = getAccountById(accounts,cardId);
if(acc == null){
//无重复
return cardId;
}
}
}
/**
* 验证卡号是否重复
* @param accounts 账户集合
* @param cardId 待验证卡号
* @return 重复的账户
*/
private static Account getAccountById(ArrayList<Account> accounts, String cardId) {
for (int i = 0; i < accounts.size(); i++) {
if(accounts.get(i).getCardId().equals(cardId))
return accounts.get(i);
}
return null;
}
}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/282344.html