哈喽我来了~
昨天今天抽时间写了个零钱通,跟着韩老师写的,自己先动手敲,然后又根据他讲的改,感兴趣的可以借鉴一下,发现问题的可以直接私信我跟我说一下哪里出了问题或者更好的思路,我是个很好说话的小菇凉哟。
题目:
使用Java开发零钱通项目,可以完成收益入账,消费,查看明细,退出系统等功能.
改进:
1.用户输入4退出时,给出提示你确定要退出吗? y/n”,必须输入正确的y/n,否则循环输入指令,直到输入y或者n。
2. 在收益入账和消费时,判断金额是否合理,并给出相应的提示。
package com;
import java.text.SimpleDateFormat;//可以用于日期格式化的
import java.util.Date;//日期
import java.util.Scanner;//键盘输入
import java.util.SimpleTimeZone;//
public class SmallChangeSys {
public static void main(String[] args) {
boolean loop = true;//1用来控制菜单显示的
Scanner scanner = new Scanner(System.in);
String key = "";
//2完成零钱通明细,使用String拼接
String details = "-------------------零钱通明细---------------------";
//3完成收益入账,完成功能驱动增加新的变化和代码,定义新的变量
double money = 0;
double banlance = 0;
Date date = null;//date是java.util.Date类型,表示日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化的
//4消费,定义新变量,保存消费的原因
String note = "";
do{
System.out.println("===============零钱通菜单===============");
System.out.println("ttt1零钱通明细");
System.out.println("ttt2收益入账");
System.out.println("ttt3消费");
System.out.println("ttt4退 出");
System.out.println("请选择(1-4)");
System.out.println("===============零钱通明细===============");
key = scanner.next();
//使用switch分支控制
switch (key){
case"1":
System.out.println(details);
break;
case"2":
System.out.println("收益入账金额:");
money = scanner.nextDouble();
//money的值应该校验
if(money <= 0){
System.out.println("金额范围应>0");
break;
}
banlance = + money;
//拼接收益入账信息到details
date = new Date();
// System.out.println(sdf.format(date));
details += "n收益入账t+" + money + "t" + sdf.format(date) + "余额" + "t" +banlance;
break;
case"3":
System.out.println("消费金额");
money = scanner.nextDouble();
//money的值应该校验
//money的值应该校验
if(money <= 0 || money > banlance){
System.out.println("消费金额应>0且在余额范围内");
break;
}
System.out.println("消费说明");
note = scanner.next();//
banlance -= money;
//拼接消费到details
date = new Date();
// System.out.println(sdf.format(date));
details += "n消费t+" + note + "t-"+ money + "t"+ sdf.format(date) + "余额" + "t" +banlance;
break;
case"4":
//定义 choice接收用户的输入
//while+break来处理接收到的信息
//退出while后,再判断是y/n
//建议一小段代码完成一个功能,尽量不要混在一起
String choice = "";
while (true){//要求用户必须输入y/n,否则一直循环
System.out.println("你确定要退出吗?y/n");
choice = scanner.next();
if("y".equals(choice)||"n".equals(choice)){
break;
}
// if(choice.equals("y")){
// loop = false;
// System.out.println("已退出菜单");
// }else if(choice.equals("n")){
// break;
// }
}
if(choice.equals("y")){
loop = false;
System.out.println("已退出菜单");
}else if(choice.equals("n")){
break;
}
}
}while (loop);
}
}
3. 将面向过程的代码修改成面向对象的,编写SmallChangeSysOOPjava类,并使用SmallChangeSysApp.java完成测试。
package Opp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChangeSysOOP {
//属性
boolean loop = true;//1用来控制菜单显示的
Scanner scanner = new Scanner(System.in);
String key = "";
//2完成零钱通明细,使用String拼接
String details = "-------------------零钱通明细---------------------";
//3完成收益入账,完成功能驱动增加新的变化和代码,定义新的变量
double money = 0;
double banlance = 0;
Date date = null;//date是java.util.Date类型,表示日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化的
//4消费,定义新变量,保存消费的原因
String note = "";
public void mainMenu(){
do{
System.out.println("===============零钱通菜单===============");
System.out.println("ttt1零钱通明细");
System.out.println("ttt2收益入账");
System.out.println("ttt3消费");
System.out.println("ttt4退 出");
System.out.println("请选择(1-4)");
System.out.println("===============零钱通明细===============");
key = scanner.next();
//使用switch分支控制
switch (key){
case"1":
this.detail();
case"2":
this.income();
case"3":
this.payfor();
case"4":
this.tuichu();
}
}while (loop);
}
public void detail(){
System.out.println(details);
}
public void income(){
System.out.println("收益入账金额:");
money = scanner.nextDouble();
//money的值应该校验
if(money <= 0){
System.out.println("金额范围应>0");
return;
}
banlance = + money;
//拼接收益入账信息到details
date = new Date();
// System.out.println(sdf.format(date));
details += "n收益入账t+" + money + "t" + sdf.format(date) + "余额" + "t" +banlance;
}
public void payfor(){
System.out.println("消费金额");
money = scanner.nextDouble();
//money的值应该校验
//money的值应该校验
if(money <= 0 || money > banlance){
System.out.println("消费金额应>0且在余额范围内");
return;
}
System.out.println("消费说明");
note = scanner.next();//
banlance -= money;
//拼接消费到details
date = new Date();
// System.out.println(sdf.format(date));
details += "n消费t+" + note + "t-"+ money + "t"+ sdf.format(date) + "余额" + "t" +banlance;
}
public void tuichu(){
String choice = "";
while (true){//要求用户必须输入y/n,否则一直循环
System.out.println("你确定要退出吗?y/n");
choice = scanner.next();
if("y".equals(choice)||"n".equals(choice)){
break;
}
// if(choice.equals("y")){
// loop = false;
// System.out.println("已退出菜单");
// }else if(choice.equals("n")){
// break;
// }
}
if(choice.equals("y")){
loop = false;
System.out.println("已退出菜单");
}else if(choice.equals("n")){
return;
}
}
}
package Opp;
public class SmallChangeSysApp {
public static void main(String[] args) {
new SmallChangeSysOOP().mainMenu();
}
}
加一点知识点方便找到:
断点调试
在断点调试过程中,是运行状态,是以对象的运行类型来执行的.
1.断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一 行就会停住,然后可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。进行分析从而找到这个Bug 2.断点调试是程序员必须掌握的技能。3.断点调试也能帮助我们查看java底层源代码的执行过程,提高Java水平。
快捷键
F7(跳入) F8(跳过) shift+ F8(跳出) F9(resume,执行到下一一个断点)
F7:跳入方法内
F8:逐行执行代码
shift+ F8: 跳出方法

如何追源码:快捷键F7


finalize方法
韩老师说单纯为了应付面试的
1.当对象被回收时,系统自动调用该对象的finalize方法。子类可以重写该方法做一些释放资源的操作 2.什么时候被回收:当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁该对象前,会先调用finalize方法。3.垃圾回收机制的调用,是由系统来决定(即有自己的GC算法),也可以通过 System.gc()主动触发垃圾回收机制,
啊就到这了,晚安。
原文始发于微信公众号(易小琳):零钱通项目(java实现)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/251554.html