public class test {
public static void main(String[] args) {
ATM atm=new ATM();
atm.start();
}
}
测试类
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
private ArrayList<Account> account = new ArrayList<>();
private Scanner sc = new Scanner(System.in);
private Account loginAcc;//记住登录后的用户账户
public void start() { //启动ATM欢迎界面
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();
break;
case 2:
//用户开户
createAccount();
break;
default:
System.out.println("您输入的有误");
}
}
}
/**完成用户登录*/
private void login() {
System.out.println("====进入用户登录界面====");
if (account.size() == 0) {
System.out.println("当前系统无账户,请先开户");
return;
}
while (true) {
System.out.println("请您输入您的卡号");
String ID = sc.next();
//判断卡号是否正确
Account acc = getAccountByCardID(ID);
if (acc == null) {
System.out.println("您输入的卡号有误,请重新输入");
} else {
while (true) {
System.out.println("请输入您的登录密码");
String password = sc.next();
if (acc.getPassWord().equals(password)) {
System.out.println("恭喜您,登录成功");
loginAcc = acc;
//展示登录成功后的业务界面
showUserCommand();
return;
} else {
System.out.println("您的密码有误,请重新输入");
}
}
}
}
}
private void showUserCommand() {
while (true) {
System.out.println(loginAcc.getName() + "您可以办理如下业务");
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:
//查询账户
showLoginAccount();
break;
case 2:
//存款
deposiMoney();
break;
case 3:
//取款
drawMoney();
break;
case 4:
//转款
transferMoney();
break;
case 5:
//密码修改
updatePassWord();
return;
case 6:
//退出
System.out.println(loginAcc.getName() + "您退出系统成功");
return;//结束并退出当前方法
case 7:
//注销当前账户
if (deleteAccount()) {
//为真则销户成功
return;
}
//销户失败
break;
default:
System.out.println("您输入的选项不存在,请重新输入");
}
}
}
//修改密码
private void updatePassWord() {
System.out.println("请您输入旧密码");
while (true) {
String PassWord= sc.next();
if (PassWord.equals(loginAcc.getPassWord())){
//设置新密码
while (true) {
System.out.println("请您输入新密码");
String newPassWord= sc.next();
System.out.println("请您再次输入新密码");
String oknewPassWord= sc.next();
if (newPassWord.equals(oknewPassWord)){
loginAcc.setPassWord(newPassWord);
System.out.println("您的密码修改成功");
return;
}
else {
System.out.println("您两次输入的密码不一致,请重新输入");
}
}
}
else {
System.out.println("您输入的密码有误,请重新输入");
}
}
}
//销户操作
private boolean deleteAccount()
{
System.out.println("请您确认是否销户Y/N");
String command = sc.next();
while (true) {
switch (command)
{
case "Y":
if (loginAcc.getMoney() == 0)
{
account.remove(loginAcc);
System.out.println("销户成功");
return true;
}
else
{
System.out.println("销户失败,您账户还有余额未取出");
return false;
}
case "N":
System.out.println("已取消销户");
return false;
default:{
System.out.println("您输入的有误,请重新输入");
}
}
}
}
//转账操作
private void transferMoney() {
//1.判断系统中有无两个以上的用户
if (account.size()==1){
System.out.println("当前系统中只有您一个账户,无法转账");
return;
}
//2.判断账户是否有钱
if (loginAcc.getMoney()==0){
System.out.println("您的账户余额不足,无法进行转账业务");
return;
}
//3.开始转账操作
System.out.println("请您输入对方的卡号");
while (true) {
String ID= sc.next();
//判断卡号是否正确
Account acc=getAccountByCardID(ID);
if (acc==null){
System.out.println("您输入的卡号不存在,请重新输入");
}
else{
String name= "*"+acc.getName().substring(1);//将姓氏换为*
System.out.println(name);
System.out.println("请您验证并输入对方姓氏");
while (true) {
String preName= sc.next();
if (acc.getName().startsWith(preName)) {
System.out.println("验证成功,请输入需要转账的金额");
while (true) {
double money= sc.nextDouble();
if (money>loginAcc.getMoney()){
System.out.println("您的账户余额为"+loginAcc.getMoney()+"无法转账");
System.out.println("请重新输入需要转账的金额");
}
else {
loginAcc.setMoney(loginAcc.getMoney()-money);
System.out.println("转账成功,转账后的账户余额为:"+loginAcc.getMoney());
}
}
}
else{
System.out.println("验证失败,请重新输入");
}
}
}
}
}
//取款操作
private void drawMoney() {
if (loginAcc.getMoney()<100){
System.out.println("您当前的余额不足,无法取款");
return;
}
System.out.println("请输入您需要的取款金额");
while (true) {
double money= sc.nextDouble();
if (money>loginAcc.getMoney()){
System.out.println("您的余额不足,取款失败");
System.out.println("您当前的余额为"+loginAcc.getMoney());
System.out.println("请重新选择取款金额");
}
else {
if (money>loginAcc.getLimit()){
System.out.println("取款失败,您账户的限额为:"+loginAcc.getLimit());
System.out.println("请重新选择取款金额");
}
else {
loginAcc.setMoney(loginAcc.getMoney()-money);
System.out.println("恭喜您,取款"+money+"取款后的余额为"+loginAcc.getMoney());
System.out.println("请继续选择您需要办理的业务");
break;
}
}
}
}
//存款操作
private void deposiMoney() {
System.out.println("请输入您的存钱金额");
double money= sc.nextDouble();
//更新账户余额
loginAcc.setMoney(loginAcc.getMoney()+money);
System.out.println("您本次存款的金额为:"+money+"存款后账户余额为:"+loginAcc.getMoney());
}
//账户信息
private void showLoginAccount(){
System.out.println("您的账户信息如下:");
System.out.println("卡号:"+loginAcc.getID());
System.out.println("户主:"+loginAcc.getName());
System.out.println("性别:"+loginAcc.getSex());
System.out.println("余额:"+loginAcc.getMoney());
System.out.println("每次取现额度:"+loginAcc.getLimit());
System.out.println("请继续选择您需要办理的业务");
}
/**完成用户开户*/
private void createAccount() {
System.out.println("即将进行用户开户操作");
//1.创建一个账户对象,用于封装用户的开户信息
Account acc = new Account();
//2.让用户输入自己的开户信息
System.out.println("请您设置您的账户名");
String name = sc.next();
acc.setName(name);
while (true) {
System.out.println("请您输入您的性别");
char sex = sc.next().charAt(0);
if (sex == '男' || sex == '女') {
acc.setSex(sex);
break;
} else
System.out.println("您输入的有误,只能输入”男“或者”女“");
}
while (true) {
System.out.println("请您设置您的密码");
String passWord = sc.next();
System.out.println("请您再次确认您的密码");
String okPassWord = sc.next();
if (passWord.equals(okPassWord)) {
acc.setPassWord(passWord);
break;
} else
System.out.println("您两次输入的密码不同,请重新输入");
}
System.out.println("请您设置您的单次取现额度");
double limit = sc.nextInt();
acc.setLimit(limit);
//系统为用户自动生成一个八位数的卡号
String newCardID=createCardID();
acc.setID(newCardID);
//3.把这个账户对象存到账户集合中
account.add(acc);
System.out.println("恭喜您" + acc.getName() + ",开户成功,"+"您的卡号是"+acc.getID());
}
/**返回一个八位数字且不重复的卡号*/
private String createCardID(){
while (true) {
//1.定义一个String变量记住卡号
String cardID="";
//2.循环八次随机数
Random r=new Random();
for (int i = 0; i < 8; i++) {
int data=r.nextInt(10);//0-9
cardID+=data;
}
//3.判断生成的卡号是否已经存在
Account acc=getAccountByCardID(cardID);
if(acc==null){
return cardID;
}
}
}
private Account getAccountByCardID(String CardID){
//遍历集合中的全部对象
for (int i = 0; i < account.size(); i++)
{
Account acc=account.get(i);
if(acc.getID().equals(CardID))
{
return acc;
}
}
return null;
}
}
ATM类
public class Account {
private String ID;//20713299卡号
private String Name;//账户名
private char sex;//性别
private String passWord;//密码
private double money;//余额
private double limit;//单次限额
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getName() {
return Name+(sex=='男'?"先生":"女士");
}
public void setName(String name) {
Name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
}
账户类