Java基础语法练习题29(微信零钱通账单系统-面向过程-面向对象)

目标: 编写一个Java程序,实现一个简单的零钱通管理系统,该系统允许用户进行以下操作:

  1. 查看零钱通明细:显示所有收益入账和消费记录。
  2. 收益入账:用户可以输入收入来源和金额,系统将更新余额并记录交易详情。
  3. 消费:用户可以输入消费去处和金额,系统将从余额中扣除相应金额并记录交易详情。
  4. 退出系统:允许用户退出程序。

功能要求:

  • 零钱通明细:程序应能够显示所有交易记录,包括收益入账和消费。
  • 收益入账
    • 用户输入收入来源。
    • 用户输入收益金额,金额必须大于0。
    • 系统更新余额并记录交易详情,包括来源、金额、交易时间和更新后的余额。
  • 消费
    • 用户输入消费去处。
    • 用户输入消费金额,金额必须大于0且不超过当前余额。
    • 系统从余额中扣除相应金额并记录交易详情,包括去处、金额、交易时间和更新后的余额。
  • 退出系统
    • 用户选择退出时,系统将提示用户确认。
    • 用户输入'y'确认退出,输入'n'返回主菜单。

结果如下图:

有两个方式实现,一个是面向过程,另一个是面向对象

面向过程代码如下(直接在一个类中实现即可):


import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.Date;
public class SmallChangeSys {
    public static void main(String[] args){

        boolean loop = true;
        Scanner sc = new Scanner(System.in);
        String key = "";

        //1 零钱通明细
        String detail = "--------------零钱通明细--------------";

        //2 收益入账
        double money = 0,balance = 0;
        String incomeSources = "";  //收入来源
        //2  日期
        Date date =null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        //3 消费
        String incomeDestination =""; //消费去处

        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\t1 退出系统");
            System.out.println("==============零钱通菜单==============");

            key = sc.next();
            switch(key){
                case "1":
                    System.out.println("\t\t\t\t1 零钱通明细");
                    System.out.println(detail);

                    break;

                case "2":
                    System.out.println("\t\t\t\t2 收益入账");

                    System.out.println("请输入您的收入来源:");
                    incomeSources = sc.next();
                    System.out.println("请输入您的收益金额:");
                    money = sc.nextDouble();

                    if(money<=0){   //收入符合正常逻辑
                        System.out.println("收益入账的金额需要 大于等于 0");
                        break;
                    }

                    balance+=money;

                    date = new Date();//获取当前的时间
                    System.out.println(sdf.format(date));

                    detail += "\n收益入账\t来源\t"+incomeSources+"\t+"+money+"\t"+sdf.format(date)+"\t"+"余额\t"+balance;
                    System.out.println(detail);
                    break;

                case "3":
                    System.out.println("\t\t\t\t3 消费");

                    System.out.println("请输入您的消费去处:");
                    incomeDestination = sc.next();
                    System.out.println("请输入您的消费金额:");
                    money = sc.nextDouble();

                    if(money<=0 || money> balance){    //消费符合正常逻辑
                        System.out.println("您的消费应该在\t0-"+balance);
                        break;
                    }

                    balance-=money;

                    date = new Date();//获取当前的时间
                    System.out.println(sdf.format(date));

                    detail += "\n余额消费\t去处\t"+incomeDestination+"\t-"+money+"\t"+sdf.format(date)+"\t"+"余额\t"+balance;
                    System.out.println(detail);



                    break;

                case "4":

                    System.out.println("您确定要退出系统吗? y/n");
                    String choice = sc.next();
                    while (true){
                        if(choice.equals("y")){
                            System.out.println("\t\t\t\t1 退出系统");
                            loop = false;
                            break;
                        }
                        else if(choice.equals("n")){
                            break;
                        }
                        System.out.println("您输入的选择不对,请重新输入 y/n");
                        choice = sc.next();
                    }

                    break;


                default:
                    System.out.println("您输入的有错,请重新输入");
            }

        }while(loop);


    }
}

面向对象则需要两个文件类,如下图所示:

SmallChangeOop类的代码如下:

package SmallChangeAPP;

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

public class SmallChangeOop {

    boolean loop = true;
    Scanner sc = new Scanner(System.in);
    String key = "";

    //1 零钱通明细
    String detail = "--------------零钱通明细--------------";

    //2 收益入账
    double balance = 0;
    String incomeSources = "";  //收入来源
    //2  日期
    Date date =null;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    //3 消费
    String incomeDestination =""; //消费去处


    public void mainMenu(){
        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\t1 退出系统");
            System.out.println("==============零钱通菜单==============");

            key = sc.next();
            switch(key){
                case "1":
                    this.billDetails();
                    break;

                case "2":
                   this.incom();
                    break;

                case "3":
                   this.outcome();
                    break;

                case "4":
                   this.exit();
                    break;

                default:
                    System.out.println("您输入的有错,请重新输入");
            }

        }while(loop);

    }

    public void billDetails(){
        System.out.println("\t\t\t\t1 零钱通明细");
        System.out.println(detail);

    }


    public void incom(){
        System.out.println("\t\t\t\t2 收益入账");

        System.out.println("请输入您的收入来源:");
        incomeSources = sc.next();
        System.out.println("请输入您的收益金额:");
        double money = 0;
        money = sc.nextDouble();

        if(money<=0){   //收入符合正常逻辑
            System.out.println("收益入账的金额需要 大于等于 0");
            return;
        }

        balance+=money;

        date = new Date();//获取当前的时间
        System.out.println(sdf.format(date));

        detail += "\n收益入账\t来源\t"+incomeSources+"\t+"+money+"\t"+sdf.format(date)+"\t"+"余额\t"+balance;
        System.out.println(detail);

    }

    public void outcome(){
        System.out.println("\t\t\t\t3 消费");

        System.out.println("请输入您的消费去处:");
        incomeDestination = sc.next();
        System.out.println("请输入您的消费金额:");
        double money = 0;
        money = sc.nextDouble();

        if(money<=0 || money> balance){    //消费符合正常逻辑
            System.out.println("您的消费应该在\t0-"+balance);
            return;
        }

        balance-=money;

        date = new Date();//获取当前的时间
        System.out.println(sdf.format(date));

        detail += "\n余额消费\t去处\t"+incomeDestination+"\t-"+money+"\t"+sdf.format(date)+"\t"+"余额\t"+balance;
        System.out.println(detail);

    }

    public void exit(){
        System.out.println("您确定要退出系统吗? y/n");
        String choice = sc.next();
        while (true){
            if(choice.equals("y")){
                System.out.println("\t\t\t\t1 退出系统");
                loop = false;
                break;
            }
            else if(choice.equals("n")){
                break;
            }
            System.out.println("您输入的选择不对,请重新输入 y/n");
            choice = sc.next();
        }

    }


}

SmallChangeMain代码如下:

package SmallChangeAPP;

public class SmallChangeMain {
    public static void main(String[] args) {
        SmallChangeOop p = new SmallChangeOop();
        p.mainMenu();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值