学习Java已经过了半个月左右了,所学的知识已经能够写一些小程序或者小项目,虽然它可能没有那么高级,但是也能检验你之前所学的全部内容。所以今天就与大家分享一下我的小项目经验。
一、需求说明
该软件能够记录家庭的收入、支出,并能够打印收支明细表,项目采用分级菜单方式。主菜单如下:
-----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记支出
4 退 出
请选择(1-4):_
假设家庭起始的生活基本金为10000元
每次登记收入(菜单2)后,
收入的金额应累加到基本金上,并记录本次收入明细,
以便后续的查询。
每次登记支出(菜单3)后,
支出的金额应从基本金中扣除,并记
录本次支出明细,以便后续的查询。
查询收支明细( 菜单1)时,
将显示所有的收入、支出名细列表
二、项目阶段
阶段一
首先,实现界面展示功能
并且能根据输入的数据进入到每个功能里。
阶段二
在阶段一的过程中完成主要的“收入”,“支出”功能!
从键盘读取收入、支出的金额,从键盘读取收入、支出的原因,按照要求存储数据(数组),添加成功。如上图所示。
让项目更完善
引入工具类,实现一些错误输入判断,并且不断的调试程序的bug,完善程序的功能。
三、解题思路
首先项目需用到的知识有:Sanner(获取用户输入)、switch分支语句、方法的定义和调用、数组(一维或者二维)、以及让程序能一直运行下去的死循环语句。
菜单界面
首先构建一个死循环语句将菜单的基本界面放入循环当中,用打印语句System.out.println();构建基本菜单界面,构建完成后获取一个输入值,然后将这个值放入switch当中进行分支判断,这样就能让用户选择要进行的操作,然后再case语句中调用方法,实现对应的功能。
部分程序如下:
while(choice){
System.out.println("1.收支明细");
System.out.println("2.登记收入");
System.out.println("3.登记支出");
System.out.println("4.退出");
System.out.println("请输入(1-4):");
String a = readKeyBoard(1);
//取c中的第一个字符
char ch = a.charAt(0);
if(ch != '1' && ch != '2' && ch != '3' && ch != '4'){
System.out.println("您输入的数据有误,请重新输入");
}else {
switch (ch){
case '1':
incomeAndExpenditureDetails(i,arr);
break;
case '2':
registrationIncome(i,arr);
i++;
break;
case '3':
registeredExpenditure(i,arr);
i++;
break;
case '4':
System.out.println("正在退出....");
choice = false;
break;
}
}
}
System.out.println("退出成功!");
收支明细
收支明细要做的事情就是打印出数组里的东西,将添加到数组里的数据答应输出到控制台。所以我们要写的方法为一个简单的循环输出语句即可。
代码如下:
//收支明细
public static void incomeAndExpenditureDetails(int i,String[][] arr) {
// System.out.println(Arrays.toString(arr));
for (int k = 0; k < i; k++) {
for (int j = 0; j <arr[k].length ; j++) {
System.out.print(arr[k][j]+"\t");
}
System.out.println();
}
}
这里要注意,我们采用的是二维数组的方式来进行该项目。思路为在主函数中构建一个,足够大的二维数组,这里我给的长度为[10][4]。其实10可以更大,随你想运行多久的程序而确定。
String[][] arr= new String[10][4];
登记收入
构建一个方法要求能从键盘读取收入、支出的金额,从键盘读取收入、支出的原因,按照要求存储数据(数组),添加成功。
这里主要的问题在于数据类型的转换,因为有字符串的存在所以我们定义的数组为String类型的数组,所以我们存入的数据也必须是字符串类型的数组,但是收支金额要做加减运算的话就必须为整数或者是小数才行,这就需要用到强制类型转换。
转为String类型,代码如下:
String ab = c + "";
转为Double类型,代码如下:
double x = Double.parseDouble(arr[i-1][1])+c;
解决完这个问题后方法的功能基本就能完成,代码参考如下:
public static void registrationIncome(int i,String[][] arr) {
String[] arr1= new String[4];
Scanner sc = new Scanner(System.in);
System.out.println("请输入收入金额:");
// String a = readKeyBoard(4);
double c= readNumber();
// double ch = Double.parseDouble(a);
if (c>0){
//强制类型转换为String
String ab = "+"+c + "";
arr1[2] =ab;
System.out.println("请输入说明:");
String b = readKeyBoard