做水果蔬菜生意网站,网站制作的收费,上海建章汽车服务有限公司,android开发工具箱专业版一、说明
博客内容#xff1a;B站韩顺平老师的视频#xff0c;以及代码的整理。此项目分为两个版本#xff1a;
面向过程思路实现面向对象思路实现 韩老师视频地址#xff1a;【【零基础 快速学Java】韩顺平 零基础30天学会Java】 https://www.bilibili.com/video/BV1fh4…一、说明
博客内容B站韩顺平老师的视频以及代码的整理。此项目分为两个版本
面向过程思路实现面向对象思路实现 韩老师视频地址【【零基础 快速学Java】韩顺平 零基础30天学会Java】 https://www.bilibili.com/video/BV1fh411y7R8/?p342share_sourcecopy_webvd_source656bca56998f14127313f0283f22ac0a 【注意】仅限学习如有侵权请联系本人删除。
项目实现–面向过程思路
先贴代码项目的完整代码如下
package smallchange;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;/*** author cdj* Version1.0*/
public class SmallChangeSys {// 1. 先完成显示菜单并可以选择菜单给出对应提示// 2. 完成零钱通明细// 3. 完成收益入账// 4. 完成消费// 5. 退出// 6. 用户输入4退出时给出提示”你要退出吗 y/n“必须要正确的输入y/n否则循环输入指令直到输入y 或者 n// 7. 在收益入账和消费时判断金额是否合理并给出相应的提示public static void main(String[] args) {// 定义相关的变量boolean loop true;Scanner sc new Scanner(System.in);String key ;// 2.完成零钱通明细// (1) 可以把收益入账和消费保存到数组 2可以使用对象 3简单的会可以使用String拼接String detils ------------------零钱通明细--------------------;// 3. 完成收益入账完成功能驱动程序员增加新的变化和代码// 定义新的变量double money 0;double balance 0;Date date null; // data 是 java.util.Data类型表示日期SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm); // 可以用于日期格式化的// 4. 消费// 定义新的变量保存消费的原因String note null;do{System.out.println(\n零钱通菜单);System.out.println(\t\t\t\t\t1 零钱通明细);System.out.println(\t\t\t\t\t2 收益入账);System.out.println(\t\t\t\t\t3 消费);System.out.println(\t\t\t\t\t4 退 出);System.out.print(请选择(1-4): );key sc.nextLine();// 使用 switch 分支控制switch (key){case 1:System.out.println(detils);break;case 2:System.out.print(收益入账金额);money sc.nextDouble();// 清空输入缓冲区sc.nextLine();// money 的值应该校验// 找出不正确的金额条件然后给出提示就直接breakif(money 0){System.out.println(收益入账金额需要大于0);break;}balance money;// 获取当前日期date new Date();// 拼接收益入账信息到detailsdetils \n收益入账\t money \t sdf.format(date) \t balance;break;case 3:System.out.print(收益消费金额);money sc.nextDouble();sc.nextLine(); // 清空输入缓冲区// money 的值应该校验 TODO// 找出金额不正确的情况if(money 0 || money balance){System.out.println(你的消费金额应该在 0- balance);break;}System.out.print(消费说明: );note sc.next();sc.nextLine();balance - money;// 拼接消费信息到detailsdate new Date(); // 获取到当前时间detils \n note \t- money \t sdf.format(date) \t balance;break;case 4:// 用户输入4退出时给出提示”你要退出吗 y/n“必须要正确的输入y/n// (1) 定义一个变量 choice接收用户的输入// (2) 使用 while break来处理接收的输入时 y 或者 n// (3) 退出while后再判断choice是y还是n就可以决定是否退出。// (4) 建议一段代码完成一个小功能尽量不要混在一起String choice ;while (true) { // 要求用户必须输入 y/n,否则就一直循环System.out.println(你确定要退出吗 y/n);choice sc.nextLine();if (y.equals(choice) || n.equals(choice)) {break;}}// 当用户退出后再进行判断if (choice.equals(y)) {loop false;}break;default:System.out.println(选择有误请重新选择);}}while(loop);System.out.println(------------------退出了零钱通项目------------------);}
}
代码思路
先看一下项目需求资料来源【【零基础 快速学Java】韩顺平 零基础30天学会Java】 https://www.bilibili.com/video/BV1fh411y7R8/?p335share_sourcecopy_webvd_source656bca56998f14127313f0283f22ac0a 首先先理一下需要完成的几个功能
界面显示零钱通明细收益入账消费退出
将这几个功能分别完成一个代码块只实现一个功能
1.界面显示
在界面显示的时候我们需要完成的任务有以下两个
(1 完成显示菜单(2 可以选择菜单并给出对应提示 关于任务(1)我们可以考虑直接使用Println语句将菜单打印出来: System.out.println(\n零钱通菜单);System.out.println(\t\t\t\t\t1 零钱通明细);System.out.println(\t\t\t\t\t2 收益入账);System.out.println(\t\t\t\t\t3 消费);System.out.println(\t\t\t\t\t4 退 出);实现了任务1之后我们需要考虑的就是如何使得我们可以根据提示进行选择。那我们就需要去思考哪个语句可以提供选择功能很自然的想到了switch语句。先看一下switch语句的语法
switch (expression) {case value1:// 当 expression 的值等于 value1 时执行这里的代码// 可以有多行代码break;case value2:// 当 expression 的值等于 value2 时执行这里的代码// 可以有多行代码break;// 可以有更多的 case 语句default:// 当 expression 的值与所有 case 不匹配时执行这里的代码
}由switch语法可以得出我们需要定义一个expression让我们去选择哪条case语句。根据菜单给的提示我们选择定义一个String类型的变量去存储我们的选择。由于我们需要去输入我们的选择那我们就需要一个输入的功能Scanner。 由以上分析我们就可以搭建一个程序框架
public class SmallChangeSys {// 1. 先完成显示菜单并可以选择菜单给出对应提示public static void main(String[] args) {// 定义相关的变量Scanner sc new Scanner(System.in);String key ;System.out.println(\n零钱通菜单);System.out.println(\t\t\t\t\t1 零钱通明细);System.out.println(\t\t\t\t\t2 收益入账);System.out.println(\t\t\t\t\t3 消费);System.out.println(\t\t\t\t\t4 退 出);System.out.print(请选择(1-4): );key sc.nextLine();// 使用 switch 分支控制switch (key){case 1:// TODObreak;case 2:// TODObreak;case 3:// TODObreak;case 4:// TODObreak;default:// TODObreak;}
}
上述代码能让我们完成任务1和任务2但是它只能执行一次选择一个功能。我们需要多次执行而且考虑到不管什么情况都会执行一次。那就想到do while。先看一下do while的语法
do {// 循环体代码块
} while (condition);
while 关键字后面跟着一个循环条件。只要循环条件为 true循环将继续执行否则循环终止。为了使我们退出循环的时候方便这里我们选择定义一个bool类型的变量loop。当我们需要退出时只需要将它置为false即可。将上述代码修改
public class SmallChangeSys {// 1. 先完成显示菜单并可以选择菜单给出对应提示public static void main(String[] args) {// 定义相关的变量Scanner sc new Scanner(System.in);String key ;boolean loop true;do {System.out.println(\n零钱通菜单);System.out.println(\t\t\t\t\t1 零钱通明细);System.out.println(\t\t\t\t\t2 收益入账);System.out.println(\t\t\t\t\t3 消费);System.out.println(\t\t\t\t\t4 退出);System.out.print(请选择(1-4): );key sc.nextLine();// 使用 switch 分支控制switch (key){case 1:// 零钱通明细// TODObreak;case 2:// 收益入账// TODObreak;case 3:// 消费// TODObreak;case 4:// 退出// TODObreak;default:// TODObreak;}while (loop) }
}这样整个程序的框架就已经搭建好了。下面使用代码块分别实现各个功能。
2. 零钱通明细
我们需要实现下图功能那我们就需要一个变量进行显示。实现的方式有三种
把收入入账和消费保存到数组数组扩容比较麻烦使用对象使用String拼接 此处考虑使用String进行拼接所以需要定义一个String类型的变量
String detils ------------------零钱通明细--------------------;在定义完变量后我们需要把它放入菜单的选择中case1当我们需要查看明细时只需要将这个字符串打印出来即可在后续操作过程中有可能会修改字符串。
case 1:System.out.println(detils);break;3.收益入账
首先需要一个变量用来存储收益所以先定义一个存储收益的变量money:
double money 0;我们的代码中已经有一个sc用于交互所以money的值可以直接由我们输入。但是在编写代码过程中我发现如果没有清除缓存的话代码会直接跳转到switch中的defalut语句所以在输入money加入了一个清理缓存的语句
money sc.nextDouble();
sc.nextLine(); // 清空输入缓冲区当我们有收益时我们的余额也会发生改变所以此处我们添加一个存储余额的变量balacnce:
double balance 0;有了balance用来存储余额在实现收益功能的代码块中自然balance money。再看一下打印的信息里面还有一个data信息所以需要添加时间相关的信息
Date date null; // data 是 java.util.Data类型表示日期
SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm); // 可以用于日期格式化的date new Date();因为我们用的时String进行的拼接那么现在要将新增的记录拼接到我们的details中
// 拼接收益入账信息到details
detils \n收益入账\t money \t sdf.format(date) \t balance;注意看拼接的过程中是先拼接了一个\n所以无论最终我们的details有多长它都只是一个变量。 最终收益入账功能实现的代码如下
case 2:System.out.print(收益入账金额);money sc.nextDouble();// 清空输入缓冲区sc.nextLine();// money 的值应该校验// 找出不正确的金额条件然后给出提示就直接breakif(money 0){System.out.println(收益入账金额需要大于0);break;}balance money;// 获取当前日期date new Date();// 拼接收益入账信息到detailsdetils \n收益入账\t money \t sdf.format(date) \t balance;break;除去上述将的内容在其中还添加了检验money值得功能。 其它功能实现方式和上述方式大同小异此处就不再进行书写。
总结
在项目实现过程中首先是分析项目的需求然后根据项目的需求将整个代码的框架搭建出来。在搭建过程中遵循每个代码块实现一个功能并且在需要什么变量的时候就定义什么变量根据实际需求去定义变量。在听课过程中韩老师给的两个建议是十分重要的
一段代码完成一个小功能不要混在一起。找出不正确的条件用来判断而不是找正确的条件。
项目实现–面向对象思路
先贴代码分为两个文件
SmallChangeSysOOP实现各种功能SmallChangeSysAPP调用 SmallChangeSysOPP代码如下
package smallchange.oop;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;/*** author cdj* Version1.0* 完成零钱通的各个功能* 将各个功能对应一个方法*/
public class SmallChangeSysOOP {// 属性boolean loop true;Scanner sc new Scanner(System.in);String key ;String detils ------------------零钱通明细---------------;double money 0;double balance 0;Date date null; // data 是 java.util.Data类型表示日期SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm); // 可以用于日期格式化的String note null;// 显示菜单并可以选择public void mainMenu() {do{System.out.println(\n零钱通菜单);System.out.println(\t\t\t\t\t1 零钱通明细);System.out.println(\t\t\t\t\t2 收益入账);System.out.println(\t\t\t\t\t3 消费);System.out.println(\t\t\t\t\t4 退 出);System.out.print(请选择(1-4): );key sc.nextLine();// 使用 switch 分支控制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(选择有误请重新选择);}}while(loop);}// 零钱通明细public void detail() {System.out.println(detils);}// 完成收益入账public void income() {System.out.print(收益入账金额);money sc.nextDouble();// 清空输入缓冲区sc.nextLine();// money 的值应该校验// 找出不正确的金额条件然后给出提示就直接breakif(money 0){System.out.println(收益入账金额需要大于0);return; // 退出方法不再执行后面的方法}balance money;// 获取当前日期date new Date();// 拼接收益入账信息到detailsdetils \n收益入账\t money \t sdf.format(date) \t balance;}// 消费public void pay() {System.out.print(收益消费金额);money sc.nextDouble();sc.nextLine(); // 清空输入缓冲区// money 的值应该校验 TODO// 找出金额不正确的情况if(money 0 || money balance){System.out.println(你的消费金额应该在 0- balance);return;}System.out.print(消费说明: );note sc.next();sc.nextLine();balance - money;// 拼接消费信息到detailsdate new Date(); // 获取到当前时间detils \n note \t- money \t sdf.format(date) \t balance;}// 退出public void exit() {String choice ;while (true) { // 要求用户必须输入 y/n,否则就一直循环System.out.println(你确定要退出吗 y/n);choice sc.nextLine();if (y.equals(choice) || n.equals(choice)) {break;}}// 当用户退出后再进行判断if (choice.equals(y)) {loop false;System.out.println(------------------退出了零钱通项目------------------);}}
}SmallChangeSysAPP代码如下
package smallchange.oop;/*** author cdj* Version1.0* 调用SmallChangeSysOOP 对象*/
public class SmallChangeSysAPP {public static void main(String[] args) {new SmallChangeSysOOP().mainMenu();}
}在Structure使用alt7打开界面下可以查看OOP类下面的属性和方法 将其中的各个功能封装进OOP类下面的方法中后续我们只用调用它的方法就可以了。对于其它人想用我们的代码或者说后续添加方法都是比面向过程更加方便的。