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

学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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵