Java实现ATM银行系统
功能分析
需要实现的功能:
a). 登录账户
b). 注册账户
1、查询
2、存款
3、取款
4、转账
5、修改密码
6、退出
7、注销账户
代码实现
创建Account 账户类:
账户类(Account):
定义了账户的基本属性,包括卡号(cardId)、用户名(userName)、密码(passWord)、余额(money)和当次取现额度(quotaMoney)。
提供了相应的 getter 和 setter 方法。
public class Account {
private String cardId;
private String userName;
private String passWord;
private double money;
private double 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;
}
}
创建ATM 类:
作为程序的入口,负责管理 ATM 系统的整体流程,包括登录、注册、查询、存款、取款、转账、修改密码和注销账户等操作。
登录(login):
允许用户输入卡号和密码进行登录。
如果卡号不存在,提示用户卡号不存在。
如果密码不正确,提示用户密码不正确。
如果登录成功,欢迎用户进入系统并显示操作命令。
private static void login(ArrayList<Account> accounts,Scanner sc){
System.out.println("欢迎您进入到登录操作");
if (accounts.size() > 0){
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()+"先生/女士进入系统,您可以开始办理你的业务了!");
showCommand(sc,acc,accounts);
return;
}else
System.out.println("您输入的密码不正确!");
}
}else
System.out.println("卡号不存在,请进行确认!");
}
}else
System.out.println("当前的系统无任何账户,请先注册后在进行登录!");
}
注册(register):
允许用户输入用户名、密码、确认密码和当次取现额度进行注册。
如果两次输入的密码不一致,提示用户两次输入的密码不一致。
如果注册成功,恭喜用户开户成功并显示卡号。
private static void register(ArrayList<Account> accounts,Scanner sc){
System.out.println("欢迎您进入到开户操作");
Account acc = new Account();
System.out.println("请您输入账户名称:");
String userName = sc.next();
acc.setUserName(userName);
while (true){
System.out.println("请您输入账户密码:");
String passWord = sc.next();
System.out.println("请您输入确认密码:");
String okPassWord = sc.next();
if (okPassWord.equals(passWord)){
acc.setPassWord(okPassWord);
break;
}else
System.out.println("两次输入的密码不一致!");
}
System.out.println("请您设置当次的取现额度:");
double quataMoney = sc.nextDouble();
acc.setQuotaMoney(quataMoney);
String cardId = createCardId(accounts);
acc.setCardId(cardId);
accounts.add(acc);
System.out.println("恭喜您,"+acc.getUserName()+"先生/女士,您开户完成,您的卡号是:"+acc.getCardId());
}
查询(showAccount):
显示当前账户的详细信息,包括卡号、户主、余额和当次取现额度。
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());
}
存款(deposiMoney):
允许用户输入存款金额。
如果存款金额大于 0,将存款金额添加到账户余额中。
显示存款后的账户余额。
private static void deposiMoney(Account acc,Scanner sc){
System.out.println("==========欢迎进入到账户存款操作==========");
System.out.println("请您输入存款的金额:");
double money=sc.nextDouble();
acc.setMoney(acc.getMoney()+money);
showAccount(acc);
}
取款(drawMoney):
允许用户输入取款金额。
如果取款金额大于 0 且小于账户余额,将取款金额从账户余额中扣除。
如果取款金额大于账户余额,提示用户账户余额不足。
如果取款金额大于当次取现额度,提示用户取款金额超过了每次的限额。
显示取款后的账户余额。
private static void drawMoney(Account acc,Scanner sc){
System.out.println("==========欢迎进入到账户取款操作==========");
double money=acc.getMoney();
if (money>=100){
while (true){
System.out.println("请您输入取钱的金额:");
double drawMoney=sc.nextDouble();
if (drawMoney>acc.getQuotaMoney()){
System.out.println("您当前取款的金额超过了每次的限额!");
}else {
if (drawMoney > money)
System.out.println("当前的余额不足!余额为:" + money);
else {
acc.setMoney(money - drawMoney);
System.out.println("您当前取钱完成,请拿走你的钱!剩余余额为:" + acc.getMoney());
break;
}
}
}
}else
System.out.println("您当前的账户余额不足100元,存钱去吧!");
}
转账(transferMoney):
允许用户输入转账金额和对方卡号。
如果对方卡号不存在,提示用户对方卡号不存在
如果转账金额大于 0 且小于账户余额,将转账金额从账户余额中扣除并添加到对方账户余额中。
如果转账金额大于账户余额,提示用户账户余额不足。
如果转账金额大于当次取现额度,提示用户转账金额超过了每次的限额。
显示转账后的账户余额。
private static void transferMoney(Account acc,ArrayList<Account>accounts,Scanner sc){
if (acc.getMoney()<=0){
System.out.println("您自己都没钱,别转钱了!");
return;
}
if (accounts.size()>=2){
while(true){
System.out.println("请您输入对方的卡号:");
String cardId = sc.next();
Account otherAcc = getAccountByCardId(cardId,accounts);
if (otherAcc != null){
if (acc.getCardId().equals(otherAcc.getCardId())){
System.out.println("不能给自己的账户转账!");
}else {
String rs = "*" + otherAcc.getUserName().substring(1);
System.out.println("请您确认【" + rs + "】的姓氏来确认!");
System.out.println("请您确认对方的姓氏:");
String preName = sc.next();
if (otherAcc.getUserName().startsWith(preName)){
while(true){
System.out.println("请您输入转账的金额(您最多可以转账):" + acc.getMoney() + "元");
double money = sc.nextDouble();
if (money > acc.getMoney()){
System.out.println("账户没这么多钱!");
}else{
acc.setMoney(acc.getMoney() - money);
otherAcc.setMoney(otherAcc.getMoney() + money);
System.out.println("您已经完成了转账!当前还剩:" + acc.getMoney());
return;
}
}
}else {
System.out.println("您输入的对方的信息有误!");
}
}
}else{
System.out.println("您输入的转账卡号不存在!");
}
}
}else {
System.out.println("当前的系统中没有其他账户可以转账,去注册一个吧!");
}
}
修改密码(updatePassWord):
允许用户输入当前密码、新密码和确认密码。
如果当前密码不正确,提示用户密码不正确。
如果两次输入的新密码不一致,提示用户两次输入的密码不一致。
如果修改密码成功,提示用户密码修改成功并要求重新登录。
private static void updatePassWord(Account acc,Scanner sc){
while (true){
System.out.println("请您输入当前密码认证:");
String passWord=sc.next();
if (acc.getPassWord().equals(passWord)){
System.out.println("请您输入新密码:");
String newPassWord=sc.next();
System.out.println("请您确认新密码:");
String okPassWord= sc.next();
if (newPassWord.equals(okPassWord)) {
acc.setPassWord(okPassWord);
System.out.println("密码已经修改成功,请重新登录!");
return;
}else
System.out.println("两次的密码不一致!");
}else
System.out.println("您输入的密码有误,请重新确认密码!");
}
}
退出:
退出当前登录的账户,返回主页面。
case 6:
System.out.println("感谢您使用ATM系统,欢迎下次光临!");
return;
注销账户:
允许用户选择是否注销账户。
如果用户选择注销账户,将账户从账户列表中删除并提示用户注销成功。
case 7:
while(true){
System.out.println("您确定要注销账户吗?(y/n)");
String choice = sc.next();
if (choice.equals("y")){
accounts.remove(acc);
System.out.println("您的账户已经成功注销,感谢您使用ATM系统!");
return;
}else if (choice.equals("n")){
System.out.println("您已经取消注销账户的操作。");
break;
}else{
System.out.println("您输入的选项不正确,请重新输入!");
}
}
break;
完整代码:
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
public static void main(String[] args) {
System.out.println("欢迎您进入ATM系统");
ArrayList<Account> accounts = new ArrayList<>();
while (true){
System.out.println("1、登录账户");
System.out.println("2、注册账户");
System.out.println("请您选择操作:");
Scanner sc = new Scanner(System.in);
int com = sc.nextInt();
switch (com){
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("欢迎您进入到登录操作");
if (accounts.size() > 0){
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()+"先生/女士进入系统,您可以开始办理你的业务了!");
showCommand(sc,acc,accounts);
return;
}else
System.out.println("您输入的密码不正确!");
}
}else
System.out.println("卡号不存在,请进行确认!");
}
}else
System.out.println("当前的系统无任何账户,请先注册后在进行登录!");
}
private static void showCommand(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:
deposiMoney(acc,sc);
break;
case 3:
drawMoney(acc,sc);
break;
case 4:
transferMoney(acc,accounts,sc);
break;
case 5:
updatePassWord(acc,sc);
return;
case 6:
System.out.println("感谢您使用ATM系统,欢迎下次光临!");
return;
case 7:
while(true){
System.out.println("您确定要注销账户吗?(y/n)");
String choice = sc.next();
if (choice.equals("y")){
accounts.remove(acc);
System.out.println("您的账户已经成功注销,感谢您使用ATM系统!");
return;
}else if (choice.equals("n")){
System.out.println("您已经取消注销账户的操作。");
break;
}else{
System.out.println("您输入的选项不正确,请重新输入!");
}
}
break;
}
}
}
private static void transferMoney(Account acc,ArrayList<Account>accounts,Scanner sc){
if (acc.getMoney()<=0){
System.out.println("您自己都没钱,别转钱了!");
return;
}
if (accounts.size()>=2){
while(true){
System.out.println("请您输入对方的卡号:");
String cardId = sc.next();
Account otherAcc = getAccountByCardId(cardId,accounts);
if (otherAcc != null){
if (acc.getCardId().equals(otherAcc.getCardId())){
System.out.println("不能给自己的账户转账!");
}else {
String rs = "*" + otherAcc.getUserName().substring(1);
System.out.println("请您确认【" + rs + "】的姓氏来确认!");
System.out.println("请您确认对方的姓氏:");
String preName = sc.next();
if (otherAcc.getUserName().startsWith(preName)){
while(true){
System.out.println("请您输入转账的金额(您最多可以转账):" + acc.getMoney() + "元");
double money = sc.nextDouble();
if (money > acc.getMoney()){
System.out.println("账户没这么多钱!");
}else{
acc.setMoney(acc.getMoney() - money);
otherAcc.setMoney(otherAcc.getMoney() + money);
System.out.println("您已经完成了转账!当前还剩:" + acc.getMoney());
return;
}
}
}else {
System.out.println("您输入的对方的信息有误!");
}
}
}else{
System.out.println("您输入的转账卡号不存在!");
}
}
}else {
System.out.println("当前的系统中没有其他账户可以转账,去注册一个吧!");
}
}
private static void deposiMoney(Account acc,Scanner sc){
System.out.println("==========欢迎进入到账户存款操作==========");
System.out.println("请您输入存款的金额:");
double money=sc.nextDouble();
acc.setMoney(acc.getMoney()+money);
showAccount(acc);
}
private static void drawMoney(Account acc,Scanner sc){
System.out.println("==========欢迎进入到账户取款操作==========");
double money=acc.getMoney();
if (money>=100){
while (true){
System.out.println("请您输入取钱的金额:");
double drawMoney=sc.nextDouble();
if (drawMoney>acc.getQuotaMoney()){
System.out.println("您当前取款的金额超过了每次的限额!");
}else {
if (drawMoney > money)
System.out.println("当前的余额不足!余额为:" + money);
else {
acc.setMoney(money - drawMoney);
System.out.println("您当前取钱完成,请拿走你的钱!剩余余额为:" + acc.getMoney());
break;
}
}
}
}else
System.out.println("您当前的账户余额不足100元,存钱去吧!");
}
private static void updatePassWord(Account acc,Scanner sc){
while (true){
System.out.println("请您输入当前密码认证:");
String passWord=sc.next();
if (acc.getPassWord().equals(passWord)){
System.out.println("请您输入新密码:");
String newPassWord=sc.next();
System.out.println("请您确认新密码:");
String okPassWord= sc.next();
if (newPassWord.equals(okPassWord)) {
acc.setPassWord(okPassWord);
System.out.println("密码已经修改成功,请重新登录!");
return;
}else
System.out.println("两次的密码不一致!");
}else
System.out.println("您输入的密码有误,请重新确认密码!");
}
}
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("欢迎您进入到开户操作");
Account acc = new Account();
System.out.println("请您输入账户名称:");
String userName = sc.next();
acc.setUserName(userName);
while (true){
System.out.println("请您输入账户密码:");
String passWord = sc.next();
System.out.println("请您输入确认密码:");
String okPassWord = sc.next();
if (okPassWord.equals(passWord)){
acc.setPassWord(okPassWord);
break;
}else
System.out.println("两次输入的密码不一致!");
}
System.out.println("请您设置当次的取现额度:");
double quataMoney = sc.nextDouble();
acc.setQuotaMoney(quataMoney);
String cardId = createCardId(accounts);
acc.setCardId(cardId);
accounts.add(acc);
System.out.println("恭喜您,"+acc.getUserName()+"先生/女士,您开户完成,您的卡号是:"+acc.getCardId());
}
public static String createCardId(ArrayList<Account> accounts){
while (true){
String cardId = "";
Random r = new Random();
for (int i = 1; i < 9; i++) {
cardId += r.nextInt(10);
}
Account account = getAccountByCardId(cardId,accounts);
if (account == 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;
}
}