最近学习了Javase的一些基础知识,由于一些原因学的比较慢(其实归根结底可能是我太懒了😅)
我看的课程是小po站上面的韩顺平老师,我看后的感受只能说:对小白真的太好啦,讲的非常的详细。
这不,我也是看老师的课程,跟这写了零钱通项目(虽然这个比较简单,但我觉得对于新手来说刚刚好),但我也学到了不少。下面是要求。
这里我就来解释一下这个项目它具体有上面需求吧:
1.这个小项目我们需要有入账(也就是收益入账)
2.有收账也就会有消费(这里也就是真功夫,我懒得打字,我就在我自己的代码里面改成了消费金额)
3.有收入和消费,那么我们肯定每次都会有记录呀(零钱通明细)
4.退出
完善需求:
5.这里韩老师想的很周到:首先,那就是我们存钱不能存负数吧;
其次,我们消费多少总要在余额的范围之内吧。
退出,我们也需要避免用户一下子就退出去了,我们要来个是否确认。
好了,功能差不多就是介绍在这里。
接下来,废话不多说,我们直接上代码!
这里是我们类里面的一些属性:
一些简单的属性,看名字和我的注释应该能够知道他们的用途,这里我就说两个:
Date date = null;(这个我们不是有消费记录的实际嘛,这个的作用就是来获取当前时间的) SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");(因为我们所获取的时间可能不是我们需求中的那种格式,所以这个的作用也就是将我们获取的时间对其来个格式化)。
boolean loop = true;
Scanner scanner = new Scanner(System.in);
int key=0;
//1.零钱通明细
//实现有三个思路吧(其实本人只有两个思路,1,3)
//韩老师:1.用数组进行储存;2.用对象;3.用string进行拼接(其实哈,我感觉还能用集合)
//这里我们用的是字符串的拼接
String details = "-------------零钱通明细-------------";
//2.收益入账
double money;
double balance = 0;//余额
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//3.消费
//String note = " ";//记录消费出处
//4.退出系统的优化
//5.我们现在还需要判断他存钱和用钱是否正确
String tuichu = " ";
1.入账
这里我们从的是第三种比较简单的字符串拼接(就是这里的details)来完成信息的加入(由于我已经学了C语言嘛,我也知道这个的缺陷,不像C那样,我还不知道如何删改呢,不过慢慢来嘛)
//收益到账
public void income(){
System.out.println("2 收益入账");
System.out.println("请输入你存入的金额:");
money = scanner.nextDouble();
if(money<=0){
System.out.println("存入的钱不能少于0!");
return ;
}
balance += money;
date = new Date();//获取当前的时间
//这就是一个简单的字符串的拼接了
details +="\n收益入账 "+ "+" + money +"\t "+ sdf.format(date)/*将时间格式化*/ +"\t余额:"+ balance;
}
2.入账知道了,那么消费也就是类似的了
public void pay(){
System.out.println("3 消费");
// System.out.print("消费记录:");
//note = scanner.next();
System.out.print("消费金额:");
money = scanner.nextInt();
if(money<=0 || money > balance){
System.out.println("消费出错了/余额不足了");
return ;
}
balance -=money;
date = new Date();//获取当前的时间
//这就是一个简单的字符串的拼接了
details +="\n消费记录 " + "-" + money +"\t "+ sdf.format(date)/*将时间格式化*/ +"\t余额:"+ balance;
}
相信你们也看到了,我们这里和入账一样多了一个判断,其实这就是完善他们。
这里我也学到了韩老师的一个思路:我们不能老是往上什么条件下可以进行,如果反过来想什么情况下不可以进行(可能会有奇效哦 )
3.零钱通明细
在C语言中,现在的我很容易就知道数组,链表。
但是在Java里面我会以下的三种想法:
//实现有三个思路吧(其实本人只有两个思路,1,3) //韩老师:1.用数组进行储存;2.用对象;3.用string进行拼接(其实哈,我感觉还能用集合) //这里我们用的是字符串的拼接
public void details(){
System.out.println(details);
}
其实这里也很简单,我们用的是字符串的拼接嘛,我们就是每次调用的时候,将字符串输出来就好了。
4.退出
public void exit(){
while(true){
System.out.println("你确定要退出吗? y/n");
tuichu = scanner.next();
if(tuichu.equals("y")||tuichu.equals("n")){
break;
}
}
if(tuichu.equals("y")){
//这里真的是一个很秒的点,我们需要考虑如何退出这个循环,我们就可以在四退出的
//时候,直接将loop赋值false,这样就可以退出循环了
System.out.println("成功退出零钱通系统");
loop=false;
}
}
退出功能挺简单的,这里我也不多赘述了,有问题的话,评论区可以提问哦。
现在我们又回到了像C语言一样,整合!
其实我觉得这整合应该算是最简单的东西了,只要思路捋清楚就行。
public void MainMenu(){
do{
System.out.println("\n============零钱通菜单(OPP)============");
System.out.println("\t\t\t1 零钱通明细");
System.out.println("\t\t\t2 收益入账");
System.out.println("\t\t\t3 消费");
System.out.println("\t\t\t4 退 出");
// loop=false;
System.out.print("请选择(1-4):");
key = scanner.nextInt();
switch (key){
case 1: this.details();
break;
case 2: this.income();
break;
case 3: this.pay();
break;
case 4: this.exit();
break;
default:
System.out.println("输入错误了,请重新输入:");
}
}while (loop);
}
由于Java是面向对象的编程语言嘛,我们上面就是去实现了他的一个功能类,
我们需要使用,还得重新创建一个类,来调用这里面的方法。
public class smallchangeSysOppAPP {
public static void main(String[] args) {
new smallchangeSysOpp().MainMenu();
}
}
这也就涉及到new一个对象啦!
本次分享就到此结束啦,欢迎大家来交流!