我是靠谱客的博主 寂寞凉面,这篇文章主要介绍Java模仿微信实现零钱通简易功能(两种版本),现在分享给大家,希望可以做个参考。

最近刚刚复习了一下Java的面向对象三大特性,这里跟着hsp做个小零钱通实践一下,以下记录了学习和编写过程

1. 需求描述

使用Java 开发零钱通项目, 模仿微信实现简易功能,可以完成收益入账,消费,查看明细,退出系统等功能,先按照一般方法写,后期在改进为OOP

预期界面:(实际可能不同)

2. 需求分析

面对这样一个需求,先化繁为简

  1. 写一个菜单
  2. 完成零钱通明细.
  3. 完成收益入账
  4. 消费
  5. 退出
  6. 用户输入4退出时,给出提示"你确定要退出吗? y/n",必须输入正确的y/n ,否则循环输入指令,直到输入y 或者 n
  7. 在收益入账和消费时,判断金额是否合理,并给出相应的提示

3. 实现零钱通主要功能

3.1 写一个菜单

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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public static void main(String[] args) { // define related variables Scanner scanner = new Scanner(System.in); String key = ""; boolean loop = true; do { System.out.println("==========Small Change Menu=========="); System.out.println("ttt1 show change details"); System.out.println("ttt2 income entry"); System.out.println("ttt3 consumption"); System.out.println("ttt4 exit"); System.out.println("please choose 1-4:"); key = scanner.next(); //use switch to control switch (key) { case "1": System.out.println("1 show change details"); break; case "2": System.out.println("2 income entry"); break; case "3": System.out.println("3 consumption"); break; case "4": System.out.println("4 exit"); System.out.println(" you have exit the SmallChange"); loop = false; break; default: System.out.println("err please choose again"); } } while (loop); }

3.2 零钱通明细

思路

(1) 可以把收益入账和消费保存到数组

(2) 可以使用对象

(3) 简单的话可以使用String拼接

这里直接采取第三种方式

改变一下switch的case1

复制代码
1
String details = "-----------------零钱通明细------------------";
复制代码
1
2
3
case "1": System.out.println(details); break;

3.3 收益入账

完成收益入账

定义新的变量

复制代码
1
2
3
4
5
double money = 0; double balance = 0; Date date = null; // date 是 java.util.Date 类型,表示日期 //if you don't like the default format of displaying date ,change it with sdf SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");

修改switch中的case2

复制代码
1
2
3
4
5
6
7
8
9
System.out.print("Income recorded amount:"); money = scanner.nextDouble(); //the range of money should be limited //give the hits of the illegal money value 就直接break balance += money; //拼接收益入账信息到 details date = new Date(); //Get the current time details += "n收益入账t+" + money + "t" + sdf.format(date)+ "t" + balance; break;

效果演示:

保证入账>0

3.4 消费

定义新的变量

复制代码
1
String note = "";

修改switch中的case3

复制代码
1
2
3
4
5
6
7
8
9
10
11
case "3": System.out.print("Consumption amount:"); money = scanner.nextDouble(); //the range of money should be limited System.out.print("Consumption Description:"); note = scanner.next(); balance -= money; //Splicing consumption information to details date = new Date();//Get the current time details += "n"+note + "t-" + money + "t" + sdf.format(date) + "t" + balance; break;

效果演示:

3.5 用户退出改进

给出确认,是否要退出

用户输入4退出时,给出提示"你确定要退出吗? y/n",必须输入正确的y/n ,

否则循环输入指令,直到输入y 或者 n

(1) 定义一个变量 choice, 接收用户的输入

(2) 使用 while + break, 来处理接收到的输入时 y 或者 n

(3) 退出while后,再判断choice是y还是n ,就可以决定是否退出

(4) 建议一段代码完成功能,不混在一起

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
case "4": String choice = ""; while (true) { //The user is required to enter Y / N, otherwise it will cycle all the time System.out.println("你确定要退出吗? y/n"); choice = scanner.next(); if ("y".equals(choice) || "n".equals(choice)) { break; } //scheme 2 // if("y".equals(choice)) { // loop = false; // break; // } else if ("n".equals(choice)) { // break; // } } if (choice.equals("y")) { loop = false; } break;

效果演示:

3.6 改进金额判断

收入时

复制代码
1
2
3
4
if (money <= 0) { System.out.println("The income entry amount must be greater than 0"); break; }

支出时

复制代码
1
2
3
4
if (money <= 0 || money > balance) { System.out.println("Your consumption amount should be 0-" + balance); break; }

效果演示

4. 面向过程版实现

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class SmallChangeSys { // try to reduce complexity to simplicity //1. First complete the display menu, // and you can select the menu to give the corresponding prompt //2. Complete change details //3. Complete income entry //4. consumption //5. exit //6. When the user enters 4 to exit, the prompt "are you sure you want to exit? // Y / N" will be given. You must enter the correct Y / N, // otherwise cycle the input instruction until y or n is entered //7. When the income is recorded and consumed, // judge whether the amount is reasonable and give corresponding tips public static void main(String[] args) { // define related variables Scanner scanner = new Scanner(System.in); String key = ""; boolean loop = true; //2. complete the change details //(1) 可以把收益入账和消费,保存到数组 (2) 可以使用对象 (3) 简单的话可以使用String拼接 String details = "-----------------Change details------------------"; //3. complete income entry double money = 0; double balance = 0; Date date = null; // date 是 java.util.Date 类型,表示日期 //if you don't like the default format of displaying date ,change it with sdf SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); //4. consumption //define new variable,store the reason why consume String note = ""; do { System.out.println("n==========Small Change Menu=========="); System.out.println("ttt1 show change details"); System.out.println("ttt2 income entry"); System.out.println("ttt3 consumption"); System.out.println("ttt4 exit"); System.out.println("please choose 1-4:"); key = scanner.next(); //use switch to control switch (key) { case "1": System.out.println(details); break; case "2": System.out.print("Income recorded amount:"); money = scanner.nextDouble(); //the range of money should be limited //commonly use <if> to judge the wrong situation make the code easy to read //give the hits of the illegal money value 就直接break if (money <= 0) { System.out.println("The income entry amount must be greater than 0"); break; } balance += money; //Splicing consumption information to details date = new Date(); //Get the current time details += "n" + "Income " + "t" + "+" + money + "t" + sdf.format(date) + "t" + balance; break; case "3": System.out.print("Consumption amount:"); money = scanner.nextDouble(); //the range of money should be limited if (money <= 0 || money > balance) { System.out.println("Your consumption amount should be 0-" + balance); break; } System.out.print("Consumption Description:"); note = scanner.next(); balance -= money; //Splicing consumption information to details date = new Date();//Get the current time details += "n" + note + "t-" + money + "t" + sdf.format(date) + "t" + balance; break; case "4": String choice = ""; while (true) { //The user is required to enter Y / N, otherwise it will cycle all the time System.out.println("你确定要退出吗? y/n"); choice = scanner.next(); if ("y".equals(choice) || "n".equals(choice)) { break; } //scheme 2 // if("y".equals(choice)) { // loop = false; // break; // } else if ("n".equals(choice)) { // break; // } } if (choice.equals("y")) { loop = false; } break; default: System.out.println("err please choose again"); } } while (loop); System.out.println(" you have exit the SmallChange"); } }

5. 优化成OOP版

很多东西可以直接复制过来变成方法,把原来的改过来是简单的

5.1 实现OOP版

那么先有一个执行的主类SmallChangeSysApp

复制代码
1
2
3
4
5
6
//Call the object directly and display the main menu public class SmallChangeSysApp { public static void main(String[] args) { new SmallChangeSysOOP().mainMenu(); } }

还有一个类专门是对象,我们叫它为SmallChangeSysOOP

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; /** * This class is used to complete various functions of zero money pass * Using OOP (object-oriented programming) * Each function corresponds to a method */ public class SmallChangeSysOOP { //basic variables boolean loop = true; Scanner scanner = new Scanner(System.in); String key = ""; //display details String details = "-----------------Change details------------------"; //income double money = 0; double balance = 0; Date date = null; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // consume String note = ""; public void mainMenu() { do { System.out.println("n================Small Change Menu(OOP)==============="); System.out.println("ttt1 show change details"); System.out.println("ttt2 income entry"); System.out.println("ttt3 consumption"); System.out.println("ttt4 exit"); System.out.println("please choose 1-4:"); key = scanner.next(); switch (key) { case "1": this.detail(); break; case "2": this.income(); break; case "3": this.pay(); break; case "4": this.exit(); break; default: System.out.println("Choose the wrong number please choose again"); } } while (loop); } public void detail() { System.out.println(details); } public void income() { System.out.print("Income recorded amount:"); money = scanner.nextDouble(); if (money <= 0) { System.out.println("The income entry amount must be greater than 0"); return; //exit and do not execute next sentence.change break to return } balance += money; date = new Date(); details += "nIncome t+" + money + "t" + sdf.format(date) + "t" + balance; } public void pay() { System.out.print("Consumption amount:"); money = scanner.nextDouble(); if (money <= 0 || money > balance) { System.out.println("Your consumption amount should be 0-" + balance); return; } System.out.print("consumption description:"); note = scanner.next(); balance -= money; date = new Date(); details += "n" + note + "t-" + money + "t" + sdf.format(date) + "t" + balance; } //退出 public void exit() { //When the user enters 4 to exit, the prompt "are you sure you want to exit? // Y / N" will be given. You must enter the correct Y / n String choice = ""; while (true) { System.out.println("are you really gonna exit? y/n"); choice = scanner.next(); if ("y".equals(choice) || "n".equals(choice)) { break; } //scheme 2 // if("y".equals(choice)) { // loop = false; // break; // } else if ("n".equals(choice)) { // break; // } } if (choice.equals("y")) { loop = false; } } }

5.2 OOP的好处

OOP版主函数很简单,只要new这个对象就可以了,关于这个对象的其他方法也好属性也好,不用放在主函数里面,那样在主函数也可以自由加上想加得到内容,未来假如有他人要用,不用把整个文件拷过去,只要把类交给对方即可,这样扩展和可读性大大提升,要加什么功能就再写方法原先的扩展功能很麻烦,要来回切

以上就是Java模仿微信实现零钱通简易功能(两种版本)的详细内容,更多关于Java的资料请关注靠谱客其它相关文章!

最后

以上就是寂寞凉面最近收集整理的关于Java模仿微信实现零钱通简易功能(两种版本)的全部内容,更多相关Java模仿微信实现零钱通简易功能(两种版本)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(153)

评论列表共有 0 条评论

立即
投稿
返回
顶部