沙鸥翔 2022-06-04 19:56 采纳率: 100%
浏览 52
已结题

学java练习小项目写了一半不会

设计一个银行ATM取款机系统。

要求:
1、需要有账户类Account,里面包含账户姓名、账号、密码、余额、账户类型 管理员和普通用户 两种等信息,不同的账户包括管理员Manager类、普通用户User类 继承自此账户类。
2、账户的信息需要从文件中读取例如:读取记事本,读取的存取到集合类中ArrayList、LinkedList、HashMap、HashTable。
3、普通用户需要输入账号、密码及账户类型,在确认正确后显示除了密码的所有信息;否则提示用户密码或者账号输入错误,然后回到登录登录要求有:账号输入、密码、以及账户类型的选择。
4、普通用户登录成功后。用户可以取钱、转账、退出。
4.1 取钱。需要输入金额,如果金额大于余额需要提示 提示:如果输入的不是数字,需要进行异常处理;如果输入的不是正数,需要提示。要考虑到非正常的情况 ;
4.2 转账。如果金额小于等于余额,直接转账,在转账后,需要输入对方的账号对方账号要存在,才能成功,否则会有相应提示;否则提示余额不足。要考虑到非正常的情况。
4.3 退出。直接退出到登录页面。
5、管理员账号登录。
5.1 可以查看所有的普通用户 以列表的形式存在 ,并且对所有的普通用户都可以修改根据列表的信息前的对应的1、2、3等序号进行修改,不能修改账号,只能修改密码,仅限于密码重置为默认密码 例如默认密码000000

package _7_text;
import java.util.ArrayList;
public class Account {
    private String name = "";
    private int role = 0;
    private String password = "";
    public static ArrayList<Account> normalUsersList = new ArrayList<Account>();
    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 _7_text;

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;
    }
}


package _7_text;

public class NormalUser extends Account {
    private int money = 0;//金额

    //普通用户卡号,用户转账,唯一
    public String id_card = "";

    public int getMoney() {
        return money;
    }

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

    public String getId_card() {
        return id_card;
    }

    public void setId_card(String id_card) {
        this.id_card = id_card;
    }
}


package _7_text;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class ATMTest {
    public static void main(String[] args) {
        try {
            //1.文件读取,且把文件中的数据转成对象,在集合中保存
            //读文档
            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[2]);
            manager.setRole(Integer.parseInt(temp[4]));
            Account.normalUsersList.add(manager);//把第一个用户(管理员)放在集合链表中
            //继续读文件,普通用户在其他行
            strAccount = bufferedReader.readLine();
            while (strAccount != null) {
                temp = strAccount.split(",");
                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(0);
                Account.normalUsersList.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.输入用户角色(只能允许输入0或者1,0:管理员;1:普通用户)======");

                while (true) {
                    try {
                        int role = Integer.parseInt(scanner.next());
                        if (role == 1 || role == 0) {
                            break;
                        } else {
                            System.out.printf("请再次输入角色,确定输入的是数字,且是0或1");
                        }
                    } catch (Exception e) {
                        System.out.println("请再次输入角色,确定输入的是数字,且是0或1");
                    }
                }

                boolean boolResult = false;
                for (Account account : Account.normalUsersList) {//遍历Account.normalUsersList的集合,取出每一个元素

                    //boolResult = true;
                }

                if (boolResult) {

                    while (true) {
                        for (int i = 0; i < Account.normalUsersList.size(); i++) {
                            NormalUser normalUserTmp = (NormalUser) Account.normalUsersList.get(i);
                            if ("zhangsan3".equals(normalUserTmp.getName())) {
                                normalUserTmp.setMoney(normalUserTmp.getMoney() - 1000);
                            }
                        }
                    }
                } else {
                    System.out.println("登录不成功");
                    System.out.println("按1继续登录,按2退出登录,结束程序");
                    int iChoice = scanner.nextInt();
                    if (iChoice == 2) {
                        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(
                                new FileOutputStream(file, false)));

                        String str = "";
                        Manager managerTmp = (Manager) Account.normalUsersList.get(0);

                        str = managerTmp.getName() + "," + managerTmp.getManageAccount() +
                                ",," + managerTmp.getPassword() + "," + managerTmp.getRole();
                        bufferedWriter.write(str);
                        bufferedWriter.newLine();
                        for (int i = 1; i < Account.normalUsersList.size(); i++) {
                            NormalUser normalUserTmp = (NormalUser) Account.normalUsersList.get(i);
                            str = normalUserTmp.getName() + "," + normalUserTmp.getId_card() +
                                    "," + normalUserTmp.getMoney() + "," + normalUserTmp.getPassword() +
                                    "," + normalUserTmp.getRole();
                            bufferedWriter.write(str);
                            bufferedWriter.newLine();
                        }
                        bufferedWriter.flush();
                        bufferedWriter.close();
                        System.out.println("程序结束");
                        break;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
    }
}

img

已有模板按要求补全代码ATMTest
已有模板按要求补全代码ATMTest
已有模板按要求补全代码ATMTest
  • 写回答

1条回答 默认 最新

报告相同问题?

问题事件

  • 系统已结题 6月12日
  • 已采纳回答 6月4日
  • 修改了问题 6月4日
  • 创建了问题 6月4日

悬赏问题

  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗