Java小项目——家庭记账软件

it2023-04-08  71

Java家庭记账软件

目标

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

需求说明

•模拟实现基于文本界面的《家庭记账软件》。 •该软件能够记录家庭的收入、支出,并能够打印收支明细表。 •项目采用分级菜单方式。主菜单如下: -----------------家庭收支记账软件----------------- 1收支明细 2登记收入 3登记支出 4退 出 请选择(1-4):_

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

•“登记收入”的界面及操作过程如下所示: -----------------家庭收支记账软件----------------- 1收支明细 2登记收入 3登记支出 4退 出 请选择(1-4):2 本次收入金额:1000 本次收入说明:劳务费_

•“登记支出”的界面及操作过程如下所示: -----------------家庭收支记账软件----------------- 1收支明细 2登记收入 3登记支出 4退 出 请选择(1-4):3 本次支出金额:800 本次支出说明:物业费_

•“收支明细”的界面及操作过程如下所示: -----------------家庭收支记账软件----------------- 1收支明细 2登记收入 3登记支出 4退 出 请选择(1-4):1 -----------------当前收支明细记录-----------------

•“退 出”的界面及操作过程如下所示: -----------------家庭收支记账软件----------------- 1收支明细 2登记收入 3登记支出 4退 出 请选择(1-4):4 确认是否退出(Y/N):_

流程图(活动图) — 主流程

流程图(活动图) — 收入和支出处理流程

主代码部分

package familyaccount; import java.util.Scanner; public class FamilyAccount { public static void main(String[] args) { menu(); } public static void menu(){ int balance = 10000; String details = "收支\t账户金额\t收支金额\t说 明\n"; while(true){ System.out.println("-----------------家庭收支记账软件-----------------"); System.out.println("\t\t1 收支明细"); System.out.println("\t\t2 登记收入"); System.out.println("\t\t3 登记支出"); System.out.println("\t\t4 退 出"); System.out.print("请选择(1-4):"); char select = Utility.readMenuSelection(); switch(select){ case '1': //打印收支明细 System.out.println("-----------------当前收支明细记录-----------------"); System.out.println(details); System.out.println("--------------------------------------------------"); break; case '2': //登记收入功能的实现 System.out.print("本次收入金额:"); int money = Utility.readNumber(); System.out.print("本次收入的说明:"); String description = Utility.readString(); balance +=money; //details +=本次收入的明细 //收支\t账户金额\t收支金额\t说 明\n details += "收入"+"\t"+balance+"\t"+money+"\t"+ description+"\n"; break; case '3': //登记支出功能的实现 System.out.print("本次支出金额:"); int spend = Utility.readNumber(); System.out.print("本次支出的说明:"); String description2 = Utility.readString(); balance -=spend; //details +=本次收入的明细 //收支\t账户金额\t收支金额\t说 明\n details += "支出"+"\t"+balance+"\t"+spend+"\t"+ description2+"\n"; break; case '4': System.out.print("确认是否退出(Y/N):"); char confirm = Utility.readConfirmSelection(); if(confirm == 'Y'){ return ; } break; } } } }

工具类

package familyaccount; import java.util.*; public class Utility { private static Scanner scanner = new Scanner(System.in); 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; } public static int readNumber() { int n; for (; ; ) { String str = readKeyBoard(4); try { n = Integer.parseInt(str); break; } catch (NumberFormatException e) { System.out.print("数字输入错误,请重新输入:"); } } return n; } public static String readString() { //String str = readKeyBoard(8); Scanner input=new Scanner(System.in); String str=input.next();//输入中文字符串 return str; } public static char readConfirmSelection() { char c; for (; ; ) { String str = readKeyBoard(1).toUpperCase(); c = str.charAt(0); if (c == 'Y' || c == 'N') { break; } else { System.out.print("选择错误,请重新输入:"); } } return c; } private static String readKeyBoard(int limit) { String line = ""; while (scanner.hasNext()) { line = scanner.nextLine(); if (line.length() < 1 || line.length() > limit) { System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:"); continue; } break; } return line; } }

执行效果

最新回复(0)