Java之ATM系统

news2024/11/30 12:45:05

目录

  • 项目介绍
  • 系统准备,首页设计
    • 总结
  • 开户功能
    • 总结
  • 用户登录
    • 总结
  • 用户操作页设计、查询账户、退出账户功能
  • 用户存钱
  • 取款功能
  • 转账功能
  • 密码修改、销户
  • 源代码

项目介绍

在这里插入图片描述
在这里插入图片描述

系统准备,首页设计

在这里插入图片描述

总结

1、用户的账户信息,系统如何表示的?
定义账户类Account,定义系统关心的属性信息。
2、系统采用什么来存储全部用户的账户对象信息?
ArrayList accounts = new ArrayList<>();

开户功能

在这里插入图片描述

总结

1、开户功能的实现需要哪几步操作,需要注意什么问题?

  • 开户功能应该独立定义成方法,并传入当前集合对象给该方法。
  • 创建一个Account账户对象,封装账户信息
  • 录入开户信息(姓名、密码)
  • 卡号要自动生成且唯一

用户登录

在这里插入图片描述

总结

1、登录功能如何实现的?

  • 根据卡号去账户集合中查询对应的账户对象。
  • 如果找到了账户对象,说明卡号存在,继续输入密码。
  • 如果密码也正确,则登录成功。

用户操作页设计、查询账户、退出账户功能

在这里插入图片描述

用户存钱

在这里插入图片描述

取款功能

在这里插入图片描述

转账功能

在这里插入图片描述

密码修改、销户

在这里插入图片描述

源代码

package com.gushi;

public class Accout {
    private String cardId;
    private String userName;
    private String passWord;
    private double money;
    private double quotaMoney;

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    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 double getQuotaMoney() {
        return quotaMoney;
    }

    public void setQuotaMoney(double quotaMoney) {
        this.quotaMoney = quotaMoney;
    }
}

package com.gushi;

import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

import static com.sun.deploy.registration.RegisterDeploy.register;
import static sun.security.jgss.GSSUtil.login;

public class ATMSystem {
    public static void main(String[] args) {
        ArrayList <Accout> accouts = new ArrayList<>();

        while (true) {
            System.out.println("=====ATM系统=====");
            System.out.println("1、账号登录");
            System.out.println("2、账户开户");

            Scanner sc = new Scanner(System.in);
            System.out.println("请您选择操作:");
            int command = sc.nextInt();

            switch (command){
                case 1:
                    login(accouts,sc);
                    break;
                case 2:
                    register(accouts,sc);
                    break;
                default:
                    System.out.println("您输入的操作不存在~~");
            }
        }
    }

    private static void login(ArrayList<Accout> accouts, Scanner sc) {
        System.out.println("==============系统登录操作=============");
        if(accouts.size()==0){
            System.out.println("对不起,当前系统中,无任何账户,请先开户,再来登录~~");
            return;
        }

        while(true){
            System.out.println("请输入登录卡号:");
            String cardId = sc.next();
            Accout acc = getAccountByCardId(cardId,accouts);
            if(acc!=null){
                while(true){
                    System.out.println("请您输入登录密码:");
                    String passWord = sc.next();
                    if(acc.getPassWord().equals(passWord)){
                        System.out.println("恭喜您:"+acc.getUserName()+"先生/女士进入系统,您的卡号是:"+acc.getCardId());
                        showUserCommand(sc,acc,accouts);
                        return;
                    }else {
                        System.out.println("对不起,您输入的密码有误~~");
                    }
                }
            }else{
                System.out.println("对不起,系统中不存在该账户卡号~~");
            }
        }
    }



    private static void showUserCommand(Scanner sc,Accout acc,ArrayList<Accout> accouts) {
        while (true) {
            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 command = sc.nextInt();
            switch (command){
                case 1:
                    showAccout(acc);
                    break;
                case 2:
                    depositMoney(acc,sc);
                    break;
                case 3:
                    drawMoney(acc,sc);
                    break;
                case 4:
                    transferMoney(sc,acc,accouts);
                    break;
                case 5:
                    updatePassWord(sc,acc);
                    return;
                case 6:
                    System.out.println("退出成功,欢迎下次光临");
                    return;
                case 7:
                    if (deleteAccout(acc,sc,accouts)){
                        return;
                    }else{
                        break;
                    }

                default:
                    System.out.println("您输入的操作命令不正确~~");
            }
        }
    }

    private static boolean deleteAccout(Accout acc, Scanner sc,ArrayList<Accout> accouts) {
        System.out.println("==========用户销户=========");
        System.out.println("您真的要销户?y/n");
        String rs =sc.next();
        switch (rs){
            case "y":
                if(acc.getMoney()>0){
                    System.out.println("您账户中还有钱没有取完,不允许销户~");
                }else {
                    accouts.remove(acc);
                    System.out.println("您的账户销户完成~~");
                    return true;
                }

                break;
            default:
                System.out.println("好的,当前账号继续保留~");
        }
        return false;
    }

    private static void updatePassWord(Scanner sc, Accout acc) {
        System.out.println("========用户密码修改========");
        System.out.println("请您输入当前密码");
        String passWord = sc.next();

        if(acc.getPassWord().equals(passWord)){
            while(true){
                System.out.println("请您输入新密码:");
                String newPassWord = sc.next();

                System.out.println("请您确认新密码:");
                String okPassWord = sc.next();

                if(newPassWord.equals(okPassWord)){
                    acc.setPassWord(newPassWord);
                    System.out.println("恭喜您,您密码修改成功了~");
                    return;
                }else{
                    System.out.println("您输入的2次密码不正确");
                }
            }
        }else{
            System.out.println("您输入的密码不正确~~");
        }
    }

    private static void transferMoney(Scanner sc, Accout acc, ArrayList<Accout> accouts) {
        System.out.println("=========用户转账操作========");

        if(accouts.size()<2){
            System.out.println("当前系统中,不足2个账户,不能进行转帐,请去开户吧~");
            return;
        }
        if(acc.getMoney()==0){
            System.out.println("对不起,您自己都没钱,就别转了吧~~");
            return;
        }
        while(true){
            System.out.println("请您输入对方账户的卡号");
            String cardId=sc.next();

            if(cardId.equals(acc.getCardId())){
                System.out.println("对不起,您不可以给自己转账");
                continue;
            }

            Accout accout = getAccountByCardId(cardId,accouts);
            if(accout == null){
                System.out.println("对不起,您输入对方的这个账号不存在~~");
            }else{
                String userName = accout.getUserName();
                String tip = "*"+userName.substring(1);
                System.out.println("请您输入["+tip+"]的姓氏");
                String preName =sc.next();

                if(userName.startsWith(preName)){
                    while(true){
                        System.out.println("请您输入转账金额:");
                        double money = sc.nextDouble();
                        if(money>acc.getMoney()){
                            System.out.println("对不起,您余额不足,您最多可以转账:"+ acc.getMoney());
                        }else{
                            acc.setMoney(acc.getMoney()-money);
                            accout.setMoney(acc.getMoney()+money);
                            System.out.println("转账成功!您的账户还剩余:"+acc.getMoney());
                            return;
                        }
                    }
                }else{
                    System.out.println("对不起,您输入的信息有误~~");
                }
            }


        }
    }

    private static void drawMoney(Accout acc, Scanner sc) {
        System.out.println("==========用户取钱操作===============");
        if(acc.getMoney()<100){
            System.out.println("对不起,当前账户中不够100元,不能取钱~");
            return ;
        }
        while(true){
            System.out.println("请您输入取款金额");
            double money = sc.nextDouble();

            if(money> acc.getQuotaMoney()){
                System.out.println("对不起,您当前取款金额超过每次限额,每次最多可取:"+acc.getQuotaMoney());

            }else{
                if(money>acc.getMoney()){
                    System.out.println("余额不足,您账户余额是:"+acc.getMoney());

                }else{
                    System.out.println("恭喜您,取钱"+money+"元,成功");
                    acc.setMoney(acc.getMoney()-money);
                    showAccout(acc);
                    return;
                }
            }
        }
    }

    private static void depositMoney(Accout acc, Scanner sc) {
        System.out.println("==========用户存钱操作=========");
        System.out.println("请您输入存款金额:");
        double money = sc.nextDouble();

        acc.setMoney(acc.getMoney()+money);
        System.out.println("恭喜您,存钱成功,当前账户信息如下:");
        showAccout(acc);
    }

    private static void showAccout(Accout acc) {
        System.out.println("===========当前账户信息如下=========");
        System.out.println("卡号:"+acc.getCardId());
        System.out.println("户主:"+acc.getUserName());
        System.out.println("余额:"+acc.getMoney());
        System.out.println("限额:"+acc.getQuotaMoney());
    }

    private static void register(ArrayList<Accout> accouts, Scanner sc) {
        System.out.println("========系统开户操作========");
        Accout accout = new Accout();

        System.out.println("请您输入账户用户名:");
        String userName = sc.next();
        accout.setUserName(userName);

        while (true) {
            System.out.println("请您输入账户密码:");
            String passWord = sc.next();
            System.out.println("请您输入确认密码:");
            String okPassWord = sc.next();
            if(okPassWord.equals(passWord)){
                accout.setPassWord(okPassWord);
                break;
            }else{
                System.out.println("对不起,您输入的2次密码不一致,请重新确认");
            }
        }
        System.out.println("请您输入账户当此限额:");
        double quotaMoney = sc.nextDouble();
        accout.setQuotaMoney(quotaMoney);

        String cardId= getRandomCardId(accouts);
        accout.setCardId(cardId);

        accouts.add(accout);
        System.out.println("恭喜您,"+userName+"先生/女生,您开号成功,您的卡号是:"+cardId+",请您妥善保管卡号");
    }

    private static String getRandomCardId(ArrayList<Accout> accouts){
        Random r =new Random();
        while (true) {
            String cardId="";

            for (int i = 0; i < 8; i++) {
                cardId+=r.nextInt(10);
            }
            Accout acc = getAccountByCardId(cardId,accouts);
            if(acc==null){
                return cardId;
            }
        }
    }

    private static Accout getAccountByCardId(String cardId,ArrayList<Accout> accouts){

        for (int i = 0; i < accouts.size(); i++) {
            Accout acc = accouts.get(i);
            if(acc.getCardId().equals(cardId)){
                return acc;
            }
        }
        return null;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【CVHub】现代目标检测故事 | 40+目标检测网络架构大盘点!从基础架构ResNet到最强检测器Yolov7再到最新部署神器GhostNetV2

本文来源“CVHub”公众号&#xff0c;侵权删&#xff0c;干货满满。 作者丨派派星 来源丨CVHub 原文链接&#xff1a;现代目标检测故事 | 40种网络架构大盘点&#xff01;从基础架构ResNet到最强检测器Yolov7再到最新部署神器GhostNetV2 导读 目标检测是指在图像或视频中分…

PHY6230 高性价比低功耗高性能 集成32-bit MCU BLE5.2+2.4G芯片

PHY6230 是一款高性价比低功耗高性能Bluetooth LE 5.2系统级芯片&#xff0c;集成32-bit高性能低功耗MCU&#xff0c;16KB OTP&#xff0c;8KB Retention SRAM和64KB ROM&#xff0c;可选EEPROM。内置高性能多模射频收发机最大发射功率10dBm&#xff0c;BLE 1Mbps速率下接收灵敏…

快手发布2022直播生态报告,运营人速览

1、快手电商推出2023年直播间联合补贴活动1月5日&#xff0c;快手电商推出2023年直播间联合补贴活动。该活动主要目的是助力主播完成更高销售额&#xff0c;报名成功后&#xff0c;平台将对直播间内的一部分活跃用户发放10%-16%折扣率的满减优惠券&#xff0c;成本由平台和主播…

【BUG解决方案】jQuery数组中包含数据,但通过 .length 获得的数组长度始终为0

0. BUG展示 var lels []; for (var i 0; i < maxDevNums 1; i) {lels.push([]); } $.ajax({type : "post",async : true,url : "/sc/comb/history/data",data : {},dataType : "json",success : function (result) {if (result) {for (le…

FFmpeg 集成 x265 编译及解码

x265 是一个免费的软件库和应用程序&#xff0c;用于将视频流编码为 H.265/MPEG-H HEVC 压缩格式&#xff0c;并在 GNU GPL 条款下发布。 FFmpeg 为了支持 H.265 编、解码可以集成 x265 编译&#xff0c;在编译 FFmpeg 之前需要先编译 x265&#xff0c;但并不是所有的版本都能…

Python一轮知识拾遗

目录 字符串格式化 %格式符 format字符串格式化 三元条件运算符 可迭代对象 break和continue语句 enumerate函数 序列封包 序列解包 部分序列解包 append.列表和extend.列表的区别 字符串格式化 通过字符串的格式化&#xff0c;可以输出特定格式的字符串。 (1) 格式化…

为什么要申报绿色工厂?

一、什么是绿色工厂&#xff1f; 绿色工厂是指实现了用地集约化、生产洁净化、废物资源化、能源低碳化的工厂。 二、为什么要申报绿色工厂&#xff1f; 1、政策导向&#xff0c;发展趋势 发展绿色工厂是顺应全球绿色发展的大趋势&#xff0c;符合国家政策导向。 2、荣誉称号…

[笔记]Windows Cyswin ssh配置及远程控制

文章目录前言一、配置1.1 安装 Cygwin1.2 Cygwin安装时搜索安装ssh1.3 添加cygwin安装目录至Path环境变量1.4 配置 SSHD 服务1.5 添加 sshd连接账号二、使用2.1 使用配置的连接账号进行登录2.2 连接远程主机三、常见问题3.1 ssh on cygwin和openssh 冲突 提示 Host key verific…

新增血缘关系功能,色彩地图支持标记功能,DataEase开源数据可视化分析平台v1.18.0发布

2023年1月9日&#xff0c;DataEase开源数据可视化分析平台正式发布v1.18.0版本。 这一版本的功能升级包括&#xff1a;数据集方面&#xff0c;定时任务采用分页的方式拉取数据&#xff0c;减少资源消耗&#xff1b;仪表板方面&#xff0c;新增仪表板主题&#xff0c;以满足不同…

二叉平衡树之二叉树搜索树【咱们一起手动模拟实现】

目录 1、什么是二叉搜索树&#xff1f; 2、手动模拟二叉搜索树 2.1、整体代码 2.2、查找数据 2.3、插入数据 2.4、删除数据 3、性能分析 1、什么是二叉搜索树&#xff1f; 二叉搜索树也叫作二叉排序树&#xff0c;可以使一颗空树&#xff0c;也可以是具有以下性质的二…

JavaScript 高级 内存管理和闭包

这里写目录标题1. JavaScript内存管理2. 垃圾回收机制算法1. 引用计数算法2. 标记清除算法3. 闭包的概念理解4. 内存泄露5. 面试题1. JavaScript内存管理 不管什么样的编程语言&#xff0c;在代码的执行过程中都是需要给它分配内存的&#xff0c;不同的是某些编程语言需要我们…

基于融合C3SE+YOLOv5s的高精度二维码检测识别分析系统

在前面的系列博文中&#xff0c;我们尝试了在不同款的yolov5模型中加入不同的注意力机制来提升模型的性能&#xff0c;都有不错的表现效果&#xff0c;本文主要的目的是尝试将注意力机制融合集成进入原生的C3模块中来替换原生的C3模块来对比分析模型的检测性能&#xff0c;首先…

【精华】JVM调优学习

JVM 介绍 1. 什么是 JVM JVM 是 Java Virtual Machine&#xff08;Java 虚拟机&#xff09;的缩写。一台执行 Java 程序的机器。 2 .JAVA 语言的执行原理 计算机语言&#xff1a; 计算机能够直接执行的指令。这种指令和系统及硬件有关。 计算机高级语言&#xff1a; 在遵循…

模块化建筑全球市场分析

模块化市场分析 市场摘要 全球模块化建筑市场&#xff0c;预计从2019年的1199亿6千万美元&#xff0c;到2027年的1916亿2千万&#xff0c;以6.4%的年复合成长率成长。人口增加&#xff0c;快速城市化和基础设施发展投资增加是预测期内刺激市场增长的关键因素。模块化施工是最可…

【C进阶】第十三篇——指针详解

指针的基本概念 指针类型的参数和返回值 指针与数组 指针与const限定符 指针与结构体 指向指针的指针与指针数组 指向数组的指针与多维数组 函数类型和函数指针类型 不完全类型和复杂声明 指针的基本概念 堆栈有栈顶指针&#xff0c;队列有头指针和尾指针&#xff0c;…

C++ 图进阶系列之纵横对比 Bellman-Ford 和 Dijkstra 最短路径求解算法

1. 前言 因无向、无加权图的任意顶点之间的最短路径由顶点之间的边数决定&#xff0c;可以直接使用原始定义的广度优先搜索算法查找。 但是&#xff0c;无论是有向、还是无向&#xff0c;只要是加权图&#xff0c;最短路径长度的定义是&#xff1a;起点到终点之间所有路径中权…

第五十讲:神州路由器IPv6隧道的配置

目前IPv6隧道技术有ISATAP隧道、6to4隧道、IPv6 over MPL隧道等。 任务一&#xff1a;配置ISATAP隧道 实验拓扑图如下所示 配置要求&#xff1a;两台路由器ROUTERA和ROUTERB通过IPv4网络连接&#xff0c;要求在两台路由器上分别配置ISATAP隧道&#xff0c;实现两端IPv6主机PC…

回收租赁商城系统功能拆解05讲-供货商

回收租赁系统适用于物品回收、物品租赁、二手买卖交易等三大场景。 可以快速帮助企业搭建类似闲鱼回收/爱回收/爱租机/人人租等回收租赁商城。 回收租赁系统支持智能评估回收价格&#xff0c;后台调整最终回收价&#xff0c;用户同意回收后系统即刻放款&#xff0c;用户微信零…

2022年学习和实习总结——收获颇多(未完待续...)

0 序言 时间已经进入了2023年&#xff0c;今年将是属于我们这一届秋招的一年。回顾2022年的学习和实习历程&#xff0c;我觉得今年的收获还是不少的&#xff0c;甚至可以说是整个高等教育生涯中&#xff0c;收获最多的一年。 1 学习情况总结 1.1 读书和学习总结 原来…

【Linux】项目构建自动化工具——make和makefile

make 和 makefile1.背景2. 利用make和makefile简单编译一个源文件3.使用方法解释4.执行原理5.项目清理1.背景 &#xff08;1&#xff09;一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff…