Account类:
package Java_project_1;
public class Account {
private String carId;//卡号
private String userName;//用户名
private String passWord;//密码
private double money;//账户余额
private double quoteMoney;//每次取现额度
public Account() {
}
public Account(String carId, String userName, String passWord, double money, double quoteMoney) {
this.carId = carId;
this.userName = userName;
this.passWord = passWord;
this.money = money;
this.quoteMoney = quoteMoney;
}
public String getCarId() {
return carId;
}
public void setCarId(String carId) {
this.carId = carId;
}
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 getQuoteMoney() {
return quoteMoney;
}
public void setQuoteMoney(double quoteMoney) {
this.quoteMoney = quoteMoney;
}
}
主类:
package Java_project_1;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class Java_project_1 {
public static void main(String[] args) {
ArrayList<Account>accounts=new ArrayList<Account>();
while (true) {
System.out.println("---------ATM系统----------");
System.out.println("账户登录");
System.out.println("账户开户");
Scanner sc=new Scanner(System.in);
System.out.println("请您选择操作:");
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) {
System.out.println("--------------系统登录操作-----------------");
if(accounts.size()==0){
System.out.println("当前系统中无任何账户,请先开户,再登陆。");
return;
}
System.out.println("请输入卡号:");
String carId=sc.next();
Account acc=getAccountByCarId(carId,accounts);
if(acc!=null){
while (true){
System.out.println("请输入登录密码:");
String passWord=sc.next();
if(acc.getPassWord().equals(passWord)){
System.out.println(acc.getUserName() + "登录成功");
showUserCommand(sc,acc);
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("******ATM主菜单******");
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(sc,acc,accounts);
break;
case 5:
updatePassWord(sc,acc);
break;
case 6:
System.out.println("已退出");
return;
case 7:
if(deleteAccount(acc,sc,accounts)){
return;
}else {
break;
}
default:
System.out.println("输入的操作有误");
}
}
}
/**
* 销户功能
* @param acc
* @param sc
* @param accounts
*/
private static boolean deleteAccount(Account acc, Scanner sc, ArrayList<Account> accounts) {
System.out.println("--------------用户销户-------------");
System.out.println("真的要销户?y/n");
String rs=sc.next();
switch (rs){
case "y":
if(acc.getMoney()>0){
System.out.println("账户中仍有余额,销户失败");
}else {
accounts.remove(acc);
System.out.println("账户已销户");
return true;
}
break;
default:
System.out.println("当前账户继续保留");
}
return false;
}
/**
* 修改密码
* @param sc 扫描器
* @param acc 当前登录的对象
*/
private static void updatePassWord(Scanner sc, Account acc) {
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 okPassWord=sc.next();
if (newPassWord.equals(okPassWord)){
acc.setPassWord(newPassWord);
System.out.println("密码修改成功");
return;
}else {
System.out.println("两次密码不一致");
}
}
}else {
System.out.println("输入的密码不正确");
}
}
}
/**
*转账功能
* @param sc 扫描器
* @param acc 账户对象
* @param accounts 全部账户集合
*/
private static void transferMoney(Scanner sc, Account acc, ArrayList<Account> accounts) {
System.out.println("---------------用户转账操作---------------");
if(accounts.size()<2){
System.out.println("系统中不存在第二个账户");
return;
}
if(acc.getMoney()==0){
System.out.println("账户中没有余额支持操作");
return;
}
while (true){
System.out.println("请输入对方的卡号:");
String carId=sc.next();
if(carId.equals(acc.getCarId())){
System.out.println("不可以给自己转账");
continue;
}
Account account=getAccountByCarId(carId,accounts){
if(account==null){
System.out.println("账户不存在");
}else {
String userName=account.getUserName();
String tip="*"+userName.substring(1);
System.out.println("请输入[" + tip + "]的姓氏");
String preName=sc.next();
if(userName.startsWith(preName)){
while (true){
System.out.println("请输入转账金额:");
double money=sc.nextDouble();
if(money> acc.getMoney()){
System.out.println("账号余额不足");
}else {
acc.setMoney(acc.getMoney()-money);
account.setMoney(account.getMoney()+money);
System.out.println("转账成功");
return;
}
}
}else {
System.out.println("输入信息有误");
}
}
}
}
}
/**
* 取钱
* @param acc 当前账户对象
* @param sc 扫描器
*/
private static void drawMoney(Account acc, Scanner sc) {
System.out.println("取钱操作");
if(acc.getMoney()==0){
System.out.println("余额为零");
return;
}
while (true) {
System.out.println("请输入取款金额:");
double money=sc.nextDouble();
if (money>acc.getQuoteMoney()){
System.out.println("超过单次取款限额:" + acc.getQuoteMoney());
}else {
if (money> acc.getMoney()){
System.out.println("余额不足");
}else {
System.out.println("已取出" + money + "元");
acc.setMoney(acc.getMoney()-money);
return;
}
}
}
}
/**
* 存钱
* @param acc 当前账号对象
* @param sc 扫描器
*/
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("存钱成功");
}
/**
* 展示账户信息
* @param acc
*/
private static void showAccount(Account acc) {
System.out.println("=====账户信息=====");
System.out.println("户主:"+acc.getUserName());
System.out.println("卡号:"+acc.getCarId());
System.out.println("余额:"+acc.getMoney());
System.out.println("单次限额:"+acc.getQuoteMoney());
}
/**
* 用户开户
* @param accounts 接受的账户集合
*/
private static void register(ArrayList<Account> accounts,Scanner sc) {
System.out.println("--------------系统开户操作----------------");
Account account=new Account();
while (true) {
System.out.println("请输入账户用户名:");
String userName=sc.next();
account.setUserName(userName);
System.out.println("请输入账户密码:");
String passWord= sc.next();
System.out.println("请输入账户密码:");
String okPassWord= sc.next();
if(okPassWord.equals(passWord)){
account.setPassWord(okPassWord);
break;
}else {
System.out.println("密码不一致,请重新输入:");
}
}
System.out.println("请输入账号单次限额:");
double quotaMoney= sc.nextDouble();
account.setQuoteMoney(quotaMoney);
String cardId= getRandomCarId(accounts);
account.setCarId(cardId);
accounts.add(account);
System.out.println("userName+开户成功,卡号是:+carId+请妥善保管卡号");
}
/**
* 为账户生成8位数字
* @param accounts
* @return
*/
private static String getRandomCarId(ArrayList<Account>accounts) {
Random r=new Random();
while (true) {
String carId="";
for (int i=0;i<8;++i){
carId+=r.nextInt(10);
}
Account acc=getAccountByCarId(carId,accounts);
if(acc==null){
return carId;
}
}
}
/**
* 根据卡号查询出账户对象
* @param carId 卡号
* @param accounts 全部账户的集合
* @return 账户对象|null
*/
private static Account getAccountByCarId(String carId,ArrayList<Account>accounts){
for (int i=0;i< accounts.size();++i){
Account acc=accounts.get(i);
if(acc.getCarId().equals(carId)){
return acc;
}
}
return null;
}
}