栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

项目-零钱通

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

项目-零钱通

项目所要建立的思想

(1)化繁为简

1.先完成显示菜单,并可以选择菜单,给出对应提示
2.完成零钱通明细
3.完成收益入账
4.消费
5.退出
6.优化一 用户输入4退出时,给出提示“你确定要退出吗? y/n”, 必须
输入正确的y/n, 否则循环输入指令, 直到输入y 或者 n
7.优化二 在收益入账和消费时,判断金额是否合理,并给出相应的提示

(2)一段代码,完成一个小功能,尽量不要混在一起
                    //(1)定义一个变量choice , 接收用户的输入
                    String choice = "";
                    // (2)使用 while + break, 来处理接收到的输入时 y 或者 n
                    while (true) {
                        System.out.println("你确定要退出吗? y/n");
                        choice = scanner.next();
                        if ("y".equals(choice)) {
                           loop = false;
                           break;
                       } else if ("n".equals(choice)) {
                           break;
                        }    方法二(不是很好,跟white混着使用,代码的阅读性变差)
                    }
(3) 退出while后 , 再判断choice是y 还是n ,就可以决定是否退出
当用户退出while, 进行判断
if ("y".equals(choice) || "n".equals(choice)) {
    break;
}if (choice.equals("y")) {
    loop = false;   //loop控制显示菜单的,loop = false退出零钱通系统
}  //方法一(一段代码,完成一个小功能)
(3)收益入账和消费时,判断金额是否合理,找出不正确的金额的条件,如果仍然有不正确的,则可以过关斩将一般设立关卡
if (money <= 0) {
    System.out.println("收益入账金额 需要 大于 0");
    break;
}
if (money <= 0 || money > balance) {
    System.out.println("你的消费金额 应该在 0-" + balance);
    break;
}
项目所用代码技巧

1.boolean loop = true;        //是否还要循环显示(菜单),默认为true

2.完成零钱通明细

(1)可以把收益入账和消费,保存到数组

(2)可以使用对象

(3)简单的话可以使用String拼接 String details = "-------------零钱通明细-------------"; 收益明细 就是在details 后面进行拼接(叠加)

3.设置现在日期

import java.util.Date;     //引入包,表示当前的日期
import java.text.SimpleDateFormat;//SimpleDateFormat可以用于日期格式化的一个对象

Date date = null;  //date 是 java.util.Date 类型, 表示日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm"); 
date = new Date(); //获取当前日期,倒叙的(国外的);
System.out.println(sdf.format(date));//获取当前日期,正叙的
//format是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。

 4.do-while的使用(至少需要执行一次)

do {//至少需要执行一次

    System.out.println("n=============零钱通明细=============");
    System.out.println("ttt1 零钱通明细");
    System.out.println("ttt2 收益入账");
    System.out.println("ttt3 消     费");
    System.out.println("ttt4 退     出");
............
}while (loop);

5.while (true)死循环,来处理接收到的输入时 y 或者 n

 代码
package com.hspedu.smallchange;

import java.text.SimpleDateFormat;
import java.util.Date;     //引入包,表示当前的日期
import java.util.Scanner;

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;  //是否还要循环显示(菜单),默认为true
        Scanner scanner = new Scanner(System.in);
        String key = ""; //定义用于  接收---请选择(1-4):的哪个键

        //2.完成零钱通明细
        //(1) 可以把收益入账和消费,保存到数组  (2)可以使用对象
        // (3)简单的话可以使用String拼接
        String details = "-------------零钱通明细-------------";
        //收益明细 就是在details 后面进行拼接(叠加)


        //3.完成收益入账   完成功能驱动程序员增加新的变化和代码
        //思路,定义新的变量
        double money = 0;
        double balance = 0;  //余额
        Date date = null;  //date 是 java.util.Date 类型, 表示日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm");

        //4. 消费
        //定义新变量,保存消费的原因
        String note = "";

        do {//至少需要执行一次

            System.out.println("n=============零钱通明细=============");
            System.out.println("ttt1 零钱通明细");
            System.out.println("ttt2 收益入账");
            System.out.println("ttt3 消     费");
            System.out.println("ttt4 退     出");

            System.out.print("请选择(1-4):");
            key = scanner.next();

            //使用switch 分支控制
            switch (key) {
                case "1" :
                 //   System.out.println("1 零钱通明细");
                    System.out.println(details); //优化
                    break;
                case "2" :
                    //System.out.println("2 收益入账");
                    System.out.print("收益入账金额");
                    money = scanner.nextDouble(); //用户输入消费的金额
                    //money 的值范围应该校验 ->  一会儿完善
                    //思路
                    //找出不正确的金额的条件,然后给出提示,就直接break(正难则反)
                    if (money <= 0) {
                        System.out.println("收益入账金额 需要 大于 0");
                        break;
                    }
                    //如果仍然有不正确的条件,则可以就过关斩将一般设立关卡
                    //if() { }
                    balance += money;
                    // 拼接收益入账信息到 details
                    date = new Date(); //获取当前日期,倒叙的(国外的);
                    //SimpleDateFormat sdf = null; //SimpleDateFormat可以用于日期格式化的一个对象
                    //System.out.println(sdf.format(date));
                    //Format是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。

                    details += "n收益入账t+" + money + "t" + sdf.format(date) + "t" + balance;
                     break;
                case "3" :
                  //  System.out.println("3 消费");
                    System.out.print("消费金额:");
                    money = scanner.nextDouble();  //用户输入消费的金额
                    //money 的值范围应该校验  ->  一会儿完善
                    //找出金额不正确的情况
                    if (money <= 0 || money > balance) {
                        System.out.println("你的消费金额 应该在 0-" + balance);
                        break;
                    }
                    System.out.print("消费说明: ");
                    note = scanner.next(); //消费文本说明
                    balance -= money;   //消费   余额-=
                    // 拼接消费信息到 details
                    date = new Date(); //获取当前日期,倒叙的(国外的);
                    details += "n" + note + "tt-" + money + "t" + sdf.format(date) + "t" + balance;
                    break;
                case "4" :
                    //6.优化 用户输入4退出时,给出提示“你确定要退出吗? y/n”, 必须
                    //输入正确的y/n, 否则循环输入指令, 直到输入y 或者 n
                    //思路分析
                    //(1)定义一个变量choice , 接收用户的输入
                    String choice = "";
                    // (2)使用 while + break, 来处理接收到的输入时 y 或者 n
                    while (true) {
                        System.out.println("你确定要退出吗? y/n");
                        choice = scanner.next();
                        if ("y".equals(choice) || "n".equals(choice)) {
                            break;
                        }
//                        if ("y".equals(choice)) {
//                            loop = false;
//                            break;
//                        } else if ("n".equals(choice)) {
//                            break;
//                        }    方法二(不是很好)
                    }
                    // (3) 退出while后 , 再判断choice是y 还是n ,就可以决定是否退出
                    // 当用户退出while, 进行判断
                    if (choice.equals("y")) {
                        loop = false;   //loop控制显示菜单的,loop = false退出零钱通系统
                    }
                   // System.out.println("4 退出");
                    break;
                default:
                    System.out.println("选择有误,请从新选择");
            }

        }while (loop);

        System.out.println("-----退出了零钱通项目----");
    }
}

 

 运行截图

 使用多态,对象OOP完成

简洁,明了

1,2,3,4个小功能直接都引出来方法

 //使用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(details); //优化
}

 直接调用(简洁,快速)

public class SmallChangeSysApp {
    public static void main(String[] args) {
        new SmallChangSysoop().mainMenu();
    }
}
smallchange.oop.java
该类是完成零钱通的各个功能的类使用OOP (面向对象编程)将各个功能对应一个方法
package com.hspedu.smallchange.oop;

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


public class SmallChangSysoop {

    //属性..
    //定义相关的变量
    boolean loop = true;  //是否还要循环显示(菜单),默认为true
    Scanner scanner = new Scanner(System.in);
    String key = ""; //定义用于  接收---请选择(1-4):的哪个键

    //2.完成零钱通明细
    //(1) 可以把收益入账和消费,保存到数组  (2)可以使用对象
    // (3)简单的话可以使用String拼接
    String details = "-------------零钱通明细-------------";
    //收益明细 就是在details 后面进行拼接(叠加)


    //3.完成收益入账   完成功能驱动程序员增加新的变化和代码
    //思路,定义新的变量
    double money = 0;
    double balance = 0;  //余额
    Date date = null;  //date 是 java.util.Date 类型, 表示日期
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm");

    //4. 消费
    //定义新变量,保存消费的原因
    String note = "";


    //先完成显示菜单,并可以选择
    public void mainMenu() {
        //System.out.println("显示零钱通菜单...");
        do {//至少需要执行一次

            System.out.println("n=============选择零钱通明细(oop)=============");
            System.out.println("ttt1 零钱通明细");
            System.out.println("ttt2 收益入账");
            System.out.println("ttt3 消     费");
            System.out.println("ttt4 退     出");

            System.out.print("请选择(1-4):");
            key = scanner.next();

            //使用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(details); //优化
    }

    //完成收益入账
    public  void income() {
        //System.out.println("2 收益入账");
        System.out.print("收益入账金额");
        money = scanner.nextDouble(); //用户输入消费的金额
        //思路
        //找出不正确的金额的条件,然后给出提示,就直接break(正难则反)
        //break要该成 return;
        if (money <= 0) {
            System.out.println("收益入账金额 需要 大于 0");
            //break; 不能用
            return; //退出方法,不在执行后面的代码
        }
        //如果仍然有不正确的条件,则可以就过关斩将一般设立关卡
        //if() { }
        balance += money;
        // 拼接收益入账信息到 details
        date = new Date(); //获取当前日期,倒叙的(国外的);
        //SimpleDateFormat sdf = null; //SimpleDateFormat可以用于日期格式化的一个对象
        //System.out.println(sdf.format(date));
        //Format是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。

        details += "n收益入账t+" + money + "t" + sdf.format(date) + "t" + balance;

    }

    //消费
    public void pay() {
        //  System.out.println("3 消费");
        System.out.print("消费金额:");
        money = scanner.nextDouble();  //用户输入消费的金额
        //money 的值范围应该校验  ->  一会儿完善
        //找出金额不正确的情况
        if (money <= 0 || money > balance) {
            System.out.println("你的消费金额 应该在 0-" + balance);
            return;
        }
        System.out.print("消费说明: ");
        note = scanner.next(); //消费文本说明
        balance -= money;   //消费   余额-=
        // 拼接消费信息到 details
        date = new Date(); //获取当前日期,倒叙的(国外的);
        details += "n" + note + "tt-" + money + "t" + sdf.format(date) + "t" + balance;
    }

    //退出
    public void exit() {
        //6.优化 用户输入4退出时,给出提示“你确定要退出吗? y/n”, 必须
        //输入正确的y/n, 否则循环输入指令, 直到输入y 或者 n
        //思路分析
        //(1)定义一个变量choice , 接收用户的输入
        String choice = "";
        // (2)使用 while + break, 来处理接收到的输入时 y 或者 n
        while (true) {
            System.out.println("你确定要退出吗? y/n");
            choice = scanner.next();
            if ("y".equals(choice) || "n".equals(choice)) {
                break;
            }
//          if ("y".equals(choice)) {
//            loop = false;
//              break;
//          } else if ("n".equals(choice)) {
//              break;
//          }  方法二(不是很好)
        }
        // (3) 退出while后 , 再判断choice是y 还是n ,就可以决定是否退出
        // 当用户退出while, 进行判断
        if (choice.equals("y")) {
            loop = false;   //loop控制显示菜单的,loop = false退出零钱通系统
        }
        // System.out.println("4 退出");
    }
}
SmallChangeSysApp.java
直接调用SmallChangeSysoop 对象,显示主菜单即可
package com.hspedu.smallchange.oop;

//我们直接调用SmallChangeSysoop 对象,显示主菜单即可
public class SmallChangeSysApp {
    public static void main(String[] args) {
        new SmallChangSysoop().mainMenu();
    }
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998727.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号