第一个简单的小项目

先使用面向过程编写,再用面向对象重写

零钱通项目需求

具体界面如下图

image-20221109170656388

一共包含4个功能

1.零钱通明细:可以查询入账+消费的流水

2.收益入账:对余额进行充值,输入金额,输出明细

3.消费:顾名思义就是花钱,输入用途和金额,输出明细,并且对金额进行验证,不能出现透支等情况

4.退出:写一个是否确认退出输入y/n的条件

如下图

image-20221109171009202

面向过程编写

创建一些基本的属性

因为刚入门所以采用比较简单的字符串拼接方法来显示流水

Boolean loop=true;		//判断是否退出程序
Scanner sc=new Scanner(System.in);
String key="";			//接收数字选择菜单
String details="---------------零钱通明细---------------\n";
double money=0;			//接收金额
double balance=0;		//余额
String note="";			//消费用途

因为流水要显示日期,所以临时浅学了个Data

Date date=null;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");		//日期格式化

写一个do-while来嵌套整个系统

do {
    
}while (loop);

输出主菜单并且获取用户选择Key

System.out.println("===============零钱通菜单===============");
System.out.println("\t\t\t1 零钱通明细");
System.out.println("\t\t\t2 收益入账");
System.out.println("\t\t\t3 消费");
System.out.println("\t\t\t4 退    出");
System.out.print("请选择(1-4):");

switch语句来分别实现4个菜单选项的功能

switch (key){
    case "1":
    case "2":
    case "3":
    case "4":
    default:
}

功能1:零钱通明细

因为采用字符串拼接所以明细相对简单,直接输出字符串details即可

case "1":
    System.out.println(details);
    break;

功能2:收益入账

虽然比较长但其实都是一些简单的功能,if用来判断充值是否为正数,主要就是details拼接的问题

case "2":
    System.out.print("收益入账金额:");
    money=sc.nextDouble();		//接收入账金额
    while (true) {
        if (money<=0){			//金额验证是否有效
            System.out.println("输入有误,请重新输入");
            System.out.print("收益入账金额:");
            money=sc.nextDouble();
        }
        else {
            break;
        }
    }
    balance+=money;				//余额计算
    date=new Date();			//时间获取
    details+="\n收益入账\t+"+money+"\t"+sdf.format(date)+"\t"+balance;	//拼接字符串
    System.out.println(details);
    break;

功能3:消费

其实功能3和功能2基本一致,复制过来加个用途就能套用,if判断条件改为判断余额够不够

case "3":
    System.out.print("消费用途:");
    note=sc.next();
    System.out.print("消费金额:");
    money=sc.nextDouble();
    while (true) {
        if (money>balance){
            System.out.println("余额不足,请重新输入");
            System.out.print("消费用途:");
            note=sc.next();
            System.out.print("消费金额:");
            money=sc.nextDouble();
        }
        else {
            break;
        }
    }
    balance-=money;
    date=new Date();
    details+="\n"+note+"\t-"+money+"\t"+sdf.format(date)+"\t"+balance;
    System.out.println(details);
    break;

功能4:退出

常规的退出,利用前面的loop来退出零钱通系统

System.out.println("是否确认退出,请输入y/n");
note=sc.next();
while(true){
    if (note.equals("y")){
        loop=false;
        break;
    }
    else if(note.equals("n")){
        loop=true;
        break;
    }
    else {
        System.out.println("输入有误,请重新输入");
        note=sc.next();
    }
}
break;

程序退出

美观一点加一句退出项目

System.out.println("===========选择退出了零钱通项目===========");

面向对象编写

下面用OOP来写,其实直接照搬就好了

创建属性

同样的创建属性就不用过多赘述了

创建方法

写了四个方法:

details:输出流水

income:本质就是功能2的代码,下同

pay:功能3

exit:功能4

这里要注意的一点是方法里的退出是return不是break

所以稍加更改就可以使用了

创建主类

再创建一个主类SmallchangeApp,完成对SmallChangeSysOOP的调用即可

image-20221109174850541

总结

OOP更加灵活,用方法来管理各个功能,更容易维护和拓展