Java入门基础-09综合案例ATM系统
本章知识点总结于黑马程序员的视频课程:《Java入门基础课程》,是对上课做的笔记
目录
- Java入门基础-09综合案例ATM系统
- 前言
- 01 系统构架搭建、欢迎页设计
- 02 开户功能实现
- 03 登录功能实现
- 04 操作页展示、查询账户、退出账户
- 05 存款、取款功能实现
- 06 转账功能实现
- 07 销户功能实现
- 08 用户密码修改
- 全部代码
前言
全部代码在最后面。
后面的课程为面向对象高级
01 系统构架搭建、欢迎页设计
系统构架搭建:
① 定义一个账户类Account,至少需要包含(卡号、姓名、性别、密码、余额、每次取现额度)
② 定义一个ATM类,用来代表ATM系统,负责提供所有的业务需求,比如:展示ATM的系统欢迎页、开通帐户、转账……
③ 定义一个测试类Test,负责对我们开发的ATM系统进行测试。系统欢迎页设计
系统欢迎页设计:
在ATM类中设计一个方法start(),方法里负责展示欢迎界面。
Account.java
package atm;
public class Account {
private String cardTd;
private String userName;
private char sex;
private String passWord;
private double money;
private double limit; // 限额
public Account() {
}
public Account(String cardTd, String userName, char sex, String passWord, double money, double limit) {
this.cardTd = cardTd;
this.userName = userName;
this.sex = sex;
this.passWord = passWord;
this.money = money;
this.limit = limit;
}
public String getCardTd() {
return cardTd;
}
public void setCardTd(String cardTd) {
this.cardTd = cardTd;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
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 getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
}
ATM.java
package atm;
import java.util.ArrayList;
import java.util.Scanner;
public class ATM {
private ArrayList<Account> accounts = new ArrayList<>(); // 一定要私有化
private Scanner sc = new Scanner(System.in);
/** 启动ATM系统 展示欢迎界面*/
public void start(){
System.out.println("========欢迎您进入到了ATM系统========");
System.out.println("1、用户登录");
System.out.println("2、用户开户");
System.out.println("请选择:");
int command = sc.nextInt();
switch (command){
case 1:
// 用户登录
break;
case 2:
// 用户开户
break;
default:
System.out.println("没有该操作~");
}
}
}
Test.java
package atm;
public class Test {
public static void main(String[] args) {
// 1、创建一个ATM对象,代表ATM系统
ATM atm = new ATM();
// 2、调用ATM对象的start方法,启动系统
atm.start(); // 对start()方法进行测试
}
}
对start()方法进行测试,运行结果:
总结
1、咱们ATM系统的架构是怎么样的?
- 定义了一个账户类Account,定义系统关心的账户信息。
- 定义了一个ATM类,代表ATM系统,负责处理账户相关的业务需求
- 定义了一个Test类,负责测试系统:创建ATM对象代表ATM系统并启动。
2、ATM类中使用什么来存储系统全部用户的账户信息的?
ArrayList accounts = new ArrayList<>();
02 开户功能实现
用户开户功能:
就是新增一个账户,也就是往系统的账户集合中添加一个账户对象。(在ATM中实现)
账户的要求:
- 用户信息包含:姓名、性别、密码、每次取现额度、卡号。
- 注意:卡号由系统生成,要求是8位的数字组成的(且卡号不能重复)。
ATM.java
/** 完成用户开户操作*/
private void createAccoount(){
System.out.println("=====系统开户操作=====");
// 1. 创建一个账户对象,用于封装用户的开户信息
Account acc = new Account();
// 2. 需要用户输入自己的开户信息,赋值给账户对象
System.out.println("请输入您的账号名称:");
String name = sc.next();
acc.setUserName(name);
while (true){
System.out.println("请输入您的性别:");
char sex = sc.next().charAt(0);
if (sex == '男' || sex == '女'){
acc.setSex(sex);
break;
}else {
System.out.println("您的输入有误,只能输入男或女");
}
}
while (true) {
System.out.println("请输入您的账号密码:");
String passWord = sc.next();
System.out.println("请输入您的确认密码:");
String okpassWord = sc.next();
// 判断两次输入的密码是否相同
if (okpassWord.equals(passWord)) {
acc.setPassWord(passWord);
break;
} else {
System.out.println("您输入的两次密码不一致,请重新输入~");
}
}
System.out.println("请输入您的取现额度:");
double limit = sc.nextDouble();
acc.setLimit(limit);
// 给用户生成一个卡号
String newCardId = createCardId();
acc.setCardTd(newCardId);
// 3. 把这个账户对象,存入到账户集合中去
accounts.add(acc);
// 在getUserName()进行对称呼的封装,将语句return userName 改为为:return userName + (sex == '男' ? "先生" : "女士");
System.out.println("恭喜您, " + acc.getUserName() + "开户成功,您的卡号是:" + acc.getCardTd());
}
总结:
1、开户功能的实现需要哪几步操作?
- 定义一个开户方法:createAccount。
- 在方法里创建一个Account账户对象,负责封装用户的账户信息(姓名、性别、密码、卡号等等)。
- 卡号需要由系统自动生成(卡号要求是8位的数字组成的,且不能重复,等下详细讲解这个)
- 把账户对象存入到账户集合中去。
- 提示开户成功!
为新用户的账号生成一个新卡号
需求:卡号要求是8位的数字组成的,且不能重复;新卡号得到后,需要赋值给当前账户对象。(在ATM.java中开发)
代码:
/**卡号要求是8位的数字组成的,且不能重复*/
public String createCardId(){
while (true) {
// 1. 定义一个String类型的变量记住8位数的数字作为一个卡号
String cardId = "";
// 2.利用循环,循环8次,每次产生一个随机数给cardId连接起来
Random r = new Random();
for (int i = 0; i < 8; i++) {
int data = r.nextInt(10); // 0 - 9
cardId += data;
}
// 3. 判断cardId中记住的卡号,是否与其他账号的卡号重复,没有重复,才可以作为一个新卡号返回。
Account acc = getAccountByCardId(cardId);
if (acc == null) {
return cardId;
}
}
}
/** 根据卡号查询账户对象返回*/
private Account getAccountByCardId(String cardId) {
// 遍历全部的账户对象
for (int i = 0; i < accounts.size(); i++) {
Account acc = accounts.get(i);
// 判断这个账号对象acc中的卡号是否是我们要找的卡号
if(acc.getCardTd().equals(cardId)){
return acc;
}
}
return null;
}
总结
1、账户的新卡号是如何生成的?
- 定义了一个方法:createCardId(),用来返回一个不重复的新卡号。
- 方法里,使用循环生成了8个随机的数字连起来作为卡号。
- 接着判断该卡号是否与其他账户的卡号重复。
- 根据该卡号去账户集合中查询账户对象,如果没有查询到账户对象,该卡号不重复,即可返回。
- 如果查询到了账户对象,则使用循环重复以上(2、3、4)步操作。
03 登录功能实现
用户登录功能
① 如果系统没有任何账户对象,则不允许登录。
② 让用户输入登录的卡号,先判断卡号是否正确,如果不正确要给出提示。
③ 如果卡号正确,再让用户输入账户密码,如果密码不正确要给出提示,如果密码也正确,则给出登录成功的提示。
方法要私有化
在ATM.java 中前几行记得加: private Account loginAcc; // 用于记住登陆后的用户账号
ATM.java
/** 用户登录功能*/
private void login(){
System.out.println("======系统登录=====");
// 1. 判断系统中是否存在账户对象,若不存在,直接结束登录操作
if (accounts.size() == 0){
System.out.println("当前系统中不存在用户,请先开户再来登录~");
return; // 跳出登录方法
}
// 2. 系统中存在账户对象,进行登录操作
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入您的卡号:");
String cardId = sc.next();
// 3. 判断这个卡号是否存在
Account acc = getAccountByCardId(cardId);
if (acc == null){
System.out.println("您输入的卡号不存在,请重新确认~");
}else {
while (true) {
// 卡号存在,输入密码
System.out.println("请输入您的登录密码:");
String passWord = sc.next();
// 4.判断密码是否正确
if (acc.getPassWord().equals(passWord)){
loginAcc = acc;
System.out.println("恭喜 " + acc.getUserName() + "登录成功, 您的卡号为:" + acc.getCardTd());
}else {
System.out.println("您输入的密码有误,请重新输入:");
}
}
}
}
}
总结
登录功能如何实现的?
- 设计一个登录方法:login,负责完成用户的登录。
- 方法里:如果系统无任何账户对象,直接结束登录操作。
- 有账户对象,则让用户输入卡号,根据卡号去账户集合中查询账户对象。
- 如果没有找到账户对象,说明登录卡号不存在,提示继续输入卡号。
- 如果找到了账户对象,说明卡号存在,继续输入密码。
- 如果密码不正确,提示继续输入密码。
- 如果密码也正确,则登陆成功,并给出相应的提示。
04 操作页展示、查询账户、退出账户
操作页展示、查询账户、退出账户分析
① 用户登录成功后,需要进入用户操作页。
② 查询就是直接展示当前登录成功的用户的账户信息。
③ 退出账户就是回到欢迎页面。
ATM.java
/** 展示用户登录成功的操作界面*/
private void showUserCommand(){
while (true) {
System.out.println(loginAcc.getUserName() + "您可以选择如下功能进行账户的处理操作:");
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:
// 查询账户
showLoginAccount();
break;
case 2:
// 存款
break;
case 3:
// 取款
break;
case 4:
// 转账
break;
case 5:
// 密码修改
break;
case 6:
// 退出
System.out.println(loginAcc.getUserName() + "您退出系统成功,欢迎下次再来");
return;
case 7:
// 注销当前账户
break;
default:
System.out.println("没有此选择,请重新输入:");
break;
}
}
}
/** 展示当前用户的账户信息*/
private void showLoginAccount() {
System.out.println("====当前您的账户信息如下====");
System.out.println("卡号:" + loginAcc.getCardTd());
System.out.println("户主:" + loginAcc.getUserName());
System.out.println("性别:" + loginAcc.getSex());
System.out.println("余额:" + loginAcc.getMoney());
System.out.println("每次取款限额:" + loginAcc.getLimit());
}
05 存款、取款功能实现
用户存款功能
就是用户为自己的账户存钱,存钱后更新账户的余额即可。
用户取款功能
就是从自己的账户中取钱,取钱的要求:
- 需要先判断账户的余额是否大于 >= 100元,如果够,让用户输入取款金额。
- 需要判断取款金额是否超过了当次限额,以及余额是否足够。
ATM.java
/** 存款*/
private void depositMoney() {
System.out.println("===存款操作===");
System.out.println("请输入您的存款金额:");
double money = sc.nextDouble();
loginAcc.setMoney(loginAcc.getMoney() + money);
System.out.println("您以存款:" + money + "元,存款后余额为:" + loginAcc.getMoney());
}
/** 取款*/
private void drawMoney() {
while (true) {
System.out.println("===取款操作===");
// 1. 需要先判断账户的余额是否大于 >= 100元,如果够,让用户输入取款金额。
if (loginAcc.getMoney() < 100){
System.out.println("您的金额不足100元,无法取出");
return;
}
// 2.可以取款
System.out.println("请输入您的取款金额:");
double money = sc.nextDouble();
// 3.需要判断取款金额是否超过了当次余额与限额,以及余额是否足够。
if (loginAcc.getMoney() >= money){
// 取款金额小于用户余额,判断是否大于限额
if (loginAcc.getLimit() >= money){
loginAcc.setMoney((loginAcc.getMoney() - money));
System.out.println("您以取出:" + money + "元,取款后余额为:" + loginAcc.getMoney());
break;
}else {
System.out.println("您当前的取款金额超过了每次限额,您每次最多可以取款:" + loginAcc.getLimit());
}
}else {
System.out.println("您当前的取款金额超过了余额,您当前余额为:" + loginAcc.getMoney());
}
}
}
06 转账功能实现
用户转账功能
- 把钱转给别人,转账前需要判断:
- 自己账户是否有钱,系统中是否有其他账户。
- 接下来让用户输入对方卡号,判断对方账户是否存在,账户如果存在,还需要认证对方账户的户主姓氏。
ATM.java
/** 用户转账功能*/
private void transferMoney(){
System.out.println("===用户转账===");
// 1.判断系统中是否有其他账户
if (accounts.size() < 2){
System.out.println("当前系统只有您一个用户,无法为其他用户转账");
return;
}
// 2. 判断自己账户是否有钱
if (loginAcc.getMoney() == 0){
System.out.println("您当前的余额为:0,无法转账");
return;
}
// 3.开始转账
while (true){
System.out.println("请输入对方的卡号:");
String cardId = sc.next();
// 4.判断卡号是否正确
Account acc = getAccountByCardId(cardId);
if (acc == null){
System.out.println("您输入的卡号有误");
}else {
// 卡号存在,让用户认证姓氏
String name = "*" + acc.getUserName().substring(1);
System.out.println("请您输入【" + name + "】的姓氏");
String preName = sc.next();
// 5.判断这个姓氏是否正确
if (acc.getUserName().startsWith(preName)){
while (true){
// 认证通过
System.out.println("请输入您要转账的金额:");
double money = sc.nextDouble();
// 6. 判断转账金额是否大于余额
if (loginAcc.getMoney() > money){
// 更新自己账户余额
loginAcc.setMoney(loginAcc.getMoney() - money);
System.out.println("您转账金额为:" + money + "您的余额为:" + loginAcc.getMoney());
// 更新对方账户余额
acc.setMoney(acc.getMoney() + money);
return;
}else {
System.out.println("您的余额小于转账金额,无法转账,您的余额为:" + loginAcc.getMoney());
}
}
}else {
System.out.println("您输入的姓氏错误,请重新输入:");
}
}
}
}
07 销户功能实现
销户操作的基本需求
销户就是从系统中删除当前账户,销户的要求:
- 首先要询问用户是否确定要销户,如果不确定,则回到操作界面。
- 如果确定,要判断用户的账户中是否有钱,有则不允许销户,并回到操作界面。
- 如果没钱,则完成销户,并回到欢迎页。
ATM.java
/**销户操作的基本需求*/
private boolean deleteAccount(){
System.out.println("===销户操作==");
// 1.问一下用户是否要销户
System.out.println("请问您确认要销户吗?y/n");
String command = sc.next();
switch (command){
case "y":
// 2.判断用户的账户中是否有钱
if (loginAcc.getMoney() == 0){
accounts.remove(loginAcc);
System.out.println("您的账户已经成功注销");
return true;
}else {
System.out.println("您的账户还有余额,无法注销");
return false;
}
default:
System.out.println("已取消销户操作");
return false;
}
}
08 用户密码修改
密码修改
就是更改账户的密码,修改密码的要求:
- 需要先认证用户当前的密码。
- 认证通过后,需要让用户输入2次新密码。
- 两次密码一样,则更新账户密码,并回到欢迎界面。
ATM.java
/** 密码修改*/
private void updatePassWord(){
System.out.println("===密码修改==");
while (true){
// 1.需要先认证用户当前的密码
System.out.println("请输入当前的密码:");
String passWord = sc.next();
if (loginAcc.getPassWord().equals(passWord)){
while (true){
System.out.println("请输入新的的密码:");
String newPassWord = sc.next();
System.out.println("请再次输入密码:");
String okNewPassWord = sc.next();
if (okNewPassWord.equals(newPassWord)){
loginAcc.setPassWord(okNewPassWord);
System.out.println("密码修改成功!");
return;
}else {
System.out.println("您两次输入的密码不一致,请重新输入");
}
}
}else {
System.out.println("您输入的密码错误,请重新输入");
}
}
}
全部代码
Account.java
public class Account {
private String cardTd;
private String userName;
private char sex;
private String passWord;
private double money;
private double limit; // 限额
public Account() {
}
public Account(String cardTd, String userName, char sex, String passWord, double money, double limit) {
this.cardTd = cardTd;
this.userName = userName;
this.sex = sex;
this.passWord = passWord;
this.money = money;
this.limit = limit;
}
public String getCardTd() {
return cardTd;
}
public void setCardTd(String cardTd) {
this.cardTd = cardTd;
}
public String getUserName() {
return userName + (sex == '男' ? "先生" : "女士");
}
public void setUserName(String userName) {
this.userName = userName;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
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 getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
}
ATM.java
package atm;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
private ArrayList<Account> accounts = new ArrayList<>(); // 一定要私有化
private Scanner sc = new Scanner(System.in);
private Account loginAcc; // 记住登陆后的用户账号
/** 启动ATM系统 展示欢迎界面*/
public void start(){
while (true) {
System.out.println("========欢迎您进入到了ATM系统========");
System.out.println("1、用户登录");
System.out.println("2、用户开户");
System.out.println("请选择:");
int command = sc.nextInt();
switch (command){
case 1:
// 用户登录
login();
break;
case 2:
// 用户开户
createAccoount();
break;
default:
System.out.println("没有该操作~");
}
}
}
/** 完成用户开户操作*/
private void createAccoount(){
System.out.println("=====系统开户操作=====");
// 1. 创建一个账户对象,用于封装用户的开户信息
Account acc = new Account();
// 2. 需要用户输入自己的开户信息,赋值给账户对象
System.out.println("请输入您的账号名称:");
String name = sc.next();
acc.setUserName(name);
while (true){
System.out.println("请输入您的性别:");
char sex = sc.next().charAt(0);
if (sex == '男' || sex == '女'){
acc.setSex(sex);
break;
}else {
System.out.println("您的输入有误,只能输入男或女");
}
}
while (true) {
System.out.println("请输入您的账号密码:");
String passWord = sc.next();
System.out.println("请输入您的确认密码:");
String okpassWord = sc.next();
// 判断两次输入的密码是否相同
if (okpassWord.equals(passWord)) {
acc.setPassWord(passWord);
break;
} else {
System.out.println("您输入的两次密码不一致,请重新输入~");
}
}
System.out.println("请输入您的取现额度:");
double limit = sc.nextDouble();
acc.setLimit(limit);
// 给用户生成一个卡号
String newCardId = createCardId();
acc.setCardTd(newCardId);
// 3. 把这个账户对象,存入到账户集合中去
accounts.add(acc);
// 在getUserName()进行对称呼的封装,将语句return userName 改为为:return userName + (sex == '男' ? "先生" : "女士");
System.out.println("恭喜您, " + acc.getUserName() + "开户成功,您的卡号是:" + acc.getCardTd());
}
/**卡号要求是8位的数字组成的,且不能重复*/
public String createCardId(){
while (true) {
// 1. 定义一个String类型的变量记住8位数的数字作为一个卡号
String cardId = "";
// 2.利用循环,循环8次,每次产生一个随机数给cardId连接起来
Random r = new Random();
for (int i = 0; i < 8; i++) {
int data = r.nextInt(10); // 0 - 9
cardId += data;
}
// 3. 判断cardId中记住的卡号,是否与其他账号的卡号重复,没有重复,才可以作为一个新卡号返回。
Account acc = getAccountByCardId(cardId);
if (acc == null) {
return cardId;
}
}
}
/** 根据卡号查询账户对象返回*/
private Account getAccountByCardId(String cardId) {
// 遍历全部的账户对象
for (int i = 0; i < accounts.size(); i++) {
Account acc = accounts.get(i);
// 判断这个账号对象acc中的卡号是否是我们要找的卡号
if(acc.getCardTd().equals(cardId)){
return acc;
}
}
return null;
}
/** 用户登录功能*/
private void login(){
System.out.println("======系统登录=====");
// 1. 判断系统中是否存在账户对象,若不存在,直接结束登录操作
if (accounts.size() == 0){
System.out.println("当前系统中不存在用户,请先开户再来登录~");
return; // 跳出登录方法
}
// 2. 系统中存在账户对象,进行登录操作
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入您的卡号:");
String cardId = sc.next();
// 3. 判断这个卡号是否存在
Account acc = getAccountByCardId(cardId);
if (acc == null){
System.out.println("您输入的卡号不存在,请重新确认~");
}else {
while (true) {
// 卡号存在,输入密码
System.out.println("请输入您的登录密码:");
String passWord = sc.next();
// 4.判断密码是否正确
if (acc.getPassWord().equals(passWord)){
loginAcc = acc;
System.out.println("恭喜 " + acc.getUserName() + "登录成功, 您的卡号为:" + acc.getCardTd());
// 展示登陆后用户操作界面
showUserCommand();
return; // 跳出并结束当前方法
}else {
System.out.println("您输入的密码有误,请重新输入:");
}
}
}
}
}
/** 展示用户登录成功的操作界面*/
private void showUserCommand(){
while (true) {
System.out.println(loginAcc.getUserName() + "您可以选择如下功能进行账户的处理操作:");
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:
// 查询账户
showLoginAccount();
break;
case 2:
// 存款
depositMoney();
break;
case 3:
// 取款
drawMoney();
break;
case 4:
// 转账
transferMoney();
break;
case 5:
// 密码修改
updatePassWord();
break;
case 6:
// 退出
System.out.println(loginAcc.getUserName() + "您退出系统成功,欢迎下次再来");
return;
case 7:
// 注销当前账户
if(deleteAccount()){
return;
}
break;
default:
System.out.println("没有此选择,请重新输入:");
break;
}
}
}
/** 展示当前用户的账户信息*/
private void showLoginAccount() {
System.out.println("====当前您的账户信息如下====");
System.out.println("卡号:" + loginAcc.getCardTd());
System.out.println("户主:" + loginAcc.getUserName());
System.out.println("性别:" + loginAcc.getSex());
System.out.println("余额:" + loginAcc.getMoney());
System.out.println("每次取款限额:" + loginAcc.getLimit());
}
/** 存款*/
private void depositMoney() {
System.out.println("===存款操作===");
System.out.println("请输入您的存款金额:");
double money = sc.nextDouble();
loginAcc.setMoney(loginAcc.getMoney() + money);
System.out.println("您以存款:" + money + "元,存款后余额为:" + loginAcc.getMoney());
}
/** 取款*/
private void drawMoney() {
while (true) {
System.out.println("===取款操作===");
// 1. 需要先判断账户的余额是否大于 >= 100元,如果够,让用户输入取款金额。
if (loginAcc.getMoney() < 100){
System.out.println("您的金额不足100元,无法取出");
return;
}
// 2.可以取款
System.out.println("请输入您的取款金额:");
double money = sc.nextDouble();
// 3.需要判断取款金额是否超过了当次余额与限额,以及余额是否足够。
if (loginAcc.getMoney() >= money){
// 取款金额小于用户余额,判断是否大于限额
if (loginAcc.getLimit() >= money){
loginAcc.setMoney((loginAcc.getMoney() - money));
System.out.println("您以取出:" + money + "元,取款后余额为:" + loginAcc.getMoney());
break;
}else {
System.out.println("您当前的取款金额超过了每次限额,您每次最多可以取款:" + loginAcc.getLimit());
}
}else {
System.out.println("您当前的取款金额超过了余额,您当前余额为:" + loginAcc.getMoney());
}
}
}
/** 用户转账功能*/
private void transferMoney(){
System.out.println("===用户转账===");
// 1.判断系统中是否有其他账户
if (accounts.size() < 2){
System.out.println("当前系统只有您一个用户,无法为其他用户转账");
return;
}
// 2. 判断自己账户是否有钱
if (loginAcc.getMoney() == 0){
System.out.println("您当前的余额为:0,无法转账");
return;
}
// 3.开始转账
while (true){
System.out.println("请输入对方的卡号:");
String cardId = sc.next();
// 4.判断卡号是否正确
Account acc = getAccountByCardId(cardId);
if (acc == null){
System.out.println("您输入的卡号有误");
}else {
// 卡号存在,让用户认证姓氏
String name = "*" + acc.getUserName().substring(1);
System.out.println("请您输入【" + name + "】的姓氏");
String preName = sc.next();
// 5.判断这个姓氏是否正确
if (acc.getUserName().startsWith(preName)){
while (true){
// 认证通过
System.out.println("请输入您要转账的金额:");
double money = sc.nextDouble();
// 6. 判断转账金额是否大于余额
if (loginAcc.getMoney() > money){
// 更新自己账户余额
loginAcc.setMoney(loginAcc.getMoney() - money);
System.out.println("您转账金额为:" + money + "您的余额为:" + loginAcc.getMoney());
// 更新对方账户余额
acc.setMoney(acc.getMoney() + money);
return;
}else {
System.out.println("您的余额小于转账金额,无法转账,您的余额为:" + loginAcc.getMoney());
}
}
}else {
System.out.println("您输入的姓氏错误,请重新输入:");
}
}
}
}
/**销户操作的基本需求*/
private boolean deleteAccount(){
System.out.println("===销户操作==");
// 1.问一下用户是否要销户
System.out.println("请问您确认要销户吗?y/n");
String command = sc.next();
switch (command){
case "y":
// 2.判断用户的账户中是否有钱
if (loginAcc.getMoney() == 0){
accounts.remove(loginAcc);
System.out.println("您的账户已经成功注销");
return true;
}else {
System.out.println("您的账户还有余额,无法注销");
return false;
}
default:
System.out.println("已取消销户操作");
return false;
}
}
/** 密码修改*/
private void updatePassWord(){
System.out.println("===密码修改==");
while (true){
// 1.需要先认证用户当前的密码
System.out.println("请输入当前的密码:");
String passWord = sc.next();
if (loginAcc.getPassWord().equals(passWord)){
while (true){
System.out.println("请输入新的的密码:");
String newPassWord = sc.next();
System.out.println("请再次输入密码:");
String okNewPassWord = sc.next();
if (okNewPassWord.equals(newPassWord)){
loginAcc.setPassWord(okNewPassWord);
System.out.println("密码修改成功!");
return;
}else {
System.out.println("您两次输入的密码不一致,请重新输入");
}
}
}else {
System.out.println("您输入的密码错误,请重新输入");
}
}
}
}
Test.java
public class Test {
public static void main(String[] args) {
// 1、创建一个ATM对象,代表ATM系统
ATM atm = new ATM();
// 2、调用ATM对象的start方法,启动系统
atm.start(); // 对start()方法进行运行
}
}
标签:09,Java,String,ATM,System,loginAcc,卡号,println,out
From: https://blog.csdn.net/m0_64126885/article/details/140574400