用户输入正确卡号和密码后可执行以下操作菜单如下:1.存款 2.取款 3.转账 4.查询余额 5.修改密码 0.退出
分析:User类(cardNo、username、password、phone、balance、identity)
Bank类主要包括以下功能:
package StageOne.day09.task;
/**
* @author 胡昊龙
* @version 1.0
* @description: TODO --- User类(cardNo、username、password、phone、balance、identity)
* @date 2023/12/29 19:09
*/
public class User {
/**
* 常量卡号
*/
private static int num = 1000;
/**
* 属性卡号,确认身份的依据
* 只可获取,不可更改
*/
private final int cardNo;
/**
* 属性,用户名
*/
private String username;
/**
* 属性,密码
*/
private String password;
/**
* 属性,手机号
*/
private String phone;
/**
* 属性,余额
*/
private double balance;
/**
* 属性,身份证号码
*/
private String identity;
/**
* 有参构造,初始化数据
* @param username 用户名
* @param password 密码,登录使用
* @param phone 手机号
* @param identity 身份证号码
*/
public User(String username, String password, String phone, String identity) {
//不可更改的卡号
this.cardNo = num;
this.username = username;
this.password = password;
this.phone = phone;
//初始值为 0 的余额
this.balance = 0;
this.identity = identity;
//卡号自增
num++;
}
public int getCardNo() {
return cardNo;
}
//各个属性的 get/set 方法 ......
public void setIdentity(String identity) {
this.identity = identity;
}
}
package StageOne.day09.task;
import java.util.Arrays;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: bank 功能类
* Bank类主要包括以下功能
* 初始化用户(initial)
* 用户登录(login)
* 显示菜单(showMenu)
* 存款(save)、取款(withDraw)、转账(trans)、查询余额(query)、修改密码(modifyPassword)
* @date 2023/12/29 19:37
*/
public class Bank {
/**
* 创建 User 数组,以存储用户数据
*/
private User[] users;
/**
* size 定义存储空间
*/
private int size;
/**
* 获取当前用户数量
* @return 当前用户数量
*/
public int getSize() {
return size;
}
}
1.初始化, 注册 2.登录 3.注册, 登录界面 4.系统菜单
/**
* 无参构造,初始化数组
*/
public Bank() {
users = new User[10];
size = 0;
}
/**
* 初始化,注册
* @param user 注册新用户
*/
public void initial(User user) {
//扩容
if (size>= users.length) {
users = Arrays.copyOf(users,users.length*2);
}
//添加进数组
users[size] = user;
//下标自增
size++;
}
/**
* 登录功能
* @param cardNo 卡号,不可更改,自生成,唯一标识
* @param password 密码,自定义
* @return User 对象,供后续功能操作
*/
public User login(int cardNo , String password) {
//遍历查找
for (int i = 0; i < size; i++) {
if (users[i].getCardNo() == cardNo && users[i].getPassword().equals(password)) {
return users[i];
}
}
System.out.println("账户或密码错误");
return null;
}
测试类, main (主方法)
package StageOne.day09.task;
import java.util.Scanner;
/**
* @author 胡昊龙
* @version 1.0
* @description: 注册、登录
* @date 2023/12/29 20:05
*/
public class TestATM {
public static void main(String[] args) {
Bank bank = new Bank();
Scanner input = new Scanner(System.in);
boolean flag = true;
//系统登录,注册界面
do {
System.out.println("==============欢迎使用本ATM机系统==============");
System.out.println("=============1.注册 2.登录 0.退出==============");
int n = input.nextInt();
switch (n) {
case 1:
System.out.println("请输入用户名:");
String username = input.next();
System.out.println("请输入密码:");
String password = input.next();
System.out.println("请输入电话号码:");
String phone = input.next();
System.out.println("请输入身份证号:");
String identity = input.next();
User newUser = new User(username, password, phone, identity);
bank.initial(newUser);
System.out.println("注册成功,您的卡号为:"+newUser.getCardNo());
break;
case 2:
if (bank.getSize() != 0) {
System.out.println("请输入卡号:");
int cardNo = input.nextInt();
System.out.println("请输入密码:");
String pwd = input.next();
User user = bank.login(cardNo, pwd);
if (user != null) {
bank.showMenu(user);
}
} else {
System.out.println("当前本系统没有用户,请先注册...");
}
break;
case 0:
flag = false;
break;
default:
System.out.println("输入有无,请重新输入");
break;
}
} while (flag);
System.out.println("欢迎下次使用本系统");
}
}
/**
* 系统功能菜单
* @param user 当前操作对象
*/
public void showMenu(User user) {
boolean flag = true;
System.out.println("登录成功,欢迎使用本系统");
System.out.println("当前系统用户为: "+user.getUsername());
do {
System.out.println("======1.存款 2.取款 3.转帐 4.查询余额 5.修改密码 0.返回登录界面======");
System.out.println("请输入:");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
switch (n) {
case 1 :
System.out.println("请输入您的存款金额:");
double dp = input.nextDouble();
if (deposit(user,dp)) {
System.out.println("存款成功......");
//显示当前用户余额
showBalance(user);
}
break;
case 2 :
System.out.println("请输入您的取款金额:");
double wd = input.nextDouble();
if (withdrawal(user,wd)) {
System.out.println("取款成功......");
//显示当前用户余额
showBalance(user);
}
break;
case 3 :
System.out.println("请输入转账账户的卡号: ");
int cardNo = input.nextInt();
System.out.println("请输入您的转账金额为: ");
double money = input.nextDouble();
if (transfer(user,cardNo,money)) {
System.out.println("转账成功......");
//显示当前用户余额
showBalance(user);
}
break;
case 4 :
System.out.println("请输入登录密码, 以验证身份...");
String pwd = input.next();
if (user.getPassword().equals(pwd)) {
showBalance(user);
} else {
System.out.println("密码错误, 返回功能界面...");
}
break;
case 5 :
System.out.println("请输入你的旧密码,以验证身份...");
String oldPwd = input.next();
System.out.println("请输入你的新密码");
String newPwd = input.next();
System.out.println("请再次输入你的新密码");
String againNewPwd = input.next();
if (modifyPassword(user,oldPwd,newPwd,againNewPwd)) {
System.out.println("新密码设置成功...当前密码为: "+user.getPassword());
System.out.println("请妥善保存...");
}
break;
case 0 :
flag = false;
break;
default:
System.out.println("输入有误,请重新输入");
break;
}
} while (flag);
System.out.println("返回登录界面......");
}
存款(save)、取款(withDraw)、转账(trans)、查询余额(query)、修改密码(modifyPassword)
/**
* 取款
* @param user 当前操作对象
* @param money 取款数额
* @return ture 成功 false 失败
*/
public boolean withdrawal(User user, double money) {
if (money<=0 || money>20000) {
System.out.println("您所输入的金额不符合要求,必须再1~20000元之间");
return false;
}
//判断余额是否充足
if (user.getBalance()>=money) {
user.setBalance(user.getBalance() - money);
return true;
} else {
System.out.println("当前用户余额不足......");
return false;
}
}
/**
* 存款
* @param user 当前操作对象
* @param money 存款数额
* @return ture 成功 false 失败
*/
public boolean deposit(User user, double money) {
if (money<=0 || money>50000) {
System.out.println("您所输入的金额不符合要求,必须在1~50000元之间");
return false;
}
user.setBalance(user.getBalance() + money);
return true;
}
/**
* 通过卡号查找用户
* @param cardNo 卡号,不可更改,自生成,唯一标识
* @return User 对象,供后续功能操作
*/
public User searchByCardNo(int cardNo) {
for (int i = 0; i < size; i++) {
if (users[i].getCardNo() == cardNo) {
return users[i];
}
}
return null;
}
/**
* 转账
* @param user 当前操作对象
* @param cardNo 转账对象,卡号,不可更改,自生成,唯一标识
* @return ture 成功 false 失败
*/
public boolean transfer(User user, int cardNo, double money) {
//通过卡号查找被转账用户
User target = searchByCardNo(cardNo);
if (target != null) {
//判断转账账户不能为本账户
if (target.getCardNo() != user.getCardNo()) {
//调用取款方法
if (withdrawal(user,money)) {
//调用存款方法
deposit(target,money);
return true;
}
} else {
System.out.println("转账账户不可为当前账户...");
}
} else {
System.out.println("未找到您要转账的账户......");
}
return false;
}
/**
* 显示当前用户余额
* @param user 当前用户,当前操作对象
*/
public void showBalance(User user) {
System.out.println("当前用户余额为: "+user.getBalance());
}
/**
* 修改密码
* @param user 当前操作对象
* @param oldPwd 原始密码
* @param newPwd 新密码
* @param againNewPwd 确认密码
* @return 判断是否成功
*/
public boolean modifyPassword(User user, String oldPwd, String newPwd, String againNewPwd) {
if (user.getPassword().equals(oldPwd)) {
if (newPwd.equals(againNewPwd)) {
user.setPassword(newPwd);
return true;
} else {
System.out.println("两次密码不一致...");
}
} else {
System.out.println("旧密码输入错误...");
}
return false;
}