1 提示用户输入账号和两次密码,将用户的输入传入到方法
2 检查用户输入的账号和密码的长度是否在6-16位之间
如果不符合条件,提示用户输入的账号密码长度不符合条件 ,提示用户是否需要继续注册
如果符合
3 检查用户输入的账号是否存在
如果存在,提示用户用户已存在,并提示用户是否需要重新注册
如果不存在
4 检查用户输入的两次密码是否一致
如果不一致,提示用户两次密码输入不一致,并提示用户是否需要重新注册
如果一致
5 将该对象的存入到数组中(如果数组长度足够时)
将数组进行扩容(当用户的个数大于或等于数组长度时)
并将记录用户个数的变量,加一
提示用户注册成功
如果不存在,提示用户,该账号不存在,是否需要注册
如果存在
* 如果匹配,提示登录成功,跳转到登录成功界面
* 如果不匹配,提示用户登录失败,是否需要继续登录
* 记录用户登录失败次数,如果登录失败次数大于三次,跳出登录界面并提示账号已被冻结
public class User {
String username; //账号
String password; //密码
double balance; //余额
}
import java.util.Scanner;
public class ATM {
//创建一个用户类型的数组
User[] userArray = new User[10];
//创建一个记录用户个数的变量
int count = 0 ;
/**
* 注册界面
* @param registUsername 用户输入的注册账号
* @param registPassword1 用户输入的第一次密码
* @param registPassword2 用户输入的第二次密码
*/
void registUser(Scanner scanner){
System.out.println();
System.out.print("请输入您要注册的账号:");
String registUsername = scanner.next();
System.out.print("请输入您要注册的密码:");
String registPassword1 = scanner.next();
System.out.print("请再次输入密码:");
String registPassword2 = scanner.next();
//判断用户输入的账户密码是否符合规范
if (! judgeLong(registUsername, registPassword1, registPassword2)) {
return;
}
//判断注册的用户是否存在
User isUserExist =isUserExist(registUsername);
if (isUserExist != null) {
System.out.println("账号已存在,请重新注册");
return;
}
//判断两次密码是否一致
if (isSamePassword(registPassword1, registPassword2)) {
//将用户注册的账号和密码存入到数组中
User newUser = new User();
newUser.username = registUsername;
newUser.password = registPassword1;
userArray[count] = newUser;
count++;
System.out.println("注册成功");
//判断数组是否需要扩容
expansionArray();
}else{
System.out.println("两次密码输入不一致");
}
}
/**
* 判断用户输入的账号和密码长度是否满足
* @param registUsername 用户输入的注册账号
* @param registPassword1 用户输入的第一遍注册密码
* @param registPassword2 用户输入的第二遍注册密码
* @return 如果返回false,证明用户输入不规范;反之用户输入正确
*/
boolean judgeLong(String registUsername,String registPassword1,String registPassword2){
if (registUsername.length() <6 ||registUsername.length() > 16) {
System.out.println("账号长度输入不正确(账号密码长度应在6~16位)");
return false;
}
if (registPassword1.length() <6 || registPassword1.length() > 16) {
System.out.println("密码长度输入不正确(账号密码长度应在6~16位)");
return false;
}
if (registPassword2.length() <6 || registPassword2.length() > 16) {
System.out.println("密码长度输入不正确(账号密码长度应在6~16位)");
return false;
}
return true;
}
/**
* 判断账号是否存在
* @param registUsername
* @return 返回true,证明账户存在;如果返回false,证明账户不存在
*/
User isUserExist(String registUsername){
for(int i = 0 ; i < userArray.length ; i++ ){
if (userArray[i]!=null &&userArray[i].username .equals(registUsername)) {
return userArray[i];
}
}
return null;
}
/**
* 判断用户两次输入的密码是否一致
* @param registPassword1 用户第一次输入的密码
* @param registPassword2 用户第二次输入的密码
* @return 如果返回true,表示用户输入的两次密码一致;反之,两次密码输入不一致
*/
boolean isSamePassword(String registPassword1 , String registPassword2){
if (registPassword1.equals(registPassword2)) {
return true;
}
return false;
}
/**
* 数组扩容
*/
void expansionArray(){
if (count > userArray.length) {
User[] newUserArray =new User[userArray.length+1];
for (int i = 0; i < userArray.length; i++) {
newUserArray[i]= userArray[i];
}
userArray = newUserArray;
}
}
/**
* 登陆界面
* @param scanner
* @param num 记录用户登录失败次数,密码输入不正确时count++,其他情况不增加
* @return
*/
User loginUser(Scanner scanner ) {
System.out.println();
System.out.print("请输入您要登录的账号:");
String loginUsername = scanner.next();
System.out.print("请输入您的密码:");
String loginPassword = scanner.next();
//判断账号是否存在
User isUserExist = isUserExist(loginUsername) ;
/* //如果账号不存在,询问是否需要跳转到注册页面
if ( isUserExist == null) {
while(true){
System.out.println("账号不存在,是否需要注册?Y/N");
String tag = scanner.next();
switch(tag){
case "Y": case "y":
registUser(scanner);
this.num = 0;
return null;
case "N": case "n" :
this.num = 0 ;
return null;
default:
System.out.println("输入错误,请重新输入");
break;
}
}
}*/
//如果账号不存在,提示用户账号不存在
if (isUserExist == null) {
System.out.println("用户不存在");
return null;
}
//判断账号密码是否匹配
if (loginPassword.equals(isUserExist.password)) {
//账号密码匹配
User loginUser = isUserExist;
System.out.println("登录成功");
return loginUser;
}else{
return null;
}
}
/**
* 存款
* @param loginUser 登录成功的用户
* @param scanner
*/
void setMoney(User loginUser , Scanner scanner){
System.out.print("请输入您要存款的金额:");
double money = scanner.nextDouble();
loginUser.balance += money;
System.out.println("您存款的金额为: " + money + "\n您的余额为"+loginUser.balance);
}
/**
* 取款
* @param loginUser 登录成功的用户
* @param scanner
*/
void getMoney(User loginUser ,Scanner scanner){
System.out.print("请输入您的取款金额:");
double money = scanner.nextDouble();
loginUser.balance -= money;
System.out.println("您本次取款金额为:" + money + "\n您账户余额为:" + loginUser.balance);
}
/**
* 查询余额
* @param loginUser 登录成功的用户
*/
void inquireMoney(User loginUser){
System.out.println("您当前账户余额为:" + loginUser.balance);
}
/**
* 转账
* @param loginUser 登录成功的用户
* @param scanner
*/
void transferMoney(User loginUser ,Scanner scanner){
System.out.println();
System.out.print("请输入您要转账的用户:");
String username = scanner.next();
//判断转账的用户是否存在
if (isUserExist(username) == null) {
System.out.println("您要转账的用户不存在,请重新输入");
}else{
System.out.print("请输入您要转账的金额:");
double money =scanner.nextDouble();
if (loginUser.balance < money) {
System.out.println("您账户余额不足,请重新输入转账金额");
}else{
isUserExist(username).balance += money;
loginUser.balance -= money;
System.out.println("转账成功,您当前账户余额为:" + loginUser.balance);
}
}
}
/**
* 修改密码界面
* @param loginUser
* @param scanner
*/
void changePassword(User loginUser , Scanner scanner){
System.out.println("请输入您要修改的密码:");
String password1 = scanner.next();
System.out.println("请再次输入密码:");
String password2 = scanner.next();
//判断两次密码是否输入相同
if (isSamePassword(password1, password2)) {
//判断密码长度是否满足密码规范
if (password1.length() < 6 || password1.length() > 16 || password2.length() < 6 || password2.length() > 16) {
System.out.println("密码长度输入不正确(账号密码长度应在6~16位)");
return;
}else{
loginUser.password = password1;
System.out.println("密码修改成功");
}
}
}
}
public class Bank {
//记录用户登录失败次数
static int num = 1 ;
static Scanner scanner = new Scanner(System.in);
static ATM atm = new ATM();
public static void main(String[] args) {
login(atm, scanner);
}
/**
* 登陆界面
* @param atm ATM类的对象
* @param scanner
*/
public static void login(ATM atm , Scanner scanner) {
while(true){
System.out.println();
System.out.println("欢迎来到ICBC银行");
System.out.println("请输入您要办理的业务");
System.out.println("1.登录\n2.注册");
String tag=scanner.next();
switch(tag){
case "1" :
User loginUser = atm.loginUser(scanner);
if (loginUser != null) {
//如果登录界面的返回值不是null,跳转到登录成功界面
System.out.println("登录成功");
successfullLogin(loginUser, scanner);
}else {
//如果是null,跳转到询问用户是否需要继续登录界面
isNextLogin(scanner);
}
break;
case "2":
atm.registUser(scanner);
break;
default:
System.out.println("输入错误,请重新输入");
break;
}
}
}
/**
* 判断是否需要继续登录
* @param scanner
*/
public static void isNextLogin(Scanner scanner){
while(num <=3){
if (num == 3) {
num = 1;
System.out.println("登录失败次数过多,账号冻结");
return;
}else{
System.out.println("登录失败,是否需要继续登录?Y/N");
String tag = scanner.next();
switch(tag){
case "Y": case "y":
num++;
User loginUser = atm.loginUser(scanner);
if (loginUser ==null) {
isNextLogin(scanner);
}else {
//跳转到登录界面
System.out.println("登录成功");
successfullLogin(loginUser, scanner);
return ;
}
case "N": case "n":
num = 1 ;
return;
default:
System.out.println("输入错误,请重新输入");
break;
}
}
}
}
/**
* 登录成功界面
* @param loginUser 登录成功的用户
* @param scanner
*/
public static void successfullLogin(User loginUser , Scanner scanner){
while(true){
System.out.println("欢迎来到ATM机自助银行服务");
System.out.println("请选择您要办理的业务");
System.out.println("1.存款\n2.取款\n3.查询余额\n4.转账\n5.修改密码\n0.退出");
String tag = scanner.next();
switch (tag) {
case "1":
atm.setMoney(loginUser, scanner);
break;
case "2":
atm.getMoney(loginUser, scanner);
break;
case "3":
atm.inquireMoney(loginUser);
break;
case "4":
atm.transferMoney(loginUser, scanner);
break;
case "5":
atm.changePassword(loginUser, scanner);
break;
case "0":
return;
default:
System.out.println("输入有误,请重新输入");
break;
}
}
}
}
该项目完成了基本的ATM机业务,由于因为一些原因,只能用面向对象方法完成该项目,在写的过程中,有许多不方便的地方。比如:用户信息的存储。如果可以用别的方法,该代码可以更加简洁。