简单实现家庭记账程序(java) 您所在的位置:网站首页 家庭日常流水记账 简单实现家庭记账程序(java)

简单实现家庭记账程序(java)

2023-09-06 00:30| 来源: 网络整理| 查看: 265

目录

一、项目需求及流程说明

1.需求说明:

2.流程说明 

 项目阶段1

 项目阶段2

 项目阶段3

 二、完整源代码及工具类

1.工具类

2.主功能程序 

一、项目需求及流程说明 1.需求说明 整体说明: 模拟实现基于文本界面的《家庭记账软件》。该软件能够记录家庭的收入、支出,并能够打印收支明细表。项目采用分级菜单方式。                      主菜单如下:

 

家庭收支记账软件

1 收支明细

2 登记收入

3 登记支出

4 退出

请选择(1-4):

如图:

具体说明:

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

 项目阶段1 要求:实现界面展示功能

如图:

我用的是while循环语句格式(代码):

进入各个模块的代码如下(定义方法并进行调用!):

 项目阶段2 要求:在阶段一的过程中完成主要的“收入”,“支出”功能! 收入:

                     1)从键盘读取收入的金额(int)

                      2)从键盘读取收入的原因(String)

                      3)按照要求存储数据(数组)

                      4)添加成功

注意点:

 !这个地方我之前报错了,因为sunNum是int型, int无法转换为java.lang.String.

 这里进行一个强制装换:Integer.toString() 或者以这种格式:

代码实现效果:

 

支出: 

                      1)从键盘读取支出的金额(int)

                      2)从键盘读取支出的原因(String)

                      3)按照要求存储数据(数组)

                      4)添加成功

注意点: 

 

 ! 第一个截图是我刚开始的做法,Void没有进行返回sunMum操作,导致每次进行收入,支出操作的时候金额都是原定的10000.

第二个截图是修改之后,对income重新进行定义,并且返回sunMum,然后可以进行正常运行。

代码实现效果: 

 

 项目阶段3 要求:在显示账单明细完成遍历数组即可。

 

 二、完整源代码及工具类 1.工具类 import java.util.Scanner; /** Utility工具类: 将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。 */ public class Utility { private static Scanner scanner = new Scanner(System.in); /** 用于界面菜单的选择。该方法读取键盘,如果用户键入’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); break; } catch (NumberFormatException e) { System.out.print("数字输入错误,请重新输入:"); } } return n; } /** 用于收入和支出说明的输入。该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。 */ public static String readString() { String str = readKeyBoard(8); return str; } /** 用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。 */ 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; } }

* 将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节*/

2.主功能程序  public class home2 { public static void main(String[] args) { String[][] arr = new String[20][4]; int count=0; int sumNum = 10000;// 初始金额 arr[0][0]="收支"; arr[0][1]="账户金额"; arr[0][2]="收支金额"; arr[0][3]="说明"; while (true) { // 获取用户选择1-4 System.out.println("-------------家庭记账收支软件-----------"); System.out.println(" 1.收支明细"); System.out.println(" 2.登记收入"); System.out.println(" 3.登记支出"); System.out.println(" 4.退 出"); System.out.print (" 请选择(1-4):"); char menu = Utility.readMenuSelection();//nextInt(); switch (menu) { case '1': read(arr); break; case '2': count++; sumNum=income(count,sumNum,arr); break; case '3': count++; sumNum=outcome(count,sumNum,arr); break; case '4': System.out.print("确认是否退出(Y/N):"); char Selection = Utility.readConfirmSelection(); if (Selection == 'Y') { System.out.println("退出成功!"); return; }else{ break; } } } } public static void read(String[][] arr) { System.out.println("-------------当前明细收支记录-----------"); for (int j = 0; j < arr.length; j++) { if (arr[j][0] != null) { System.out.println(arr[j][0] + "\t\t" + arr[j][1] + "\t\t" + arr[j][2] + "\t\t" + arr[j][3]); } } System.out.println("--------------------------------------"); } public static int income(int count,int sumNum,String[][] arr) { //count++; arr[count][0]="收入"; System.out.print("本次收入金额:"); int MoneyIn = Utility.readNumber();//调用自定义工具类Utility中读取金额收入与支出的函数 sumNum += MoneyIn; arr[count][1]=Integer.toString(sumNum);//强制转换!!! arr[count][2]="+"+Integer.toString(MoneyIn); System.out.print("本次收入说明:"); String addInfo = Utility.readString(); //调用自定义工具栏Utility中读取收入与支出说明的函数 arr[count][3]=addInfo; // 处理details变量 //details += ("收入\t" + sumNum + "\t\t" + MoneyIn + "\t\t" + addInfo + "\n");// System.out.println("收入金额登记成功!"); return sumNum; } public static int outcome(int count,int sumNum,String[][] arr) { //count++; arr[count][0]="支出"; System.out.println("本次支出金额:"); int minusMoney = Utility.readNumber();//调用自定义工具类Utility中读取金额收入与支出的函数 // 处理balance if (sumNum >= minusMoney) { sumNum-= minusMoney; arr[count][1]=sumNum+""; arr[count][2]="-"+minusMoney+""; System.out.print("本次支出说明:"); String minusInfo = Utility.readString(); //调用自定义工具栏Utility中读取收入与支出说明的函数 arr[count][3]=minusInfo+""; } else { System.out.println("账户余额不足,支出失败"); } System.out.println("支出金额登记成功!"); return sumNum; } }

下面是我第一次做的比较简单(没有用到数组遍历)

可以进行参考:

public class home { public static void main(String[] args) { int basic = 10000;// 初始金额 String details = "收支\t账户金额\t\t收支金额\t\t说明\n";//记录收入与支出详细情况 while (true) { // 获取用户选择1-4 System.out.println("-------------家庭记账收支软件-----------"); System.out.println(" 1.收支明细"); System.out.println(" 2.登记收入"); System.out.println(" 3.登记支出"); System.out.println(" 4.退 出"); System.out.print(" 请选择(1-4):"); char menu = Utility.readMenuSelection(); switch (menu) { case '1': System.out.println("-------------当前明细收支记录-----------"); System.out.println(details); System.out.println("--------------------------------------"); break; case '2': System.out.print("本次收入金额:"); int MoneyIn = Utility.readNumber();//调用自定义工具类Utility中读取金额收入与支出的函数 System.out.print("本次收入说明:"); String addInfo = Utility.readString(); //调用自定义工具栏Utility中读取收入与支出说明的函数 // 处理basic basic += MoneyIn; // 处理details变量 details += ("收入\t" + basic + "\t\t" + MoneyIn + "\t\t" + addInfo + "\n"); System.out.println("收入金额登记成功!"); break; case '3': System.out.println("本次支出金额:"); int minusMoney = Utility.readNumber();//调用自定义工具类Utility中读取金额收入与支出的函数 // 处理balance if (basic >= minusMoney) { basic-= minusMoney; System.out.print("本次支出说明:"); String minusInfo = Utility.readString(); //调用自定义工具栏Utility中读取收入与支出说明的函数 // 处理details details += ("支出\t" + basic + "\t\t" + minusMoney + "\t\t" + minusInfo + "\n"); } else { System.out.println("账户余额不足,支出失败"); } System.out.println("支出金额登记成功!"); break; case '4': System.out.print("确认是否退出(Y/N):"); char Selection = Utility.readConfirmSelection(); if (Selection == 'Y') { System.out.println("退出成功!"); return; }else{ break; } } } } }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有