零钱通项目

约定不等于承诺〃 2024-03-31 18:03 122阅读 0赞

一、项目需求说明

使用java开发零钱通项目,完成收益入账、消费、查看明细、退出系统等功能。

项目界面如下:

68988907b9ff4f529dfb3a43df16a0e3.png

二、面向过程的零钱通项目

  1. package com.hspedu.smallchange;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.Scanner;
  5. public class SmallChangeSys {
  6. //化繁为简
  7. //1.先完成显示菜单,并可以选择菜单,给出对应提示
  8. //2.完成零钱通明细
  9. //3.完成收益入账
  10. //4.消费
  11. //5.退出
  12. //6.用户输入4退出时,给出提示"你确定要退出吗?y/n",必须输入正确的y/n,否则循环输入指令,直到输入y或者n
  13. //7.在收益入账和消费时,判断金额是否合理,并给出相应的提示
  14. public static void main(String[] args) {
  15. //定义相关的变量
  16. boolean loop = true;
  17. Scanner scanner = new Scanner(System.in);
  18. String key = "";
  19. //2.完成零钱通明细
  20. //(1)可以把收益入账和消费,保存到数组;(2)可以使用对象;(3)使用String拼接;
  21. String details = "---------------零钱通明细------------";
  22. //3.完成收益入账 完成功能——>驱动程序员增加新的变量和代码
  23. //定义新的变量
  24. double money = 0;
  25. double balance = 0;
  26. Date date = null; //date是java.util.Date类型,表示日期
  27. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); //用于日期格式化的对象
  28. //4.消费
  29. //定义新变量,保存消费的原因
  30. String note = "";
  31. do { //先执行,后面while再判断
  32. System.out.println("\n---------------零钱通菜单------------");
  33. System.out.println("\t\t\t1 零钱通明细"); //"\t"就是补全空格,相当于tab,一个\t=8个空格
  34. System.out.println("\t\t\t2 收益入账");
  35. System.out.println("\t\t\t3 消费");
  36. System.out.println("\t\t\t4 退 出");
  37. System.out.println("请选择(1-4):");
  38. key = scanner.next(); //key接收用户在控制台的输入,scanner.next()是获取用户在控制台输入的内容
  39. //使用switch分支控制
  40. switch (key){
  41. case "1" :
  42. System.out.println(details);
  43. break;
  44. case "2" :
  45. System.out.println("收益入账金额:");
  46. money = scanner.nextDouble();
  47. //money的值范围应该校验——>一会再完善
  48. //编程思想:尽量找不正确的,然后break
  49. //找出不正确金额的条件,然后给出提示即可,就直接break
  50. if (money <= 0){
  51. System.out.println("收益入账金额范围需要大于0");
  52. break;
  53. }
  54. balance = balance + money;
  55. //拼接收益入账信息到details
  56. date = new Date(); //获取当前日期
  57. details = details + "\n收益入账\t" + money + "\t" + sdf.format(date) + "\t" + balance;
  58. break;
  59. case "3" :
  60. System.out.println("消费金额:");
  61. money = scanner.nextDouble();
  62. //money的值范围应该校验——>一会再完善
  63. //找出金额不正确的情况
  64. if (money <= 0 || money >balance){
  65. System.out.println("您的消费金额应该在 0~" + balance);
  66. break;
  67. }
  68. System.out.println("消费说明:");
  69. note = scanner.next();
  70. balance = balance - money;
  71. //拼接消费信息到detail
  72. date = new Date(); //获取当前日期
  73. details = details + "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
  74. break;
  75. case "4" :
  76. //6.用户输入4退出时,给出提示"你确定要退出吗?y/n",
  77. // 必须输入正确的y/n,否则循环输入指令,直到输入y或者n
  78. //(1)定义一个变量choice,接受用户的输入
  79. //(2)使用while + break,来处理接收到的输入是y或者n
  80. //(3)退出while后,再判断choice是y还是n,就可以决定是否退出
  81. //(4)建议一段代码完成一个小功能,尽量不要混在一起
  82. String choice = "";
  83. while (true){ //要求用户必须输入y or n,否则就一直循环
  84. System.out.println("你确定要退出吗?y/n");
  85. choice = scanner.next();
  86. if ("y".equals(choice) || "n".equals(choice)){
  87. break;
  88. }else {
  89. System.out.println("请输入y或n");
  90. }
  91. }
  92. //当用户退出while后,进行判断
  93. if (choice.equals("y")){
  94. loop = false;
  95. }
  96. break;
  97. default:
  98. System.out.println("选择有误,请重新选择");
  99. }
  100. }while (loop); //loop=false就退出循环,如果loop=true,就一直继续。
  101. System.out.println("-----退出了零钱通项目-----");
  102. }
  103. }

三、面向对象(oop)的零钱通项目

851453f1d26e4e03ad0a18b9961a92f1.png

下面是SmallChangeSysOPP类:

  1. package com.hspedu.smallchange.oop;
  2. /*
  3. 该类是能完成零钱通的各个功能的类
  4. 使用使用OOP(面向对象编程)
  5. 将各个功能对应一个方法,
  6. */
  7. import java.text.SimpleDateFormat;
  8. import java.util.Date;
  9. import java.util.Scanner;
  10. public class SmallChangeSysOOP {
  11. //属性
  12. //定义相关的变量
  13. boolean loop = true;
  14. Scanner scanner = new Scanner(System.in);
  15. String key = "";
  16. //2.完成零钱通明细
  17. //(1)可以把收益入账和消费,保存到数组;(2)可以使用对象;(3)使用String拼接;
  18. String details = "---------------零钱通明细------------";
  19. //3.完成收益入账 完成功能——>驱动程序员增加新的变量和代码
  20. //定义新的变量
  21. double money = 0;
  22. double balance = 0;
  23. Date date = null; //date是java.util.Date类型,表示日期
  24. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); //用于日期格式化的对象
  25. //4.消费
  26. //定义新变量,保存消费的原因
  27. String note = "";
  28. //先完成显示菜单,并可以选择
  29. public void mainMenu() {
  30. do { //先执行,后面while再判断
  31. System.out.println("\n---------------零钱通菜单(OOP)------------");
  32. System.out.println("\t\t\t1 零钱通明细"); //"\t"就是补全空格,相当于tab,一个\t=8个空格
  33. System.out.println("\t\t\t2 收益入账");
  34. System.out.println("\t\t\t3 消费");
  35. System.out.println("\t\t\t4 退 出");
  36. System.out.println("请选择(1-4):");
  37. key = scanner.next(); //key接收用户在控制台的输入,scanner.next()是获取用户在控制台输入的内容
  38. //使用switch分支控制
  39. switch (key) {
  40. case "1":
  41. this.detail();
  42. break;
  43. case "2":
  44. this.income();
  45. break;
  46. case "3":
  47. this.pay();
  48. break;
  49. case "4":
  50. this.exit();
  51. break;
  52. default:
  53. System.out.println("选择有误,请重新选择");
  54. }
  55. } while (loop); //loop=false就退出循环,如果loop=true,就一直继续。 }
  56. }
  57. //完成零钱通明细
  58. public void detail(){
  59. System.out.println(details);
  60. }
  61. //完成收益入账
  62. public void income(){
  63. System.out.println("收益入账金额:");
  64. money = scanner.nextDouble();
  65. //money的值范围应该校验——>一会再完善
  66. //编程思想:尽量找不正确的,然后break
  67. //找出不正确金额的条件,然后给出提示即可,就直接break
  68. if (money <= 0){
  69. System.out.println("收益入账金额范围需要大于0");
  70. return; //循环中用break,方法中用return退出方法,不再执行后面的代码。
  71. }
  72. balance = balance + money;
  73. //拼接收益入账信息到details
  74. date = new Date(); //获取当前日期
  75. details = details + "\n收益入账\t" + money + "\t" + sdf.format(date) + "\t" + balance;
  76. }
  77. //完成消费
  78. public void pay(){
  79. System.out.println("消费金额:");
  80. money = scanner.nextDouble();
  81. //money的值范围应该校验——>一会再完善
  82. //找出金额不正确的情况
  83. if (money <= 0 || money >balance){
  84. System.out.println("您的消费金额应该在 0~" + balance);
  85. return; //循环中用break,方法中用return退出方法,不再执行后面的代码。
  86. }
  87. System.out.println("消费说明:");
  88. note = scanner.next();
  89. balance = balance - money;
  90. //拼接消费信息到detail
  91. date = new Date(); //获取当前日期
  92. details = details + "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
  93. }
  94. //退出
  95. public void exit(){
  96. //6.用户输入4退出时,给出提示"你确定要退出吗?y/n",
  97. // 必须输入正确的y/n,否则循环输入指令,直到输入y或者n
  98. //(1)定义一个变量choice,接受用户的输入
  99. //(2)使用while + break,来处理接收到的输入是y或者n
  100. //(3)退出while后,再判断choice是y还是n,就可以决定是否退出
  101. //(4)建议一段代码完成一个小功能,尽量不要混在一起
  102. String choice = "";
  103. while (true){ //要求用户必须输入y or n,否则就一直循环
  104. System.out.println("你确定要退出吗?y/n");
  105. choice = scanner.next();
  106. if ("y".equals(choice) || "n".equals(choice)){
  107. break;
  108. }else {
  109. System.out.println("请输入y或n");
  110. }
  111. }
  112. //当用户退出while后,进行判断
  113. if (choice.equals("y")){
  114. loop = false;
  115. }
  116. }
  117. }

下面是SmallChangeSysApp类:

  1. package com.hspedu.smallchange.oop;
  2. /*
  3. 这里直接调用SmallChangeSysOOP对象,显示主菜单即可
  4. */
  5. public class SmallChangeSysApp {
  6. public static void main(String[] args) {
  7. SmallChangeSysOOP smallChangeSysOOP = new SmallChangeSysOOP();
  8. smallChangeSysOOP.mainMenu();
  9. }
  10. }

发表评论

表情:
评论列表 (有 0 条评论,122人围观)

还没有评论,来说两句吧...

相关阅读

    相关 21、 零钱

    1、项目开发流程说明: (1)项目需求说明: 使用java开发零钱通项目,可以完成收益入账,消费,查看明细,退出系统等功能 (2)项目的界面:![694f8baef863

    相关 322. 零钱兑换

    > 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 >

    相关 322.零钱兑换

    //给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 // -1