Java家庭记账程序
目录
目标
需求说明
具体操作
项目阶段一
项目阶段二
收入功能
支出功能
收支明细功能
退出功能
完整代码:
目标
1 模拟一个基于文本界面的《家庭记账软件》
2 掌握初步的编程技巧和调试技巧
3 灵活运用基础知识
需求说明
该软件能够记录家庭的收入和支出,并能打印收支明细表
采用分级菜单方式,主菜单如下:
1 假设家庭起始的生活基本金为10000元
2 每次登记收入(菜单2)后, 收入的金额应累加到基本金上,并记录本次收入明细, 以便后续的查询。。
3 每次登记支出(菜单3)后, 支出的金额应从基本金中扣除,并记 录本次支出明细,以便后续的查询。
4 查询收支明细( 菜单1)时, 将显示所有的收入、支出名细列表
具体操作
项目阶段一
主界面构建
使用switch语句,做成菜单,输入对应语句,进入相对应功能。case '2' 和 case '3'里面调用方法后使用count++是为了记录输入记录的条数,以便后续操作。
System.out.println("-------------------------家庭收支记账软件-------------------------");System.out.println();System.out.println(" 1 收支明细");System.out.println(" 2 登记收入");System.out.println(" 3 登记支出");System.out.println(" 4 退出");System.out.println();System.out.print(" 请选择(1-4):");int n = tool.readMenuSelection(); //readMenuSelection()是另一个类里面的方法switch (n) {case '1':numOne(arr,count); //遍历数组并且输出break;case '2':sum = numTwo(arr,count,sum); //调用方法,返回sum值count++; //count++一定要在方法调用后,否则会出现一行null值break;case '3':sum = numThree(arr,count,sum);count++;break;case '4':numFour(); //退出运行或者继续运行break;}}
为了可以多次进行记录,我们需要在此基础上,添加一个循环,因为是未知次数,所以我们使用while(true)进行无限循环,使用case '4'里面的方法进行结束循环。
while(true) {System.out.println("-------------------------家庭收支记账软件-------------------------");System.out.println();System.out.println(" 1 收支明细");System.out.println(" 2 登记收入");System.out.println(" 3 登记支出");System.out.println(" 4 退出");System.out.println();System.out.print(" 请选择(1-4):");int n = tool.readMenuSelection();switch (n) {case '1':numOne(arr,count);break;case '2':sum = numTwo(arr,count,sum); //返回sum值count++; //count++一定要在方法调用后,否则会出现一行null值break;case '3':sum = numThree(arr,count,sum);count++;break;case '4':numFour();break;}}
故主函数里面的全部代码如下:
int count = 0;int sum = 1000;String[][] arr = new String[10][4];while(true) {System.out.println("-------------------------家庭收支记账软件-------------------------");System.out.println();System.out.println(" 1 收支明细");System.out.println(" 2 登记收入");System.out.println(" 3 登记支出");System.out.println(" 4 退出");System.out.println();System.out.print(" 请选择(1-4):");int n = tool.readMenuSelection();switch (n) {case '1':numOne(arr,count);break;case '2':sum = numTwo(arr,count,sum); //返回sum值count++; //count++一定要在方法调用后,否则会出现一行null值break;case '3':sum = numThree(arr,count,sum);count++;break;case '4':numFour();break;}}}
项目阶段二
完成收入、支出的记录功能
收入功能
界面:
代码:
public static int numTwo(String[][] arr,int count, int sum){ //收入记录功能System.out.println("请输入本次收入金额:");int money = tool.readNumber(); //调用tool类里面已经写好的方法,进行输入收入金额System.out.println("请输入本次收入的说明:");String explain = tool.readString(); //调用tool类里面已经写好的方法,进行收入说明arr[count][0]="收入"; //count是main函数里面记录的记录次数,目的是为了表明这条数据输入是第几行sum+=money;arr[count][1]= Integer.toString(sum); //这里需要进行强制转换arr[count][2]= "+" + String.valueOf(money);arr[count][3]=explain;System.out.println("添加成功!");return sum;}
注:因为数组定义的是String类型,所以sum需要进行强制转换,这里的强制转换需要用Integer.toString,而不能直接使用int;
转换成int类型是为了对总金额进行收入、支出的运算
支出功能
界面:
代码:
public static int numThree(String[][] arr,int count, int sum){System.out.println("请输入本次支出金额:");int money = tool.readNumber();System.out.println("请输入本次支出的说明:");String explain = tool.readString();arr[count][0]="支出";sum-=money;arr[count][1]= Integer.toString(sum); //进行强制转换arr[count][2]= "-" + String.valueOf(money);arr[count][3]=explain;System.out.println("添加成功!");return sum;}
支出功能具体代码和注意事项和收入功能差不多,支出功能需要注意一点的是,对总金额进行运算时,支出功能是sum -= money,进行减法运算,而收入功能是sum += money,进行加法运算
收支明细功能
界面:
代码:
public static void numOne(String[][] arr,int count){ //收支明细功能System.out.println("收支\t\t\t账户总金额\t收支金额\t\t说 明");for( int i = 0; i < count; i++){for(int j = 0; j < arr[i].length; j++){ //for循环遍历System.out.print(arr[i][j] + "\t\t\t");}System.out.println();}System.out.println("------------------------------------------------------------------");}
使用二维数组的遍历,对记录入二维数组的数据进行输出
值得注意的一点是,我需要输出的行数是我输入的行数,使用这里使用count,而不是arr.length
退出功能
界面:
代码:
public static char numFour(){Scanner sc = new Scanner(System.in);System.out.println("是否确认退出?(Y/N):");String confirm = sc.nextLine();char y = confirm.charAt(0); //类型转换char yes = 'Y';char no = 'N';if(y == yes){System.exit(0);}else if(y == no){return 0;}else{System.out.println("请输入正确指令");}return numFour(); //返回方法}
退出功能比较简单,使用判断,如果是'Y',就停止运行,如果是 'N'则返回到开始,如果两者都不是,则输出提示语句,并且返回到这个方法。
完整代码:
package com;import java.util.Scanner;public class work {public static void main(String[] args) {int count = 0;int sum = 1000;String[][] arr = new String[10][4];while(true) {System.out.println("-------------------------家庭收支记账软件-------------------------");System.out.println();System.out.println(" 1 收支明细");System.out.println(" 2 登记收入");System.out.println(" 3 登记支出");System.out.println(" 4 退出");System.out.println();System.out.print(" 请选择(1-4):");int n = tool.readMenuSelection();switch (n) {case '1':numOne(arr,count);break;case '2':sum = numTwo(arr,count,sum); //返回sum值count++; //count++一定要在方法调用后,否则会出现一行null值break;case '3':sum = numThree(arr,count,sum);count++;break;case '4':numFour();break;}}}public static void numOne(String[][] arr,int count){ //收支明细功能System.out.println("收支\t\t\t账户总金额\t收支金额\t\t说 明");for( int i = 0; i < count; i++){for(int j = 0; j < arr[i].length; j++){ //for循环遍历System.out.print(arr[i][j] + "\t\t\t");}System.out.println();}System.out.println("------------------------------------------------------------------");}public static int numTwo(String[][] arr,int count, int sum){ //收入记录功能System.out.println("请输入本次收入金额:");int money = tool.readNumber();System.out.println("请输入本次收入的说明:");String explain = tool.readString();arr[count][0]="收入";sum+=money;arr[count][1]= Integer.toString(sum); //进行强制转换arr[count][2]= "+" + String.valueOf(money);arr[count][3]=explain;System.out.println("添加成功!");return sum;}public static int numThree(String[][] arr,int count, int sum){ //支出记录功能System.out.println("请输入本次支出金额:");int money = tool.readNumber();System.out.println("请输入本次支出的说明:");String explain = tool.readString();arr[count][0]="支出";sum-=money;arr[count][1]= Integer.toString(sum); //进行强制转换arr[count][2]= "-" + String.valueOf(money);arr[count][3]=explain;System.out.println("添加成功!");return sum;}public static char numFour(){Scanner sc = new Scanner(System.in);System.out.println("是否确认退出?(Y/N):");String confirm = sc.nextLine();char y = confirm.charAt(0);char yes = 'Y';char no = 'N';if(y == yes){System.exit(0);}else if(y == no){return 0;}else{System.out.println("请输入正确指令");}return numFour();}}
tool工具类完整代码:
package com;
import java.util.Scanner;
public class tool {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;}
}
Java家庭记账程序相关推荐
- java小项目家庭记账程序
文章目录 java小项目家庭记账程序 **1.项目目标:** 2.项目需求: 3.具体思路: 4.具体代码: 1.页面: 2.Option_1类: 3.Option_2类: 4.Option_3类: ...
- 使用java实现基础的家庭记账程序
家庭记账程序 需求说明 具体操作 完整代码 总结 需求说明 1.该程序能够记录家庭的收入.支出,并能打印收支明细表 2.项目采用分级菜单的方式.主菜单如下: 3.假设家庭起始的生活基本金为10000元 ...
- 简单实现家庭记账程序
简易家庭记账程序 一.需求说明 二.代码解析 主方法 记录收入 记录支出 收支明细 三.运行部分效果 四.完整源代码 一.需求说明 主要是用Java实现一个能记录家庭记账的小程序,所需要的方法也比较简 ...
- 简单实现家庭记账程序(java)
目录 一.项目需求及流程说明 1.需求说明: 2.流程说明 项目阶段1 项目阶段2 项目阶段3 二.完整源代码及工具类 1.工具类 2.主功能程序 一.项目需求及流程说明 1.需求说明 整体说明: 模 ...
- Java基础:家庭记账程序
目标: 模拟实现一个基于文本界面的家庭记账软件,灵活运用基础知识 需求分析: 该软件能够记录家庭的收入.支出,并能够打印收支明细表 其主菜单如下: 需要满足的条件有: 工作流程图如下: 这里是实现代码 ...
- 使用Java实现简单的家庭记账程序
文章目录 1.需求说明 2.具体实现 1.需求说明 1.模拟实现一个基于文本界面(程序控制台)的<家庭收支记录程序>,该程序能够记录家庭的收入.支出,并能够打印收支明细表. 2.项目采用分 ...
- java家庭记账代码_Java的家庭记账本程序(B)
package sql.mysql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepar ...
- Java家庭记账小软件
通过以下这个小案例,来作为Java入门的第一课.虽然之前学过C#语言和C语言,但还是仔仔细细的敲了以下代码,并且都有详细的注释.相信这对有过其它编程语言基础的你并不难. 先来看下要实现的效果: 首先要 ...
- Java写家庭记账软件
java 家庭记账软件 Miraitowa 本内容介绍的是有关java制作一个家庭记账软件的相关知识.但是由于我也是初学,所以希望大家多多指教. 以下就是我们这次的题: 需求说明 •模拟实现基于文本界 ...
最新文章
- springboot集成swagger2测试接口
- 前端知识点回顾之重点篇——JavaScript异步机制
- 给FlvDownloader加了一个视频预览的功能
- delphi调用windows api
- 8屏 旌宇多屏管理软件_如何选择拼接屏,不能说的秘密,都在这!
- 向量 矩阵 张量_张量,矩阵和向量有什么区别?
- 精心准备了10个行业30张大屏模板,0代码直接套用
- pytorch学习笔记(十):MLP
- matlab按图像边缘抠图_PS抠图教程_PS抠图方法大全
- APP与服务器数据传输的加密方式
- “去中心化”和“分布式”的区别
- 谨以此篇献给正在迷茫的人生 浅谈网络时代各种骗局
- transition(过渡)
- Digital Clock 3D for Mac(3D机械时钟动态桌面壁纸)
- SPRINGBOOT中如何进行开发环境和生产环境的配置?
- ArcGIS教程 - 10 栅格数据分析
- 初识pandas及基本的增删改查
- JAVA 知识点 | Hook
- esb和eai的区别
- 字符串(varchar)和二进制(varbinary)互转
热门文章
- 手机web端唤醒qq客户端以及电脑web端唤醒qq客户端
- 我的markdown临时图片区(for 印象笔记web)
- 蜘蛛大战之 站点LOGO(SEO)
- python弧度值转角度值_python 弧度与角度互转实例
- 《沉思录卷十》幸福就是按照本性生活
- Paypal+本地支付,是跨境外贸收款最好的解决方案!
- 【JZOJ4597】现世斩
- 程序员视角的计算机系统 第一章 计算机系统 之旅
- 格力美的,谁代表中国制造的未来
- vs2017或vs2019安装中Microsoft.VisualStudio.MinShell.Msi.Resources出错的问题