家庭收支记账软件

一、目标

  • 模拟实现一个基于文本界面的《家庭记账软件》
  • 掌握初步的编程技巧和调试技巧
  • 主要涉及以下知识点:
  • 变量的定义
  • 基本数据类型的使用
  • 循环语句
  • 分支语句
  • 方法声明、调用和返回值的接收
  • 简单的屏幕输出格式控制

二、需求说明

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

项目采用分级菜单方式。

主菜单如下:

用java写一个财务对账 java记账软件实例_java

假设家庭起始的生活基本金为1000元。
每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记 录本次收入明细,以便后续的查询。
每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记 录本次支出明细,以便后续的查询。
查询收支明细( 菜单1)时,将显示所有的收入、支出名细列表

1. “登记收入”的界面及操作过程如下所示:

用java写一个财务对账 java记账软件实例_Code_02

2. “登记支出”的界面及操作过程如下所示:

用java写一个财务对账 java记账软件实例_java_03

3. “收支明细”的界面及操作过程如下所示:

用java写一个财务对账 java记账软件实例_用java写一个财务对账_04

4. “退 出”的界面及操作过程如下所示:

用java写一个财务对账 java记账软件实例_Code_05

三、流程图

1. 主流程

用java写一个财务对账 java记账软件实例_java_06

2. 收入/支出流程

用java写一个财务对账 java记账软件实例_System_07

四、代码实现

项目名为:FamilyAccount.java
代码:
import java.util.Scanner;

public class FamilyAccount {
	//本金
	private static int principal = 1000;
	//记录语句
	private static String record = "\n收支明细\t\t账户金额\t\t收支金额\t\t说    明\n----\t\t"+principal+"\t\t----\t\t本    金\n";
	//用于保存记录语句
	private static StringBuffer sb = new StringBuffer();
	//创建输入对象
	private static Scanner sc = new Scanner(System.in);
	
	/**
	 *  主方法
	 * @param args
	 */
	public static void main(String[] args) {
		// 将语句加到StringBuffer对象sb里
		sb.append(record);
		// 定义循环标志位,用于退出时跳出循环
		boolean loopFlag = true;
		do {
			// 显示菜单
			view();
			// 接收菜单选项的编号
			int menuCode = getMenuCode();
			// 选择菜单执行相应内容
			switch(menuCode) {
				case 1:
					// 打印收支明细
					System.out.println(sb);
					break;
				case 2:
					// 添加收入记录
					selectSecond();
					break;
				case 3:
					// 添加支出记录
					selectThird();
					break;
				case 4:
					// 退出系统
					System.out.print("是否确认退出(Y/N):");
					// 接收字符Y或N
					char c = getYesOrNo();
					// 接收到Y时给循环标志位赋值False跳出循环退出系统
					if(c=='Y') loopFlag = false;
					break;
			}
		} while (loopFlag );

	}
	
	/**
	 * 打印菜单信息
	 */
	public static void view() {
		System.out.println("\n-------------------------------家庭收支记账软件-------------------------------\n");
		System.out.println("                                 1.收支明细");
		System.out.println("                                 2.收入金额");
		System.out.println("                                 3.支出金额");
		System.out.println("                                 4.退       出\n");
		System.out.print("请输入选择序号:");
	}
	
	/**
	 * 获取数字
	 * @return
	 */
	public static int getNumber() {
		int num = -1;
		// 判断是否有输入
		while(sc.hasNext()) {
			// 输入是否为int类型
			if (sc.hasNextInt()) {
				// 接收输入的数字
				num = sc.nextInt();
				break;
			}else {
				System.out.print("没有所选项,请重新输入:");
				// 输入
				sc.next();
			}
		}
		return num;
	}
	
	/**
	 * 获取菜单选项序号
	 * @return
	 */
	public static int getMenuCode() {
		int menuCode;
		for(;;) {
			// 调用getNumber()方法接收数字
			menuCode = getNumber();
			// 判断数字是否为1 2 3 4
			if (menuCode==1 || menuCode==2 || menuCode==3 || menuCode==4) {
				break;
			}else {
				System.out.print("没有所选项,请重新输入:");
			}
		}
		return menuCode;
	}
	
	/**
	 * 获取字母Y  N
	 * @return
	 */
	public static char getYesOrNo() {
		char c;
		for(;;) {
			// sc.next() 接收字符串    toUpperCase() 字符串转大写  charAt(0) 截取第一个字符
			c = sc.next().toUpperCase().charAt(0);
			// 判断截取字符是否为Y  N
			if ('Y' == c || 'N' == c) {
				break;
			}else {
				System.out.print("没有所选项,请重新输入:");
			}
		}
		return c;
	}
	
	/**
	 * 添加收入记录
	 */
	public static void selectSecond() {
		System.out.print("收入金额:");
		// 收入金额
		int income = getNumber(); 
		// 本金 = 本金 + 支出金额
		principal += income;
		System.out.print("说       明:");
		// 说明文字
		String des = sc.next(); 
		String str = "  收入\t\t"+principal+"\t\t"+income+"\t\t"+des+"\n";
		sb.append(str);
	}
	
	/**
	 * 添加支出记录
	 */
	public static void selectThird() {
		System.out.print("支出金额:");
		// 支出金额
		int outlay = getNumber(); 
		// 本金 = 本金 - 支出金额
		principal -= outlay;
		System.out.print("说       明:");
		// 说明文字
		String des = sc.next(); 
		String str = "  收入\t\t"+principal+"\t\t"+outlay+"\t\t"+des+"\n";
		sb.append(str);
	}
		
}

五、代码结构及调用

用java写一个财务对账 java记账软件实例_System_08