java实现简单的家庭收支记账程序
文章目录
前言
本篇文章主要介绍了家庭收支记账程序的设计思路以及代码实现过程,希望能为大家学习java提供有用的经验。
一、需求分析
1.要求
该软件能够记录家庭的收入、支出,并能够打印收支明细表。
项目采用分级菜单方式。主菜单示例如下:
-----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记支出
4 退 出
2.不同模块功能
1.主界面——输入选项——判断选项,进行不同功能块
2.收支明细展示界面——向用户展示已有的记录
3.登记收入/登记支出界面——接收用户输入计算总计并添加数据记录
4.退出界面——用于退出程序
3.需定义的变量(仅供参考)
在编程过程中有如下场景需要定义变量
1.数据记录——这里可以用二维数组
2.菜单选项——可以是整型、字符型(1,2,3,4)
3.收入——(收支与总金额用整型比较好)
4.支出
5.总金额
6.说明——字符串
7.确认退出——字符
8.存放记录索引,实现一条一条的数据添加——整型
9.数据存满时用于退出循环——布尔型
4.一些优化建议
1.在代码编写时最好加上自己的注释,方便自己与他人更直观地理解代码
2.将不同功能块打包成方法能够显著的减少代码量,提高编程效率
3.在代码编程过程中,尽可能考虑到用户的使用体验,在某些细节处迎合用户需求。
4.为了避免数据存满发生冲突,可以设置一个布尔变量作为旗帜,在数据存满后输出表格,并退出界面
二、工具类
概念
封装了若干方法的类,可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。
本项目工具类代码及解析
在这个工具类中较为重要的是readKeyBoard()方法
打包了读取键盘输入的代码,设置了limit参数,用于限定输入长度,当输入长度不合法时会发出提示。
工具包内的其他方法都是由此方法延申而来。
import java.util.Scanner;
/**
Utility工具类:
将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。
*/
public class Utility {
private static Scanner scanner = new Scanner(System.in);
/**
readKeyBoard
该方法用于读取键盘,定义了参数整型参数 limit ,用于限定输入长度
后面几个方法中都会用到
*/
private static String readKeyBoard(int limit) {
String line = ""; //用于接收键盘输入的字符串
/*
此处使用while循环 ,条件为 scanner.hasNext()
即有输入的话就循环,没有继续输入的话就退出循环
*/
while (scanner.hasNext()) {
line = scanner.nextLine(); //将输入赋值给line变量
/*
使用if语句判断输入字符长度是否符合要求,
如果输入不合法,则提示用户输入错误,跳过本次循环,开始新的循环。
*/
if (line.length() < 1 || line.length() > limit) {
System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
continue;
}
break;//如果符合要求就退出循环
}
return line;//返回输入的字符串
}
}
/**
用于界面菜单的选择。该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。
*/
public static char readMenuSelection() {
char c;
for (; ; ) {
String str = readKeyBoard(1);
c = str.charAt(0);
if (c != '1' && c != '2' && c != '3' && c != '4') {
System.out.print("选择错误,请重新输入:");
} else break;
}
return c;
}
/**
用于收入和支出金额的输入。该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。
*/
public static int readNumber() {
int n;
for (; ; ) {
String str = readKeyBoard(4);
try {
n = Integer.parseInt(str); //用于将字符串转换为int类型
break;
} catch (NumberFormatException e) {
System.out.print("数字输入错误,请重新输入:");
}