import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class UserOperator {
private ArrayList<User> operator = new ArrayList<>();
Scanner sc = new Scanner(System.in);
Random ro = new Random();
//一个用户登录后就赋值该用户的id
int id =-1;
public UserOperator() {
}
public UserOperator(ArrayList<User> operator) {
this.operator = operator;
}
public void start() {
lab:while (true) {
System.out.println("===========欢迎进入系统===========");
System.out.println("1,用户登录");
System.out.println("2,用户开户");
System.out.println("3,退出系统");
int commond = sc.nextInt();
switch (commond) {
case 1:
logIn();
break;
case 2:
creat();
break;
case 3:
System.out.println("系统退出");
break lab;
case 4:
showAllData();
break ;
}
}
}
// 开户
public void creat() {
// 定义一个user的对象,用于存储新创建的用户数据
User user =new User();
System.out.println("请输入您的用户名");
user.setName( sc.next()) ;
//输入性别
while (true) {
System.out.println("您的性别");
user.setSex(sc.next());
if (user.getSex().equals("男") || user.getSex().equals("女")) {
break;
} else {
System.out.println("您输入的性别有误~");
}
}
//输入密码以及验证密码
while (true) {
System.out.println("请输入您的账户密码");
user.setPassword(sc.nextInt());
System.out.println("请确认您的密码");
int password2 = sc.nextInt();
if (user.getPassword() == password2) {
break;
} else {
System.out.println("两次密码不一致,请重新输入");
}
}
System.out.println("请输入每次取现的限额");
user.setLines(sc.nextDouble());
// 生成随机卡号
// 我觉得这一段可能有bug
int k=0;
String cardNumber = "";
while (k==0) {
k=1;
for (int i = 0; i < 8; i++) {
cardNumber += ro.nextInt(10);
}
for (int i = 0; i < operator.size(); i++) {
if (operator.get(i).getCardNumber().equals(cardNumber)) {
k=0;
}
}
}
user.setCardNumber(cardNumber);
// 把创建的新user对象放入集合内
operator.add(user);
System.out.println("恭喜"+user.getName()+"先生,开户成功,您的卡号为"+cardNumber+"请妥善保管");
}
// 用户登入
public void logIn() {
if (operator.size()==0) {
System.out.println("当前系统无账户");
return;
}
// 判断卡号
lab:while (true) {
System.out.println("请输入您的登录卡号");
String cardNumber = sc.next();
for (int i = 0; i <operator.size() ; i++) {
if (operator.get(i).getCardNumber().equals(cardNumber)) {
id=i;
break lab;
}
}
System.out.println("系统不存在该卡号");
}
//判断密码
while (true) {
System.out.println("请您输入登录密码");
int password = sc.nextInt();
if (operator.get(id).getPassword() == password) {
break;
} else {
System.out.println("密码错误");
}
}
System.out.println("恭喜您,"+operator.get(id).getName()+"您又已进入系统");
yeWu();
}
//登入成功,进入业务系统
public void yeWu() {
while (true) {
System.out.println("=========="+operator.get(id).getName()+"先生,您可以办理以下========");
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.注销账户");
int commond=sc.nextInt();
switch (commond) {
case 1:
showAccount();
break;
case 2:
addBalance();
break;
case 3:
getMoney();
break;
case 4:
transfer();
break;
case 5:
revisePassword();
break;
case 6:
return;
case 7:
System.out.println("你确认要注销账户:1.yes 其他任意键.no");
int commond2 =sc.nextInt();
switch (commond2) {
case 1:
operator.remove(id);
id=-1;
return;
default:
break;
}
break;
}
}
}
//1.查询账户
public void showAccount() {
System.out.println("==========当前账户信息如下===========");
System.out.println("卡号:"+operator.get(id).getCardNumber());
System.out.println("户主:"+operator.get(id).getName());
System.out.println("性别:"+operator.get(id).getSex());
System.out.println("余额:"+operator.get(id).getBalance());
System.out.println("限额:"+operator.get(id).getLines());
System.out.println("密码:"+operator.get(id).getPassword());
}
// 2. 存款
public void addBalance() {
System.out.println("请输入您要存入的金额");
double money = sc.nextDouble();
operator.get(id).setBalance(operator.get(id).getBalance()+money);//余额加上存款
showAccount();
}
// 3.取款
public void getMoney() {
while (true) {
System.out.println("请输入您要取款的金额");
double money = sc.nextDouble();
if (money > operator.get(id).getLines()) {
System.out.println("您当前取款金额超过每次限额,每次最多可取" + operator.get(id).getLines());
} else {
if (money > operator.get(id).getBalance()) {
System.out.println("余额不足,您账户目前余额为:" + operator.get(id).getBalance());
} else {
operator.get(id).setBalance(operator.get(id).getBalance()-money);
System.out.println("恭喜您,取钱"+money+"元,成功!");
showAccount();
return;
}
}
}
}
//4.转账
public void transfer() {
// 判断系统账户数量是否大于2
if (operator.size() < 2) {
System.out.println("当前系统中小于2个账户,不能进行转账,快去开户吧");
return;
}
// 判断自己有没有钱转账
if (operator.get(id).getBalance() <= 0) {
System.out.println("您自己都没钱,还是别转了");
return;
}
// 下面这一长串代码为确定要转账的人
int id2=0;//转账人的索引
lab:while (true) {
System.out.println("请输入您要转账的卡号");
String cardNumber = sc.next();
for (int i = 0; i < operator.size(); i++) {
// 遍历数组寻找与输入卡号相同的卡号,遍历完未找到则循环重新上输入卡号
if (operator.get(i).getCardNumber().equals(cardNumber)) {
String name =operator.get(i).getName().substring(1);
System.out.println("请输入[*"+name+"先生]的姓氏");
String head = sc.next();
if (operator.get(i).getName().startsWith(head)) {
id2=i;
break lab;
} else {
System.out.println("您输入的信息有误");
break;
}
}
System.out.println("系统没有该用户");
}
}
// 终于能进行转账了,这里还要判断一下钱够不够转账
while (true) {
System.out.println("请输入您要转账的金额");
double money = sc.nextDouble();
if (money <= operator.get(id).getBalance()) {
operator.get(id).setBalance(operator.get(id).getBalance() - money);
operator.get(id2).setBalance( operator.get(id2).getBalance()+money);
System.out.println("转账成功,您的账户还剩余:"+operator.get(id).getBalance());
return;
}
System.out.println("您的余额不足,您最多可转账:"+operator.get(id).getBalance());
}
}
//5.修改密码
public void revisePassword() {
while (true) {
System.out.println("请输入当前密码");
int password=sc.nextInt();
if (password == operator.get(id).getPassword()) {
System.out.println("请输入新的密码");
int password1=sc.nextInt();
System.out.println("请您确认新密码");
int password2 = sc.nextInt();
if (password2 == password1) {
operator.get(id).setPassword(password1);
System.out.println("恭喜您密码修改成功");
return;
}
}
System.out.println("您输入不正确");
}
}
//登录界面可查看全部账户信息,给自己开的后门
public void showAllData() {
for (int i = 0; i < operator.size(); i++) {
System.out.println("==========当前账户信息如下===========");
System.out.println("卡号:"+operator.get(i).getCardNumber());
System.out.println("户主:"+operator.get(i).getName());
System.out.println("性别:"+operator.get(i).getSex());
System.out.println("余额:"+operator.get(i).getBalance());
System.out.println("限额:"+operator.get(i).getLines());
}
}
}
代码冗余,注释先写清楚,缩进,换行等,魔法数字可以提取出来导enums枚举中,代码最好优化下
不知道你这个问题是否已经解决, 如果还没有解决的话: