/**
用户类
*/
public class Account {
private String cardID;//卡号
private String userName;//用户名
private String passWord;//密码
private double money;//账户余额
private double quotaMoney;//单次操作限额
public Account() {
}
public Account(String cardID, String userName, String passWord, double quotaMoney) {
this.cardID = cardID;
this.userName = userName;
this.passWord = passWord;
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;
}
}
功能段
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<>();
//准备系统首页 登录、开户
showMain(accounts);
}
public static void showMain(ArrayList<Account>accounts){
Scanner sc=new Scanner(System.in);
System.out.println("==================首页===================");
while (true) {
System.out.println("请您输入命令:");
System.out.println("1.登录账户");
System.out.println("2.注册账户");
int command=sc.nextInt();
switch (command){
case 1:
//进入登录系统
login(accounts,sc);
break;
case 2:
//进入注册系统
register(accounts,sc);
break;
default:
System.out.println("您输入的命令不被支持。");
}
}
}
/**
* 用户登录功能
* @param accounts
* @param sc
*/
private static void login(ArrayList<Account> accounts,Scanner sc){
while (true) {
System.out.println("========================登录页面======================");
if (accounts.size()==0){
System.out.println("系统中无账户,请先注册!");
return;
}
System.out.print("请您输入卡号:");
String cardID=sc.next();
//在集合中查找卡号是否存在
Account acc=getAccountByCardID(accounts,cardID);
if (acc==null){
System.out.println("您输入的卡号不存在。请重新输入!");
}else {
while (true) {
System.out.print("请输入您的账户密码:");
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("密码不正确,登录失败!请重新输入密码。");
}
}
}
}
}
private static void showUserCommand(Scanner sc,Account account,ArrayList<Account>acc) {
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.注销账号");
int command=sc.nextInt();
switch (command){
case 1:
//查询
showAccount(account);
break;
case 2:
//存款
depositMoney(sc,account);
break;
case 3:
//取款
drawmoney(sc,account);
break;
case 4:
//转账
transmoey(acc,sc,account);
break;
case 5:
//修改密码
updataPassword(sc,account);
return;
case 6:
//退出
System.out.println("欢迎下次再来!");
return;
case 7:
//注销
acc.remove(account);
System.out.println("注销成功!");
return;
}
}
}
private static void updataPassword(Scanner sc, Account account) {
while (true) {
System.out.println("输入原始密码");
String password=sc.next();
while (true) {
if(account.getPassWord().equals(password)){
System.out.println("输入新密码:");
String newPassword=sc.next();
System.out.println("再次确认新密码:");
String oknewPassword=sc.next();
if (newPassword.equals(oknewPassword)){
account.setPassWord(newPassword);
System.out.println("密码修改成功");
return;
}
}else {
System.out.println("密码错误,重新输入!");
break;
}
}
}
}
/**
* 转账功能
* @param accounts
* @param sc
*/
private static void transmoey(ArrayList<Account>accounts,Scanner sc,Account acc) {
//系统中是否有最少两个账户
if(accounts.size()<2){
System.out.println("系统中没有其他账户信息。");
return;
}else{
if (acc.getMoney()<=0){
System.out.println("您的账户余额为0,不可转账");
return;
}else {
while (true) {
System.out.println("请您输入要转入的账户卡号:");
String other=sc.next();
Account otherAccount=getAccountByCardID(accounts,other);
if (otherAccount!=null){
//验证信息
System.out.println("请输入【*"+otherAccount.getUserName().substring(1)+"】的姓氏");
String preName=sc.next();
if(otherAccount.getUserName().startsWith(preName)){
while (true) {
System.out.println("输入您要转账的金额");
Double money=sc.nextDouble();
if (acc.getMoney()>=money){
acc.setMoney(acc.getMoney()-money);
otherAccount.setMoney(otherAccount.getMoney()+money);
System.out.println("转账成功,目前余额:"+acc.getMoney());
return;
}else {
System.out.println("您的账户余额不足");
}
}
}
}else{
System.out.println("您输入的账号信息不存在。");
return;
}
}
}
}
}
/**
* 取款操作
*/
private static void drawmoney(Scanner sc,Account account) {
//判断账户余额大于100
if (account.getMoney()>100){
while (true) {
System.out.println("请输入取款金额:");
double money=sc.nextDouble();
if (money>account.getQuotaMoney()){
System.out.println("超过单次操作限额,不可超过:"+account.getQuotaMoney());
}else {
if (account.getMoney()<money){
System.out.println("取款失败,余额不足");
}else {
account.setMoney(account.getMoney()-money);
System.out.println("取款成功,当前账户余额:"+account.getMoney());
return;
}
}
}
}else {
System.out.println("账户余额小于100,不可取款");
}
}
/**
* 存款操作
* @param sc
* @param acc
*/
private static void depositMoney(Scanner sc,Account acc) {
System.out.println("=============================存款操作===================================");
System.out.print("输入存款金额:");
double money=sc.nextDouble();
acc.setMoney(acc.getMoney()+money);
System.out.println("存款成功");
showAccount(acc);
return;
}
/*
账户信息展示
*/
private static void showAccount(Account account) {
System.out.println("============================用户详情页面=======================");
System.out.println("卡号:"+account.getCardID());
System.out.println("用户名:"+account.getUserName());
System.out.println("余额:"+account.getMoney());
System.out.println("单次交易限额:"+account.getQuotaMoney());
}
/**
*用户开户功能
* @param accounts
*/
private static void register(ArrayList<Account>accounts,Scanner sc){
System.out.println("====================注册系统================");
System.out.println("请输入账户名称:");
String accountName=sc.next();
//当次限额
System.out.println("请您输入单次限额");
double quota= sc.nextDouble();
String passWord="";
while (true) {
System.out.println("请输入密码:");
passWord=sc.next();
System.out.println("请再输入一次确认密码:");
String okpassword= sc.next();
//判断两次密码是否一致
if (okpassword.equals(passWord)){
break;
}else {
System.out.println("两次密码不一致,请重新输入");
}
}
//生成不重复的卡号cardID
String cardID=creatCardID(accounts);
//创建对象 封装用户信息
//public Account(String cardID, String userName, String passWord, double quotaMoney)
Account account=new Account(cardID,accountName,passWord,quota);
//将新建对象放入集合
accounts.add(account);
System.out.println("恭喜您开户成功!您的卡号是:"+cardID+"请您牢记");
}
//生成不重复的8位卡号
public static String creatCardID(ArrayList<Account>accounts){
Random r=new Random();
String cardId="";
while (true) {
for (int i = 0; i < 8; i++) {
cardId+=r.nextInt(10);
}
//遍历整个集合,查看卡号是否重复
Account acc=getAccountByCardID(accounts,cardId);
if (acc==null){
return cardId;
}
}
}
//按卡号查找账户
public static Account getAccountByCardID(ArrayList<Account>accounts,String cardID){
for (int i = 0; i < accounts.size(); i++) {
Account acc=accounts.get(i);
if (acc.getCardID().equals(cardID)){
return acc;
}
}
return null;//集合内无此卡号
}
}