用最冷门的TreeMap做一个控制台版本的ATM系统


要求:

编写一个控制台版本的ATM系统,并使用集合跟面向对象等知识实现如下功能,请保持较好的代码规范跟项目结构


一、实体类AtmSystem

import java.util.Scanner;
public class AtmSystem {
    private AccountTool accountTool;
    static Scanner sc = new Scanner(System.in);
    static String psword="0";
    //主菜单
    public static void menu(){
        System.out.println("****************ATM****************");
        System.out.println("**    1.注册            2.登录    **");
        System.out.println("***********************************");
        System.out.println("**请选择:");
        if (sc.nextInt()==1)
            login();
        else
            enter();
    }
    //注册
    private static void login(){
        System.out.println("***********************************");
        System.out.println("**请输入账户名:");
        String name = sc.next();
        AccountTool.accountUser(name);
        menu();
    }
    //登录
    private static void enter(){
        System.out.println("***********************************");
        System.out.println("**请输入账户名:");
        String name = sc.next();
        System.out.println("**请输入账户密码:");
        String psw = sc.next();
        psword=psw;
        if (AccountTool.accountDg(name,psw))
            user();
    }
    //用户操作
    private static void user() {
        System.out.println("****************ATM****************");
        System.out.println("**    1.余额            2.存款    **");
        System.out.println("**    3.转账                      **");
        System.out.println("***********************************");
        System.out.println("**返回主界面,请输入#menu#");
        System.out.println("**退卡,请输入#exit#");
        System.out.println("**请输入选项:");
        String choose = sc.next();
        if (choose.equals("1")){
            balance();
        }else if (choose.equals("2")){
            deposit();
        }else if (choose.equals("3")){
            transfer();
        }
        exitAndMenu(choose);
    }
    //余额
    private static void balance(){
        System.out.println("************[ #exit# : 退卡 | #menu# :返回主界面]");
        System.out.println("**请输入账户密码:");
        String psw = sc.next();
        exitAndMenu(psw);
        System.out.println(psword);
        if (psw.equals(psword)){
            System.out.println("**您的余额为:¥"+AccountTool.userMoney(psw,psword));
            user();
        }else {
            System.out.println("**密码不正确!请重新输入:");
            psw=sc.next();
            exitAndMenu(psw);
        }
    }
    //存款
    private static void deposit(){
        System.out.println("***********************************");
        System.out.println("**请输入您的存款金额:");
        double money = sc.nextDouble();
        System.out.println("**存款成功!");
        AccountTool.saveMoney(psword,money);
        user();
    }
    //转账
    private static void transfer(){
        System.out.println("************[ #exit# : 退卡 | #menu# :返回主界面]");
        System.out.println("**请输入对方账号:");
        String name = sc.next();
        exitAndMenu(name);
        AccountTool.userName(name);
        System.out.println("**请输入您的转账金额(¥):");
        double money = sc.nextDouble();
        System.out.println("************[ #exit# : 退卡 | #menu# :返回主界面]");
        AccountTool.transfer(name,money);
        user();
    }
    //返回主菜单和退出
    private static void exitAndMenu(String t){
        if (t.equals("#menu#")){
            menu();
        }else if (t.equals("#exit#")){
            System.out.println("感谢您的使用,欢迎下次光临!");
            return;
        }
    }
}

二、工具类AccountTool

import javafx.scene.transform.Scale;
import java.util.*;
public class AccountTool {
        static TreeMap<String, String> map = new TreeMap<>();//账户名 账户密码
        static TreeMap<String, Double> map1 = new TreeMap<>();//密码 余额
        static Scanner sc= new Scanner(System.in);

        //登录
        protected static boolean accountDg(String name,String psw){
            if (map.get(name).equals(psw)){
                System.out.println("**登录成功!欢迎您!"+name);
                return true;
            }else {
                System.out.println("**账号或者密码不正确!请重试!");
                System.out.println("**请输入账户名:");
                name=sc.next();
                System.out.println("请输入账户密码:");
                psw=sc.next();
                accountDg(name,psw);
                return false;
            }
        }
        //注册
        protected static void accountUser(String name){
            Set<String> keySet = map.keySet();
            for (String k : keySet) {
                if (k.equals(name)){
                    System.out.println("**该账户已存在!");
                    System.out.println("**请重新输入账户名:");
                    name = sc.next();
                    break;
                }
            }
            System.out.println("**请输入密码:");
            String psw = sc.next();
            map.put(name,psw);
            System.out.println("**账号["+name+"]创建成功!请牢记密码!");
            money();
        }
        //转账
        protected static void transfer(String name,double money){
            System.out.println("**请输入账户密码:");
            String psw = sc.next();
            Set<String> keySet = map1.keySet();
            for (String k : keySet) {
                if (k.equals(psw)&&map1.get(k)>=money){
                    System.out.println("**转账成功!");
                }else {
                    System.out.println("**您的余额不足!余额为:¥"+map1.get(psw));
                    System.out.println("**请重新输入您的转账余额(¥):");
                    money=sc.nextDouble();
                    transfer(name,money);
                }
            }
        }
        //判断账户里面有没有钱
        protected static void money(){
            Collection<String> values = map.values();
            Set<String> keySet = map1.keySet();
            for (String value : values) {
                for (String s : keySet) {
                    if (value.equals(s)){
                        return;
                    }
                }
                map1.put(value,0.0);
            }

        }

        //判断账号是否存在
        protected static void userName(String name){
            Set<String> keySet = map.keySet();
            for (String k : keySet) {
                if (k.equals(name)){
                    return;
                }

                }
            System.out.println("**该账户不存在!");
            System.out.println("**请输入对方账户:");
            name=sc.next();
            userName(name);
        }
        //账户余额
        protected static double userMoney(String psw,String userPsw){
            if (userPsw.equals(psw)){
                return map1.get(psw);
            }else {
                System.out.println("**密码不正确!请重新输入:");
                System.out.println("请输入账户密码:");
                psw=sc.next();
                userMoney(psw,userPsw);
            }
            return 0;
        }
        //存款
        protected static void saveMoney(String psw,double money){
            map1.put(psw,money);
        }
}

效果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

两个treemap ,第一个treemap形成账号–密码键值对,第二个treemap形成密码–钱数键值对,进行存储和遍历取出数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值