系统准备内容分析:
- 每个用户的账户信息都是一个对象,需要提供账户类。
- 需要准备-个容器,用于存储系统全部账户对象信息。
- 首页只需要包含:登录和注册2个功能。
实现步骤:
- 定义账户类,用于后期创建账户对象封装用户的账户信息。
- 账户类中的信息至少需要包含(卡号、姓名、密码、余额、取现额度)
- 需要准备-个ArrayList的集合,用于存储系统用户的账户对象。
- 需要展示欢迎页包含2个功能:开户功能、登录账户。
账户类
您的账户信息如下:
卡号: 73393920
姓名:黑马吴彦祖
余额: 0.0
取现限额: 3000.0
首页设计
========欢迎您进入黑马银行ATM系统========
1.登录账户
2.注册开户
请输入命令1、2选择对应的操作:
分析:
- 开户功能其实就是就是往系统的集合容器中存入一个新的账户对象的信息。
开户功能实现步骤:
- 开户应该定义成一一个方法,并传入账户集合:
public static void register(ArrayL ist accounts) {..}
- 创建- -个Account账户类的对象用于封装账户信息(姓名、密码、卡号)
- 键盘录入姓名、密码、确认密码(需保证两次密码一致)
- 生成账户卡号,卡号必须由系统自动生成8位数字(必须保证卡号的唯一 )
分析
- 登录功能应该定义成一个方法, 并传入账户集合:
public static void login(ArrayList accounts) {..}
- 让用户输入卡号,根据卡号去账户集合中查询账户对象。
- 如果没有找到账户对象,说明登录卡号不存在,提示继续输入卡号。
- 如果找到了账户对象,说明卡号存在,继续输入密码。
- 如果密码不正确,提示继续输入密码
- 如果密码也正确,登陆成功!
用户操作页设计、查询账户、退出账户功能分析:
- 用户登录成功后,需要进入用户操作页。
- 查询就是直接展示当前登录成功的账户对象的信息。
- 退出账户是需要回到首页的。
存款分析:
- 存款就是拿到当前账户对象。
- 然后让用户输入存款的金额。
- 调用账户对象的setMoney方法将账户余额修改成存钱后的余额。
- 存钱后需要查询一下账户信息,确认是否存钱成功了!
取款分析:
- 取款需要先判断账户是否有钱。
- 有钱则拿到自己账户对象。
- 然后让用户输入取款金额
- 判断取款金额是否超过了当次限额,以及余额是否足够
- 满足要求则调用账户对象的setMoney方法完成金额的修改。
分析:
- 转账功能需要判断系统中是否有2个账户对象及以上。
- 同时还要判断自己账户是否有钱。
- 接下来需要输入对方卡号,判断对方账户是否存在。
- 对方账户存在还需要认证对方户主的姓氏。
- 满足要求则可以把自己账户对象的金额修改到对方账户对象中去。
代码如下:
package com.itzw.atm;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATMSystem {
public static void main(String[] args) {
ArrayList 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("请输入1、2选择对应的操作:");
int n = sc.nextInt();
switch (n){
case 1:
//登录
login(accounts,sc);
break;
case 2:
//注册
register(accounts, sc);
break;
default:
System.out.println("您输入的数字有误,请重新输入!");
}
}
}
private static void login(ArrayList accounts,Scanner sc) {
if (accounts.size() == 0){
System.out.println("当前系统没有账户!");
return;
}
System.out.println("=======欢饮您进入登录界面========");
String carId = "";
//1.输入卡号
while (true) {
System.out.println("请输入您的卡号:");
carId = sc.next();
Account acc = getCarIdIsNull(accounts,carId);
if (acc == null){
System.out.println("不存在该卡号!请重新新输入。");
}else {
break;
}
}
//2.输入密码
while (true) {
System.out.println("请输入您的密码:");
String password = sc.next();
Account acc = getCarIdIsNull(accounts, carId);
if (acc.getPassword().equals(password)){
System.out.println(acc.getUsername() + "贵宾" + ",欢迎您进入系统," + "您的卡号:" + carId);
showUserCommend(sc,acc,accounts);
return;
}else{
System.out.println("您的密码有误!请重新输入。");
}
}
}
private static void showUserCommend(Scanner sc,Account acc,ArrayList 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:
//查询账户
showaCount(acc);
break;
case 2:
//存款
dipositMoney(acc,sc);
break;
case 3:
//取款
drawMoney(acc,sc);
break;
case 4:
//转账
transferMoney(acc,sc,accounts);
break;
case 5:
//修改密码
updatePassword(sc,acc);
return;
case 6:
//退出
System.out.println("退出成功,欢迎下次再来!");
return;
case 7:
//注销账户
System.out.println("您真的要销户?y/n");
String delete = sc.next();
if (delete.equals("y")){
accounts.remove(acc);
System.out.println("销户成功!");
return;
}else {
System.out.println("为您继续保留账户。");
}
break;
default:
System.out.println("您输入的命令有误,请重新输入!");
break;
}
}
}
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)){
System.out.println("请输入您的新密码:");
String newPassword = sc.next();
System.out.println("请确认您的新密码:");
String reNewPassword = sc.next();
if (newPassword.equals(reNewPassword)){
acc.setPassword(newPassword);
System.out.println("修改密码成功,请重新登录!");
return;
}else {
System.out.println("两次新密码不一致,请重新输入!");
}
}else {
System.out.println("当前账户密码错误!");
}
}
}
private static void transferMoney(Account acc, Scanner sc, ArrayList accounts) {
System.out.println("===========欢迎进入用户转账操作=============");
if (accounts.size() < 2){
System.out.println("当前系统账户不足两个,不能转账!");
return;
}
if (acc.getMoney() == 0){
System.out.println("宁自己都没钱,就别转了!");
return;
}else {
while (true) {
System.out.println("请输入转账的账户卡号:");
String carId = sc.next();
Account account = getCarIdIsNull(accounts, carId);
if (account == null){
//该账户不存在
System.out.println("不存在该账号,请重新确认!");
}else {
//账户存在
//得到除了姓氏之外的名字
String substrUsername = account.getUsername().substring(1);
//得到姓氏
String okFirsName = account.getUsername().substring(0,1);
substrUsername = "*" + substrUsername;
System.out.println("您当前要为" + substrUsername + "转账!");
System.out.println("请您输入姓氏确认:");
String firstName = sc.next();
if (okFirsName.equals(firstName)){
//输入姓氏正确,继续执行
while (true) {
System.out.println("请您输入转账的金额(您最多可以转账:" + acc.getMoney() +"元)");
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("您已经完成转账!您当前还剩余:" + acc.getMoney());
return;
}
}
//break;
}else {
//输入姓氏错误
System.out.println("您输入对方的信息有误!");
break;
}
}
}
}
}
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.getMoney()){
System.out.println("您的账户余额不足!没那么多钱就别取了!!");
}else if (money > acc.getQutoaMoney()){
System.out.println("您当前取款金额超过当次限额!每次最多可取" + acc.getQutoaMoney());
}else {
acc.setMoney(acc.getMoney() - money);
System.out.println("您已经取款成功!");
break;
}
}
}
private static void dipositMoney(Account acc, Scanner sc) {
System.out.println("===========欢迎进入账户存款操作=============");
System.out.println("请您输入存款金额:");
double money = sc.nextDouble();
//注意是存的钱加上之前就有的钱
acc.setMoney(money + acc.getMoney());
showaCount(acc);
}
private static void showaCount(Account acc) {
System.out.println("===========当前账户详细信息如下=============");
System.out.println("卡号:" + acc.getCarId());
System.out.println("户主:" + acc.getUsername());
System.out.println("余额:" + acc.getMoney());
System.out.println("当次取现额度:" + acc.getQutoaMoney());
}
public static void register(ArrayList accounts, Scanner sc){
System.out.println("=======欢迎进入开户操作=========");
//1.输入账户密码和额度
System.out.println("请输入账户名称:");
String username = sc.next();
String password = null;
while (true) {
System.out.println("请输入账户密码:");
password = sc.next();
System.out.println("请输入确认密码:");
String rePassword = sc.next();
if (!password.equals(rePassword)){
System.out.println("两次输入的密码不一致!");
}else{
break;
}
}
System.out.println("请您输入当次取现额度:");
double qutoaMoney = sc.nextDouble();
//2.生成卡号
String carId = getAccountId(accounts);
//3.创建新的账户对象,将数据封装
Account account = new Account();
account.setCarId(carId);
account.setUsername(username);
account.setPassword(password);
account.setQutoaMoney(qutoaMoney);
//4.将账户对象添加到集合accounts
accounts.add(account);
System.out.println("恭喜您" + username + "您开户成功!卡号为 " + carId + ",请您妥善保管卡号");
}
private static String getAccountId(ArrayList accounts) {
//死循环,直到找到不重复的卡号为止。
while (true) {
Random r = new Random();
String carId = "";
for (int i = 0; i < 8; i++) {
carId += r.nextInt(10);
}
if (getCarIdIsNull(accounts,carId) == null){
return carId;
}
}
}
private static Account getCarIdIsNull(ArrayList accounts, String carId) {
for (int i = 0; i < accounts.size(); i++) {
Account account = accounts.get(i);
if (account.getCarId().equals(carId)){
return account;
}
}
return null;
}
}
class Account{
String carId;
String username;
String password;
double money;//账户余额
double qutoaMoney;//每次取现额度
public Account() {
}
public Account(String carId, String username, String password, double money, double qutoaMoney) {
this.carId = carId;
this.username = username;
this.password = password;
this.money = money;
this.qutoaMoney = qutoaMoney;
}
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 getQutoaMoney() {
return qutoaMoney;
}
public void setQutoaMoney(double qutoaMoney) {
this.qutoaMoney = qutoaMoney;
}
}
演示效果:
D:Javajdk1.8binjava.exe "-javaagent:D:JavaideaIntelliJ IDEA 2020.1.1libidea_rt.jar=5110:D:JavaideaIntelliJ IDEA 2020.1.1bin" -Dfile.encoding=UTF-8 -classpath D:Javajdk1.8jrelibcharsets.jar;D:Javajdk1.8jrelibdeploy.jar;D:Javajdk1.8jrelibextaccess-bridge-64.jar;D:Javajdk1.8jrelibextcldrdata.jar;D:Javajdk1.8jrelibextdnsns.jar;D:Javajdk1.8jrelibextjaccess.jar;D:Javajdk1.8jrelibextjfxrt.jar;D:Javajdk1.8jrelibextlocaledata.jar;D:Javajdk1.8jrelibextnashorn.jar;D:Javajdk1.8jrelibextsunec.jar;D:Javajdk1.8jrelibextsunjce_provider.jar;D:Javajdk1.8jrelibextsunmscapi.jar;D:Javajdk1.8jrelibextsunpkcs11.jar;D:Javajdk1.8jrelibextzipfs.jar;D:Javajdk1.8jrelibjavaws.jar;D:Javajdk1.8jrelibjce.jar;D:Javajdk1.8jrelibjfr.jar;D:Javajdk1.8jrelibjfxswt.jar;D:Javajdk1.8jrelibjsse.jar;D:Javajdk1.8jrelibmanagement-agent.jar;D:Javajdk1.8jrelibplugin.jar;D:Javajdk1.8jrelibresources.jar;D:Javajdk1.8jrelibrt.jar;D:JavaIdeaProjectapioutproductionapi com.itzw.atm.ATMSystem =========欢迎进入徐州ATM系统============ 1.登录账户 2.注册开户 请输入1、2选择对应的操作: 2 =======欢迎进入开户操作========= 请输入账户名称: 王德发 请输入账户密码: 123 请输入确认密码: 123 请您输入当次取现额度: 5000 恭喜您王德发您开户成功!卡号为 04685172,请您妥善保管卡号 =========欢迎进入徐州ATM系统============ 1.登录账户 2.注册开户 请输入1、2选择对应的操作: 1 =======欢饮您进入登录界面======== 请输入您的卡号: 04685172 请输入您的密码: 123 王德发贵宾,欢迎您进入系统,您的卡号:04685172 ========欢迎进入操作页面========= 1.查询账户 2.存款 3.取款 4.转账 5.修改密码 6.退出 7.注销账户 请选择: 1 ===========当前账户详细信息如下============= 卡号:04685172 户主:王德发 余额:0.0 当次取现额度:5000.0 ========欢迎进入操作页面========= 1.查询账户 2.存款 3.取款 4.转账 5.修改密码 6.退出 7.注销账户 请选择: 2 ===========欢迎进入账户存款操作============= 请您输入存款金额: 8000 ===========当前账户详细信息如下============= 卡号:04685172 户主:王德发 余额:8000.0 当次取现额度:5000.0 ========欢迎进入操作页面========= 1.查询账户 2.存款 3.取款 4.转账 5.修改密码 6.退出 7.注销账户 请选择: 3 ===========欢迎进入账户取款操作============= 请输入取款的金额: 1000 您已经取款成功! ========欢迎进入操作页面========= 1.查询账户 2.存款 3.取款 4.转账 5.修改密码 6.退出 7.注销账户 请选择: 1 ===========当前账户详细信息如下============= 卡号:04685172 户主:王德发 余额:7000.0 当次取现额度:5000.0 ========欢迎进入操作页面========= 1.查询账户 2.存款 3.取款 4.转账 5.修改密码 6.退出 7.注销账户 请选择: 4 ===========欢迎进入用户转账操作============= 当前系统账户不足两个,不能转账! ========欢迎进入操作页面========= 1.查询账户 2.存款 3.取款 4.转账 5.修改密码 6.退出 7.注销账户 请选择: 6 退出成功,欢迎下次再来! =========欢迎进入徐州ATM系统============ 1.登录账户 2.注册开户 请输入1、2选择对应的操作: 2 =======欢迎进入开户操作========= 请输入账户名称: 马邦德 请输入账户密码: 123 请输入确认密码: 123 请您输入当次取现额度: 5000 恭喜您马邦德您开户成功!卡号为 45699786,请您妥善保管卡号 =========欢迎进入徐州ATM系统============ 1.登录账户 2.注册开户 请输入1、2选择对应的操作: 1 =======欢饮您进入登录界面======== 请输入您的卡号: 04685172 请输入您的密码: 123 王德发贵宾,欢迎您进入系统,您的卡号:04685172 ========欢迎进入操作页面========= 1.查询账户 2.存款 3.取款 4.转账 5.修改密码 6.退出 7.注销账户 请选择: 4 ===========欢迎进入用户转账操作============= 请输入转账的账户卡号: 45699786 您当前要为*邦德转账! 请您输入姓氏确认: 周 您输入对方的信息有误! ========欢迎进入操作页面========= 1.查询账户 2.存款 3.取款 4.转账 5.修改密码 6.退出 7.注销账户 请选择: 4 ===========欢迎进入用户转账操作============= 请输入转账的账户卡号: 45699786 您当前要为*邦德转账! 请您输入姓氏确认: 马 请您输入转账的金额(您最多可以转账:7000.0元) 4000 您已经完成转账!您当前还剩余:3000.0 ========欢迎进入操作页面========= 1.查询账户 2.存款 3.取款 4.转账 5.修改密码 6.退出 7.注销账户 请选择: 7 您真的要销户?y/n y 销户成功! =========欢迎进入徐州ATM系统============ 1.登录账户 2.注册开户 请输入1、2选择对应的操作: 1 =======欢饮您进入登录界面======== 请输入您的卡号: 45699786 请输入您的密码: 123 马邦德贵宾,欢迎您进入系统,您的卡号:45699786 ========欢迎进入操作页面========= 1.查询账户 2.存款 3.取款 4.转账 5.修改密码 6.退出 7.注销账户 请选择: 1 ===========当前账户详细信息如下============= 卡号:45699786 户主:马邦德 余额:4000.0 当次取现额度:5000.0 ========欢迎进入操作页面========= 1.查询账户 2.存款 3.取款 4.转账 5.修改密码 6.退出 7.注销账户 请选择: 7 您真的要销户?y/n y 销户成功! =========欢迎进入徐州ATM系统============ 1.登录账户 2.注册开户 请输入1、2选择对应的操作:



