JAVA基础07(第一个项目)

一、家庭收支记账软件

1. 实现目标

模拟实现一个基于文本界面的《家庭记账软件》

掌握初步的编程技巧和调试技巧

灵活运用基础知识

2.需求说明

该软件能够记录家庭的收入,支出,并能够打印收支明细表

 主菜单:

家庭起始金额:10000

收支明细:将显示所有的收入,支出明细列表

登记收入:收入的金额应累加到基本金上,并记录本次收入明细

 登记支出:支出的金额应从基本金中扣除,并记录本次支出明细,以便后续查询

 3.做法思路

现阶段我想到的方法有两种,第一种使用switch case 分支语句来实现,这种最为简单,代码如下:

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        int balance = 10000; // 定义初始资金
        String detailed =" "; // 定义字符串来储存家庭的收入和支出,也可以使用数组定义
        Scanner scan = new Scanner(System.in);
        a:while (true) { // 判断条件只要为true就行
            System.out.println("------------------欢迎使用家庭收支记账软件----------------");
            System.out.println();
            System.out.println("                   1 收支明细");
            System.out.println("                   2 登记收入");
            System.out.println("                   3 登记支出");
            System.out.println("                   4 退   出");
            System.out.println();
            System.out.println("               请输入1-4选择您想要的功能");
            int num = scan.nextInt(); // 接收剪键盘输入的值
            switch (num) {
                case 2:
                    System.out.println("------欢迎使用登记收入功能,这里您可以登记您的收入款项------");
                    System.out.println();
                    System.out.println("                  请输入您的收入金额");
                    int income = scan.nextInt(); // 接收收入金额
                    balance += income; // 初始资金加上收入金额
                    System.out.println("                  请输入您的收入说明");
                    String explain = scan.next(); // 接收收入说明
                    detailed += "金额:"+ income + "  收入说明: "+explain+"\n";
                    System.out.println("                      登记成功");
                    break;
                case 3: // 支出功能同上
                    System.out.println("------欢迎使用登记支出功能,这里您可以登记您的支出款项------");
                    System.out.println("                  请输入您的支出金额");
                    int outcome = scan.nextInt();
                    balance -= outcome;
                    System.out.println("                  请输入您的支出说明");
                    String explain1 = scan.next();
                    detailed += "金额:"+ outcome+  "  支出说明: "+explain1+"\n";
                    break;
                case 4:
                    System.out.println("        感谢您的使用,我们下次再见");
                    break a;
                case 1:
                    System.out.println("------欢迎使用收支明细功能,这里将会看到您的所有账单------");
                    System.out.println("总资产:"+balance);
                    System.out.println(detailed);
            }
        }
    }
}

第二种思路就是将各个功能都各写成一个方法,然后调用即可,这种方式在功能上可以更加的人性化,方法是可行的但我所写的代码有些问题,收入明细功能的打印存在问题,代码如下:

import java.util.Arrays;
import java.util.Scanner;
public class Work1 {
    public static void main(String[] args){
        interface_1();
    }

    public static void interface_1( ){
        System.out.println("------------------欢迎使用家庭收支记账软件----------------");
        System.out.println();
        System.out.println("                   1 收支明细");
        System.out.println("                   2 登记收入");
        System.out.println("                   3 登记支出");
        System.out.println("                   4 退   出");
        System.out.println();
        System.out.println("               请输入1-4选择您想要的功能");
        String[][] arr = new String[10][4];
        Scanner sc = new Scanner(System.in);
        int count = 0;
        int balance = 10000;
        int num = sc.nextInt();
        income(num,arr,balance,count);
        outcome(num,arr,balance,count);
        detailed(num,arr);
        exit(num);
    }
    public static void  detailed(int num,String[][] a){
        Scanner sc = new Scanner(System.in);
        if(num == 1) {
            System.out.println("------欢迎使用收支明细功能,这里将会看到您的所有账单------");
            System.out.println();
            System.out.println("收支\t\t账户总金额\t\t收支金额\t\t说   明");
            for (int j = 0; j <a.length ; j++) {
                if (a[j][0]==null)
                {
                    System.out.println(a[j][0]+"\t\t"+a[j][1]+"\t\t\t"+a[j][2]+"\t\t\t"+a[j][3]);
                }
            }
            System.out.println(Arrays.toString(a));
            System.out.println("请选择是否(1/0)继续其他功能");
            int choose = sc.nextInt();
            if(choose == 1){
                interface_1();
        }else System.out.println("感谢您的使用,我们下次再见");
        }
    }
    public static void income(int num,String[][] a,int b,int c) {
        Scanner sc = new Scanner(System.in);
        if (num == 2) {
            System.out.println("------欢迎使用登记收入功能,这里您可以登记您的收入款项------");
            System.out.println();
            System.out.println("                  请输入您的收入金额");
            int income = sc.nextInt();
            System.out.println("                  请输入您的收入说明");
            String explain = sc.next();
            b +=income;
            a[c][0]= "收入";
            a[c][1]= String.valueOf(b);
            a[c][2]= String.valueOf(income);
            a[c][3]= explain;
            c++;
            System.out.println("                请选择是否(1/0)继续其他功能");
            int choose = sc.nextInt();
            if (choose == 1) {
                interface_1();
            } else System.out.println("感谢您的使用,我们下次再见");
        }
    }
    public static void outcome(int num,String[][] a,int b,int c) {
        if (num == 3) {
            Scanner sc = new Scanner(System.in);
            System.out.println("------欢迎使用登记支出功能,这里您可以登记您的支出款项------");
            System.out.println();
            System.out.println("                  请输入您的支出金额");
            int outcome = sc.nextInt();
            System.out.println("                  请输入您的支出说明");
            String explain = sc.next();
            a[c][0]="支出";
            b -= outcome;
            a[c][1]= String.valueOf(b);
            a[c][2]= String.valueOf(outcome);
            a[c][3]=explain;
            System.out.println("                请选择是否(1/0)继续其他功能");
            int choose = sc.nextInt();
            if (choose == 1) {
                interface_1();
            } else System.out.println("        感谢您的使用,我们下次再见");
        }
    }
    public static void exit(int num){
        if(num == 4){
               System.out.println("        退出成功,感谢您的使用,我们下次再见");
        }
    }
}

 问题总结:在与形参和实参的传递上出现问题,导致数组中没能保存收入和支出的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值