package a0001ATM;
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);
//展示欢迎页面
public void start() {
while (true) {
System.out.println("--------------------------------欢迎来到南瓜ATM系统--------------------------------");
System.out.println("请选择你要进行的操作:\n1.注册一个新的账户:\n2.登录账号:\n3.退出系统结束操作");
String n = sc.next();
switch (n) {
case "1":
createAccount();
break;
case "2":
login();
break;
case "3":
System.exit(0);
default:
System.out.println("没有此功能请重新选择你需要进行的操作");
break;
}
}
}
//注册
//创建一个新的账户并把这个账户加在已有账户集合里面
private void createAccount(){
System.out.println("--------------------------------欢迎进入到南瓜ATM账户开户页面--------------------------------");
Account account=new Account();
System.out.println("请输入你的姓名:");
account.setUserName(sc.next());
while (true) {
System.out.println("请输入你的性别:");
String sex=sc.next();
if(sex.equals("男")||sex.equals("女")){
account.setSex(sex);
break;
}else{
System.out.println("你输入的性别有误哦,只能是男或者女,请输入正确的性别:");
}
}
while (true) {
System.out.println("请输入你的账户密码:");
String password=sc.next();
System.out.println("请确认你的账户密码:");
String word=sc.next();
if(password.equals(word)){
account.setPassword(password);
break;
}else{
System.out.println("你两次输入的密码不一致哦~~请重新再试一次看看:");
}
}
while (true) {
System.out.println("请您输入你的取现额度:");
double limit=sc.nextDouble();
if(limit>0){
account.setLimit(limit);
break;
}else{
System.out.println("取现额度不能小于0哦~~请重新输入");
}
}
//需要为这个开户的人生成一个卡号,应该是由系统自己生成的一个随机卡号且这个卡号不能与已经有的卡号重复!!!!
String newcardid=createCardId();
account.setCardId(newcardid);
//把账户加入到已有账户里面去
accounts.add(account);
//需要给一个提示告诉用户是否开户成功!!!
System.out.println("恭喜"+account.getUserName()+"开户成功,您的卡号是:"+account.getCardId());
}
//定义一个新的方法:
// 返回一个八位数字的银行卡号且这个卡号不和已经创建好的卡号重复(做一个判断)
private String createCardId(){
while (true) {
String cardid="";
Random r=new Random();
//循环8次,每次随机产生一个各位数字然后连接起来组成一个卡号
for (int i = 0; i < 8; i++) {
int data=r.nextInt(10);
cardid += data;//返回0~9的数字
}
//判断卡号是否重复;
Account ac=getAccountByCardId(cardid);
if(ac==null){
return cardid;
}
}
}
//根据卡号查找对象(为什么要重新创造一个方法?)
// 因为这个卡号查找对象不仅判断卡号是否重复的时候要用,并且登陆的时候也要用;
private Account getAccountByCardId(String cardId){
//在accounts里面寻找
for (int i = 0; i < accounts.size(); i++) {
Account ac=accounts.get(i);
if(ac.getCardId().equals(cardId)){
return ac;
}
}
return null;
}
//登录
private void login(){
System.out.println("--------------------------------欢迎进入到南瓜ATM登录页面--------------------------------");
//判断系统里面是否有账户
if(accounts.size()==0){
System.out.println("当前系统里没有账户无法登录,请先开户再登陆");
return;
}
while (true) {
System.out.println("请先输入你的卡号:");
String cardid=sc.next();
if(getAccountByCardId(cardid)==null){
//想不想回到注册,还是输错了卡号
while (true) {
System.out.println("你是否还没有注册,如果想要注册请回答:yes 如果只是输错卡号请回答:no");
String s=sc.next();
if(s.equals("yes")){
System.out.println("已经为你跳转到注册页面");
createAccount();
System.out.println("已为你跳到登录页面,请继续你的操作");
break;
}else if(s.equals("no")){
break;
}else{
System.out.println("请重新输入yes或者no");
}
}
}else{
//登陆进去后
int count=0;
System.out.println("请输入你的密码");
while (true) {
String password=sc.next();
if(getAccountByCardId(cardid).getPassword().equals(password)){
System.out.println("恭喜"+getAccountByCardId(cardid).getUserName()+"登录成功");
//登录以后需要进行的操作(单独的弄了一个方法)
showLogin(getAccountByCardId(cardid));
return;
}else{
count++;
if(count==3){
System.out.println("你已经连续三次输错密码了哦~~请稍后再试");
return;
}
System.out.println("密码错误请重新输入你的密码");
}
}
//登录进去处理完后
}
}
}
//展示操作页面
private void showLogin(Account ac){
while (true) {
System.out.println(ac.getUserName()+"请选择你要进行的操作:\n1.取款:\n2.存款:\n3.转账:\n4.查询账户:\n" +
"5.修改密码:\n6.注销账号:\n7.返回首页面: \n8.退出系统结束操作");
Scanner sc=new Scanner(System.in);
switch (sc.next()) {
case "1":
drawMoney(ac);
break;
case "2":
depositMoney(ac);
break;
case "3":
transferMoney(ac);
break;
case "4":
showAccount(ac);
break;
case "5":
updataPassWord(ac);
break;
case "6":
if(deleteAccount(ac)){
return;
}else{
break;
}
case "7":
System.out.println("你已经返回到了首页面");
return;
case "8":
System.out.println("你已经结束了操作并退出了系统");
System.exit(0);
default:
System.out.println("没有此功能请重新选择你需要进行的操作");
}
}
}
//1.取钱
private void drawMoney(Account ac) {
System.out.println("================================您现在在进行取款操作================================");
if(ac.getMoney()<100){
System.out.println("你的账户余额不足一百元不允许取钱");
return;
}
while (true){
System.out.println("请输入你需要取钱的金额:");
double money=sc.nextDouble();
if(money>ac.getMoney()){
System.out.println("您当前的余额为"+ac.getMoney()+"并不能取出"+money+"请输入比当前账号小的金额再进行操作");
}else if(money>ac.getLimit()){
System.out.println("你当前取钱金额大于了最大取现额度,你的取现额度为:"+ac.getLimit()+"请输入比额度小的数额再取钱");
}else{
ac.setMoney(ac.getMoney()-money);
System.out.println("恭喜你已经取出"+money+"钱成功,取钱后总余额为"+ac.getMoney());
break;
}
}
}
//2.存款
private void depositMoney(Account ac){
while (true) {
System.out.println("================================您现在在进行存款操作================================");
System.out.println("请输入你存款的金额:");
double money=sc.nextDouble();
if(money<0){
System.out.println("你输入的金额不正确必须要输入一个大于0的金额数");
}else{
ac.setMoney(money+ac.getMoney());
System.out.println("恭喜你存入"+money+"钱成功,存钱后总余额为"+ac.getMoney());
return;
}
}
}
//3.转账
private void transferMoney(Account ac) {
System.out.println("================================您现在在进行转账操作================================");
if(ac.getMoney()==0){
System.out.println("你自己的卡里面没有钱没有办法给别人转账");
return;
}
while (true) {
System.out.println("请输入你想选择转账的人的卡号");
String cardid=sc.next();
if(getAccountByCardId(cardid)!=null){
Account a=getAccountByCardId(cardid);
if(ac.getCardId().equals(cardid)){
System.out.println("你是想自己给自己转账吗这是不被允许的哦,请不要自己给自己转账");
break;
}
System.out.println("请输入*"+a.getUserName().substring(1)+"的姓氏确认向*"
+a.getUserName().substring(1)+"转账");//一个*号加上从第一个截取的名字差不多就是用*号替换了姓氏
String s=sc.next();
String st=""+a.getUserName().charAt(0);
if(s.equals(st)){
System.out.println("输入姓氏正确,请输入你想要转账的金额:");
while (true) {
double money=sc.nextDouble();
//假设转账不受金额限制,所以不进行金额限制的判断
if(money>ac.getMoney()){
System.out.println("你所输入的转账金额比你的余额还大这个是不被允许的," +
"你当前的余额为"+ac.getMoney()+"钱请输入比他小的金额");
}else{
ac.setMoney(ac.getMoney()-money);
a.setMoney(a.getMoney()+money);
System.out.println("你已经成功向"+a.getUserName()+"转账"+money+"钱," +
"当前你的账户余额还剩"+ac.getMoney()+"钱");
return;
}
}
}else{
System.out.println("你输入的姓氏有问题以为你跳转到输入卡号的地方");
}
}else{
System.out.println("你所输入的卡号不存在,请确认你所输入的卡号正确。" +
"请选择你要继续的操作:1.重新输入卡号\n2.退出转账操作");
String s=sc.next();
switch (s){
case "1":
break;
case "2":
return;
}
}
}
}
//4.查询账户(展示当前账户信息)
private void showAccount(Account ac){
System.out.println("================================您当前的账户信息如下================================");
System.out.println("你的卡号是:"+ac.getCardId());
System.out.println("户 主是:"+ac.getUserName());
System.out.println("户主性别是:"+ac.getSex());
System.out.println("卡里余额是:"+ac.getMoney());
System.out.println("取现额度是:"+ac.getLimit());
}
//5.修改密码
private void updataPassWord(Account ac) {
System.out.println("================================您现在在进行账户密码修改操作================================");
System.out.println("请输入你当前账户的密码");
int count=0;
while (true) {
String s=sc.next();
if(s.equals(ac.getPassword())){
while (true) {
System.out.println("请输入你的新密码");
String s1=sc.next();
System.out.println("请再次输入你的新密码");
String s2=sc.next();
if(s1.equals(s2)){
ac.setPassword(s1);
System.out.println("恭喜你修改密码成功!!!你当前的密码为:"+ac.getPassword());
return;
}else{
System.out.println("你两次输入的密码不一致请重新尝试");
System.out.println("如果你突然不想更改密码请输入“1”");
String s3=sc.next();
if(s3.equals("1")){
return;
}
}
}
}else{
count++;
if(count==3){
System.out.println("你已经连续输错了3次密码,请稍后再试");
break;
}
System.out.println("你当前输入的密码不正确,请重新输入密码");
}
}
}
//6.注销账号
private boolean deleteAccount(Account ac) {
System.out.println("================================您现在在进行销户操作================================");
System.out.println("请问您确认要销户吗?\n输入“确认”即可进行销户操作\n输入“不确认”取消销户操作 ");
String s=sc.next();
switch(s){
case "确认":
if(ac.getMoney()>0){
System.out.println("您的账户里面还有余额"+ac.getMoney()+"钱,请取出后再注销账户");
return false;
}else{
accounts.remove(ac);
System.out.println("你的账户已成功销户");
return true;
}
default:
System.out.println("已经为你取消销户操作");
return false;
}
}
}