需求描述:

假设一个简单的ATM机的取款过程为:
首先提示用户输入密码,假设默认密码为111111,最多只能输入3次,
超过3次则提示用户“密码错误,请取卡”,结束交易。

如果用户密码正确,再提示用户选择金额,
“请输入0到6中任意数字选择对应钱数:0-手动输入金额,1-100元, 2-300元,
3-500元, 4-1000元, 5-3000元, 6-5000元”。

输入数字如果错误,提示“输入错误,是否继续 Y/N”,选择Y重新提示输入钱数编号,
选择N提示“输入错误,请取卡!”。选择数字为1到6,打印对应钱数,
并提示“是否继续 Y/N”。选择数字0,ATM机只能输出100元纸币,
自定义钱数要求最低为100元,最高为1000元。如果用户输入的金额符合上述要求,
则打印输出用户取的钱数,并提示“取款完成,是否继续Y/N”;否则输出一句话“金额错误,
是否继续 Y/N”,如果用户输入Y,提示用户重新选择取款金额,如果用户输入 N,
打印“交易取消,请取卡!”

ps:取款成功后,应该提示用户是否继续,总取款金额不能超过2万

【解题思路】
 1、验证密码
  ① 密码正确,继续执行下面操作;
  ② 密码错误3次,return;
 2、取款操作。全部包含在 while循环内部。
     ① 提示选择编号;
  ② 根据编号,给money赋值。用switch结构实现。
    1~6:直接给money赋固定值,0:手动赋值操作;
  ③ 验证取款是否成功。money-本次取款金额,moneySum-本次取款之前的总金额
  判断moneySum+money是否>20000,3种情况:
  >2000 本次取款超额,但moneySum之前并不足20000,继续下次循环;
    =2000 取完本次money后,刚好满额。money可以加到sum上,然后return;
  <2000 取完本次money后,仍未上限。money可以加到sum上,继续下次循环。
   ④ 验证是否继续,while-if结构实现,有3种情况:
   Y/y 将小循环break,继续执行取款大循环;
   N/n 直接return,停止所有操作;
   其他 continue,继续执行小循环,重复输入Y/N

代码:

 1        Scanner sc=new Scanner(System.in);
 2             int i;
 3             for(i=0;i<3;i++){
 4                 System.out.print("请输入密码:");
 5                 int pwd=sc.nextInt();
 6                 if(pwd==111111){
 7                     break;
 8                 }
 9             }
10             if(i>=3){
11                 System.out.print("密码错误,请取卡!");
12                 return;
13             }
14             System.out.println("***********请根据序号进行取款********");
15             //取款操作
16             int moneysum=0;//取款总金额
17             int money=0;//本次取款金额
18             boolean isGo=true;
19             while (isGo){
20                 System.out.println("0-手动输入金额");
21                 System.out.println("1-100元\t\t2-300元\t\t3-500元");
22                 System.out.println("4-1000元\t\t5-3000元\t\t6-5000元");
23                 System.out.print("请选择:");
24                 int choosenum=sc.nextInt();
25                 moneysum+=money;
26                 //根据取款编号,进行取款操作
27                 switch(choosenum){
28                 case 1:
29                     money=100;
30                     break;
31                 case 2:
32                     money=300;
33                     break;
34                 case 3:
35                     money=500;
36                     break;
37                 case 4:
38                     money=1000;
39                     break;
40                 case 5:
41                     money=3000;
42                     break;
43                 case 6:
44                     money=5000;
45                     break;
46                 case 0:
47                     System.out.print("请输入金额:");
48                     int shoudong=sc.nextInt();
49                     if(shoudong%100==0&&shoudong>=100&&shoudong<=1000){
50                         money=shoudong;
51                     }else{
52                         System.out.print("金额错误,只能输入100到1000中100整数倍的金额");
53                     }
54                     break;
55                 default:
56                     System.out.println("输入错误,");
57                     break;
58                 }
59                 //验证总取款金额是否超过20000
60                 if(moneysum+money>20000){
61                     System.out.print("取款已超出单日上限,本次取款失败,本日剩余可取款金额为"+(20000-moneysum)+",");
62                     moneysum-=money;
63                 }else if(moneysum+money==20000){
64                     System.out.println("您共取出20000元,已达到单日取钱上限,请取卡");
65                     return;
66                 }else{
67                     System.out.print("您共取出"+(moneysum+money)+"元,");
68                 }
69                 //验证是否继续
70                 while(true){
71                     System.out.print("是否继续(y/n):");
72                     // 输入字符: 先输入字符串,再截取字符串的第0个字符
73                     char c = sc.next().charAt(0);
74                     System.out.println();
75                     if(c=='n' || c=='N'){
76                         // 当输入为n时,修改标志变量,终止外层大循环。
77                         isGo = false;
78                         break;
79                     }else if(c=='y' || c=='Y'){
80                         break;
81                     }else{
82                         System.out.print("输入有误,");
83                     }
84                 }
85             }
86             System.out.println("感谢您的使用!");

转载于:https://www.cnblogs.com/hjcblog/p/8638818.html

JAVA-循环体小练习——ATM取款机相关推荐

  1. 【Java课设】--ATM取款机(Gui界面)

    [Java课设]–ATM取款机(Gui界面)

  2. java初级atm取款机,java基础:模拟ATM取款机

    package com.atm; import java.util.Scanner; /** * ATM类实现 * * @author 向往的生活 */ public class ATM { publ ...

  3. java综合练习之ATM取款机

    题干: 编写一个ATM取款机小程序, 我会对你的程序进行若干次测试,以此来判断你是否完成了本关任务. 第一次测试会输入: 100 2 999 100 1 需要你的程序输出: 方法: 程序挺简单,但是我 ...

  4. atm取款机 oracle实战训练_使用JavaScript实现ATM取款机

    ATM机需求描述如下: 假设一个简单的ATM机的取款过程为: 首先提示用户输入密码(password),假设默认密码为111111,最多只能输入3次, 超过3次则提示用户"密码错误,请取卡& ...

  5. ATM取款机小程序——Java

    问题描述:编写小程序实现对应功能,效果如图: 红框是需要输入的数据. 思路:取款循环进行无数次,故用while循环 总金额为1000,Scanner输入 import java.util.Scanne ...

  6. java编写一个ATM取款机小程序

    此程序效果图如下: 一下为源代码: package step4; import java.util.Scanner; public class ForPractice4 { public static ...

  7. java小项目 ATM机(简易版)

    目录 说明 项目介绍 功能介绍 结构图 各模块代码 登录界面 服务选择界面 存取款界面 修改密码模块 转账模块 总代码 说明 简单做了一个java的ATM机项目.本项目只能作为一个简单的运行程序.因为 ...

  8. JAVA 实现ATM取款机

    ATM取款机 import java.util.Scanner;public class ForPractice4 {public static void main(String[] args) {/ ...

  9. c语言生成16进制随机数,C语言实战篇——模拟ATM取款机,最强大脑小游戏,进制转换,产生不同的随机数...

    2019.11.24 模拟ATM取款机 如图为登录界面 银行.png #include int main(){ printf("----------------------------\n& ...

最新文章

  1. 玩纸牌游戏计算机教案,小班数学好玩的扑克牌教案
  2. 老姚浅谈:怎么学JavaScript?
  3. 学习笔记 - MarkDown 语法
  4. 学术前沿 | DeepMind最新成果:图表示学习算法推理~46页ppt
  5. 江淮大众正式更名,今日盘中涨停!
  6. 如何使用无线连接来使Android调试手机
  7. if函数判断单元格颜色_IF条件函数10大用法完整版,全会是高手,配合SUMIF,VLOOKUP更逆天...
  8. 【面试】5道JAVA笔试算法题
  9. 安卓微信自动抢红包插件优化和实现
  10. C#去除gif图片水印的记录
  11. 微信小程序--保存图片到相册功能实现
  12. 【运维心得】你不知道,运维也要写代码(3)
  13. 欧拉定理的内容证明及欧拉函数的推导
  14. html2canvas生成长图片时导致背景图渲染不全问题
  15. java高级之xml
  16. 如何培养孩子的金钱价值观
  17. 纠删码在实时视频流中的应用丨Dev for Dev 专栏
  18. 【阿克曼小车导出URDF模型教程】
  19. PET(聚对苯二甲酸乙二醇酯)——百度百科
  20. iOS 4.3.5 红雪不完美越狱教程

热门文章

  1. 共享一个资源(卖票)
  2. 洛谷 1057——传球游戏(递推与递归二分)
  3. JAVA(小技巧--List)
  4. STM32F407VG uCOS-II2.91 IAR工程 以及uCOS使用库编译的方法
  5. 美国计算机科学专业申请要求,美国计算机科学专业好申请吗?申请要求高不高...
  6. 函数 单片机glint_GL 库函数
  7. sqlite.interop.dll 请确保此文件可以访问_不用数据线,一秒让电脑和iphone快速传文件...
  8. m.2接口和nvme区别_M.2硬盘的分类和区别
  9. hive提供oracle接口嘛,Hive是个什么东东
  10. 阿里巴巴DevOps实践指南 | 为什么DevOps的必然趋势是BizDevOps?