需求:
(1)主页面:注册和登录
(2)登录页面:
1.查询
2.存钱
3.取钱
4.转账
5.修改密码
6.退出
7.注销账户
代码:
package ATMSystem;
public class Accounts {
private String cardId;
private String userName;
private String passWord;
private double money ;
private double quotaMoney;//每次取现额度
public Accounts() {
}
public Accounts(String cardId, String userName, String passWord, double money, double quotaMoney) {
this.cardId = cardId;
this.userName = userName;
this.passWord = passWord;
this.money = money;
this.quotaMoney = 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 ATMSystem;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Random;
public class ATM {
public static void main(String[] args) {
ArrayList accounts = new ArrayList<>();
Scanner myscanner = new Scanner(System.in);
while (true) {
System.out.println("请选择你要进行的操作:");
System.out.println("1.登录账号");
System.out.println("2.注册账号");
int command = myscanner.nextInt();
switch (command){
case 1://登录
setIn(myscanner,accounts);
break;
case 2://注册
register(myscanner,accounts);
break;
default: {
System.out.println("您的输入有误!");
}
}
}
}
private static void register(Scanner myscanner,ArrayList accounts) {
//1.创建一个对象,用于封装账户信息
Accounts a = new Accounts();
//2.接收输入信息
System.out.print("请输入用户名:");
String username= myscanner.next();
a.setUserName(username);
while (true) {
System.out.print("请设置密码:");
String password1 = myscanner.next();
System.out.print("请确认密码:");
String password2 = myscanner.next();
if(password1.equals(password2)){
a.setPassWord(password1);
break;
}else{
System.out.println("您输入的两次密码不一致!请重新设置密码!");
}
}
System.out.print("请汇入开账金额:");
double money = myscanner.nextDouble();
a.setMoney(money);
System.out.print("请设置每次取现额度:");
double quotamoney = myscanner.nextDouble();
a.setQuotaMoney(quotamoney);
//3.随机生成一个八位银行卡号(不能重复)
String cardId = getRandomId(accounts);
a.setCardId(cardId);
//把封装好的对象放到集合中去
accounts.add(a);
System.out.println("恭喜您!您的用户名为" + a.getUserName()+"的账户已经开户完成!您的卡号为:"+a.getCardId());
}
private static void setIn(Scanner myscanner,ArrayList accounts) {
System.out.println("请输入您的卡号:");
String cardId = myscanner.next();
for (int i = 0; i < accounts.size(); i++) {
Accounts a = accounts.get(i);
if (a.getCardId().equals(cardId)){
while (true) {
System.out.println("请输入您的密码:");
String password = myscanner.next();
if (a.getPassWord().equals(password)){
main2(a,myscanner,accounts);
return;
}
else{
System.out.println("您的密码输入错误,请重新输入!");
}
}
}
}
System.out.println("未检测到该账户信息!请注册后登录!");
return;
}
private static void main2(Accounts a,Scanner myscanner,ArrayList accounts) {
while (true) {
System.out.println("===============================================");
System.out.println("尊敬的"+a.getUserName()+"用户您好!欢迎登陆ATM系统!");
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 index = myscanner.nextInt();
switch (index){
case 1://查询
showAccount(a);
break;
case 2://存钱
depositMoney(a,myscanner);
System.out.println("存钱成功~");
break;
case 3://取钱
drawMoney(a,myscanner);
System.out.println("取钱成功~");
break;
case 4://转账
transferMoney(a,myscanner,accounts);
System.out.println("转账成功~");
break;
case 5://修改密码
changePassword(a,myscanner);
System.out.println("修改密码成功~");
break;
case 6://退出
System.out.println("===========账户退出操作===========");
System.out.println("退出成功~");
return;
case 7://注销账户
System.out.println("您真的要销户?y/n");
String input = myscanner.next();
switch (input){
case "y":
accounts.remove(a);
System.out.println("您的账户已注销。");
return;
default:
System.out.println("该账户将为您保留。");
}
break;
default:
System.out.println("您输入的指令有误,请重新输入!");
}
}
}
private static void changePassword(Accounts a, Scanner myscanner) {
System.out.println("===========账户修改密码操作===========");
while (true) {
System.out.println("请输入原密码:");
String password = myscanner.next();
if(password.equals(a.getPassWord())){
while (true) {
System.out.println("请输入你要更改的密码:");
String password1 = myscanner.next();
System.out.println("请确认你要更改的密码:");
String password2 = myscanner.next();
if (password1.equals(password2)){
a.setPassWord(password1);
return;
}else
System.out.println("两次密码输入不同!请重新设置!");
}
}else
System.out.println("您输入的密码错误,请重新输入!");
}
}
private static void transferMoney(Accounts a,Scanner myscanner,ArrayList accounts) {
System.out.println("===========账户转账操作===========");
Accounts b = new Accounts();
System.out.println("您当前的账户余额为:"+a.getMoney());
{
while (true) {
System.out.println("请输入您要转账的用户账号:");
String cardId = myscanner.next();
if (getAccountByCardId(cardId,accounts) != null){
if (cardId.equals(a.getCardId())){
System.out.println("对不起,您不能给自己转账!");
continue;
}
b = getAccountByCardId(cardId,accounts);
while (true) {
System.out.println("您即将给*"+b.getUserName().substring(1)+"转账,请确认姓氏第一个字:");
String nameFirst = myscanner.next();
if(nameFirst.equals(b.getUserName().substring(0,1))){
System.out.println("姓名验证成功!");
while (true) {
System.out.println("您当前的账户余额为:"+a.getMoney()+"。请输入你要转给"+b.getUserName()+"的金额:");
double drawmoney = myscanner.nextDouble();
if(drawmoney <= a.getMoney()){
a.setMoney(a.getMoney() - drawmoney);
b.setMoney(b.getMoney() + drawmoney);
return;
}else {
System.out.println("您的余额不足!");
return;
}
}
}else
System.out.println("姓名验证不成功!请重新输入!");
}
}else {
System.out.println("该用户不存在,请先注册账户!");
}
}
}
}
private static void drawMoney(Accounts a,Scanner myscanner) {
System.out.println("===========账户取钱操作===========");
System.out.println("您当前的账户余额为:"+a.getMoney()+",您的单次取款额度为:"+a.getQuotaMoney()+"。");
while (true) {
System.out.println("请输入您要取的金额:");
int drawmoney = myscanner.nextInt();
if(drawmoney < a.getMoney()){
if (drawmoney <= a.getQuotaMoney()){
a.setMoney(a.getMoney() - drawmoney);
return;
}else
System.out.println("您要取的金额超过了单次限额!请重新输入!");
}else
System.out.println("您要取的金额超过了余额!请重新输入!");
}
}
private static void depositMoney(Accounts a,Scanner myscanner) {
System.out.println("===========账户存钱操作===========");
System.out.println("请输入您要存入的金额:");
double money = myscanner.nextDouble();
a.setMoney(a.getMoney()+money);
}
private static void showAccount(Accounts a) {
System.out.println("===========账户查询操作===========");
System.out.println("用户的卡号为:");
System.out.println(a.getCardId());
System.out.println("用户名为:");
System.out.println(a.getUserName());
System.out.println("卡内余额为:");
System.out.println(a.getMoney());
System.out.println("单次取现额度为:");
System.out.println(a.getQuotaMoney());
}
//随机生成一个八位银行卡号不能重复)
public static String getRandomId(ArrayList accounts) {
//1.生成八位数字
Random r = new Random();
String cardId = "";
while (true) {
for (int i = 0; i < 8; i++) {
cardId += r.nextInt(10);
}
//2.要求不能重复
if (getAccountByCardId(cardId, accounts) == null) {
return cardId;
}
}
}
//根据卡号查找账户
public static Accounts getAccountByCardId(String cardId,ArrayList accounts){
for (int i = 0; i < accounts.size(); i++) {
Accounts a1 = accounts.get(i);
if(cardId.equals(a1.getCardId())){
return a1;
}
}
return null;//代表查找不到这个卡号
}
}
运行结果:
结果太多不想截图了……反正就是把菜单里的目录全都操作一遍。



