展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 编程开发 > Java如何实现简单控制台版ATM系统

Java如何实现简单控制台版ATM系统

ATM系统项目ATM系统要实现的功能1.查询:账号必须存在,密码(三次机会,不对就锁卡)2.取款:账号必须存在,密码(三次机会,不对就锁卡),取款金额不能大于存款3.存款:账号必须存在,存款金额不能低于04.转帐:你的账户,转款账户都必须存在,密码(三次机会,不对就锁卡),转账金额不能超过余额5.锁卡:账号必须存在,使用密码冻结6.解卡:账号必须存在,只能使用身份证号进行解锁7.补卡:使用身份证进行补卡8.改密:愿密码进行改密,也可以使用身份证进行改密9.退出:保存数据项目分析可分为四个对象,第一个银行卡

ATM系统项目

ATM系统要实现的功能

1.查询:账号必须存在,密码(三次机会,不对就锁卡)

2.取款:账号必须存在,密码(三次机会,不对就锁卡),取款金额不能大于存款

3.存款:账号必须存在,存款金额不能低于0

4.转帐:你的账户,转款账户都必须存在,密码(三次机会,不对就锁卡),转账金额不能超过余额

5.锁卡:账号必须存在,使用密码冻结

6.解卡:账号必须存在,只能使用身份证号进行解锁

7.补卡:使用身份证进行补卡

8.改密:愿密码进行改密,也可以使用身份证进行改密

9.退出: 保存数据

项目分析

可分为四个对象,第一个 银行卡对象(Card 存储银行卡信息);第二个 用户对象(Person 存储用户信息);第三个 功能对象( Controller 具体的操作功能类);视图对象( Views 显示操作界面)。从而可分为四个类

代码

Card类

封装卡的属性(卡号,密码,余额,锁卡状态)

public class Card {
   //封装卡的属性
   private String cardid;
   private String password;
   private double money;
   private boolean islock;

   //设置封装的各属性的set、get方法
   public String getCardid() {
    return cardid;
   }

   public void setCardid(String cardid) {
    this.cardid = cardid;
   }

   public String getPassword() {
    return password;
   }

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

   public double getMoney() {
    return money;
   }

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

   public boolean isIslock() {
    return islock;
   }

   public void setIslock(boolean islock) {
    this.islock = islock;
   }
   
   //重写 to String方法
   @Override
    public String toString() {
        return "Card [cardid=" + cardid + ", password=" + password + ", money=" + money + ", islock=" + islock + "]";
    }
    
    //构造卡的无参和有参构造方法  
    public Card() {
        super();
        
    }
        
    public Card(String cardid, String password, double money, boolean islook) {
        super();
        this.cardid = cardid;
        this.password = password;
        this.money = money;
        this.islock = islock;
    }
   
}

Person类

封装用户信息(用户名,身份证号,手机号码,卡)

public class Person {
    private String name;
    private String userid;
    private String phone;
    private Card[] card;
    
    //设置封装的各属性的set、get方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUserid() {
        return userid;
    }
    public void setUserid(String userid) {
        this.userid = userid;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public Card[] getCard() {
        return card;
    }
    public void setCard(Card[] card) {
        this.card = card;
    }
        
    //重写 to String方法
    @Override
    public String toString() {
        return "Person [name=" + name + ", userid=" + userid + ", phone=" + phone + ", card=" + card+ "]";
    }
    //构造无参和有参方法  
    public Person() {
        super();
    }
    
    public Person(String name, String userid, String phone, Card[] card) {
        super();
        this.name = name;
        this.userid = userid;
        this.phone = phone;
        this.card = card;
    }    
}

Controller类

创建三个默认账户信息,并构造操作方法

public class Controller {
     Scanner sc = new Scanner(System.in);
     Card c = new Card() ; //生成卡
     
     //创建三组信息
     Card c1 = new Card("1","666666",1000,false);  //默认账户1
     Card c2 = new Card("2","666666",1500,false);  //默认账户2
     Card c3 = new Card("3","666666",1800,false);  //默认账户3
     public void regiser(String name,String userid,String phone,Card[] card) {
         //将Person类的属性赋给对象p
         Person p = new Person(name,userid,phone,card);        
     }
     
     public void query(Person p) {
         
         System.out.println(p);
     }
     
     public boolean verify(String cardid,String password) {
         if(cardid.equals("1")&&password.equals("666666")) {  //如果输入的是账户1的账户密码,就得到账户1属性
             c.setMoney(c1.getMoney());
             c.setPassword(c1.getPassword());
             
             if(!c.isIslock()) {       //判断账户1是否被锁
                 return true;
             }else {
                 System.out.println("抱歉,该卡已被锁");
                 return false;
             }
         }
         
         if(cardid.equals("2")&&password.equals("666666")) { //如果输入的是账户2的账户密码,就得到账户2属性
             c.setMoney(c2.getMoney());
             c.setPassword(c2.getPassword());
             
             //判断该卡是否被锁
             if(!c.isIslock()) {     //判断账户2是否被锁
                 return true;
             }
         }
         
         if (cardid.equals("3")&&password.equals("666666")) { //如果输入的是账户3的账户密码,就得到账户3属性
             c.setMoney(c3.getMoney());
             c.setPassword(c3.getPassword());
             
             if(!c.isIslock()) {        //判断账户3是否被锁
                 return true;
             }
         }
         
         return false;       //一个账户信息都没对上,重新输入
         
     }
        
     //构造查询方法
     public void query(String cardid) {
         
         if(cardid.equals("1")) {                           //查询账户1
             System.out.println(c.getMoney());
         }else if(cardid.equals("2")) {                     //查询账户2
             System.out.println(c.getMoney());
         }else if(cardid.equals("3")) {                     //查询账户3
             System.out.println(c.getMoney());
         }else {
             System.out.println("输入有误");
         }
         
     }
     
     //构造取钱方法
     public void putMoney() {
         System.out.print("请输入需要取出的金额(将金额再确认一遍):");
         double money = sc.nextDouble();
        //判断钱够不够
         if(money<=c.getMoney()) {
             money = c.getMoney()-money;
             c.setMoney(money);                        //钱够取出并更新账户余额
             System.out.println("已取出"+sc.nextDouble()+"元");
             System.out.println("账户余额为:"+money+"元");
         }else {
             System.out.println("对不起,账户余额不足");
         }
     }
     
     //构造存钱方法
     public void addMoney() {

         System.out.println("请将纸币放于存钞口(将金额再确认一遍)");

         double money = sc.nextDouble();

          money = c.getMoney()+money;

         c.setMoney(money);                               //存钱并更新账户余额      
         
         System.out.println("已存入"+sc.nextDouble()+"元");
        System.out.println("账户余额为:"+money+"元");         
         

     }
     
   //构造转钱方法
     public void saveMoney() {
         System.out.println("请输入需要转入账户名:");
         String name = sc.next();
         System.out.print("请输入转入金额(将金额再确认一遍):");
         double money = sc.nextDouble();
         
         //判断钱够不够
         if(c.getMoney()>=money) {
             money = c.getMoney()-money;
             c.setMoney(money);                             //钱够转钱 更新账户余额
             System.out.println("已转出"+sc.nextDouble()+"元");
             System.out.println("账户余额为:"+money+"元");
         }else {                                            //钱不够返回
             System.out.println("对不起,账户余额不足");
         }
     }
     
     //构造锁卡方法
     public void lock() {
         c.setIslock(true);
         System.out.println("该卡已被锁");
     }
     
     //构造解卡方法
     public void unlock() {
         c.setIslock(false);
         System.out.println("该卡可正常使用");
     }
     
     //构造补卡方法
     public void newCard() {
         System.out.println("请输入您的姓名:");
         String name = sc.nextLine();
        
         System.out.println("请输入您的身份证号码:");
         String userid = sc.nextLine(); 
        
         Person p = new Person(name,userid,null,null);  
         
         
         System.out.println("请输入重办账户号码:");         
         String cardid = sc.nextLine();
         
         System.out.println("请输入要设置的密码(数字):");
         String  password = sc.nextLine();
     
         //限制密码位数
         if(password.length()==6) {
             System.out.println("密码设置成功");
         }else {
             System.out.println("密码限制6位,请重新选择功能");             
         }
         
     }        

     
     //构造改密方法
     public void changePwd() {
         System.out.println("请输入密码:");
         String password = sc.next();
         
         if(password.equals(c.getPassword())){
             System.out.println("请输入更改后的密码:");
             String newpassword = sc.next();
             System.out.println("再输入一次密码:");
             String newpassword1 = sc.next();
             
            if(newpassword.equals(newpassword1)) {
             System.out.println("密码修改成功!");
             c.setPassword(newpassword1);
            }else {
             System.out.println("两次密码输入不一致,请重新输入");
             changePwd();
            }
       }else {     
           System.out.println(c.getPassword());
           System.out.println("密码输入错误");
       }
     }
     
     //构造退出方法
     public void save() {
         System.exit(0);
     }
}

View类

实现欢迎界面以及各操作界面

public class View {
    Scanner s = new Scanner(System.in);
    private int count = 3;
    Card c =new Card();
    Controller co = new Controller();
    
    public static void main(String[] args) {
        View v = new View();
        v.show();
    }
    
    public void show() {
        System.out.println("=============欢迎使用使用本行存取一体机=============");
        System.out.println("请输入卡号:");
        String cardid = s.nextLine();
        
        System.out.println("请输入密码:");
        String  password =s.nextLine();
        
        //登录界面,账户密码错三次就锁卡
        if(!co.verify(cardid, password)) {
            count--;
            if(count == 0) {
                co.lock();   //调用lock
                System.out.println("密码输入错误"+c.isIslock());
                System.out.println("请重新输入:");
            }
            
            System.out.println("你还有"+count+"次输入机会,");
            System.out.println("输入机会用完后,将会锁卡");
            show();
        }
        //如果账户密码正确就进入功能界面
        if(co.verify(cardid, password)) {
            while(true) {
                System.out.println("请按相应的序号选择功能:1.取款    2.存款    3.查询余额    4.转账   5.修改密码    6.锁卡    7.解卡   8.补卡  9.退出");
                
                switch(s.nextInt()) {
                case 1:   //取款
                    co.putMoney();
                    break;
                case 2:  //存钱
                    co.addMoney();
                    break;
                case 3:  //查询
                    co.query(cardid);
                    break;
                case 4:  //转钱
                    co.saveMoney();
                    break;
                case 5:  //改密
                    co.changePwd();
                    break;
                case 6:  //锁卡
                    co.lock();
                    break;
                case 7:  //解卡
                    co.unlock();
                    break;
                case 8:  //补卡
                    co.newCard();
                    break;
                case 9:  //退出
                    System.out.println("感谢使用,欢迎下次光临");
                    co.save();
                    break;
                    
                default:  //输入指令错误
                    System.out.println("输入有误");
                    break;
                }
            }
        }
    }
}
本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发 Java
相关文章 更多
精品专题 更多
本月促销

正软商城本月促销专区,汇集办公、设计、安全、影音、系统工具及AI软件等正版软件优惠活动,提供限时折扣、特价授权和优惠购买信息,活动库存及价格以页面实时展示为准。

装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Menuist
Menuist

Menuist 是一款面向 macOS 的 Finder 右键菜单增强工具,主要用来补充新建文件、快捷导航等常用操作,让日常文件管理和访问路径时更高效、更顺手。

Mole
Mole

Mole 是一款专为 Mac 设计的深度清理优化工具,涵盖缓存清理、应用管理及实时状态监控等功能。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

PinStack
PinStack

PinStack是一款轻量级的Windows平台剪贴板管理工具,优化您的剪贴板使用体验。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Seer
Seer

Seer是一款在Win平台下的空格键功能增强效率工具,只需轻敲空格键,就能预览几乎任何格式的文件。它更适合把零散的小功能集中起来使用,处理高频琐碎任务时会更省事。