1,创建一个类命名Account用于存储ATM的用户数据
package code;
public class Account {
private String cardId;
private String userName;
private char sex;
private String passWord;
private double money;
private double limit;
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getUserName() {
return userName+(sex == '男' ? "先生" : "女士");
}
public void setUserName(String userName) {
this.userName = userName;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
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 getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
}
2,实现ATM系统的各个功能,创建一个操作类
package code;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class Atm {
ArrayList<Account> accounts=new ArrayList<>();
Scanner sc=new Scanner(System.in);
private Account loginacc;
//启动ATM系统 展示欢迎界面
public void start(){
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:
//用户开户
creatAccount();
break;
case 2:
//用户登录
login();
break;
default:
System.out.println("没有该操作~~");
}
}
}
private void login(){
System.out.println("===系统登录===");
if(accounts.size()==0){
System.out.println("系统中不存在用户~~");
return;
}
while (true) {
System.out.println("请您输入您的卡号:");
String cardId=sc.next();
Account acc = getAccountBy(cardId);
if(acc==null){
System.out.println("您输入的登录卡号不存在,请重新输入:");
}else{
while (true) {
System.out.println("请您输入登录密码:");
String passWord=sc.next();
if(acc.getPassWord().equals(passWord)){
System.out.println("恭喜您,"+acc.getUserName()+"登录成功,您的卡号是"+acc.getCardId());
//展示登录后的界面
loginacc=acc;
showUser();
return;
}else{
System.out.println("密码错误,请重新输入:");
}
}
}
}
}
private void showUser(){
while (true) {
System.out.println(loginacc.getUserName() + "可以选择如下功能");
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:
showAcc();
break;
case 2:
deposit();
break;
case 3:
drawmoney();
break;
case 4:
transmoney();
break;
case 5:
updataPass();
return;
case 6:
System.out.println(loginacc.getUserName()+"您退出系统成功");
return;
case 7:
if(deleteAccount()){
return;
}
break;
default:
System.out.println("您选择的操作不存在,请重新选择:");
}
}
}
private void updataPass() {
System.out.println("===账户密码修改===");
while (true) {
System.out.println("请输入当前账户密码:");
String pass=sc.next();
if(loginacc.getPassWord().equals(pass)){
while (true) {
System.out.println("请您输入新密码:");
String newpass=sc.next();
System.out.println("请您确认新密码:");
String okpass=sc.next();
if(okpass.equals(newpass)){
loginacc.setPassWord(okpass);
System.out.println("密码修改成功!");
return;
}else{
System.out.println("两次密码不一致,请再次输入密码:");
}
}
}else{
System.out.println("密码错误,请重新输入:");
}
}
}
private boolean deleteAccount() {
System.out.println("===销户操作===");
System.out.println("您确认销户吗? y/n");
String command=sc.next();
switch (command){
case "y" :
if(loginacc.getMoney()==0){
accounts.remove(loginacc);
System.out.println("销户成功");
return true;
}else{
System.out.println("账户中存在金额,不能销户");
return false;
}
default:
System.out.println("销户取消");
return false;
}
}
private void transmoney() {
System.out.println("===用户转账===");
if(accounts.size()<2){
System.out.println("当前系统只存在一个账户~~");
return;
}
if(loginacc.getMoney()==0){
System.out.println("当前账户没有钱~~");
return;
}
while (true) {
System.out.println("请输入对方卡号:");
String cardId=sc.next();
Account acc=getAccountBy(cardId);
if(acc==null){
System.out.println("您输入的卡号不存在!");
}else{
String name="*"+acc.getUserName().substring(1);
System.out.println("请您输入【"+ name +"】的姓氏");
String preName=sc.next();
if(acc.getUserName().startsWith(preName)){
while (true) {
System.out.println("请您输入转账给对方的金额:");
double money=sc.nextDouble();
if(loginacc.getMoney()>=money){
loginacc.setMoney(loginacc.getMoney()-money);
acc.setMoney(acc.getMoney()+money);
System.out.println("转账成功了");
return;
}else{
System.out.println("您的余额不足,您最多可转"+loginacc.getMoney());
}
}
}else{
System.out.println("对不起,输入姓氏有问题~~");
}
}
}
}
private void drawmoney() {
System.out.println("===取钱操作===");
if(loginacc.getMoney()<100){
System.out.println("您的账户余额不足100元~~");
return;
}
while (true) {
System.out.println("请您输入取款金额:");
double money=sc.nextDouble();
if(loginacc.getMoney()>=money){
if(money>loginacc.getLimit()){
System.out.println("您的取款金额超出了限额,您当前的限额是:"+loginacc.getLimit());
}else{
loginacc.setMoney(loginacc.getMoney()-money);
System.out.println("您取款:"+money+"成功,取款后余额为:"+loginacc.getMoney());
break;
}
}else {
System.out.println("您的账户余额不足,现余额是:"+loginacc.getMoney());
}
}
}
private void deposit() {
System.out.println("===存钱操作===");
System.out.println("请您输入存款金额:");
double money=sc.nextDouble();
loginacc.setMoney(loginacc.getMoney() + money);
System.out.println("恭喜您存钱"+money+"成功,存钱后余额是:" + loginacc.getMoney());
}
private void showAcc(){
System.out.println("===当前账户信息如下===");
System.out.println("卡号:"+loginacc.getCardId());
System.out.println("户主:"+loginacc.getUserName());
System.out.println("性别:"+loginacc.getSex());
System.out.println("余额:"+loginacc.getMoney());
System.out.println("每次取现额度:"+loginacc.getLimit());
}
private void creatAccount(){
//1、创建一个账户对象,用于封装用户的开户信息
System.out.println("==系统开户操作==");
Account acc=new Account();
//2、需要用户输入自己的开户信息,赋值给账户对象
System.out.println("请您输入账户名称:");
String name=sc.next();
acc.setUserName(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 okWord=sc.next();
if(passWord.equals(okWord)){
acc.setPassWord(okWord);
break;
}else{
System.out.println("您输入的两次密码不一致,请您确认~~");
}
}
System.out.println("请您输入取现额度:");
double limit=sc.nextDouble();
acc.setLimit(limit);
//需要系统自动生成8位数字的卡号,并且不能重复
String newCard=creatCardId();
acc.setCardId(newCard);
//3、把这个账户对象存入到账户集合中去
accounts.add(acc);
System.out.println("恭喜您"+acc.getUserName()+"开户成功,您的卡号是:"+acc.getCardId());
}
//利用随机数生成8位卡号
private String creatCardId(){
while (true) {
String cardId="";
Random r=new Random();
for (int i = 0; i < 8; i++) {
int data=r.nextInt(10);
cardId += data;
}
Account acc = getAccountBy(cardId);
if(acc==null){
return cardId;
}
}
}
//查找accounts集合中是否存在相同的卡号,存在返回找到的对象,不存在则返回null
private Account getAccountBy(String cardId){
for (int i = 0; i < accounts.size(); i++) {
Account acc=accounts.get(i);
if(acc.getCardId().equals(cardId)){
return acc;
}
}
return null;
}
}
3,创建主体去调用各个功能
package code;
public class AtmTest {
public static void main(String[] args) {
Atm atm=new Atm();
atm.start();
}
}