本项目直接写在两个类里
Talk is cheap. Show me the code.
package itjiangfeng;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATMSystem {
public static void main(String[] args) {
//1.系统需要的容器对象
ArrayList<Account>accounts = new ArrayList<Account>();
//2.首页登录界面
showMain(accounts);
}
public static void showMain(ArrayList<Account> accounts){
System.out.println("=================欢迎进入首页=================");
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请您输入您想做的操作:");
System.out.println("1、登录");
System.out.println("2、开户");
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("您当前输入的操作命令不被支持!");
}
}
}
//用户登录功能
private static void login(ArrayList<Account> accounts,Scanner sc) {
if (accounts.size()==0){
System.out.println("当前系统中无任何账户");
return;
//单独使用结束功能
}
while (true) {
System.out.println("请你输入登录卡号:");
String cardId = sc.next();
Account acc = getAccountByCardId(cardId,accounts);
//判断账户对象是否存在
if(acc != null){
//让用户继续输入密码
while (true) {
System.out.println("请您输入用户密码:");
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("您的输入有错误,请再次输入!");
}
}
}else{
System.out.println("该账号不存在!");
}
}
}
//用户操作界面
private static void showUserCommand(Scanner sc,Account acc,ArrayList<Account>accounts) {
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.注销账户");
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(acc,sc);
return;
//结束当前操作方法
case 6:
//退出
System.out.println("欢迎下次使用!");
return;
//结束当前操作方法
case 7:
//注销账户
//从当前集合删除当前对象
accounts.remove(acc);
System.out.println("销户成功");
return;
//结束当前操作方法
default:
System.out.println("您的命令输入有误--");
}
}
}
/**
* 修改密码
* @param acc
*/
private static void updatePassword(Account acc,Scanner sc) {
System.out.println("========修改密码==========");
while (true) {
System.out.println("请您输入原账户密码");
String okPassword = sc.next();
if(acc.getPassWord().equals(okPassword)){
System.out.println("请您输入新密码:");
String newPassword = sc.next();
System.out.println("请再次输入新密码:");
String okPassword2 = sc.next();
if(newPassword.equals(okPassword2)){
//正式进入修改密码逻辑
acc.setPassWord(newPassword);
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) {
//层层过滤
//1判断系统中账号是否有两个及以上
if(accounts.size() < 2){
System.out.println("系统中无其他账户,无法转账!");
return;
}
//判断自己账户是否有钱
if(acc.getMoney() == 0){
System.out.println("亲,余额不足,无法完成转账功能!");
return;
}
//转账逻辑
while (true) {
System.out.println("请您输入对方账号卡号:");
String cardId = sc.next();
Account account = getAccountByCardId(cardId,accounts);
if(account != null){
if(account.getCardId().equals(acc.getCardId())){
System.out.println("您不可以为自己转账!");
}else {
//确认对方
String name = "*" + account.getUserName().substring(1);
System.out.println("请您确认对方姓氏是否是"+name);
String prename = sc.next();
if(account.getUserName().startsWith(prename)){
//真正开始转账
System.out.println("请您输入转账的金额");
double money = sc.nextDouble();
if(money > acc.getMoney()){
System.out.println("对不起您转账的金额不足,您最多可以转账" + acc.getMoney());
}else {
//开始转账
acc.setMoney(acc.getMoney()-money);
account.setMoney(account.getMoney()+money);
System.out.println("恭喜你,转账成功!已经为"+ account.getUserName()+"转账"+money);
showAccount(acc);
return;
}
}else {
System.out.println("对不起,转账用户信息有误");
}
}
}else {
System.out.println("对不起,您输入的转账卡号有问题!");
}
}
}
/**
* 取款功能
* @param acc
* @param sc
*/
private static void drawMoney(Account acc, Scanner sc) {
System.out.println("============取款界面==========");
//判断账户
if (acc.getMoney() >= 100){
while (true) {
System.out.println("请输入取款金额");
double money = sc.nextDouble();
if(money>acc.getQuotaMoney()){
System.out.println("您当前取钱超过了每次限额,您每次最多取:" + acc.getQuotaMoney());
}else{
if(acc.getMoney() >= money){
acc.setMoney(acc.getMoney()-money);
System.out.println("恭喜你,取钱成功!当前账户余额:"+acc.getMoney() );
return;//取钱后方法结束
}else {
System.out.println("余额不足");
}
}
}
}else{
System.out.println("金额<100,建议不要取款");
}
}
//存款
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("存款完成!!");
showAccount(acc);
}
private static void showAccount(Account acc) {
System.out.println("=======当前账户详情==========");
System.out.println("卡号:" + acc.getCardId());
System.out.println("姓名:" + acc.getUserName());
System.out.println("余额:" + acc.getMoney());
System.out.println("当次限额:" + acc.getQuotaMoney());
}
//用户开户功能
private static void register(ArrayList<Account> accounts,Scanner sc) {
System.out.println("==========用户开户功能==========");
System.out.println("请您输入开户名称:");
String name = sc.next();
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("两次密码必须一致");
}
}
System.out.println("请您输入单次限额:");
double quateMoney = sc.nextDouble();
//3.生成一个账号卡号,不能与其他卡号重复
String cardId = creatCardId(accounts);
//4.创建一个账号对象
Account account = new Account(cardId,name,password,quateMoney);
//5.把账户对象添加到集合中去
accounts.add(account);
System.out.println("恭喜您,开户成功!您的卡号是" + account.getCardId() + "请你妥善保管");
}
public static String creatCardId(ArrayList<Account>accounts){
while (true) {
String cardId = "";
Random r = new Random();
for (int i = 0; i < 8; i++) {
cardId += r.nextInt(10);
}
Account acc = getAccountByCardId(cardId,accounts);
if(acc == null){
return cardId;
}
}
}
//根据卡号找用户对象
public static Account getAccountByCardId(String cardId, ArrayList<Account>accounts){
for (int i = 0; i < accounts.size(); i++) {
Account acc = accounts.get(i);
if(acc.getCardId().equals(cardId)){
return acc;
}
}
return null;//查无此账号
}
}
package itjiangfeng;
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;
}
}