零钱通项目

项目开发流程说明

项目需求说明

使用java开发零钱通项目,完成收益入账,消费,查看明细,退出系统等功能。

项目的界面

化繁为简
1.先完成显示菜单, 并可以选择.
2.完成零钱通明细
3.完成收益入账.
4.完成消费
5.优化退出

项目代码实现

编写文件chapter08\src\com\zzw\smallchange\SmallChangeSys.java完成基本功能(过程编译).
先用过程编程, 后面改成OOP版本, 体会OOP编程的好处.

1.先完成显示菜单, 并可以选择.

public class SmallChangeSys {
    //化繁为简
    //1.先完成显示菜单, 并可以选择菜单, 给出对应选择信息
    public static void main(String[] args) {
        //定义相关的变量
        boolean loop = true;
        Scanner scanner = new Scanner(System.in);
        Integer key = 0;
        do {
            System.out.println("=================零钱通菜单=================");
            System.out.println("\t\t\t\t1.零钱通明细");
            System.out.println("\t\t\t\t2.收益入账");
            System.out.println("\t\t\t\t3.消费");
            System.out.println("\t\t\t\t4.退   出");
            System.out.print("请选择(1-4): ");
            key = scanner.nextInt();
            //使用switch分支控制
            switch (key) {
                case 1:
                    System.out.println("零钱通明细");
                    break;
                case 2:
                    System.out.println("收益入账");
                    break;
                case 3:
                    System.out.println("消费");
                    break;
                case 4:
                    loop = false;
                    System.out.println("退出系统");
                    break;
                default:
                    System.out.println("输入错误, 请重新输入");
            }
        } while (loop);
    }
}

2.完成零钱通明细

public class SmallChangeSys {
    //化繁为简
    //1.先完成显示菜单, 并可以选择菜单, 给出对应选择信息
    public static void main(String[] args) {
        //定义相关的变量
        boolean loop = true;
        Scanner scanner = new Scanner(System.in);
        Integer key = 0;

        //2.完成零钱通明细
        //思路:(1)可以把收益入账和消费, 保存到数组
        //    (2)也可以使用对象
        //    (3)使用String拼接
        String details = "=================零钱通明细=================";
        
        do {
            System.out.println("=================零钱通菜单=================");
            System.out.println("\t\t\t\t1.零钱通明细");
            System.out.println("\t\t\t\t2.收益入账");
            System.out.println("\t\t\t\t3.消费");
            System.out.println("\t\t\t\t4.退   出");
            System.out.print("请选择(1-4): ");
            key = scanner.nextInt();
            //使用switch分支控制
            switch (key) {
                case 1:
                    System.out.println(details);
                    break;
                case 2:
                    System.out.println("收益入账");
                    break;
                case 3:
                    System.out.println("消费");
                    break;
                case 4:
                    loop = false;
                    System.out.println("退出系统");
                    break;
                default:
                    System.out.println("输入错误, 请重新输入");
            }
        } while (loop);
    }
}

3.完成收益入账

public class SmallChangeSys {
    //化繁为简
    //1.先完成显示菜单, 并可以选择菜单, 给出对应选择信息
    //2.完成零钱通明细
    //3.完成收益入账
    public static void main(String[] args) {
        //定义相关的变量
        boolean loop = true;
        Scanner scanner = new Scanner(System.in);
        String key = "";

        //2.完成零钱通明细
        //思路:(1)可以把收益入账和消费, 保存到数组
        //    (2)也可以使用对象
        //    (3)使用String拼接
        String details = "=================零钱通明细=================";

        //3.完成收益入账 完成功能驱动程序员增加新的变量和代码
        //思路: 定义新的变量, 储存数据
        double money = 0;//收益入账
        double balance = 0;//余额
        Date date = null;//date 是 java.util.Date 类型, 表示日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化的对象
        do {
            System.out.println("\n=================零钱通菜单=================");
            System.out.println("\t\t\t\t1.零钱通明细");
            System.out.println("\t\t\t\t2.收益入账");
            System.out.println("\t\t\t\t3.消费");
            System.out.println("\t\t\t\t4.退   出");
            System.out.print("请选择(1-4): ");
            key = scanner.next();
            //使用switch分支控制
            switch (key) {
                case "1":
                    System.out.println(details);
                    break;
                case "2":
                    System.out.print("收益入账金额: ");
                    money = scanner.nextDouble();
                    //money值的返回要校验一下, 一会完善
                    balance += money;
                    date = new Date();//获取当前日期
                    //拼接收益入账信息到details
                    details += "\n收益入账\t+" + money + "\t" + sdf.format(new Date()) + "\t余额:" + balance;
                    break;
                case "3":
                    System.out.println("消费");
                    break;
                case "4":
                    System.out.println("退出系统");
                    loop = false;
                    break;
                default:
                    System.out.println("输入有误, 请重新输入");
            }
        } while (loop);
    }
}

4.完成消费

public class SmallChangeSys {
    //化繁为简
    //1.先完成显示菜单, 并可以选择菜单, 给出对应选择信息
    //2.完成零钱通明细
    //3.完成收益入账
    //4.完成消费
    public static void main(String[] args) {
        //定义相关的变量
        boolean loop = true;
        Scanner scanner = new Scanner(System.in);
        String key = "";

        //2.完成零钱通明细
        //思路:(1)可以把收益入账和消费, 保存到数组
        //    (2)也可以使用对象
        //    (3)使用String拼接
        String details = "=================零钱通明细=================";

        //3.完成收益入账
        //思路: 定义新的变量, 存储收益入账, 交易时间, 余额
        double money = 0;//收益入账
        double balance = 0;//余额
        Date tradeTime = null;//交易时间 引自 java.util.date
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");

        //4.消费
        //思路: 定义新的变量, 存储消费金额
        double consumption = 0;//消费金额
        String note = "";//消费说明
        do {
            System.out.println("\n=================零钱通菜单=================");
            System.out.println("\t\t\t\t1.零钱通明细");
            System.out.println("\t\t\t\t2.收益入账");
            System.out.println("\t\t\t\t3.消费");
            System.out.println("\t\t\t\t4.退   出");
            System.out.print("请选择(1-4): ");
            key = scanner.next();
            //使用switch分支控制
            switch (key) {
                case "1":
                    System.out.println(details);
                    break;
                case "2":
                    System.out.print("收益入账金额: ");
                    money = scanner.nextDouble();
                    balance += money;
                    tradeTime = new Date();
                    //拼接收益入账到details
                    details += "\n收益入账\t+" + money + "\t" + sdf.format(tradeTime) + "\t余额:" + balance;
                    break;
                case "3":
                    System.out.print("消费金额: ");
                    consumption = scanner.nextDouble();
                    System.out.print("消费原因: ");
                    note = scanner.next();
                    //判断, 余额是否大于等于消费金额
                    balance -= consumption;
                    tradeTime = new Date();
                    //拼接消费信息到details
                    details += "\n" + note + "\t-" + consumption + "\t" + sdf.format(tradeTime) + "\t余额:" + balance;
                    break;
                case "4":
                    System.out.println("退出系统");
                    loop = false;
                    break;
                default:
                    System.out.println("输入有误, 请重新输入");
            }
        } while (loop);
    }
}

项目代码改进

1.用户输入4退出时, 给出提示"你确定要退出吗?( y/n)", 必须输入正确的y/n, 否则循环输入指令,直到输入y 或者 n.

2.在收益入账和消费时, 判断金额是否合理, 并给出相应的提示.(过关斩将编程思想)

3.满一定额度的消费送积分, 每满二十元送一积分

public class SmallChangeSys {
    //化繁为简
    //1.先完成显示菜单, 并可以选择菜单, 给出对应选择信息
    //2.完成零钱通明细
    //3.完成收益入账
    //4.完成消费
    //5.用户输入4退出时, 给出提示"你确定要退出吗?( y/n)", 必须输入正确的y/n, 否则循环输入指令,直到输入y 或者 n.
    //6.在收益入账和消费时, 判断金额是否合理, 并给出相应的提示.
    //7.满一定额度的消费送积分, 每满二十元送一积分
    //8.后台金额变量用long存储, 输入的double类型变量转为long类型 (long) (v * 100)
    public static void main(String[] args) {
        //定义相关的变量
        boolean loop = true;
        Scanner scanner = new Scanner(System.in);
        String key = "";
        Integer score = 0;

        //2.完成零钱通明细
        //思路:(1)可以把收益入账和消费, 保存到数组
        //    (2)也可以使用对象
        //    (3)使用String拼接
        String details = "=================零钱通明细=================";

        //3.完成收益入账
        //思路: 定义新的变量, 存储收益入账, 交易时间, 余额
        long money = 0;//收益入账
        long balance = 0;//余额
        Date tradeTime = null;//交易时间 引自 java.util.date
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");

        //4.消费
        //思路: 定义新的变量, 存储消费金额
        long consumption = 0;//消费金额
        String note = "";//消费说明
        do {
            System.out.println("\n=================零钱通菜单=================");
            System.out.println("\t\t\t\t1.零钱通明细");
            System.out.println("\t\t\t\t2.收益入账");
            System.out.println("\t\t\t\t3.消费");
            System.out.println("\t\t\t\t4.退   出");
            System.out.print("请选择(1-4): ");
            key = scanner.next();
            //使用switch分支控制
            switch (key) {
                case "1":
                    System.out.println(details);
                    break;
                case "2":
                    System.out.print("收益入账金额: ");
                    money = (long) (scanner.nextDouble() * 100);
                    //做校验时, 要采用过五关斩六将的编程思想, 首先考虑不正确的情况
                    //不要考虑正确的情况, 否则变成了if-else嵌套
                    if (money <= 0) {//收益入账金额不能为0
                        System.out.println("收益入账金额应该大于0");
                        break;
                    }
                    //下面都是大于0的
                    balance += money;
                    tradeTime = new Date();
                    //拼接收益入账到details
                    details += "\n收益入账\t+" + ((double) money / 100) + "\t" + sdf.format(tradeTime) + "\t余额:" + ((double) balance / 100) + "\t积分:" + score;
                    break;
                case "3":
                    while (true) {
                        System.out.print("消费金额: ");//如果消费金额格式不对, 一直要求输入正确的格式, 知道输入指定的格式
                        try {
                            consumption = (long) (scanner.nextDouble() * 100);
                            break;
                        } catch (Exception e) {
                            System.out.println("你应该输入消费金额");//输入的消费金额不对
                            scanner.next();//清空错误输入
                        }
                    }
                    //校验,过五关斩六将, 考虑不正确的情况
                    //判断, 如果消费金额<=0, 或者消费金额大于余额
                    if (consumption <= 0 || consumption > balance) {
                        System.out.println("消费金额要在 0-" + ((double) balance / 100) );
                        break;
                    }
                    System.out.print("消费原因: ");
                    note = scanner.next();

                    //每满二十元送一积分
                    long v = consumption / 2000;
                    score += (int) v;

                    balance -= consumption;
                    tradeTime = new Date();
                    //拼接消费信息到details
                    details += "\n" + note + "\t-" + ((double) consumption / 100) + "\t" + sdf.format(tradeTime) + "\t余额:" + ((double) balance / 100) + "\t积分:" + score;
                    break;
                case "4":
                    //4.用户输入4退出时, 给出提示"你确定要退出吗?( y/n)", 必须输入正确的y/n, 否则循环输入指令,直到输入y 或者 n.
                    //思路分析
                    //(1)定义一个变量 choice, 接收用户的输入
                    //(2)使用 while+break, 来处理接收到的输入是 y 或 n
                    //(3)退出while后,再判断choice是y还是n, 再决定是否要退出
                    String choice = "";
                    while (true) {
                        System.out.print("你确定要退出吗?(y/n)");
                        choice = scanner.next();
                        if ("n".equals(choice) || "y".equals(choice)) {
                            break;
                        }
                    }
                    //当用户退出while后,再判断
                    if ("y".equals(choice)) {
                        loop = false;
                    }
                    break;
                default:
                    System.out.println("输入有误, 请重新输入");
            }
        } while (loop);
    }
}

3.将面向过程的代码修改成面向对象的方法, 编写src/com/zzw/smallchange/OOP/SmallChangeSysOOP.java, 并使用SmallChangeSysApp.java完成测试.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~ 小团子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值