21、 零钱通

小灰灰 2024-04-01 17:19 148阅读 0赞

1、项目开发流程说明:

(1)项目需求说明:

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

(2)项目的界面:694f8baef863465e9b295e401ce44b13.png

(3)项目代码实现:

编写文件SmallChangeSys.java完成基本功能(先使用过程编程,后面改成OOP版本)

(2)项目代码实现改进:

1)用户输入4退出时,给出提示“你确定要退出吗?y/n”,必须输入正确的y/n,否则循环输入指令,直到输入y或n

2)在收益入账和消费时,判断金额是否合理,并给出相应的提示

3)将面向过程的代码修改成面向对象的方法,编写SmallChanageSysOOP.java类,并使用SmallChanageSysApp.java完成测试

2、过程编程:

(1)先完成显示菜单,并可以选择菜单,给出对应提示

  1. package smallchange;
  2. import java.util.Scanner;
  3. public class SmallChangeSys {
  4. //1、先完成显示菜单,并可以选择菜单,给出对应提示
  5. public static void main(String[] args) {
  6. boolean loop=true;
  7. Scanner scanner=new Scanner(System.in);
  8. String key="";
  9. do{
  10. System.out.println("========================零钱通========================");
  11. System.out.println("\t\t\t1 零钱通明细");
  12. System.out.println("\t\t\t2 收益入账");
  13. System.out.println("\t\t\t3 消费");
  14. System.out.println("\t\t\t4 退 出");
  15. System.out.println("请选择(1-4):");
  16. key=scanner.next();
  17. //使用switch分支控制
  18. switch (key){
  19. case"1":
  20. System.out.println("1 零钱通明细");
  21. break;
  22. case"2":
  23. System.out.println("2 收益入账");
  24. break;
  25. case"3":
  26. System.out.println("3 消费");
  27. break;
  28. case"4":
  29. System.out.println("4 退 出");
  30. loop=false;
  31. break;
  32. default:
  33. System.out.println("选择有误,请重新选择!");
  34. }
  35. }while(loop);
  36. System.out.println("========================退出了零钱通========================");
  37. }
  38. }

(2)完成零钱通明细

  1. package smallchange;
  2. import java.util.Scanner;
  3. public class SmallChangeSys {
  4. //1、先完成显示菜单,并可以选择菜单,给出对应提示
  5. public static void main(String[] args) {
  6. boolean loop=true;
  7. Scanner scanner=new Scanner(System.in);
  8. String key="";
  9. //2、完成零钱通明细
  10. //思路:(1)可以把收益入账和消费保存到数组
  11. //(2)可以使用对象
  12. //(3)可以使用String拼接
  13. String details="========================零钱通明细========================";
  14. do{
  15. System.out.println("\n========================零钱通========================");
  16. System.out.println("\t\t\t1 零钱通明细");
  17. System.out.println("\t\t\t2 收益入账");
  18. System.out.println("\t\t\t3 消费");
  19. System.out.println("\t\t\t4 退 出");
  20. System.out.println("请选择(1-4):");
  21. key=scanner.next();
  22. //使用switch分支控制
  23. switch (key){
  24. case"1":
  25. System.out.println(details);
  26. break;
  27. case"2":
  28. System.out.println("2 收益入账");
  29. break;
  30. case"3":
  31. System.out.println("3 消费");
  32. break;
  33. case"4":
  34. System.out.println("4 退 出");
  35. loop=false;
  36. break;
  37. default:
  38. System.out.println("选择有误,请重新选择!");
  39. }
  40. }while(loop);
  41. System.out.println("========================退出了零钱通========================");
  42. }
  43. }

(3)完成收益入账

  1. package smallchange;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.Scanner;
  5. public class SmallChangeSys {
  6. //1、先完成显示菜单,并可以选择菜单,给出对应提示
  7. public static void main(String[] args) {
  8. boolean loop=true;
  9. Scanner scanner=new Scanner(System.in);
  10. String key="";
  11. //2、完成零钱通明细
  12. //思路:(1)可以把收益入账和消费保存到数组
  13. //(2)可以使用对象
  14. //(3)可以使用String拼接
  15. String details="========================零钱通明细========================";
  16. //3、完成收益入账
  17. //定义新的变量
  18. double money=0;
  19. double balance=0;
  20. Date date=null;//date是java.util.Date类型,表示日期
  21. SimpleDateFormat sdf=new SimpleDateFormat("yyy-MM-dd hh:mm");//日期格式化
  22. do{
  23. System.out.println("\n========================零钱通========================");
  24. System.out.println("\t\t\t1 零钱通明细");
  25. System.out.println("\t\t\t2 收益入账");
  26. System.out.println("\t\t\t3 消费");
  27. System.out.println("\t\t\t4 退 出");
  28. System.out.print("请选择(1-4):");
  29. key=scanner.next();
  30. //使用switch分支控制
  31. switch (key){
  32. case"1":
  33. System.out.println(details);
  34. break;
  35. case"2":
  36. System.out.print("收益入账金额:");
  37. money=scanner.nextDouble();
  38. //校验money的值是否在合理范围内
  39. balance+=money;
  40. //获取当前日期
  41. date=new Date();
  42. //拼接收益信息到details
  43. details+="\n收益入账\t+"+money+"\t"+sdf.format(date)+"\t"+balance;
  44. break;
  45. case"3":
  46. System.out.println("3 消费");
  47. break;
  48. case"4":
  49. System.out.println("4 退 出");
  50. loop=false;
  51. break;
  52. default:
  53. System.out.println("选择有误,请重新选择!");
  54. }
  55. }while(loop);
  56. System.out.println("========================退出了零钱通========================");
  57. }
  58. }

(4)消费

  1. package smallchange;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.Scanner;
  5. public class SmallChangeSys {
  6. //1、先完成显示菜单,并可以选择菜单,给出对应提示
  7. public static void main(String[] args) {
  8. boolean loop=true;
  9. Scanner scanner=new Scanner(System.in);
  10. String key="";
  11. //2、完成零钱通明细
  12. //思路:(1)可以把收益入账和消费保存到数组
  13. //(2)可以使用对象
  14. //(3)可以使用String拼接
  15. String details="========================零钱通明细========================";
  16. //3、完成收益入账
  17. //定义新的变量
  18. double money=0;
  19. double balance=0;
  20. Date date=null;//date是java.util.Date类型,表示日期
  21. SimpleDateFormat sdf=new SimpleDateFormat("yyy-MM-dd hh:mm");//日期格式化
  22. //4、消费
  23. //定义新的变量,保存消费的原因
  24. String note="";
  25. do{
  26. System.out.println("\n========================零钱通========================");
  27. System.out.println("\t\t\t1 零钱通明细");
  28. System.out.println("\t\t\t2 收益入账");
  29. System.out.println("\t\t\t3 消费");
  30. System.out.println("\t\t\t4 退 出");
  31. System.out.print("请选择(1-4):");
  32. key=scanner.next();
  33. //使用switch分支控制
  34. switch (key){
  35. case"1":
  36. System.out.println(details);
  37. break;
  38. case"2":
  39. System.out.print("收益入账金额:");
  40. money=scanner.nextDouble();
  41. //校验money的值是否在合理范围内
  42. //当前余额
  43. balance+=money;
  44. //获取当前日期
  45. date=new Date();
  46. //拼接收益信息到details
  47. details+="\n收益入账\t+"+money+"\t"+sdf.format(date)+"\t"+balance;
  48. break;
  49. case"3":
  50. System.out.print("消费金额::");
  51. money=scanner.nextDouble();
  52. //校验消费金额是否在合理范围内
  53. System.out.println("消费说明:");
  54. note=scanner.next();
  55. balance-=money;
  56. //拼接信息到details
  57. date=new Date();//获取当前日期
  58. details+="\n"+note+"\t-"+money+"\t"+sdf.format(date)+"\t"+balance;
  59. break;
  60. case"4":
  61. System.out.println("4 退 出");
  62. loop=false;
  63. break;
  64. default:
  65. System.out.println("选择有误,请重新选择!");
  66. }
  67. }while(loop);
  68. System.out.println("========================退出了零钱通项目========================");
  69. }
  70. }

(5)退出提示

  1. package smallchange;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.Scanner;
  5. public class SmallChangeSys {
  6. //1、先完成显示菜单,并可以选择菜单,给出对应提示
  7. public static void main(String[] args) {
  8. //变量loop是控制显示菜单的
  9. boolean loop=true;
  10. Scanner scanner=new Scanner(System.in);
  11. String key="";
  12. //2、完成零钱通明细
  13. //思路:(1)可以把收益入账和消费保存到数组
  14. //(2)可以使用对象
  15. //(3)可以使用String拼接
  16. String details="========================零钱通明细========================";
  17. //3、完成收益入账
  18. //定义新的变量
  19. double money=0;
  20. double balance=0;
  21. Date date=null;//date是java.util.Date类型,表示日期
  22. SimpleDateFormat sdf=new SimpleDateFormat("yyy-MM-dd hh:mm");//日期格式化
  23. //4、消费
  24. //定义新的变量,保存消费的原因
  25. String note="";
  26. do{
  27. System.out.println("\n========================零钱通========================");
  28. System.out.println("\t\t\t1 零钱通明细");
  29. System.out.println("\t\t\t2 收益入账");
  30. System.out.println("\t\t\t3 消费");
  31. System.out.println("\t\t\t4 退 出");
  32. System.out.print("请选择(1-4):");
  33. key=scanner.next();
  34. //使用switch分支控制
  35. switch (key){
  36. case"1":
  37. System.out.println(details);
  38. break;
  39. case"2":
  40. System.out.print("收益入账金额:");
  41. money=scanner.nextDouble();
  42. //校验money的值是否在合理范围内
  43. //当前余额
  44. balance+=money;
  45. //获取当前日期
  46. date=new Date();
  47. //拼接收益信息到details
  48. details+="\n收益入账\t+"+money+"\t"+sdf.format(date)+"\t"+balance;
  49. break;
  50. case"3":
  51. System.out.print("消费金额::");
  52. money=scanner.nextDouble();
  53. //校验消费金额是否在合理范围内
  54. System.out.println("消费说明:");
  55. note=scanner.next();
  56. balance-=money;
  57. //拼接信息到details
  58. date=new Date();//获取当前日期
  59. details+="\n"+note+"\t-"+money+"\t"+sdf.format(date)+"\t"+balance;
  60. break;
  61. case"4":
  62. //思路:
  63. //(1)定义一个变量choice,接收用户的输入
  64. //(2)使用while+break循环来处理接收到的输入
  65. //(3)退出while后,再判断choice是y还是n,就可以决定是否退出
  66. //(4)建议一段代码,完成一个小功能,尽量不要混在一起
  67. String choice="";
  68. //while要求用户必须输入y/n,否则就一直循环
  69. while(true){
  70. System.out.println("你确定要退出吗?y/n");
  71. choice=scanner.next();
  72. if("y".equals(choice)||"n".equals(choice)){
  73. break;
  74. }
  75. }
  76. //当用户退出while后,进行判断是否真的退出
  77. if(choice.equals("y")) {
  78. loop = false;
  79. }
  80. break;
  81. default:
  82. System.out.println("选择有误,请重新选择!");
  83. }
  84. }while(loop);
  85. System.out.println("========================退出了零钱通项目========================");
  86. }
  87. }

(6)代码改进

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

3、面向对象编程:

SmallChangeSysOOP:功能类

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

SmallChangeSysApp:调用类

  1. package smallchange;
  2. //这里直接调用SmallChangeSysOOP对象,显示主菜单
  3. public class SmallChangeSysApp {
  4. public static void main(String[] args) {
  5. new SmallChangeSysOOP().mainMenu();
  6. }
  7. }
  8. //变量——>属性——>功能——>方法——>调用
  9. /*输出:
  10. ========================零钱通菜单OOP========================
  11. 1 零钱通明细
  12. 2 收益入账
  13. 3 消费
  14. 4 退 出
  15. 请选择(1-4):2
  16. 收益入账金额:200
  17. ========================零钱通菜单OOP========================
  18. 1 零钱通明细
  19. 2 收益入账
  20. 3 消费
  21. 4 退 出
  22. 请选择(1-4):2
  23. 收益入账金额:500
  24. ========================零钱通菜单OOP========================
  25. 1 零钱通明细
  26. 2 收益入账
  27. 3 消费
  28. 4 退 出
  29. 请选择(1-4):3
  30. 消费金额:100
  31. 消费说明:吃饭
  32. ========================零钱通菜单OOP========================
  33. 1 零钱通明细
  34. 2 收益入账
  35. 3 消费
  36. 4 退 出
  37. 请选择(1-4):3
  38. 消费金额:50
  39. 消费说明:看电影
  40. ========================零钱通菜单OOP========================
  41. 1 零钱通明细
  42. 2 收益入账
  43. 3 消费
  44. 4 退 出
  45. 请选择(1-4):1
  46. ========================零钱通明细========================
  47. 收益入账 +200.0 2022-11-11 10:57 200.0
  48. 收益入账 +500.0 2022-11-11 10:58 700.0
  49. 吃饭 -100.0 2022-11-11 10:58 600.0
  50. 看电影 -50.0 2022-11-11 10:58 550.0
  51. ========================零钱通菜单OOP========================
  52. 1 零钱通明细
  53. 2 收益入账
  54. 3 消费
  55. 4 退 出
  56. 请选择(1-4):4
  57. 你确定要退出吗?y/n
  58. y
  59. 进程已结束,退出代码0
  60. */

发表评论

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

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

相关阅读

    相关 21零钱

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