模仿银行系统的极简Java三层结构应用——存钱功能的实现

一,前提:

我们上次做了一个简易的银行系统,初步认识了java结构,目前该系统可以输入要用的数据并且输出。

二,目标:

我们这次的目标是实现一个简易的存钱功能,并输出存钱后的余额,

三,实现:

和上一节做的功能相比多了一个存钱功能,但是也要保留输出的方式。

所以写了一个while和switch语句保证整个项目能循环运行起来,功能让用户自己选择。

 

首先我们要从上面的界面去到业务逻辑层或数据层,就需要把数据都先传到上面的界面存下来,这样不管去哪,更方便调用。 

那他们保存的数据来自哪里呢?就是我们的 ChuZhi,我们给数据赋初值的地方。

在ChuZhi里写下面的代码,完成对User里yonghu和yonghu2的赋值。

我们把初值的赋予和传递解决了, 现在我们要开始解决存款的具体执行。

首先,存款这个功能是一个新的功能,为了美观和简洁,我们写了一个新的类专门解决数据的改变,包括以后的取款,转账问题也都写在这个类里。

我们先来看这个新的类怎么写:

写一个方法来完成存款的功能 

具体执行完成了,那我们要怎么把数据传给这个新类呢?

这就是我们提前将数据从ChuZhi传到User的目的 

 

这样,存款的功能就实现了。里面还有一些是无关痛痒的优化,我都放到下面的代码里。

 四,代码

User:

public class User {
    public static Model yonghu = new Model();
    public static Model yonghu2 = new Model();

    public void UI() {
        Dao dao = new Dao();
        ChuZhi chuZhi = new ChuZhi();
        System.out.println("输入1是输出所有用户信息");
        System.out.println("输入2是存钱");
        System.out.println("输入0是退出程序");
        boolean flage = true;
        while (flage) {
            System.out.println("请输入要执行的功能");
            Scanner scanner = new Scanner(System.in);
            int anInt = scanner.nextInt();
            switch (anInt) {
                case 1:
                    dao.quanshuchu(yonghu, yonghu2);
                    break;
                case 2:
                   boolean a=true;
                    while (a){
                    System.out.println("请输入要存钱的账户卡号,如要退出该功能请输入0");
                    Scanner scanner1 = new Scanner(System.in);
                    int anInt1 = scanner1.nextInt();
                    if (anInt1==yonghu.getId()){
                        dao.cunkuan1(yonghu);
                        a=false;
                    }else if (anInt1==yonghu2.getId()){
                        dao.cunkuan2(yonghu);
                        a=false;
                    }else if (anInt1==0) {
                        System.out.println("已退出存钱功能");
                        a=false;
                    }else {
                        System.out.println("查无此人,请检查卡号是否正确");
                    }
                    }
                    break;
                case 0:
                    System.out.println("程序已退出");
                    System.out.println("欢迎下次使用");
                    flage = false;
                    break;
            }


        }
    }
}

 ChuZhi:

public class ChuZhi {
    public void xinxi() {
        Model yonghu1 = new Model();
        Model yonghu2 = new Model();
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入用户1的卡号");
        int id = scanner.nextInt();
        yonghu1.setId(id);
        System.out.println("输入用户1的钱数");
        int money = scanner.nextInt();
        yonghu1.setMoney(money);
        System.out.println("输入用户2的卡号");
        int id2 = scanner.nextInt();
        yonghu2.setId(id2);
        System.out.println("输入用户2的钱数");
        int money2 = scanner.nextInt();
        yonghu2.setMoney(money2);
        User user = new User();
       //全局静态变量不用new,可以直接引用,但是数组形式的变量可以new
        User.yonghu = yonghu1;
        User.yonghu2 = yonghu2;
    }
}

BankRuKou:

public class BankRuKou {
    public static void main(String[] args) {
        ChuZhi duixiang = new ChuZhi();
        duixiang.xinxi();
        System.out.println("欢迎使用本银行系统");
        User user = new User();
        user.UI();
    }

}

Dao(业务逻辑):

public class Dao {
public void quanshuchu(Model yonghu1,Model yonghu2){
    System.out.println(yonghu1);
    System.out.println(yonghu2);
}
    public void cunkuan1(Model yonghu1) {
        System.out.println("存钱金额:");
        Scanner scanner = new Scanner(System.in);
        int anInt = scanner.nextInt();
        int yue;
        yue=yonghu1.getMoney()+anInt;
        System.out.println("现在余额为:"+yue);
        yonghu1.setMoney(yue);
    }
    public void cunkuan2(Model yonghu2) {
        System.out.println("存钱金额:");
        Scanner scanner = new Scanner(System.in);
        int anInt = scanner.nextInt();
        int yue;
        yue=yonghu2.getMoney()+anInt;
        System.out.println("现在余额为:"+yue);
yonghu2.setMoney(yue);
    }
}

五,结果输出: 

输入用户1的卡号
1
输入用户1的钱数
1
输入用户2的卡号
2
输入用户2的钱数
2
欢迎使用本银行系统
输入1是输出所有用户信息
输入2是存钱
输入0是退出程序
请输入要执行的功能
1
卡号1,  钱数:1
卡号2,  钱数:2
请输入要执行的功能
2
请输入要存钱的账户卡号,如要退出该功能请输入0
1
存钱金额:
110
现在余额为:111
请输入要执行的功能
2
请输入要存钱的账户卡号,如要退出该功能请输入0
111
查无此人,请检查卡号是否正确
请输入要存钱的账户卡号,如要退出该功能请输入0
2
存钱金额:
11
现在余额为:13
请输入要执行的功能
1
卡号1,  钱数:111
卡号2,  钱数:13
请输入要执行的功能
0
程序已退出
欢迎下次使用

Process finished with exit code 0

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【学习】jemter中如何高效使用正则表达式

在Jemter的世界里,正则表达式无疑是一把锐利的剑,它可以帮助我们轻松地解决许多问题。在Jemter的性能测试过程中,我们常常需要提取响应中的某些数据,以便在后续的请求中使用。这时,正则表达式就派上用场了。通过学习如…

MySql中truncate,delete有什么区别?什么情况下id会不会连续呢?

TRUNCATE和DELETE都是用来删除表中数据的SQL命令,但它们的工作方式和使用场景有所不同: DELETE命令:DELETE命令用于从表中删除一行、多行或所有行。你可以添加WHERE子句来指定要删除的行。例如,DELETE FROM table_name WHERE cond…

ELK日志分析系统之Kafka

目录 一、消息队列基本介绍 1、为什么需要消息队列(MQ) 2、使用消息队列的好处 1.解耦 2.可恢复性 3.缓冲 4.灵活性 & 峰值处理能力 5.异步通信 3、Kafka消息队列的两种模式 1.点对点模式 2.发布/订阅模式 二、Kafka基本介绍 1、Kafka定义 2、Kafka概念 3、…

数据结构进阶之堆

今天我们学习的是数据结构里面的堆,大家先看看我们今天要学习的内容 一、堆概念及认识 在学习堆之前我们得先明白完全二叉树是什么样子,因为堆是依据完全二叉树的结构来实现的,所以在这里我先告诉大家完全二叉树的是什么,如下图…

Qt+vstudio2022的报错信息积累

从今天开始记录一下平常开发工作中的报错记录,后续有错误动态补充! 报错信息:【MSB8041】此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。 解决: 背景:换…

Git回滚操作,工作区和暂存区恢复修改删除的文件

在利用git协作过程中,经常需要进行代码的撤销操作,这个行为可能发生在工作区,暂存区或者仓库区(或版本库)。 我们先讨论在工作区与暂存区发生的撤销行为,这里会有两个命令提供帮助,git restore…

普发Pfeiffer CCR263 CCR272 CMR261 CMR273 PBR260 IMR265 TPR265 使用说明手侧

普发Pfeiffer CCR263 CCR272 CMR261 CMR273 PBR260 IMR265 TPR265 使用说明手侧

4G/5G布控球/移动执法仪在电力巡检远程视频智能监控方案中的应用

一、背景与需求 随着科技的不断进步,视频监控技术已成为电力行业不可或缺的一环。电力行业的巡检及建设工作,因施工现场在人迹罕见的野外或山区,地形复杂多变,安全更是重中之重,现场工作的视频图像需实时传回监管中心…

用html写一个加载页面动画

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>加载页面动画Ⅴ</title><link rel"stylesheet" href"./style.css"> </head><body><div class"al…

【Git】安装 Git

文章目录 1. CentOS 下安装2. Ubuntu 下安装 Git 是开放源代码的代码托管工具&#xff0c;最早是在 Linux 下开发的。开始也只能应用于 Linux 平台&#xff0c;后面慢慢的被移植到 Windows 下。现在&#xff0c;Git 可以在 Linux、Unix、Mac 和 Windows 这几大平台上正常运行了…

【每日力扣】15. 三数之和与11. 盛最多水的容器

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害 15. 三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k…

【Proteus】蜂鸣器播放音乐

按键按一次&#xff0c;蜂鸣器响一次 &#xff0c;LCD1602同步。 #include <REGX52.H> #include <INTRINS.H>unsigned int keynum; sbit RSP3^0; //** sbit RWP3^1; //** sbit EP3^2; //** sbit buzzerP1^5; void delay(unsigned int n)//1ms {unsigned char a,…

树莓派安装tensorflow

树莓派安装tensorflow 使用编译好的版本自己选择版本进行编译armv71 架构 教程转载 使用编译好的版本 下载tensorflow编译好的版本 https://github.com/lhelontra/tensorflow-on-arm/tags由于python版本支持有限可能需要自己安装python 安装对应的python 自己选择版本进行编译…

【Golang】并发编程之三大问题:原子性、有序性、可见性

目录 一、前言二、概念理解2.1 有序性2.2 原子性后果1&#xff1a;其它线程会读到中间态结果&#xff1a;后果2&#xff1a;修改结果被覆盖 2.3 可见性1&#xff09;store buffer(FIFO)引起的类似store-load乱序现象2&#xff09;store buffer(非FIFO)引起的类似store-store乱序…

Java web应用性能分析概叙

“系统慢”&#xff0c;这是任何一个应用都会出现的问题&#xff0c;面对“系统慢”的问题&#xff0c;客户、测试、开发、管理者等不同角色的人员有不同反应&#xff1a; 客户&#xff1a;啥破东西啊&#xff0c;这么卡&#xff01; 测试&#xff1a;性能bug已提交。 开发&…

嵌入式工程师如何摸鱼?

有老铁问我&#xff0c;做嵌入式开发要加班吗&#xff1f; 也不知道搞什么鬼&#xff0c;现在的年轻人对加班这么抵触。 我刚做开发那会&#xff0c;啥也不懂&#xff0c;每天基本都要加班到晚上7-9点不等&#xff0c;我并不抵触加班&#xff0c;因为早早回家&#xff0c;也没什…

常见的地图绘制方法,这个包全包了~~

在上一篇介绍完Bokeh精美可视化作品之后&#xff0c;有小伙伴咨询我能不能稍系统的介绍下如何在地图上添加如柱形图等其他元素的付方法&#xff1f; 这就让我想到一个优秀的地图绘制可视化包-R-cartography&#xff0c;虽然之前也有简单介绍过&#xff0c;本期就具体分享下该包…

Axure实现导航栏的展开与收缩

Axure实现导航栏的展开与收缩 一、概要介绍二、设计思路三、Axure制作导航栏四、技术细节五、小结 一、概要介绍 使用场景一般是B端后台系统需要以导航栏的展开与收缩实现原型的动态交互&#xff0c;主要使用区域是左边或者顶部的导航栏展开与收缩&#xff0c;同一级导航下的小…

【六】fastapi+vue前后端分离项目

前端代码 https://gitee.com/feiminjie/helloworldfront 后端代码 https://gitee.com/feiminjie/helloworld 整体效果 首页 用例管理页 用例详情页

在vue中发现一个prop新的写法在官方文档没有,查百度不行,还有什么其他方法排查不

先看图&#xff0c;最近在接手一个同事的代码&#xff0c;发现prop有这样的写法&#xff1a; 我自己查了官网&#xff0c;以及百度都没有找到这种写法。这时我灵机一动&#xff0c;想到一个方法&#xff0c;vscode有内置的typesscript&#xff0c;自然有prop类型推断&#xff0…