Java学习笔记:模拟实现微信零钱通(面向过程和OOP两种方法)

Java学习笔记:模拟实现微信零钱通(面向过程和OOP两种方法),第1张

Java学习笔记:模拟实现微信零钱通(面向过程和OOP两种方法)

 写在前面:本次一个小测验技术范围非常浅,非常适用于像我这样小白的人练习,并深刻体会面向过程和面向对象最直观的区别。

1、面向过程代码实现:

package com.codetest.smallchange;
//自动补全alt+/   快捷注释ctrl+/  删除行ctrl+d  复制行ctrl+alt+向下键
//导入需要的类alt+enter 快速格式化代码ctrl+alt+l  快速运行alt+r
//生成构造器alt+insert  查看类的层次关系ctrl+h  快速定位方法ctrl+b
//自动分配变量名 后面加.var
//模板快捷键 soutm main

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;


public class SmallChangeSys {
    public static void main(String[] args) {
        //定义循环判断变量
        boolean loop = true;
        //定义选择变量
        String choice = null;
        //1、先完成显示菜单,并能够选择
        //2、完成零钱通明细
        //定义零钱通明细变量,其实一开始是看不出来这个的,这是列出总的明细
        //方法一:String拼接
        String detail = "==========零钱通明细==========n";
        //3、完成收益入账
        //定义收益入账中的变量
        double money = 0;//定义收益出入账的钱
        double balance = 0;//定义余额
        Date date = null;//定义日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//日期格式化
        //4、消费
        //定义支出原因变量
        String note = null;
        Scanner scanner = new Scanner(System.in);
        System.out.println("==========零钱通菜单==========");
        System.out.println("tt1 零钱通明细ntt2 收益入账ntt3 消费ntt4 退 t出");
        do {
            System.out.print("请选择(1~4):");
            choice = scanner.next();

            switch (choice) {
                case "1":
                    System.out.println(detail);
                    break;
                case "2":
                    System.out.print("收益入账:");
                    money = scanner.nextDouble();//接收记入的账单金额
                    //此处应该控制money范围
                    //思路:找出不正确的条件,然后给出提示,最后跳出
                    if (money < 0) {
                        System.out.println("收益入账应该大于0元!");
                        break;
                    }
                    date = new Date();
                    balance += money;
                    //这一步如果理解不了,就用debug一步一步调出来
                    detail += "收益入账t+" + money + "t" + sdf.format(date) + "t余额:" + balance + "n";
                    break;
                case "3":
                    System.out.print("消费金额:");
                    money = scanner.nextDouble();//接收支出的账单金额
                    //此处应该控制money范围
                    if (money < 0 ||money>balance) {
                        System.out.println("消费金额应该在0~"+balance+"之间!");
                        break;
                    }
                    date = new Date();
                    balance -= money;
                    System.out.print("消费说明:");
                    note = scanner.next();
                    detail += note + "t-" + money + "t" + sdf.format(date) + "t余额:" + balance + "n";
                    break;
                case "4":
                    //优化  
                    //用户输出4时,给出提示"你确定要退出吗?y/n",要求必须输入y或n,
                    //否则循环输入指令直到y和n
//                    do{
//                        System.out.print("你确定要退出吗?y/n");
//                        //定义一个接收变量key接收指令
//                        char key=scanner.next().charAt(0);
//                        if(key=='y'){
//                            break;
//                        }
//                    }while(true);
                    //上面这段还可以优化
                    //首先判断输入的字符是否是y或是n
                    //定义一个接收变量key接收指令
                    char key;
                    while (true) {
                        System.out.println("你确定要退出吗?y/n");
                        key = scanner.next().charAt(0);
                        if (key == 'y' || key == 'n') {
                            break;
                        }
                    }
                    //然后做出y和n的功能分支
                    if (key == 'y') {
                        System.out.println("退出程序....");
                        loop = false;
                    } else {
                        System.out.println("欢迎回来,请选择你需要选择的服务?");
                    }
                    break;
                default:
                    System.out.println("选择输入有误,请重新输入(1~4):");
            }
        } while (loop);
        System.out.println("欢迎下次使用零钱通!");
    }
}

 2、OOP面向对象

分析功能板块

 

SmallChangeSysOOP类
package com.codetest.smallchange.oop;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;


public class SmallChangeSysOOP {
    Scanner scanner = new Scanner(System.in);
    //定义循环判断变量
    boolean loop = true;
    //定义选择变量
    String choice = null;
    //1、先完成显示菜单,并能够选择
    //2、完成零钱通明细
    //定义零钱通明细变量,其实一开始是看不出来这个的,这是列出总的明细
    //方法一:String拼接
    String detail = "==========零钱通明细==========n";
    //3、完成收益入账
    //定义收益入账中的变量
    double money = 0;//定义收益出入账的钱
    double balance = 0;//定义余额
    Date date = null;//定义日期
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//日期格式化
    //4、消费
    //定义支出原因变量
    String note = null;
    //1、先完成显示菜单,并能够选择
    public void mainMenu(){
        System.out.println("==========零钱通菜单(OOP)==========");
        System.out.println("tt1 零钱通明细ntt2 收益入账ntt3 消费ntt4 退 t出");
        do {
            System.out.print("请选择(1~4):");
            choice = scanner.next();

            switch (choice) {
                case "1":
                    this.detail();
                    break;
                case "2":
                    this.income();
                    break;
                case "3":
                    this.pay();
                    break;
                case "4":
                    this.exit();
                    break;
                default:
                    System.out.println("选择输入有误,请重新输入(1~4):");
            }
        } while (loop);
    }
    //2、完成零钱通明细
    public void detail(){
        System.out.println(detail);
    }
    //3、完成收益入账
    public void income(){
        System.out.print("收益入账:");
        money = scanner.nextDouble();//接收记入的账单金额
        //此处应该控制money范围
        //思路:找出不正确的条件,然后给出提示,最后跳出
        if (money < 0) {
            System.out.println("收益入账应该大于0元!");
            return;//退出方法不再执行后面的代码
        }
        date = new Date();
        balance += money;
        //这一步如果理解不了,就用debug一步一步调出来
        detail += "收益入账t+" + money + "t" + sdf.format(date) + "t余额:" + balance + "n";
    }
    //4、消费
    public void pay(){
        System.out.print("消费金额:");
        money = scanner.nextDouble();//接收支出的账单金额
        //此处应该控制money范围
        if (money < 0 || money > balance) {
            System.out.println("消费金额应该在0~"+balance+"之间!");
            return;
        }
        date = new Date();
        balance -= money;
        System.out.print("消费说明:");
        note = scanner.next();
        detail += note + "t-" + money + "t" + sdf.format(date) + "t余额:" + balance + "n";
    }

    //5、退出
    public void exit(){
        char key;
        while (true) {
            System.out.println("你确定要退出吗?y/n");
            key = scanner.next().charAt(0);
            if (key == 'y' || key == 'n') {
                break;
            }
        }
        //然后做出y和n的功能分支
        if (key == 'y') {
            System.out.println("退出程序....");
            loop = false;
        } else {
            System.out.println("欢迎回来,请选择你需要选择的服务?");
        }
    }

}

SmallChangeSysApp类
package com.codetest.smallchange.oop;


public class SmallChangeSysApp {
    public static void main(String[] args) {
        SmallChangeSysOOP smallChangeSysOOP = new SmallChangeSysOOP();
        smallChangeSysOOP.mainMenu();
    }
}

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5684472.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存