用Java实现简单ATM机功能

本文实例为大家分享了Java实现简单ATM机功能的具体代码,供大家参考,具体内容如下

项目介绍

基于大家使用银行卡在ATM机取款操作,进行相对应ATM机操作流程的实现。

项目功能

1、注册功能:

根据用户输入的账号密码申请一张银行卡,存储在银行卡类型的数组中(一张银行卡对应一个有效用户)。

2、登录功能:

登陆失败:重新登陆 或 注册
登陆成功:对登陆的这张银行卡可以进行一下操作:存款、取款、查余额、转账、退卡功能。

项目知识点

3、java基本语法的使用
4、一维数组
5、函数调用,封装
6、Java类和对象

项目实现思路

7、设计并实现系统的相关打印界面:注册、登陆、登陆后操作
8、登录系统必须输入正确的卡号和密码,输入错误时提示用户重新登陆。
9、实现取款、存款、查余额等功能。

难点

对面向对象编程的理解,以及静态变量和实例变量的理解。
二者区别:
实例变量:跟对象有关,一个对象一份实例变量
静态变量:跟对象无关,一个类一份静态变量

源代码

1.ATM类

public class ATM {

    private static boolean flag = true;
    private int id;
    private int passwd;

    private BankCard bankCard;

    private static Bank bank;
    /* 不写跳1空异常*/
    public ATM(){
        bank = new Bank();
    }

    Scanner  scanner = new Scanner(System.in);

    public void start(){
        int chioce;

        while (flag == true){
            System.out.println("请选择: 1.注册 2.登录 3.退出");
            chioce = scanner.nextInt();
            switch(chioce){
                case 1:

                    System.out.println("请输入账号和密码:");
                    id = scanner.nextInt();
                    passwd = scanner.nextInt();

                    register(id,passwd);

                    break;
                case 2:

                    System.out.println("请输入账号和密码:");
                    id = scanner.nextInt();
                    passwd = scanner.nextInt();

                    login(id,passwd);

                    break;
                case 3:

                    flag = false;
                    break;
            }
        }

    }

    //注册
    private void register(int id, int passwd) {

        //检查此卡号是否存在
        if(bank.contains(id)){
            System.out.println("此卡号已存在,注册失败!");
        }
        else{
            bankCard = new BankCard(id,passwd);
            bank.add(bankCard);
            System.out.println("注册成功!");

        }
    }

    //登录
    private void login(int id, int passwd) {

        //检查此卡号是否存在
        if(bank.login(id,passwd)){
            System.out.println("登陆成功!");
            //登陆成功 返回卡的信息
            bankCard = bank.getcard(id,passwd);
            //调用 ATM功能函数
            function(bankCard);

        }else{
            System.out.println("登陆失败! 请重新登录");
        }
    }

    //ATM功能函数
    private void function(BankCard bankCard) {
        double money;
        int count = 0;

        int chioce;
        while (flag == true){
            System.out.println("请选择: 1.存款 2.取款 3.查余额 4.转账  5.退卡");
            chioce = scanner.nextInt();
            switch(chioce){
                case 1:
                    System.out.println("请输入存款金额:");
                    money = scanner.nextDouble();
                    bank.setMoney(bankCard,money);
                    System.out.println("存款成功!");

                    break;
                case 2:
                    System.out.println("请输入取款金额:");
                    money = scanner.nextDouble();
                    if(bank.getMoney(bankCard,money)){
                        System.out.println("取款成功!");
                    }else{
                        System.out.println("余额不足取款失败!");
                    }

                    break;
                case 3:

                    System.out.println("余额为:"+bank.getBalance(bankCard));

                    break;
                case 4:

                    System.out.println("请输入转账的账号:");
                    while(flag){
                        count = scanner.nextInt();
                        //检查此卡号是否存在
                        if(!bank.contains(count)){
                            System.out.println("此卡号不存在,请重新输入:");
                        } else{
                            flag =false;
                        }
                    }
                    System.out.println("请输入转账的金额:");
                    money = scanner.nextDouble();
                    if(bank.transfer(bankCard,bank.getcard1(count),money)){
                        System.out.println("转账成功!");
                    }else{
                        System.out.println("余额不足,转账失败!");
                    }

                    break;
                    //莫名结束??
                case 5:

                    flag = false;
                    break;
            }

        }

    }

}

2.Bank类

public class Bank {
    private BankCard[] cards;
    private static int cardsnum = 0;
//  private static double cardsmoney = 0.0;
    private static final int INITSIZE = 10;

    public Bank(){
        cards = new BankCard[INITSIZE];
    }

    //查询卡是否存在
    public boolean contains(int id) {
        for(int i=0;i<cardsnum;i++){

            if (cards[i].getId() == id){
                return true;
            }
        }
        return false;
    }

    //登录
    public boolean login(int id,int passwd) {
        for(int i=0;i<cardsnum;i++){

            if (cards[i].getId() == id && cards[i].getPasswd() == passwd){
                return true;
            }
        }
        return false;
    }

    //添加一张银行卡
    public void add(BankCard card) {
        //判断存卡的数组是否已满
        if(cards.length == cardsnum){
            //数组已满执行扩容操作
            cards = Arrays.copyOf(cards,cards.length+(cards.length>>1));
        }

        //银行卡存入银行卡类型数组
        cards[cardsnum] = card;
        //银行卡数+1
        cardsnum++;

    }
    //输入卡号,密码返回银行卡
    public BankCard getcard(int id, int passwd){

        for(int i=0;i<cardsnum;i++){
            if (cards[i].getId() == id && cards[i].getPasswd() == passwd){
                return cards[i];
            }
        }

        return null;
    }

    //存款
    public boolean setMoney(BankCard card,double money){
        return card.setMoney(money);

    }

    //取款
    public boolean getMoney(BankCard card,double money){
        return card.getMoney(money);
    }

    //查余额
    public double getBalance(BankCard card){

        return card.getBalance();
    }

    //转账
    public boolean transfer(BankCard card, BankCard tempcard, double money){
        if( card.getMoney(money)){
            tempcard.setMoney(money);
            return true;
        }

        return false;
    }

    //输入卡号,密码返回银行卡
    public BankCard getcard1(int id){

        for(int i=0;i<cardsnum;i++){
            if (cards[i].getId() == id){
                return cards[i];
            }
        }

        return null;
    }

}

3.BankCard类

public class BankCard {
    private int id;
    private int passwd;
    private double money;

    public BankCard(int id, int passwd) {
        this.id = id;
        this.passwd = passwd;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getPasswd() {
        return passwd;
    }

    public void setPasswd(int passwd) {
        this.passwd = passwd;
    }

    public boolean getMoney(double money) {
        if(this.money>=money){
            this.money -= money;
            return true;
        }else{
            return false;
        }
    }

    public boolean setMoney(double deposit) {
        this.money += deposit;
        return true;
    }

    public double getBalance(){
        return this.money;
    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java实现ATM取款项目

    项目要求: 1.用户需要从控制台输入账号密码,账号或者密码不正确报异常 2.每日取款的金额有限制(100,30000),否则报异常 3.每次取款都要有记录,并在下一次取款时显示出来 思路: 1.先在"银行类"里生成一些用户(跳过了注册环节) 2.可使用List集合存储取款日志 3.可使用Map集合将"用户名"和对应的用户信息建立"键值关系" 4.使用while循环控制流程 项目实现代码: 管理类(含main方法): import java.uti

  • Java项目实现模拟ATM机

    本文实例为大家分享了Java实现模拟ATM机的具体代码,供大家参考,具体内容如下 项目名称 模拟ATM机 项目描述 简单实现ATM机功能 代码实现 测试类 public class Test { //模拟多功能ATM机 public static void main(String[] args) { ATM atm = new ATM(); atm.opearte(); } } 主类:实现主方法 public class ATM { private Bank bank; public ATM()

  • java 使用线程做的一个简单的ATM存取款实例代码

    实现Runnable接口.当一个线程已继承了另一个类时,就只能用实现Runnable接口的方法来创建线程,且便于保持程序风格的一致性. 我们知道,一个具有生命的线程,具有下面五种状态: 创建状态 使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread) 可运行状态 使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable) 运行中状态 Java运行系统通过调度选中一个Run

  • Java 8 Stream Api 中的 map和 flatMap 操作方法

    1.前言 Java 8提供了非常好用的 Stream API ,可以很方便的操作集合.今天我们来探讨两个 Stream中间操作 map(Function<? super T, ? extends R> mapper) 和 flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) 2. map 操作 map 操作是将流中的元素进行再次加工形成一个新流.这在开发中很有用.比如我们有一个学生集合,我们

  • Java实现银行ATM系统

    用Java模拟一个银行ATM系统,供大家参考,具体内容如下 系统功能介绍: 使用面向对象的编程思想,尽可能模拟真实世界中的银行ATM业务流程. main方法里通过调用一行代码,完成整个业务流程的顺序调用. 加入了身份证号,手机号等元素,虽然他们不涉及银行卡的业务处理,但它们是真实世界中办理银行卡的必需条件,这些在代码中也有所体现. 为了尽可能使得随机生成的身份证号码和手机号码和银行卡号切合实际,还手动设计了一个工具类,用来生成随机的号码. 其中涉及到的知识,包括但不限于static修饰符的使用,

  • java模拟ATM功能(控制台连接Mysql数据库)

    本文实例为大家分享了java模拟ATM功能的具体代码,供大家参考,具体内容如下 有三个类:Test.java.Customer.java.CustomerDAO.java.ATMSystem.java ATMSystem.java实现模拟ATM的功能 Customer.java创建一个用户对象 CustomerDAO.java实现连接数据库 Test为主程序 ATMSystem.java: package ATM; import java.util.Scanner; public class A

  • Java实现简单银行ATM功能

    本文实例为大家分享了Java实现简单银行ATM功能的具体代码,供大家参考,具体内容如下 实现功能 1.用户需要通过输入银行卡号和密码才能进入ATM系统 2.用户可以在ATM中实现取款.存款.转账.余额查询.退出系统等功能 简单分析 1.创建User类(cardNo,identity,phone,username,password,balance(余额)) 2.创建Bank类,主要实现初始化用户.用户登录.显示菜单.取款.存款.转账.余额查询.退出系统等功能. 代码实现 User.java pub

  • Java实现ATM取款机程序

    本文实例为大家分享了Java实现ATM取款机程序的具体代码,供大家参考,具体内容如下 对象说明: 功能:该程序的功能为实现模拟银行ATM自动取款机取款,存款,查询余额,转账等功能,只是完成了基本的功能. 思路:第一.登录判断,密码限制三次,使用for循环.第二.成功登录,选择相应的功能,使用switch语句.第四.实现功能的反复循环操作,因为次数不确定,使用while结构.第五.对每个功能模块进行填充完善. 代码展示: import java.util.Scanner; public class

  • java编写简单的ATM存取系统

    新手练手必备~ 密码账户为: 先创建账户类: 复制代码 代码如下: package cn.Atm; /** * @author 偶my耶 */ import java.io.*; import com.project.project; public class Account {   private String number=null;   private String name=null;   private String password=null;   private double mo

  • 浅谈java8 stream flatMap流的扁平化操作

    概念: Steam 是Java8 提出的一个新概念,不是输入输出的 Stream 流,而是一种用函数式编程方式在集合类上进行复杂操作的工具.简而言之,是以内部迭代的方式处理集合数据的操作,内部迭代可以将更多的控制权交给集合类.Stream 和 Iterator 的功能类似,只是 Iterator 是以外部迭代的形式处理集合数据的操作. 在Java8以前,对集合的操作需要写出处理的过程,如在集合中筛选出满足条件的数据,需要一 一遍历集合中的每个元素,再把每个元素逐一判断是否满足条件,最后将满足条件

随机推荐