package com.fzyun;
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<>();
Scanner sc = new Scanner(System.in);//放在外面节省内存。
//3.展示系统的首页
while (true) {
System.out.println("==========ATM系统==========");
System.out.println("1:账户登录");
System.out.println("2:用户注册");
System.out.println("请您选择数字进行操作");
int command = sc.nextInt();
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;//结束方法的执行,跳到case1 break
}
//2.正式进入登录操作
while (true) {
System.out.println("请您输入登陆卡号:");
String cardID = sc.next();
//3.判断卡号是否存在,根据卡号去账户集合中查询
Account acc = getAccountByCardID(cardID , accounts);
if (acc != null){
while (true) {
//卡号存在
//4.让用户输入密码,认证密码
System.out.println("请您输入密码:");
String passWord = sc.next();
//判断当前账户对象的密码,是否与账户输入的密码一致
if (acc.getPassWord().equals(passWord)){
//登录成功
System.out.println(acc.getUserName() + "登陆成功" + "您的卡号是" + acc.getCardID());
//查询,转账,取款...
//展示操作页
showUserCommand(sc , acc);
}else {
System.out.println("您输入的密码有误");
}
}
}else {
System.out.println("系统中不存在该账户卡号q");
}
}
}
/**
* 展示登陆后的操作页
*/
private static void showUserCommand(Scanner sc , Account acc) {
while (true) {
System.out.println("========用户操作页=======");
System.out.println("1.查询账户");
System.out.println("1.存款");
System.out.println("1.取款");
System.out.println("1.转账");
System.out.println("1.修改密码");
System.out.println("1.退出");
System.out.println("1.注销账户");
System.out.println("请选择:");
int command = sc.nextInt();
switch (command){
case 1:
//查询账户(当前登录的信息)
showAccount(acc);
break;
case 2:
//存款
break;
case 3:
//取款
break;
case 4:
//转账
break;
case 5:
//修改密码
break;
case 6:
//退出
break;
case 7:
//注销账户
break;
default:
System.out.println("您输入的操作命令不争取");
}
}
}
/**
* 方法目的:用户注册开户
* private只能在本类中使用
* @param accounts 接受账户的集合
*/
private static void register(ArrayList<Account> accounts,Scanner sc) {
System.out.println("=======系统注册界面========");
//1.创建一个账户对象,用于后期封装账户信息
Account account = new Account();
//2.录入账户信息,注入到账户对象中去
System.out.println("请您输入账户名称:");
String userName = sc.next();
account.setUserName(userName);//将信息收录进账户中去
while (true) {
System.out.println("请您输入密码:");
String passWord = sc.next();
System.out.println("请您再次确认密码:");
String okPassWord = sc.next();
if (okPassWord.equals(passWord)){
//认证通过,可以注册
account.setPassWord(okPassWord);
break;//密码录入成功
}else {
System.out.println("您输入的两次密码不一致,请重新确认");
}
}
System.out.println("请您输入账户当次限额:");
double quotaMoney = sc.nextDouble();
account.setQuotaMoney(quotaMoney);
//为账户生成随机八位且与其他账号不重复的号码
String carID = getRandomCardID(account);
account.setCardID(carID);
//3. 将账户对象添加到账户集合中
account.add(account);
System.out.println("恭喜您" + userName + "注册成功" + "请您妥善保管卡号");
}
/**
* 为我们账户生成八位与其他账户卡号不同的号码
* @return
*/
private static String getRandomCardID(ArrayList<Account> accounts) {
Random r = new Random();
//1.先生成8位数字
while (true) {
String cardID = "";
for (int i = 0; i < 8; i++) {//随机八个数字,将其连接起来
cardID += r.nextInt(10);//bound 10,生成数字范围为0-9 10位数
}
//2.判断8位卡号是否重复,根据这个卡号去查询用户对象
Account acc = getAccountByCardID(cardID,accounts);
if (acc == null){
//说明没有重复,是新卡号,可以作为新注册的账号
return cardID;
}
}
}
/**
* 根据卡号查询出一个账户对象
* @param cardID 卡号
* @param accound 全部账户集合
* @return 账户对象//null
*/
private static Account getAccountByCardID(String cardID , ArrayList<Account> accound){
for (int i = 0; i < accound.size(); i++) {
Account acc = accound.get(i);
if (acc.getCardID().equals(cardID)){
return acc;
}
}
return null;//查无此账号
}
}
4.17总结
发布时间 2023-04-17 20:06:25作者: 封织云