银行ATM取款机系统

问题遇到的现象和发生背景

自己写了一部分
有几个问题
1.验证登录账号的密码是否一致中没有管理员的密码
输入管理员密码 123456 依旧通过
2登录成功之后的小循环if语句一直不成功
不管写什么都会执行else

问题相关代码,请勿粘贴截图
package ATMDemo;

import java.util.ArrayList;

//账户类
public class Account  {
    public static ArrayList<Account> normalUserList = new ArrayList<Account>();
    private String name="";
        private int role =0;
        private String password="";


        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getRole() {
            return role;
        }

        public void setRole(int role) {
            this.role = role;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }
        public Account(String name, int role, String password) {
            super();
            this.name = name;
            this.role = role;
            this.password = password;
        }
        public Account() {
            super();
        }
}
package ATMDemo;

import java.io.*;
import java.util.Scanner;

//用户登陆界面
public class ATMtest {
    public static void showMoney() {

    }


public static void tranMoney(){

}



    public static void quit() {
        System.out.println("退出成功");
    }


    public static void query(){
        System.out.println("查询成功");
    }
    public static void update(){
        System.out.println("修改成功");
    }
    public static void main(String[] args) {
        try {
            //文件读取,且把文件中的数据转换成对象,在集合中保村
            //读文件
            File file = new File("src\\account.txt");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
            String strAccount = bufferedReader.readLine();//读取文件中的一行(按照每行读取文件)
            //管理员在文件的第一行(管理员放在链表的第一个)
            Manager manager = new Manager();
            String[] temp = strAccount.split(",");//把上面读的一个记录分割成字符串数组
            manager.setManageAccount(temp[1]);//管理账户
            manager.setName(temp[0]);//姓名
            manager.setPassword(temp[3]);//密码
//            manager.setRole(Integer.parseInt(temp[4]));
            manager.setRole(1);
            //角色
            Account.normalUserList.add(manager);//把第一个用户(管理员)放到集合链表中

            //继续读文件,普通用户在其他行
            strAccount = bufferedReader.readLine();
            while (strAccount != null) {
                temp = strAccount.split(",");//把上面读到的数据分割成字符串数组
                //把字符串数组中对应的每个字符串没转换成Account类中的对象,然后进行--一一绑定数据
                NormalUser normalUser = new NormalUser();
                normalUser.setName(temp[0]);//名字
                normalUser.setId_card(temp[1]);//账户
                normalUser.setMoney(Integer.parseInt(temp[2]));//金额
                normalUser.setPassword(temp[3]);//密码
//                normalUser.setRole(Integer.parseInt(temp[4]));
                normalUser.setRole(0);
                //0表示普通用户,1表示管理员
                Account.normalUserList.add(normalUser);//把转换好的对象放到集合中(文件会一直读取,知道没有的数据转换成对象)
                strAccount = bufferedReader.readLine();//读新的一行数据
            }
                //登陆及其他操作
                while (true) {//登录页面的大循环
                    //登录页面及操作
                    System.out.println("======用户登录======");
                    System.out.println("======1,输入用户账号======");
                    Scanner scanner = new Scanner(System.in);
                    String strAccountTemp = scanner.next();
                    System.out.println("======2,输入用户密码======");
                    String strPasswordTemp = scanner.next();
                    System.out.println("======3,输入用户角色(1:管理员,0:普通用户)======");
                    while (true) {
                        try {
                            int role = Integer.parseInt(scanner.next());
                            if (role == 1 || role == 0) {
                                break; //输出的如果不是数字0或者1就会一直提醒
                            } else {
                                System.out.println("请再次输入角色,确定输入的是数字,且是0或1");
                            }
                        } catch (Exception e) {
                            System.out.println("请再次输入角色,确定输入的是数字,且是0或1");
                        }
                    }
                    //根据用户登录的角色验证登录的账号和密码是否一致

                    boolean boolResult = false;
                    for (Account account: Account.normalUserList){
                        if (account.getPassword().equals(strPasswordTemp)) {
                            boolResult = true;
                        } else {
                            boolResult = false;
                        }
                    }
                    //登录验证
                    if (boolResult) {
                        while (true) {//登录成功
                            //登录成功之后的小循环
                            for (int i = 1; i < Account.normalUserList.size(); i++) {//循环集合链表
                                NormalUser normalUserTmp = (NormalUser)  Account.normalUserList.get(i);//向下转型,得到第i个值
                                if ("yanda".equals(normalUserTmp.getName()))
                                {
                                    System.out.println("==========管理员系统==========");
                                    System.out.println("1,查询用户信息");
                                    System.out.println("2,修改用户信息");
                                    int command1 = scanner.nextInt();
                                    switch (command1){
                                        case 1:
                                            query();
                                            break;
                                        case 2:
                                            update();
                                            break;
                                    }
                                }else if (normalUserTmp.id_card.equals(0)){
                                    System.out.println("===========用户界面==========");
                                    System.out.println("1,取钱");
                                    System.out.println("2,转账");
                                    System.out.println("3,退出");
                                    int command = scanner.nextInt();
                                    switch (command){
                                        case 1:
                                            showMoney();
                                            break;
                                        case 2:
                                            tranMoney();
                                            break;
                                        case 3:
                                            quit();
                                            break;
                                    }
                                }
                            }
                            //登陆成功后,操作(普通用户,系统管理员的操作)
                            //zhangsan3取钱,首先找到张三
                            //对对象集合accounts中的某一个对象进行操作,这个里面可以转账,取钱,登录等操作
//                                if ("zhangsan3".equals(normalUserTmp.getName())) {
//                                    normalUserTmp.setMoney(normalUserTmp.getMoney() - 1000);
//                                }
                        }
                    } else {//登录失败
                        System.out.println("登录不成功");
                        System.out.println("按1继续登录,按2结束程序");
                        int iChoice = scanner.nextInt();
                        //按2结束程序,需要对程序中的所有操作数据进行保存到文件中
                        if (iChoice == 2) {
                            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(
                                    new FileOutputStream(file, false)));
                            //写文档,就是把集合中所有的对象转换成文档要求的字符串,一一保存起来,以便下次读取
                            //度管理员(第一个位置)
                            String str = "";
                            Manager managerTmp = (Manager) Account.normalUserList.get(0);
                            //zhangsan2,201032124,1000460,123456,0
                            str = managerTmp.getName() + "," + managerTmp.getManageAccount() +
                                    ",," + managerTmp.getPassword() + "," + managerTmp.getRole();
                            bufferedWriter.write(str);//把str写入文档
                            bufferedWriter.newLine();//让文档换行
                            //度普通用户(非第一个的其他位置)
                            for (int i = 1; i < Account.normalUserList.size(); i++) {
                                NormalUser normalUserTmp = (NormalUser) Account.normalUserList.get(i);
                                str = normalUserTmp.getName() + "," + normalUserTmp.getId_card() +
                                        ",," + normalUserTmp.getMoney() + "," + normalUserTmp.getPassword()
                                        + "," + normalUserTmp.getRole();
                                bufferedWriter.write(str);//把str写入文档
                                bufferedWriter.close();//让文档换行
                            }
                            bufferedWriter.flush();//文档关闭操作
                            bufferedWriter.close();
                            System.out.println("程序结束");
                            break;
                        }
                    }
                }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {

        }
    }
}
package ATMDemo;
//账户类
public class NormalUser extends Account{
    private double money=0;
    public String id_card="";

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public String getId_card() {
        return id_card;
    }

    public void setId_card(String id_card) {
        this.id_card = id_card;
    }
}
package ATMDemo;
//管理员
public class Manager extends Account {
    private String manageAccount="";
    public static final String defaultedPassword="000000";
    public String getManageAccount(){
        return manageAccount;
    }
    public  void setManageAccount(String manageAccount){
        this.manageAccount=manageAccount;
    }
}


yanda,000000000,,111111,1
zhangsan,201032123,100000,123456,0
lisi,201032124,10000460,123456,0
wangwu,201032125,1999111,123456,0
maliu,201032126,10000001,123456,0
zhaomeng,201032127,10000054,123456,0
wangqi,201032127,1211111,123456,0

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

解决以上两个问题即可

简单回答如下:
1.验证登录账号的密码是否一致中没有管理员的密码
输入管理员密码 123456 依旧通过
---->
遍历账户ArrayList时没有从0开始,0位置包含的是管理员的账号,以及一些其他小问题。


2登录成功之后的小循环if语句一直不成功
不管写什么都会执行else
----> 应该是含有break的那个if语句位置不对
具体看下修改代码处的注释,修改如下:


package ATMDemo;

import java.io.*;
import java.util.Scanner;
 
//用户登陆界面
public class ATMtest {
    public static void showMoney() {
 
    }
 
 
public static void tranMoney(){
 
}
 
 
 
    public static void quit() {
        System.out.println("退出成功");
    }
 
 
    public static void query(){
        System.out.println("查询成功");
    }
    public static void update(){
        System.out.println("修改成功");
    }
    public static void main(String[] args) {
        try {
            //文件读取,且把文件中的数据转换成对象,在集合中保村
            //读文件
            File file = new File("src\\account.txt");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
            String strAccount = bufferedReader.readLine();//读取文件中的一行(按照每行读取文件)
            //管理员在文件的第一行(管理员放在链表的第一个)
            Manager manager = new Manager();
            String[] temp = strAccount.split(",");//把上面读的一个记录分割成字符串数组
            manager.setManageAccount(temp[1]);//管理账户
            manager.setName(temp[0]);//姓名
            manager.setPassword(temp[3]);//密码
//            manager.setRole(Integer.parseInt(temp[4]));
            manager.setRole(1);
            //角色
            Account.normalUserList.add(manager);//把第一个用户(管理员)放到集合链表中
 
            //继续读文件,普通用户在其他行
            strAccount = bufferedReader.readLine();
            while (strAccount != null) {
                temp = strAccount.split(",");//把上面读到的数据分割成字符串数组
                //把字符串数组中对应的每个字符串没转换成Account类中的对象,然后进行--一一绑定数据
                NormalUser normalUser = new NormalUser();
                normalUser.setName(temp[0]);//名字
                normalUser.setId_card(temp[1]);//账户
                normalUser.setMoney(Integer.parseInt(temp[2]));//金额
                normalUser.setPassword(temp[3]);//密码
//                normalUser.setRole(Integer.parseInt(temp[4]));
                normalUser.setRole(0);
                //0表示普通用户,1表示管理员
                Account.normalUserList.add(normalUser);//把转换好的对象放到集合中(文件会一直读取,知道没有的数据转换成对象)
                strAccount = bufferedReader.readLine();//读新的一行数据
            }
                //登陆及其他操作
                while (true) {//登录页面的大循环
                    //登录页面及操作
                    System.out.println("======用户登录======");
                    System.out.println("======1,输入用户账号======");
                    Scanner scanner = new Scanner(System.in);
                    String strAccountTemp = scanner.next();
                    System.out.println("======2,输入用户密码======");
                    String strPasswordTemp = scanner.next();
                    System.out.println("======3,输入用户角色(1:管理员,0:普通用户)======");
                    while (true) {
                        int role =-1;
                        try {
                            role = Integer.parseInt(scanner.next());
                            
                        } catch (Exception e) {
                            //e.printStackTrace();
                            System.out.println("请再次输入角色,确定输入的是数字,且是0或1");
                        }
                        System.out.println("role="+role);
                        if (role == 1 || role == 0) { //好像必须把if从try-catch中提出来,才能break跳出while循环
                            break; //输出的如果不是数字0或者1就会一直提醒
                        } else {
                            System.out.println("请再次输入角色,确定输入的是数字,且是0或1");
                        }
                    }
                    //根据用户登录的角色验证登录的账号和密码是否一致
 
                    boolean boolResult = false;
                    for (Account account: Account.normalUserList){
                        if (account.getPassword().equals(strPasswordTemp)) {
                            System.out.println("account.getPassword()="+account.getPassword());
                            boolResult = true;
                            break;
                        } else {
                            boolResult = false;
                        }
                    }
                    //登录验证
                    if (boolResult) {
                        while (true) {//登录成功
                            //登录成功之后的小循环 ,遍历账户ArrayList必须从0开始,因为管理员放在第一个位置              
                            for (int i = 0; i < Account.normalUserList.size(); i++) {//循环集合链表
                                //这里用父类Account来作normalUserTmp的类型,因为normalUserList里存放继承自父类的Manager类和NormalUser类
                                //用父类才能通用,到了具体需要使用的时候,如else-if时再转换为具体子类
                                Account normalUserTmp = (Account)  Account.normalUserList.get(i);//向下转型,得到第i个值
                                if ("yanda".equals(normalUserTmp.getName()))
                                {
                                    System.out.println("==========管理员系统==========");
                                    System.out.println("1,查询用户信息");
                                    System.out.println("2,修改用户信息");
                                    int command1 = scanner.nextInt();
                                    switch (command1){
                                        case 1:
                                            query();
                                            break;
                                        case 2:
                                            update();
                                            break;
                                    }
                                }else if (((NormalUser)normalUserTmp).id_card.equals(0)){
                                    System.out.println("===========用户界面==========");
                                    System.out.println("1,取钱");
                                    System.out.println("2,转账");
                                    System.out.println("3,退出");
                                    int command = scanner.nextInt();
                                    switch (command){
                                        case 1:
                                            showMoney();
                                            break;
                                        case 2:
                                            tranMoney();
                                            break;
                                        case 3:
                                            quit();
                                            break;
                                    }
                                }
                            }
                            //登陆成功后,操作(普通用户,系统管理员的操作)
                            //zhangsan3取钱,首先找到张三
                            //对对象集合accounts中的某一个对象进行操作,这个里面可以转账,取钱,登录等操作
//                                if ("zhangsan3".equals(normalUserTmp.getName())) {
//                                    normalUserTmp.setMoney(normalUserTmp.getMoney() - 1000);
//                                }
                        }
                    } else {//登录失败
                        System.out.println("登录不成功");
                        System.out.println("按1继续登录,按2结束程序");
                        int iChoice = scanner.nextInt();
                        //按2结束程序,需要对程序中的所有操作数据进行保存到文件中
                        if (iChoice == 2) {
                            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(
                                    new FileOutputStream(file, false)));
                            //写文档,就是把集合中所有的对象转换成文档要求的字符串,一一保存起来,以便下次读取
                            //度管理员(第一个位置)
                            String str = "";
                            Manager managerTmp = (Manager) Account.normalUserList.get(0);
                            //zhangsan2,201032124,1000460,123456,0
                            str = managerTmp.getName() + "," + managerTmp.getManageAccount() +
                                    ",," + managerTmp.getPassword() + "," + managerTmp.getRole();
                            bufferedWriter.write(str);//把str写入文档
                            bufferedWriter.newLine();//让文档换行
                            //度普通用户(非第一个的其他位置)
                            for (int i = 1; i < Account.normalUserList.size(); i++) {
                                NormalUser normalUserTmp = (NormalUser) Account.normalUserList.get(i);
                                str = normalUserTmp.getName() + "," + normalUserTmp.getId_card() +
                                        ",," + normalUserTmp.getMoney() + "," + normalUserTmp.getPassword()
                                        + "," + normalUserTmp.getRole();
                                bufferedWriter.write(str);//把str写入文档
                                bufferedWriter.close();//让文档换行
                            }
                            bufferedWriter.flush();//文档关闭操作
                            bufferedWriter.close();
                            System.out.println("程序结束");
                            break;
                        }
                    }
                }
 
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
 
        }
    }
}

img

img