java基础练习缺少项目?看这篇文章就够了(下)!

公众号:全干开发 。 专注分享简洁但高质量的动图技术文章!

回顾

在上节内容中,我们实现了用户开户的功能createAccount

    public void start(){System.out.println("===欢迎您进入到了ATM系统===");System.out.println("1、用户登录");System.out.println("2、用户开户");System.out.println("请选择:");int command = sc.nextInt();switch (command) {case 1://用户登录  TODO// login()  等待开发的功能!break;case 2://用户开户createAccount();start();break;default:System.out.println("操作错误!");start();}}

现在,我们要实现另一个核心功能:用户登录。登录后,用户还可以进行转账等一些列操作,这也是我们要完善的功能。

用户登录

我们先来看一下用户登录的login功能

登录的流程大致如下:

  • 如果系统没有任何账户对象,则不允许登录
  • 让用户输入登录的卡号,先判断卡号是否正确,如果不正确要给出提示
  • 如果卡号正确,再让用户输入账户密码,如果密码不正确要给出提示;如果密码也正确,则给出登录成功的提示
private void login(){System.out.println("===欢迎您登录系统===");// 如果系统中没有账户,直接退出if(accounts.size()==0){System.out.println("抱歉,当前系统没有账户,请先创建!");return;}// 系统中存在账户,开始进行登录操作while (true) {System.out.println("请您输入卡号!");String cardId = sc.next();// 根据卡号获取用户对象Account acc = getAccountByCardId(cardId);if(acc == null){System.out.println("卡号输入错误!请重新输入");}else{// 卡号存在,输入密码while (true) {System.out.println("请输入密码");String password = sc.next();// 判断用户输入的密码与账户对象中储存的密码是否一致if(password.equals(acc.getPassWord())){System.out.println("恭喜您"+acc.getUserName()+"您登录成功!您的卡号是:" + cardId);// TODO: 登录后的其他操作,如转账等等....}else {System.out.println("密码输入错误");}}}}
}

现在,我们在start中执行这个方法即可

 public void start(){// ...省略...switch (command) {case 1://用户登录login();// 用户操作完,重新进入系统首页start();break;case 2://用户开户createAccount();// 开户完,重新进入系统首页start();break;default:System.out.println("操作错误!");// 输入错误重新进入开始页start();}
}

账户操作

框架搭建

用户登录成功,我们需要进入账户处理界面

我们定义一个showUserCommand方法来实现

// 登录成功后的操作
private void showUserCommand(){while (true) {System.out.println(loginAcc.getUserName() + "您可以选择如下功能进行账户处理========");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、注销账户");int command = sc.nextInt();switch (command){case 1://查询操作break;case 2://存款break;case 3://取款break;case 4://转账break;case 5://密码修改break;case 6://退出break;case 7://注销账户break;default:System.out.println("您的操作有误!请重新输入");}}
}

这里的loginAcc是我们储存的用户登录成功后的账户信息,详细的代码如下:

public class ATM {private ArrayList<Account> accounts = new ArrayList<>();private Account loginAcc; // 储存登录成功后的用户信息// .....// 用戶登录private void login(){// .....// 判断用户输入的密码与账户对象中储存的密码是否一致if(password.equals(acc.getPassWord())){loginAcc = acc;System.out.println("恭喜您"+acc.getUserName()+"您登录成功!您的卡号是:" + cardId);// 登录后的其他操作,如转账等等....// 展示用户操作界面showUserCommand();}else {System.out.println("密码输入错误");}// .....}// 登录成功后的操作private void showUserCommand(){while (true) {System.out.println(loginAcc.getUserName() + "您可以选择如下功能进行账户处理========");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、注销账户");int command = sc.nextInt();switch (command){case 1://查询操作break;case 2://存款break;case 3://取款break;case 4://转账break;case 5://密码修改break;case 6://退出break;case 7://注销账户break;default:System.out.println("您的操作有误!请重新输入");}}}
}

现在,我们逐个完善showUserCommand中的方法即可

查询操作

在上述代码中,我们使用了loginAcc储存了登录用户的信息,我们创建个query方法,用于展示loginAcc对象中储存的信息

private void showLoginAccount(){System.out.println("卡号:" + loginAcc.getCardId());System.out.println("姓名:" + loginAcc.getUserName());System.out.println("性别:" + loginAcc.getSex());System.out.println("余额:" + loginAcc.getMoney());System.out.println("每次取现额度:" + loginAcc.getLimit());
}

我们在showUserCommand()方法中执行下

 private void showUserCommand(){while (true) {// ....int command = sc.nextInt();switch (command){case 1://查询操作showLoginAccount();break;// ....case 7://注销账户break;default:System.out.println("您的操作有误!请重新输入");}}}

退出操作

退出操作,不需要执行额外的方法,我们只要能回到登录页即可。退出前我们进行简单的提示即可

 private void showUserCommand(){while (true) {// ...switch (command){// ...case 6://退出System.out.println(loginAcc.getUserName() + "您已经成功退出");break;// ...}}}

注意,当用户输出6后,break会结束switch语句,但无法跳出while循环,switch会重新执行。

所以,我们需要把break改成return结束当前程序。

 private void showUserCommand(){while (true) {// ...switch (command){// ...case 6://退出System.out.println(loginAcc.getUserName() + "您已经成功退出");breturn;// ...}}}

现在,我们就跳出了showUserCommand()程序,回到了login方法里。

private void login(){// ...// 系统中存在账户,开始进行登录操作while (true) {// ...if(acc == null){System.out.println("卡号输入错误!请重新输入");}else{// 卡号存在,输入密码while (true) {// ...showUserCommand();// ...}}}
}

同样的,我们需要结束login方法中的while循环,回到start方法中

private void login(){// ...// 系统中存在账户,开始进行登录操作while (true) {// ...if(acc == null){System.out.println("卡号输入错误!请重新输入");}else{// 卡号存在,输入密码while (true) {// ...showUserCommand();// ...return;}}}
}

我们测试下:

存款及取款

存款

我们定义depositMoney的存款方法,在showUserCommand()的switch 中执行。

这次骚一点,我们用编译器的快捷键帮我们生成方法。在switch中直接执行depositMoney,然后点击【alt+enter】键就可以自动帮我们创建好这个方法了!

  private void depositMoney() {System.out.println("==存钱操作==");System.out.println("请您输入存款金额:");double money = sc.nextDouble();loginAcc.setMoney( loginAcc.getMoney()+ money);System.out.println("您已经存入"+money + "元,当前账户余额" + loginAcc.getMoney());}

取款

private void showUserCommand(){while (true) {// ...int command = sc.nextInt();switch (command){case 1://查询操作showLoginAccount();break;case 2://存款depositMoney();break;case 3://取款drawMoney();break;// ...}}}
    private void drawMoney() {System.out.println("==取钱操作==");// 1、判断账户余额是否达到了100元,如果不够100,不让用户取钱if(loginAcc.getMoney() < 100){System.out.println("您的账户不足100,不能取钱");return;}// 2、让用户输入金额while (true) {System.out.println("请输入取款金额");double money = sc.nextDouble();// 3.判断账户余额是否足够if(loginAcc.getMoney()>= money){// 钱是足够的// 判断当前取款金额是否超出了限额if(money>loginAcc.getLimit()){System.out.println("超出限额!");}else {loginAcc.setMoney(loginAcc.getMoney()-money);System.out.println("取款成功!剩余:" + loginAcc.getMoney());break;}}else {System.out.println("账户余额不足!您的余额是:" + loginAcc.getMoney());}}}

转账

private void showUserCommand(){while (true) {// ...int command = sc.nextInt();switch (command){// ...case 4://转账transferMoney();break;// ...}}}
private void transferMoney() {System.out.println("==用户转账==");// 1 系统中是否存在其他账户if(accounts.size() < 2){System.out.println("当前系统只有一个账户,无法转账");return;}// 2 判断自己的账户是否有钱if(loginAcc.getMoney() == 0){System.out.println("您没钱!别转了!");return;}while (true) {// 3 开始转账System.out.println("请输出对方卡号");String cardId = sc.next();// 4 判断账号是否正确Account acc = getAccountByCardId(cardId);if(acc==null){System.out.println("输入的卡号不对");}else {//5 账户存在,确认姓名String name = "*" + acc.getUserName().substring(1);System.out.println("请输入:"+name+"的姓氏");String preName = sc.next();// 判断姓氏是否正确if(acc.getUserName().startsWith(preName)){// 认证通过,开始转账System.out.println("请输入转账金额");double money = sc.nextDouble();// 6 判断是否超出自己的金额if(loginAcc.getMoney() >=money){//转给对方了//变更自己的账户余额loginAcc.setMoney(loginAcc.getMoney()-money);//更新对方的余额acc.setMoney(acc.getMoney() + money);return;}else {System.out.println("账户余额不足");}}else {System.out.println("输入的姓名有有误");}}}}

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

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

相关文章

git基本用法和操作

文章目录 创建版本库方式&#xff1a;Git常用操作命令&#xff1a;远程仓库相关命令分支(branch)操作相关命令版本(tag)操作相关命令子模块(submodule)相关操作命令忽略一些文件、文件夹不提交其他常用命令 创建版本库方式&#xff1a; 创建文件夹 在目录下 右键 Git Bush H…

如何使用$APPEALS法,分析用户期待?

$APPEALS分析法是一种用于分析用户期待和需求的方法&#xff0c;它可以帮助企业全方位多角度地了解客户对产品的期望&#xff0c;有助于企业多维度有侧重地调整市场规划和产品改进策略&#xff0c;帮助企业打造优势产品&#xff0c;提高市场竞争力。 下面是使用$APPEALS分析法来…

键盘控制ROS车运动

键盘控制ROS车运动 上位机 使用pyseria库与stm32单片机进行通信控制 #!/usr/bin/env python # -*- coding: utf-8 -*import sys, select, termios, tty import serialmsg """ ---------------------------w a x ds w : x a : y s : -x …

广西柳州机械异形零部件三维扫描3D抄数全尺寸测绘建模-CASAIM中科广电

一、背景介绍 复杂机械异形零部件具有不规则的形状和复杂的结构&#xff0c;给生产制造带来了很大的检测难度。为了确保零部件的制造质量和精度&#xff0c;需要对零部件进行全面的尺寸检测和分析。 CASAIM三维扫描仪在机械异形零部件全尺寸检测应用可以实现对机械异形零部件…

腾讯云轻量数据库是什么?性能如何?费用价格说明

腾讯云轻量数据库测评&#xff0c;轻量数据库100%兼容MySQL 5.7和8.0&#xff0c;腾讯云提供1C1G20GB、1C1G40GB、1C2G80GB、2C4G120GB、2C8G240GB五种规格轻量数据库&#xff0c;腾讯云百科txybk.com分享腾讯云轻量数据库测评、轻量数据库详细介绍、特性、配置价格和常见问题解…

JVM 调优指南

文章目录 为什么要学 JVM一、JVM 整体布局二、Class 文件规范三、类加载模块四、执行引擎五、GC 垃圾回收1 、JVM内存布局2 、 JVM 有哪些主要的垃圾回收器&#xff1f;3 、分代垃圾回收工作机制 六、对 JVM 进行调优的基础思路七、 GC 情况分析实例 JVM调优指南 -- 楼兰 ​ JV…

口袋参谋:如何通过布局“问大家”,快速提高宝贝转化!

问大家对于中小卖家来说&#xff0c;是非常适合的&#xff0c;因为我们完全可以靠对问大家的布局&#xff0c;提高宝贝的转化率。 问大家的作用 问大家主要是方便买家在购买前&#xff0c;了解商品的一些问题&#xff0c;而作为该不该购买的参考。对于卖家来说&#xff0c;是…

释放机器人潜力,INDEMIND深耕底层技术

市场转暖&#xff0c;但攘外需要同时安内。 市场降温之后&#xff0c;正迎来拐点 疫情之后&#xff0c;经济逐渐下行&#xff0c;服务机器人的“好日子”也随之结束&#xff0c;整个行业都在动荡中经历渡劫。根据TE智库报告显示&#xff0c;从2022年开始&#xff0c;我国服务…

疑似openAI的BUG

Chat gpt 4.0 『最新数据2023年』 Chat gpt 3.5 智商不在线『最近数据2021年9月左右』 发现了疑似openAI的一个bug 通过固定连接访问就可以用chatgpt4.0 4.0版本的费用为20美金一个月 https://chat.openai.com/?modelgpt-4-gizmo

【Linux】C文件系统详解(四)——磁盘的物理和抽象结构

文章目录 磁盘结构磁盘物理结构磁盘的具体物理结构磁盘结构的逻辑抽象 文件系统BootBlockSuperBlockGroupDescriptorTableinode tableDataBlocksinodeBitmapblockBitmaplinux中的inode 和文件名如何理解文件的增删查改删 补充细节1.如果文件误删了,我们该怎么办?2.inode确定分…

服务器端请求伪造(SSRF)

概念 SSRF(Server-Side Request Forgery&#xff0c;服务器端请求伪造) 是一种由攻击者构造形成的由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF是要攻击目标网站的内部系统。&#xff08;因为内部系统无法从外网访问&#xff0c;所以要把目标网站当做中间人来…

Thinkphp6实现定时任务功能

本文主要介绍命令启动定时任务的功能&#xff0c;按照CRMEB标准版的程序为大家详细的进行实现过程的介绍 首先创建安装Worker&#xff0c;执行composer require topthink/think-worker 安装在config/console.php中定义指令 timer > \crmeb\command\Timer::class 3. 对应图1…

C++ Qt 学习(八):Qt 绘图技术与图形视图

1. 常见 18 种 Qt 绘图技术 1.1 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <memory> #include <QTreeView> #include "CPaintWidget.h"using namespace std;class Widget : public QWidget {Q_OBJECTpublic:Widget…

使用Python实现3D曲线拟合

曲线拟合是数据分析和数学建模领域中广泛使用的技术。它涉及到寻找最接近一组数据点的数学函数的过程。在3D曲线拟合中&#xff0c;该过程被扩展到三维空间&#xff0c;其中的目标是找到最好地表示一组3D数据点的函数。 Python是一种用于科学计算的流行编程语言&#xff0c;它…

暖阳脚本_ 将Agent技术的灵活性引入RPA,清华等发布自动化智能体ProAgent

RPA暖阳脚本 近日&#xff0c;来自清华大学的研究人员联合面壁智能、中国人民大学、MIT、CMU 等机构共同发布了新一代流程自动化范式 “智能体流程自动化” Agentic Process Automation&#xff08;APA&#xff09;&#xff0c;结合大模型智能体帮助人类进行工作流构建&#x…

QT下使用QChart绘制曲线

目录 头文件内容构造函数AddSeries方法UpdateSeries方法AppendSeriesData方法SetLegendVisiableSetRubberBandCPP内容测试函数 需要用到的头文件&#xff1a; #include <QtCharts/QChart> #include <QtCharts/QChartView> #include <QtCharts/QValueAxis> #…

广西南宁新能源汽车电机定子三维扫描3D尺寸测量检测-CASAIM中科广电

一、背景介绍 电机定子压圈是一种用于电机上对电机定子的两端进行固定的辅助装置&#xff0c;在电机制造业中&#xff0c;电机定子制造的工艺水平往往能够直接决定电机制造的性能质量。而传统电机定子检测主要通过三坐标测量以及人工卡尺测量两种测量方式&#xff0c;三坐标每…

在Vue3中使用Element-Plus分页(Pagination )组件

开发过程中数据展示会经常使用到&#xff0c;同时分页功能也会添加到页面中。 记&#xff1a;在Vue3中使用Element-Plus分页组件与表格数据实现分页交互。 开始实现 引入表格和分页组件的H5标签。 <strong>Element-Plus分页组件使用</strong> <div><el-t…

【LeetCode刷题】--9.回文数

9.回文数 class Solution {public boolean isPalindrome(int x) {if(x < 0){return false;}int tmp x, sum 0;boolean flag false;while(x ! 0){sum sum * 10 x % 10;x / 10;}if(sum tmp){flag true;}return flag;} }

nvm的下载与使用

1.如果已经安装nodejs , 先卸载nodejs; 从控制面板中 卸载程序 卸载nodejs win r打开cmd ,管理员运行 where node 查看是否删除干净nodejs 2.下载nvm 从github 下载nvm , 下载nvm 3.nvm 和node安装路径最好写在同一个路径下 &#xff0c;如D盘 ,D\a\nvm , D\a\nodejs 4.…