Java程序模拟银行ATM机,实现存款、取款、查询、转账功能等操作

一、介绍

ATM柜员机模拟程序 程序的功能点如下:

要求使用图形用户界面:
通过主界面,可以进入管理员界面、用户界面、系统设置界面、退出:
启动软件,可以进入用户模式,也可以进入系统管理模式;
进入系统管理模式,需要输入管理员账号和密码,
可以查看这台ATM机近期资金出入明细, 
可以查看这台ATM机上面操作的所有账户的历史记录和明细,
可以把所有记录导出到excel文件中;
进入用户账号和密码的登录界面,当输入给定的卡号和密码(初始卡号16位和密码6位)时,
对比系统存储的账号和密码正确,能登录ATM柜员机系统,当日出错次数操作3次,
当日锁定账户不能继续操作,累计三日被锁定,需要管理员账号才能够完成解锁操作。
用户可以按照以下规则进行操作: 
1、查询余额:初始余额为100000元; 
2、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支; 
3、ATM存款:不能出现负存款,要求存钱为100的整数倍;
4、ATM转账:通过登录的用户向指定的银行账号(在系统中已经保存)转账,若银行卡不存在,
    则提示银行卡号输入错误,转账成功则提示“转账成功”,并且工具日期能够实现当日转账金额的限制;
5、历史交易记录查询:可以显示20条以上的交易记录,交易记录可以从文件导入,也可以把记录导出到文件;  
6、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,
    只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码;
7、退卡:点击退卡,返回登录界面。 
复制代码

二、软件架构

使用Java GUI开发系统界面

文件输出使用 File 导出txt文件到系统目录

三、安装教程

电脑安装JDK,设置环境变量 双击运行即可

四、系统演示

主界面登录功能

Java程序模拟银行ATM机,实现存款、取款、查询、转账功能等操作_第1张图片

管理员后台

Java程序模拟银行ATM机,实现存款、取款、查询、转账功能等操作_第2张图片

用户主界面

Java程序模拟银行ATM机,实现存款、取款、查询、转账功能等操作_第3张图片

取款

Java程序模拟银行ATM机,实现存款、取款、查询、转账功能等操作_第4张图片

Java程序模拟银行ATM机,实现存款、取款、查询、转账功能等操作_第5张图片

查询交易记录

Java程序模拟银行ATM机,实现存款、取款、查询、转账功能等操作_第6张图片

转账

Java程序模拟银行ATM机,实现存款、取款、查询、转账功能等操作_第7张图片

如何实现呢?首先,我们定义一个用户类User,同时根据要求设计好属性(本人部分命名没有使用驼峰命名法,不够规范)。因为一个人可能有多个卡,卡号又不能重复,所以我定义一个set来存储卡号。其余姓名,密码用String定义即可,余额我这里用的的double定义(不嫌麻烦也可以用BigDecimal)。然后自动生成构造方法和Getter和setter方法即可

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class User {                            //用户类User
private Set set=new TreeSet()  ;  //私有的成员变量——卡号
private String name;                                //私有的成员变量 姓名
private String miMa;                                //私有的成员变量 密码
private double yuE;                                 //私有的成员变量 余额
public User(int cardNum, String name, String miMa) {
    this.set.add(cardNum) ;
    this.name = name;
    this.miMa = miMa;
    this.yuE = 0;
}
public boolean hasNum(int CardNum) {
    Iterator iter=set.iterator();
    while(iter.hasNext()){
        int in=iter.next();
        if(in==CardNum){
            return true;
        }
    }
    return false;
}
public void setCardNum(int cardNum) {
    this.set.add(cardNum);
}

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getMiMa() {
    return miMa;
}
public void setMiMa(String miMa) {
    this.miMa = miMa;
}
public double getYuE() {
    return yuE;
}
public void setYuE(double yuE) {
    this.yuE += yuE;
}
public void setYuE2(double yuE) {
    this.yuE -= yuE;
复制代码

然后再定义一个类写方法实现取款机的功能,因为取款机不提供开户功能,所以这里我只写了简单的create方法,然后实现取款,存款,查询方法即可。

package com.baidu.HomeWork.Work16;

import java.util.InputMismatchException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;

public class Method {
    static LinkedList userList = new LinkedList();
    Scanner scan = new Scanner(System.in);
    double mon;
    static int cardNum = 100000;
    static int Card = 0;
    void saveMon(int Card, int i) { 
        /*存款方法
         * 传入账号Card,循环变量i
         * 
         * 
         * 
         * 
         * 
         * 
         * 
         * */
        System.out.println("您的名字是" + userList.get(i).getName());
        System.out.println("请输入存款金额");
        try {
            mon = scan.nextDouble();
        } catch (InputMismatchException e) {
            e.printStackTrace();
        } catch (RuntimeException e) {
            e.printStackTrace();
        }
        userList.get(i).setYuE(mon);
        System.out.println("存入" + mon + "元");
        System.out.println("现在您的账号余额" + userList.get(i).getYuE());

    }

    void getMon(int Card, int i) {
        /*取款方法
         * 传入账号Card,循环变量i
         * 
         * 
         * 
         * 
         * 
         * 
         * 
         * */
        System.out.println("您的名字是" + userList.get(i).getName());
        System.out.println("请输入取款金额");
        try {
            mon = scan.nextDouble();
        } catch (InputMismatchException e) {
            e.printStackTrace();
        }
        if (mon < userList.get(i).getYuE()) {
            userList.get(i).setYuE2(mon);
            System.out.println("取出" + mon + "元");
            System.out.println("现在您的账号余额" + userList.get(i).getYuE());
        }

    }

    void cha(int Card, int i) {
        /*查询方法
         * 传入账号Card,循环变量i
         * 
         * 
         * 
         * 
         * 
         * 
         * 
         * */
            System.out.println("您的名字是" + userList.get(i).getName());
            System.out.println("现在您的账号余额" + userList.get(i).getYuE());
    }

    void creatUser() {
        /*创建用户方法,因为取款机不提供该功能,因此仅调用一次做测试使用 
         * 
         * 
         * 
         * 
         * 
         * 
         * 
         * */
        String name = "";
        String miMa = "";
        System.out.println("请输入姓名");
        try {
            name = scan.next();
        } catch (RuntimeException e) {
            e.printStackTrace();
        }

        System.out.println("请输入密码");
        try {
            miMa = scan.next();
        } catch (RuntimeException e) {
            e.printStackTrace();
        }
        userList.add(new User(++cardNum, name, miMa));
        System.out.println("您的账号是:" + cardNum);
    }

    int dengLu() {       //登录方法,判断用户是否存在以及密码是否正确
        boolean tag = true;

        String miMa;
        System.out.println("请输入账号");
        try {
            Card = scan.nextInt();
        } catch (InputMismatchException e) {
            e.printStackTrace();
        } catch (RuntimeException e) {
            e.printStackTrace();
        }
        System.out.println("请输入密码");
        miMa = scan.next();
        for (int i = 0; i < userList.size(); i++) {
            if (userList.get(i).hasNum(Card)) {
                if (userList.get(i).getMiMa().equals(miMa)) {
                    return i;
                } else {
                    System.out.println("密码错误");
                    break;
                }

            } else {

            }
        }

        System.out.println("查无此号");
        return -2;
复制代码

最后,在主类中定义一个链表存储User,在编写一个简易的菜单,把第二个文件写好的文件放入其中,取款机就写好了。

package com.baidu.HomeWork.Work16;
import java.util.InputMismatchException;
import java.util.LinkedList;
import java.util.Scanner;

public class GetMonMachine {
    static int num = 0;
    static boolean tag = true;
    static boolean tag_1 = true;
    static Scanner scan = new Scanner(System.in);
    static Method gm = new Method();

    public static void main(String[] args) {
        gm.creatUser();
        while (tag) { // 主菜单
            int num;
            if ((num = gm.dengLu()) != -2) {
                System.out.println("1.存款");
                System.out.println("2.取款");
                System.out.println("3.查询余额");
                System.out.println("4.退出取款机");
                int scan_num = 4;
                try {
                    scan_num = scan.nextInt();
                } catch (InputMismatchException e) {
                    System.out.println("输入非法");
                    e.printStackTrace();
                }
                switch (scan_num) { // 主菜单选择
                case 1:
                    gm.saveMon(Method.Card,num);
                    break;
                case 2:
                    gm.getMon(Method.Card,num);
                    break;
                case 3:
                    gm.cha(Method.Card,num);
                    break;
                case 4:
                    tag = false;
                    break;
                default:
                    System.out.println("输入有误,请重新输入");
                    break;
复制代码

最后,在有输入的地方加上try{}catch(){}处理可能发生的异常,就可以了。

                                                                    添加 博主 获取源码资料  

你可能感兴趣的:(java,后端,项目开发,java,开发语言)