用户界面(输入选项当前数字即可)
Account类:
public class Account {
//用户类
private String CardId;//用户卡号
private String userName;//用户名
private String passWord;//用户密码
private double money;//账户金额
private double quotaMoney;//转账限额
//创建get ,set 方法
public String getCardId() {
return CardId;
}
public String getUserName() {
return userName;
}
public String getPassWord() {
return passWord;
}
public double getMoney() {
return money;
}
public void setCardId(String CardId) {
this.CardId = CardId;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public void setMoney(double money) {
this.money = money;
}
public void setQuotaMoney(double quotaMoney) {
this.quotaMoney = quotaMoney;
}
public double getQuotaMoney() {
return quotaMoney;
}
}
入口类:
功能如下:
1.查询,2.存款,3.取款,4.转账,5.修改密码,6.退出,7.注销用户。
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATMSystem {
/*入口类
必须先注册用户才能,登入用户 ,
* */
public static void main(String[] args) {
ArrayList <Account> accounts = new ArrayList<>();//创建一个集合用户类
Scanner sc = new Scanner(System.in);
while (true) {//死循环
System.out.println("************欢迎来到嘎嘣秃ATM系统*************");
System.out.println("1、登入用户");
System.out.println("2、注册用户");
System.out.println("3、退出");//退出程序
System.out.println("请输入您的需求:");
int command = sc.nextInt();
switch (command){
case 1 ://登入用户
login(accounts,sc);
break;
case 2://注册用户:
register(accounts,sc);
break;
case 3://退出程序
return;
default:
System.out.println("您输入的需求不存在!!!");
}
}
}
/**
*
* @param accounts ---集合中对象全部对象
* @param sc 扫描器--输入
*/
private static void login(ArrayList<Account> accounts, Scanner sc) {//登入
System.out.println("**************系统登入*************");
if (accounts.size() == 0){// 判断
System.out.println("对不起,您还没有创建账户,请先创建账户再登入。");
return;//直接结束语句
}
while (true) {
System.out.println("请输入卡号:");
String cardId = sc.next();
Account acc = getAccountByCardId(cardId,accounts);
if (acc != null){
while (true) {
System.out.println("请输入您的密码:");
String passWord = sc.next();
if (acc.getPassWord().equals(passWord)){
System.out.println(acc.getUserName() + "您已登入成功!" + "您的卡号是:" + acc.getCardId() );
//登入后的界面 查询、转账、取款......
showUserCommand(sc,acc,accounts);
return;
} else {
System.out.println("您输入的密码错误!请重新输入。");
}
}
}else {
System.out.println("输入的卡号系统中不存在该卡号!请重新登入。");
}
}
}
/**
* 展示登入后的操作页面
*/
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(acc,sc,accounts);
break;
case 5:
//修改密码
updataPassWord(acc,sc);
return ;
case 6:
//退出
System.out.println("用户退出成功!感谢您的使用。");
return;
case 7:
//注销用户
deleteAccount (accounts,acc,sc);
return ;
default:
System.out.println("没有该操作请重新输入:");
}
}
}
/**
*
* @param accounts 账户集合
* @param acc 当前登录账户
* @param sc 扫描器
*/
private static void deleteAccount(ArrayList<Account> accounts, Account acc, Scanner sc) {
System.out.println("*******************用户销户操作********************");
System.out.println("您真的确定要消除当前账户吗?");
System.out.println("输入数字:1 ,确定消除账户~~");
while (true) {
int s = sc.nextInt();
switch (s) {
case 1:
if (acc.getMoney() >0) {
System.out.println("您要把当前账户的剩余余额:" + acc.getMoney() + "元,取走哟~~~");
acc.setMoney(0);
}else {
accounts.remove(acc);//消除账户
System.out.println("账户已被消除。");
return ;
}
default:
System.out.println("您的账户还保留着呢~~~请再输入数字 1,确定消除账户~~~");
}
}
}
/**
*
* @param acc 登入的账户
* @param sc 扫描器
*/
private static void updataPassWord(Account acc, Scanner sc) {
System.out.println("*******************修改密码操作********************");
while (true) {
System.out.println("请输入当前密码:");
String passWord = sc.next();
if (acc.getPassWord().equals(passWord)){
while (true) {
System.out.println("请您输入新密码:");
String newPassWord = sc.next();
System.out.println("请您再确认密码:");
String okPossWord = sc.next();
if (okPossWord.equals(newPassWord)){
acc.setPassWord(okPossWord);
System.out.println("您的密码修改成功,请妥善保管~~~");
return ;
}else {
System.out.println("您输入的密码不一致~~请重新输入密码:");
}
}
}else {
System.out.println("您输入的密码不正确!请重新输入:");
}
}
}
/**
*
* @param acc 当前账户
* @param sc 扫描器
* @param accounts 账户集合
*/
private static void transferMoney(Account acc, Scanner sc,ArrayList<Account> accounts) {
System.out.println("*******************转账操作********************");
if (accounts.size() < 2 ){
System.out.println("当前系统中的账户不足两个,无法转账,请您再创建一个账户吧~~");
return ; //结束该方法
}
if (acc.getMoney() == 0){
System.out.println("您的账户余额为:" + acc.getMoney() + "元,无法转账,悠着点喔!");
return ;
}
while (true) {
System.out.println("请您输入对方账户的卡号:");
String cardId = sc.next();
if (cardId.equals(acc.getCardId())) {//判断输入的卡号是不是自己的
System.out.println("不能给自己转账喔!");
continue;//再次进入死循环
}
Account account = getAccountByCardId(cardId,accounts);
if (account == null){
System.out.println("您输入的卡号不存在,请重新输入~~");
}else {
System.out.println("请您输入对方用户的名字:");
String name= sc.next();
if (account.getUserName().equals(name)){
while (true) {
System.out.println("请您输入转账金额:");
double money = sc.nextDouble();
if (money > acc.getMoney()) {
System.out.println("您的余额为:" + acc.getMoney() + "元,不足:" + money);
}else {
System.out.println("您已转账成功");
acc.setMoney(acc.getMoney()-money);
account.setMoney(account.getMoney() + money);
System.out.println("您的余额剩余:" + acc.getMoney());
return ;
}
}
}else {
System.out.println("您输入的账户名有误,请重新输入卡号:");
}
}
}
}
/**
取款功能
*/
private static void drawMoney(Account acc, Scanner sc) {
System.out.println("*******************转账操作********************");
if (acc.getMoney() < 100){
System.out.println("当前金额不够100元,不能存款");
return;
}
while (true) {
System.out.println("输入取款金额:");
double money = sc.nextDouble();
if (money > acc.getQuotaMoney
()){
System.out.println("您的取款金额已经超过了最大限额,请重新输入金额");
}else {
if(acc.getMoney() >= money){
System.out.println("取钱成功:" + money + "元.");
acc.setMoney(acc.getMoney() - money);//更新余额
showAccount(acc);//展现用户
return;//结束方法
}else {
System.out.println("您的余额为:" +acc.getMoney() + "不足于" + money + ",不能取钱");
}
}
}
}
/**
存款功能
*/
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());
}
/*用户开户功能
* */
private static void register(ArrayList<Account> accounts,Scanner sc) {//下面用到扫描器,可以直接用形参传进来
System.out.println("**************请您输入注册用户操作**************");
Account account = new Account();
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(passWord);//密码认证成功
break;//两次密码一样 跳出死循环
} else {
System.out.println("您输入的两次密码不一致!请重新输入");
}
}
System.out.println("请您输入转账最高限额:");
double quotaMoney = sc.nextDouble();//默认为正整数
account.setQuotaMoney(quotaMoney);
String cardId = getRandomCardId(accounts);//生成卡号---16位,注意:不能有重复的卡号(难点)
account.setCardId(cardId);
accounts.add(account);//把建好的用户对象放到集合里
System.out.println("恭喜您" + userName + "先生/女士已成功开启账户,您的卡号是:" + cardId + "请妥善保管您的卡。");
}
/**
*
* @param accounts 随机生成卡号
*/
private static String getRandomCardId(ArrayList <Account> accounts) {
Random r = new Random();
while (true){
String cardId = "";
for (int i = 0; i < 8; i++) {//生成一个8位的银行卡号
cardId += r.nextInt(10);//生成 0~9的随机数
}
Account acc = getAccountByCardId(cardId,accounts);// 判断卡号重不重复
if (acc == null){
return cardId;
}
}
}
/*有没有重复卡号
* */
private static Account getAccountByCardId(String cardId,ArrayList <Account> accounts ) {//查找集合类里有没有重复的卡号
for (int i = 0; i < accounts.size(); i++) {
Account acc = accounts.get(i);
if (acc.getCardId().equals(cardId)){
return acc;
}
}
return null;
}
}
该系统没有连接数据库,所以每运行一次就要创建一个用户。
功能的运行截图就不一一发送了,大家有兴趣的话自己跑跑代码