此项目主要是基础的总结,需要细心细心再细心,写代码之前必须明确自己的需求和主要的逻辑布局,以下是项目的代码块
package ATM;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
import java.util.function.DoubleToIntFunction;
public class ATMSystem {
public static void main(String[] args) {
//定义账户类
//定义集合容器,存储银行账户对象
ArrayList<Account> accounts = new ArrayList<>();
Scanner sc = new Scanner(System.in);
//展示系统的首页
while (true) {
System.out.println("=========ATM系统==========");
System.out.println("1.账户登录");
System.out.println("2.账户开户");
System.out.println("0.退出");
System.out.println("请你选择操作:");
int command = sc.nextInt();
//对选择的数字进行判断
switch (command){
case 0:
return;
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) {
System.out.println("=================ATM系统登录============");
if(accounts.size()==0){
System.out.println("ATM系统暂无用户,请先创建用户");
return;//结束当前的方法
}
while (true) {
//正式进入系统
System.out.println("请你输入登录卡号:");
String cardId = sc.next();
Account account = getAccountByCaldId(cardId,accounts);
if (account!=null){
while (true) {
//卡号存在,用户输入密码,判断密码是否正确
System.out.println("请你输入登录密码:");
String passWold = sc.next();
if(account.getPasswdWord().equals(passWold)){
System.out.println("欢迎登录ATM系统~~"+account.getUserName()+"先生/女士");
showUserCommand(sc,account,accounts);
return;
}
else {
System.out.println("你输入的密码不正确请再次输入~~");
}
}
}
else {
System.out.println("对不起,系统中不存在该系统账户~~");
}
}
}
//用户操作页面
private static void showUserCommand(Scanner sc,Account account,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(account);
break;
case 2:
//存款
depositMoney(account,sc);
break;
case 3:
//取款
drawMoney(account,sc);
break;
case 4:
//转账
transferMoney(account,sc,accounts);
break;
case 5:
//修改密码
updaePassWold(sc,account);
return;
case 6:
//退出
System.out.println("欢迎下次登录!!!");
//跳出当前方法
return;
case 7:
//注销账户
boolean flag = deleteAccount(sc,accounts,account);
if (flag){
return;
}else {
break;
}
default:
System.out.println("你输入的号码有误!!!");
}
}
}
//销户功能
private static boolean deleteAccount(Scanner sc, ArrayList<Account> accounts,Account account) {
System.out.println("您确定需要销毁账户吗?y/n");
String rs = sc.next();
if (rs.equals("y")){
if (account.getMoney()>0){
System.out.println("账户余额不为0,销户失败!");
return false;
}
else {
System.out.println("账户销户完成!!!");
accounts.remove(account);
return true;
}
}
else {
System.out.println("好的当前账户保留使用~");
return false;
}
}
//修改密码
private static void updaePassWold(Scanner sc, Account account) {
System.out.println("=============用户密码修改=============");
while (true) {
System.out.println("请你输入当前密码");
String passWold = sc.next();
if (passWold.equals(account.getPasswdWord())){
while (true) {
System.out.println("请输入新密码:");
String newpassWold = sc.next();
System.out.println("请确认密码:");
String okpassWold = sc.next();
if (newpassWold.equals(okpassWold)){
account.setPasswdWord(okpassWold);
System.out.println("恭喜你修改密码成功~");
return;
}
else {
System.out.println("对不起你输入新密码有误!请重新输入~");
}
}
}
else {
System.out.println("你输入的密码不正确!");
}
}
}
//转账功能
private static void transferMoney(Account account, Scanner sc, ArrayList<Account> accounts) {
//不能转账的两个情况
//1.判断系统是否有两个用户对象
if (accounts.size()<2){
System.out.println("当前系统中,不足两个账户,不能使用转账功能!");
return;
}
if (account.getMoney()==0){
System.out.println("对不起你也没钱,转账失败!!");
return;
}
//开始转账
while (true) {
System.out.println("请您输入对方的卡号:");
String cardId = sc.next();
//输入的卡号为自己卡号
if (cardId.equals(account.getCardId())){
System.out.println("自己不能给自己转账,请输入正确的卡号:");
//结束档次执行,进入下一次循环
continue;
}
//判断卡号是否存在系统
Account account1 = getAccountByCaldId(cardId,accounts);
if (account1 ==null){
System.out.println("对不起,你输入的这个账号不存在~~");
}
else {
//进行姓氏验证
String userNname = account.getUserName();//黑马周芷若
String tip = "*"+userNname.substring(1);
System.out.println("请你输入["+tip+"]的姓氏");
//这个账号存在了,继续认证姓氏
String preName =sc.next();
//判断是否正确
if (userNname.startsWith(preName)){
//认证通过
System.out.println("请你输入转账金额:");
double money =sc.nextDouble();
//判断转账金额是否足够
if (money>account.getMoney()){
System.out.println("对不起,您的余额不足!最多可以转账:"+account.getMoney());
}
else {
//进行转账操作
account.setMoney(account.getMoney()-money);
account1.setMoney(money+account1.getMoney());
System.out.println("转账成功,您的余额为:"+account.getMoney());
//退出转账代码
return;
}
}
//姓氏验证没有通过
else {
System.out.println("对不起,你输入的信息有误");
}
}
}
}
//取钱操作
private static void drawMoney(Account account, Scanner sc) {
//1.判断账户是否有100元
if(account.getMoney()<100){
System.out.println("对不起当前账户金额不足100,不能取钱");
return;
}
while (true) {
System.out.println("请你输入取款金额:");
double money = sc.nextDouble();
//3.判断输入金额是否符合体现要求和余额要求
if (money>account.getQuotaMoney()){
System.out.println("对不起,您当前取款金额超出每次限制!");
}
else {
if (account.getMoney()<money){
System.out.println("对不起,你的余额不足!"+account.getMoney());
}
else {
System.out.println("恭喜你取款成功!");
account.setMoney(account.getMoney()-money);
showAccount(account);
return;
}
}
}
}
//存款功能
private static void depositMoney(Account account, Scanner sc) {
System.out.println("=============用户存款操作================");
System.out.println("请你输入存款金额:");
double money = sc.nextDouble();
account.setMoney(account.getMoney()+money);
System.out.println("恭喜你存钱成功~~,当前账户信息如下:");
showAccount(account);
}
//查询账户内容
private static void showAccount(Account account) {
System.out.println("=============当前账户信息如下==============");
System.out.println("账户名称:"+account.getUserName());
System.out.println("账户号码:"+account.getCardId());
System.out.println("账户余额:"+account.getMoney());
System.out.println("账户体现金额:"+account.getQuotaMoney());
}
//用户开户功能
private static void register(ArrayList<Account> accounts,Scanner sc) {
//1.创建一个账户对象,用于后期封装账户信息
Account account = new Account();
//2.录入当前这个账户信息,添加到账户对象中去
System.out.println("请你输入账户用户名:");
String userName = sc.next();
account.setUserName(userName);
while (true) {
System.out.println("请你输入账户密码:");
String passwdWord = sc.next();
System.out.println("请你确认账户密码:");
String okpasswdWord = sc.next();
if (okpasswdWord.equals(passwdWord)){
account.setPasswdWord(okpasswdWord);
break;
}
else {
System.out.println("对不起,你二次输入的密码不正确,请重新输入~~");
}
}
System.out.println("请输入账户当次限额:");
double quotaMoney = sc.nextDouble();
account.setQuotaMoney(quotaMoney);
//为账户创建一个8位不重复的卡号
String cardID = getRandmCardId(accounts);
account.setCardId(cardID);
//3.把账户对象添加到账户集合中去
accounts.add(account);
System.out.println("恭喜你,"+userName+"先生/女士,你开户成功,你的卡号是:"+cardID+",请您妥善保管卡号~");
}
//返回一个8位不重复的卡号
private static String getRandmCardId(ArrayList<Account> accounts) {
while (true) {
String cardId = "";
Random r =new Random();
for (int i = 0; i < 8; i++) {
cardId+=r.nextInt(10);
}
//判断创建的卡号是否已经在集合中存在
Account acc = getAccountByCaldId(cardId,accounts);
if(acc ==null){
return cardId;
}
}
}
//查找集合中是否有该账户id的对象,返回对象
private static Account getAccountByCaldId(String cardId,ArrayList<Account> accounts){
for (int i = 0; i <accounts.size() ; i++) {
if(accounts.get(i).getCardId().equals(cardId)){
return accounts.get(i);
}
}
//没有账户id
return null;
}
}
Account -class
package ATM;
public class Account {
//定义成员变量
private String cardId;//账号
private String userName;//用户名
private String passwdWord;//用户密码
private double money;//账户余额
private double quotaMoney;//每次体现金额
public Account() {
}
public Account(String cardId, String userName, String passwdWord, double money, double quotaMoney) {
this.cardId = cardId;
this.userName = userName;
this.passwdWord = passwdWord;
this.money = money;
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 getPasswdWord() {
return passwdWord;
}
public void setPasswdWord(String passwdWord) {
this.passwdWord = passwdWord;
}
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;
}
}