ATM系统0.2版

本文档详细介绍了幸福银行ATM系统的0.2版本,包括账户信息的存储与更新,用户注册、登录、注销等功能。系统通过文本文件存储用户数据,实现了账户的创建、查询、存款、取款、转账及密码修改等操作。同时,文章讨论了在文件中添加和删除账户信息时可能遇到的问题,并给出了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ATM系统0.2版

把注册的账号信息存入文本文件中,更新把信息存入文本,实现数据储存。

增加了

writeToFile(accounts); // 把信息写到文件中去

createAccountTable(ArrayList<Account>accounts)//从文件中读取信息到集合中
//本来想实现的目标,但是实际写完后,如果有用户注销,将要判断是哪一行要删除,得遍历一波,比较麻烦。或有用户注册,可以直接写到文件后面,这样就要写入文件的方法就要判断是属于哪一种。
直接就在后面结束操作就全部把集合中的信息重新写到文件中。
//用户注册时把信息写入到文件中,
//如果就注册就把这个用户追加到文件末尾,  先实现全部重写
// 如果用户消除这个用户,就在销户后面加个把信息重新写到文件中

用户的账号



public class Account {
    //账号
    private String ID;
    //用户名
    private String name;
    // 密码
    private String password;
    //余额
    private double balance = 0.0;
    //可提现的额度
    private double withdrawalAmount = 3000;

    public Account() {
    }

    public Account(String ID, String name, String password, double balance, double withdrawalAmount) {
        this.ID = ID;
        this.name = name;
        this.password = password;
        this.balance = balance;
        this.withdrawalAmount = withdrawalAmount;
    }

    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public double getWithdrawalAmount() {
        return withdrawalAmount;
    }

    public void setWithdrawalAmount(double withdrawalAmount) {
        this.withdrawalAmount = withdrawalAmount;
    }
}

主方法

    public static void main(String[] args) {
        //从文本读取信息
        ArrayList<Account> accounts = createAccountTable(new ArrayList<>());
        boolean flag = true;
            while (flag){
                flag=loading(accounts);
            }
        System.out.println("很高兴为您服务");
        System.out.println("祝您旅途愉快,欢迎您的下次光临");
      //退出程序就把信息写到文件中
	    writeToFile(accounts);
    }

登入界面

    //登入界面
    public static boolean loading(ArrayList<Account> accounts){
        Scanner sc = new Scanner(System.in);
        System.out.println("======欢迎您进入幸福银行ATM系统======");
        System.out.println("1.登入账户");
        System.out.println("2.注册开户");
        System.out.println("3.退出系统");
        System.out.println("请输入命令1、2选择对应的操作:");
        int select = sc.nextInt();
        switch (select){
            case 1:
//                System.out.println("1.登入账户");
                login(accounts,sc);
                break;
            case 2:
//                System.out.println("1.注册开户");
                register(accounts,sc);
                break;
            case 3:
                return false;
        }
            return true;
    }

注册账号

    //开户
    public static void register(ArrayList<Account> accounts, Scanner sc){

        System.out.println("======欢迎您进入幸福银行用户办卡界面=====");
        System.out.println("请输入你的姓名:");
        String name = sc.next();
        System.out.println("请输入你的密码:");
        String password = sc.next();
        System.out.println("请确认你的密码:");
        String temp = sc.next();

        if(password.equals(temp)){

            Account account = new Account();
            account.setName(name);
            account.setPassword(password);

            //如果没有账户就直接创建一个ID
            if(accounts.size() == 0){
                String cardID = createID();
                account.setID(cardID);
            }else {
                //创建不能相同的ID号
                boolean flag = true;
                while(flag){
                    String cardID = createID();
                    for (int i = 0; i < accounts.size(); i++) {
                        Account account1 = accounts.get(i);
                        if(!cardID.equals(account1.getID())){
                            account.setID(cardID);
                            flag = false;
                        }
                    }
                }
            }
            //设置最开始的提现额度为10万
//            account.setWithdrawalAmount(100000);
            //余额0元
            account.setBalance(0.0);
            //把账户加到集合当中去
            accounts.add(account);
            System.out.println("你的信息:");

            System.out.println("持卡人:"+ account.getName()+"\t卡号:"+account.getID());
            System.out.println("开户成功");

        }else{
            System.out.println("两次输入的密码不一样,请重新操作:");
            register(accounts, sc);
        }

    }

卡号生成器

  //创建随机8位数卡号
    public static String createID(){
        int[] card = {0,1,2,3,4,5,6,7,8,9};
        Random ra = new Random();
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < 8; i++) {
            builder.append(card[ra.nextInt(10)]);
        }
        return builder.toString();
    }

账户登入

// 用户账号登入
    public static void login(ArrayList<Account> accounts, Scanner sc){
        System.out.println("======幸福银行ATM系统登入界面======");
        System.out.println("请输入您的卡号:");
        String id = sc.next();
        boolean falg = true;
        for (int i = 0; i < accounts.size(); i++) {
            Account account = accounts.get(i);
            if(account.getID().equals(id)){
                System.out.println("请您输入您的密码:");
                String password = sc.next();
                int count = 0;
                while(!account.getPassword().equals(password)){
                    System.out.println("密码错误,请重新输入密码:");
                    password = sc.next();
                    if (count == 2) {
                        System.out.println("你输入的密码错误三次,将返回界面");
                        return;
                    }
                    count++;
                }
                System.out.println(account.getName()+"贵宾"+"\t卡号"+account.getID()+"欢迎进入系统");
                falg = true;
                //登入成功后,就可以进行数据操作 拿到当前账号信息
                while(falg){
                    falg = operate(accounts,sc,account);
                }

           }
    
        }
        if(falg){
            System.out.println("您的卡号不存在,");
            login(accounts,sc);
        }
  }

系统的主操作界面

       //用户登入成功后的操作界面(查询余额,存款,转账,取款 等)
    public static boolean operate(ArrayList<Account> accounts, Scanner sc,Account account){
        System.out.println("======欢迎您进入幸福银行用户操作界面======");
        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、注销当前账户");
        System.out.println("您可继续选择功能进行操作:");
        int select = sc.nextInt();

        switch (select){
            case 1:
//                System.out.println("1、查询");
                queryAccount(account);
                break;
            case 2:
//                System.out.println("2、存款");
                setMoney(account,sc,0.0);
                break;
            case 3:
//                System.out.println("3、取款");
                withdrawal(account,sc);
                break;
            case 4:
//                System.out.println("4、转账");
                transferAccount(accounts, sc, account);
                break;
            case 5:
//                System.out.println("5、修改密码");
            //修改完密码后立即需要用新密码登入
                Account account1 = modificationPassword(account,sc);
                accounts.add(account1);
                System.out.println("重新登入");
                return false;

            case 6:
                //回到主界面
//                System.out.println("6、退出");
//                loading(accounts);
                return false;

            case 7:
                // 注销完当前账号,立马返回到主界面,
//                System.out.println("7、注销当前账户");
                unsubscribe(accounts,account);
                loading(accounts);
                break;

        }
            return true;
    }

查询账号信息

//查询账号信息
    public static void queryAccount(Account account){
        System.out.println("你的账户信息如下:");
        System.out.println("卡号:"+account.getID());
        System.out.println("姓名:"+account.getName());
        System.out.println("余额:"+account.getBalance());
        System.out.println("当次取现额度:"+account.getWithdrawalAmount());
    }

修改账号密码

//修改密码
    public static Account modificationPassword(Account account,Scanner sc){
        System.out.println("请您输入新密码:");
        String password = sc.next();
        System.out.println("请再次输入你的密码:");
        String temp = sc.next();
        if(password.equals(temp)){
            account.setPassword(password);
            System.out.println("密码修改成功");
        } else{
            System.out.println("两次密码不一致,请重新输入:");
            modificationPassword(account,sc);
        }

        return account;
    }

账户注销

//注销账户
    public static void unsubscribe(ArrayList<Account> accounts,Account account){
        accounts.remove(account);
        System.out.println("已完成注销!");
    }

存款

 //存款,存款成功后,调用一次用户信息的查询
    public static void setMoney(Account account,Scanner sc,double money){
        //这是为了存钱
        if(money == 0.0){
            System.out.println("请您输入存款的金额:");
          //上个版本这里有问题,没有想到,如果有余额,再存,只是把原来的覆盖了,没有做到累加
            account.setBalance(sc.nextDouble() + account.getBalance());
            System.out.println("您已经存款成功");
            queryAccount(account);
        }else{
            //这是给取完钱调用,更新余额
            account.setBalance(account.getBalance() - money);
            System.out.println("您已经取款成功!");
            queryAccount(account);
        }
    }

取款

    //取款
    public static void withdrawal(Account account,Scanner sc){
        if(account.getBalance() < 100){
            System.out.println("你个穷鬼,余额不足100,取不出来");
        }else{
            System.out.println("请输入你要取的金额:");
            double money = sc.nextDouble();
            if(money > account.getWithdrawalAmount()){
                System.out.println("您当前取款超过了当次限额");
                withdrawal(account,sc);
            }else{
                if(money > account.getBalance()){
                    System.out.println("您的账户余额不足,请重新取款");
                    withdrawal(account,sc);
                }else{
                    setMoney(account,sc,money);
                }
            }
        }

    }

转账

/转账
    public static void transferAccount(ArrayList<Account> accounts, Scanner sc,Account account){
        if(accounts.size()<2){
            System.out.println("当前系统,账户不足2个,不能转账!");
//            operate(accounts,sc,account);
        }else{
                if(account.getBalance() <100){
                    System.out.println("您自己都没钱,就别转了");
                    operate(accounts,sc,account);
                }else{
                    boolean flag = true;
                    int count = 0;
                    while(flag){
                        System.out.println("请输入转账的账户卡号:");
                        String id = sc.next();
                        for (int i = 0; i < accounts.size(); i++) {
                            Account account1 = accounts.get(i);
                            if(id.equals(account1.getID())){
                                //如果找到了,就拿到要转账的地址,
                                flag = false;
                                count = i;
                                }
                         }
                    }
                    if(flag){
                        System.out.println("不存在该账户,请重新确认!");
                        transferAccount(accounts, sc,account);
                    }else{
                        System.out.println("您当前要为"+accounts.get(count).getName()+"转账");
                        System.out.println("请输入姓名确认");
                        String name = sc.next();
                        if(name.equals(accounts.get(count).getName())){
                            System.out.println("请输入你要转的金额:");
                            double money = sc.nextDouble();
                            //转账人减到money 被转账的人加money
                            account.setBalance(account.getBalance()-money);
                            accounts.get(count).setBalance(accounts.get(count).getBalance() + money);
                            System.out.println("转账成功");
                            queryAccount(account);
                        }else{
                            System.out.println("名字不同,请重新确认你的操作");
                            transferAccount(accounts, sc,account);
                        }

                    }

                }
        }

    }

从文件读取信息

    //从文件读取账户信息
    public static ArrayList<Account> createAccountTable(ArrayList<Account>accounts){
        try{
            //文件按照 ID 姓名  密码  余额  可提现额度  顺序存储
            BufferedReader reader = new BufferedReader(new FileReader("D:\\项目代码\\Accounts信息.txt"));
                String str = null;
                while((str = reader.readLine() )!= null){
                    if(!str.equals("")){
                        String[] line = str.split(",");
                        Account account = new Account();
                        account.setID(line[0]);
                        account.setName(line[1]);
                        account.setPassword(line[2]);
                        account.setBalance(Double.parseDouble(line[3]));
                        account.setWithdrawalAmount(Double.parseDouble(line[4]));
                        accounts.add(account);
                    }
                }

        }catch (Exception e){
            System.out.println(e);
        }
        return accounts;
    }

把信息写到文本中

 public static void writeToFile(ArrayList<Account>accounts){
        try{
            FileWriter fw = new FileWriter("D:\\项目代码\\Accounts信息.txt");
            BufferedWriter bufw = new BufferedWriter(fw);
            for (int i = 0; i < accounts.size(); i++) {
                Account account = accounts.get(i);
                String str =  account.getID()+","+ account.getName()+","+
                        account.getPassword()+","+ account.getBalance()+","+
                        account.getWithdrawalAmount();
                bufw.write(str);
            }
            bufw.close();
        }catch (Exception e){
            System.out.println(e);
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值