一、家庭收支记账软件
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(" 退出成功,感谢您的使用,我们下次再见");
}
}
}
问题总结:在与形参和实参的传递上出现问题,导致数组中没能保存收入和支出的数据。