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.rhkb.cn/news/198754.html

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

相关文章

基于JavaWeb的智慧停车管理系统设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题&#xff0c;今天给大家介绍…

2024年测试工程师必看系列之fiddler设置手机端抓包全套教程

fiddler设置手机端抓包 安卓手机抓包 第一步&#xff1a;配置电脑和安卓的相关设置 1、手机和fiddler位于同一个局域网内&#xff1b;首先从fiddler处获取到ip地址和端口号&#xff1a; &#xff0c;点击online&#xff0c;最后一行就是ip地址 2、路径&#xff1a;Tools》Op…

(动手学习深度学习)第13章 计算机视觉---微调

文章目录 微调总结 微调代码实现 微调 总结 微调通过使用在大数据上的恶道的预训练好的模型来初始化模型权重来完成提升精度。预训练模型质量很重要微调通常速度更快、精确度更高 微调代码实现 导入相关库 %matplotlib inline import os import torch import torchvision f…

Linux网络——HTTP

目录 一.应用层 二.认识URL 1.域名 2.urlencode和urldecode 三.HTTP协议格式 1.请求格式http 2.响应格式 四.HTTP响应状态码 五.HTTP常见Header 六.简单的HTTP服务器 七.HTTP的方法 1.GET方法 2.POST方法 一.应用层 我们程序员写的一个个解决我们实际问题, 满足…

深入分析高性能互连点对点通信开销

今天分享最近阅读的一篇文章&#xff1a;“Breaking Band&#xff0c;A Breakdown of High-Performance Communication”&#xff0c;这篇文章发表在ICPP 2019会议。由加州大学欧文分校和ARM公司合作完成。从题目中可以看到&#xff0c;这篇文章是一篇评测型的文章&#xff0c;…

JDY蓝牙注意事项

波特率设置&#xff1a;9600&#xff0c;不接受115200&#xff0c;或者38400. 不同于WiFi测试&#xff0c;jdy蓝牙不接受AT"指令&#xff0c;可以使用“ATVERSION"指令测试 安信可公司的那个蓝牙指令在这里没有用&#xff0c;不知道是不是生产的公司不一样

网络协议入门 笔记一

一、服务器和客户端及java的概念 JVM (Java Virtual Machine) : Java虚拟机&#xff0c;Java的跨平台:一次编译&#xff0c;到处运行&#xff0c;编译生成跟平台无关的字节码文件 (class文件)&#xff0c;由对应平台的JVM解析字节码为机器指令 (010101)。 如下图所示&#xff0…

Java入门篇 之 抽象类接口

本篇碎碎念&#xff1a;个人认为压力是一种前进的动力&#xff0c;但是不要有太多压力&#xff0c;不然会使心情烦躁&#xff0c;会控制不住自己的情绪&#xff0c;会在一个临界值爆发&#xff0c;一旦爆发&#xff0c;将迟迟不能消散 今日份励志文案: 努力的背后必有加倍的赏赐…

Word中NoteExpress不显示的问题

首先确认我们以及安装了word插件 我们打开word却没有。此时我们打开&#xff1a;文件->选项->加载项 我们发现被禁用了 选择【禁用项目】&#xff08;如果没有&#xff0c;试一试【缓慢且禁用的加载项】&#xff09;&#xff0c;点击转到 选择启用 如果没有禁用且没有出…

海康威视综合安防管理平台任意文件上传

系统介绍 HIKVISION iSecure Center综合安防管理平台是一套“集成化”、“智能化”的平台&#xff0c;通过接入视频监控、一卡通、停车场、报警检测等系统的设备&#xff0c;获取边缘节点数据&#xff0c;实现安防信息化集成与联动&#xff0c;公众号&#xff1a;web安全工具库…

使用centos搭建内网的yum源

1.安装httpd服务 2.启动服务&#xff0c;设置开机自启 #启动服务 systemctl start httpd # 设置开机自动启动 systemctl enable httpd systemctl status httpd3.新建一个目录&#xff0c;将rpm文件放到该目录下 4.将/etc/httpd/conf/httpd.conf文件中的DocumentRoot "…

SASS/SCSS精华干货教程

目录 介绍 基本说明 特点 sass语法格式sass的语法格式一共有两种&#xff0c;一种是以".scss"作为拓展名&#xff0c;一种是以".sass"作为拓展名&#xff0c;这里我们只讲拓展名&#xff1a; 编译环境安装 Vscode安装编译插件 简单使用 sass语法扩张…

合并两个有序链表(冒泡排序实现)

实例要求&#xff1a;将两个升序链表合并为一个新的 升序 链表并返回&#xff1b;新链表是通过拼接给定的两个链表的所有节点组成的&#xff1b;实例分析&#xff1a;先拼接两个链表&#xff0c;在使用冒泡排序即可&#xff1b;示例代码&#xff1a; struct ListNode* mergeTwo…

docker的基本使用以及使用Docker 运行D435i

1.一些基本的指令 1.1 容器 要查看正在运行的容器&#xff1a; sudo docker ps 查看所有的容器&#xff08;包括停止状态的容器&#xff09; sudo docker ps -a 重新命名容器 sudo docker rename <old_name> <new_name> <old_name> 替换为你的容器名称…

查询数据库DQL

DQL 查询基本语法 -- DQL :基本语法; -- 1查询指定的字段 name entrydate 并返回select name , entrydate from tb_emp;-- 2 查询 所有字段 并返回select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;-- 2 查询…

C++ 继承和派生 万字长文超详解

本文章内容来源于C课堂上的听课笔记 继承和派生基础 继承是一种概念&#xff0c;它允许一个新创建的类&#xff08;称为子类或派生类&#xff09;获取另一个已经存在的类&#xff08;称为父类或基类&#xff09;的属性和行为。这就好比是子类继承了父类的特征。想象一下&…

【dc-dc】世微 电动车摩托车灯 5-80V 1.2A 一切二降压恒流驱动器AP2915

产品描述 AP2915 是一款可以一路灯串切换两路灯串的降压恒流驱动器,高效率、外围简单、内置功率管&#xff0c;适用于5-80V 输入的高精度降压 LED 恒流驱动芯片。内置功率管输出最大功率可达 12W&#xff0c;最大电流 1.2A。AP2915 一路灯亮切换两路灯亮&#xff0c;其中一路灯…

微积分在神经网络中的本质

calculus 在一个神经网络中我们通常将每一层的输出结果表示为&#xff1a; a [ l ] a^{[l]} a[l] 为了方便记录&#xff0c;将神经网络第一层记为&#xff1a; [ 1 ] [1] [1] 对应的计算记录为为&#xff1a; a [ l ] &#xff1a; 第 l 层 a [ j ] &#xff1a; 第 j 个神经…

在市场发展中寻变革,马上消费金融树行业发展“风向标”

11月11日&#xff0c;2023金融街论坛年会第三届全球金融科技大会“金融科技创新与合规安全”平行论坛在北京召开。会上&#xff0c;马上消费金融副总经理孙磊就数据对金融的赋能作用、数据安全治理等方面展开了深度讨论。 公开信息显示&#xff0c;马上消费金融是一家经中国银保…

如何将文字、图片、视频、链接等内容生成一个二维码?

通过二维彩虹的【H5编辑】功能&#xff0c;就可以将文字、图片、视频、文件、链接等多种格式的内容编辑在一个页面&#xff0c;然后生成一个自定义的二维码——H5编辑二维码。扫描后&#xff0c;即可查看二维码中的详细图文视频等内容了。这个功能大受欢迎&#xff01; 这个H5…