学习Java已经过了半个月左右了,所学的知识已经能够写一些小程序或者小项目,虽然它可能没有那么高级,但是也能检验你之前所学的全部内容。所以今天就与大家分享一下我的小项目经验。

一、需求说明

该软件能够记录家庭的收入、支出,并能够打印收支明细表,项目采用分级菜单方式。主菜单如下:

-----------------家庭收支记账软件-----------------

1 收支明细
2 登记收入
3 登记支出
4 退 出

请选择(1-4):_

假设家庭起始的生活基本金为10000元

每次登记收入(菜单2)后,
收入的金额应累加到基本金上,并记录本次收入明细,
以便后续的查询。

每次登记支出(菜单3)后,
支出的金额应从基本金中扣除,并记
录本次支出明细,以便后续的查询。

查询收支明细( 菜单1)时,
将显示所有的收入、支出名细列表

二、项目阶段

阶段一

首先,实现界面展示功能

并且能根据输入的数据进入到每个功能里。

阶段二

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


从键盘读取收入、支出的金额,从键盘读取收入、支出的原因,按照要求存储数据(数组),添加成功。如上图所示。

让项目更完善

引入工具类,实现一些错误输入判断,并且不断的调试程序的bug,完善程序的功能。

三、解题思路

首先项目需用到的知识有:Sanner(获取用户输入)、switch分支语句、方法的定义和调用、数组(一维或者二维)、以及让程序能一直运行下去的死循环语句。

菜单界面

首先构建一个死循环语句将菜单的基本界面放入循环当中,用打印语句System.out.println();构建基本菜单界面,构建完成后获取一个输入值,然后将这个值放入switch当中进行分支判断,这样就能让用户选择要进行的操作,然后再case语句中调用方法,实现对应的功能。

部分程序如下:

while(choice){System.out.println("1.收支明细");System.out.println("2.登记收入");System.out.println("3.登记支出");System.out.println("4.退出");System.out.println("请输入(1-4):");String a = readKeyBoard(1);//取c中的第一个字符char ch = a.charAt(0);if(ch != '1' && ch != '2' && ch != '3' && ch != '4'){System.out.println("您输入的数据有误,请重新输入");}else {switch (ch){case '1':incomeAndExpenditureDetails(i,arr);break;case '2':registrationIncome(i,arr);i++;break;case '3':registeredExpenditure(i,arr);i++;break;case '4':System.out.println("正在退出....");choice = false;break;}}}System.out.println("退出成功!");

收支明细

收支明细要做的事情就是打印出数组里的东西,将添加到数组里的数据答应输出到控制台。所以我们要写的方法为一个简单的循环输出语句即可。

代码如下:

//收支明细public static void incomeAndExpenditureDetails(int i,String[][] arr) {//        System.out.println(Arrays.toString(arr));for (int k = 0; k < i; k++) {for (int j = 0; j <arr[k].length ; j++) {System.out.print(arr[k][j]+"\t");}System.out.println();}}

这里要注意,我们采用的是二维数组的方式来进行该项目。思路为在主函数中构建一个,足够大的二维数组,这里我给的长度为[10][4]。其实10可以更大,随你想运行多久的程序而确定。

String[][] arr= new String[10][4];

登记收入

构建一个方法要求能从键盘读取收入、支出的金额,从键盘读取收入、支出的原因,按照要求存储数据(数组),添加成功。

这里主要的问题在于数据类型的转换,因为有字符串的存在所以我们定义的数组为String类型的数组,所以我们存入的数据也必须是字符串类型的数组,但是收支金额要做加减运算的话就必须为整数或者是小数才行,这就需要用到强制类型转换。

转为String类型,代码如下:

String ab = c + "";

转为Double类型,代码如下:

double x = Double.parseDouble(arr[i-1][1])+c;

解决完这个问题后方法的功能基本就能完成,代码参考如下:

public static void registrationIncome(int i,String[][] arr) {String[] arr1= new String[4];Scanner sc = new Scanner(System.in);System.out.println("请输入收入金额:");
//        String a = readKeyBoard(4);double c= readNumber();
//        double ch = Double.parseDouble(a);if (c>0){//强制类型转换为StringString ab = "+"+c + "";arr1[2] =ab;System.out.println("请输入说明:");String b = readKeyBoard(6);arr1[3]=b;arr1[0] ="收入";//强制类型转换为doubledouble x = Double.parseDouble(arr[i-1][1])+c;String y = x + "";arr1[1] =y;for (int j = 0; j < 1; j++) {for (int k = 0; k <arr[j].length ; k++) {System.out.print(arr[j][k]+"\t");}System.out.println();}for (int j = 0; j <arr1.length ; j++) {System.out.print(arr1[j]+"\t");}System.out.println();arr[1][1] = arr1[1];arr[1][2] =arr1[2];}else {System.out.println("您输入的数据有误,请重新选择");}//将一维数组的值存入二维数值中for (int j = 0; j <=3 ; j++) {arr[i][j] = arr1[j];}}

登记支出

这里的方法跟登记收入差不多,只有一个加减的问题,完成登记收入的方法后就能依葫芦画瓢的完成登记支出方法的定义。

具体代码如下:

public static void registeredExpenditure(int i,String[][] arr) {String[] arr1= new String[4];Scanner sc = new Scanner(System.in);System.out.println("请输入支出金额:");double a= readNumber();double z = Double.parseDouble(arr[i-1][1]);if(a>z){System.out.println("余额不足,请重新选择");}else if(a>0){//强制类型转换为StringString ab = "-"+a + "";arr1[2] =ab;System.out.println("请输入说明:");String b = readKeyBoard(6);arr1[3]=b;arr1[0] ="支出";double x = Double.parseDouble(arr[i-1][1])-a;String y = x + "";arr1[1] =y;for (int j = 0; j < 1; j++) {for (int k = 0; k <arr[j].length ; k++) {System.out.print(arr[j][k]+"\t");}System.out.println();}for (int j = 0; j <arr1.length ; j++) {System.out.print(arr1[j]+"\t");}System.out.println();arr[1][1] = arr1[1];arr[1][2] = arr1[2];}else {System.out.println("您输入的数据有误,请重新选择");}for (int j = 0; j <=3 ; j++) {arr[i][j] = arr1[j];}}

完善项目

做完登记支出后项目的基本功能也就擦不多完成了,但是还有很多需要调整的地方,如我在输入收支金额的时候超长输入,或者输入“ashdakh”的这种字符串等,就会让程序出现问题,所以我们要写一下新的方法来对其进行限制。

如:限制输入的长度

public static String readKeyBoard(int limit) {Scanner sc = new Scanner(System.in);String line = "";//判断是否有数据输入sc.hasNext()while (sc.hasNext()) {line = sc.nextLine();if (line.length() < 1 || line.length() > limit) {System.out.println("输入长度(不大于" + limit + ")错误,请重新输入:");continue;}break;}return line;}

限制输入的类型:

public static double readNumber() {double n;for (; ; ) {String str = readKeyBoard(4);try {n = Double.parseDouble(str);break;} catch (NumberFormatException e) {System.out.println("数字输入错误,请重新输入:");}}return n;}

最后只要将这些方法在主函数中调用执行,就能完成一个小的家庭记账项目。

完整代码如下:

package 关卡7;import java.util.Arrays;
import java.util.Scanner;
public class test1 {public static void main(String[] args) {//Scanner sc = new Scanner(System.in);int i =2;String[][] arr= new String[10][4];arr[0][0] = "收支";arr[0][1] = "账户金额";arr[0][2] = "收支金额";arr[0][3] = "说明";arr[1][0] = "本金";arr[1][1] = "10000";arr[1][2] = "0";arr[1][3] = "账户资金";//  int limit = 5;boolean choice = true;while(choice){System.out.println("1.收支明细");System.out.println("2.登记收入");System.out.println("3.登记支出");System.out.println("4.退出");System.out.println("请输入(1-4):");String a = readKeyBoard(1);//取c中的第一个字符char ch = a.charAt(0);if(ch != '1' && ch != '2' && ch != '3' && ch != '4'){System.out.println("您输入的数据有误,请重新输入");}else {switch (ch){case '1':incomeAndExpenditureDetails(i,arr);break;case '2':registrationIncome(i,arr);i++;break;case '3':registeredExpenditure(i,arr);i++;break;case '4':System.out.println("正在退出....");choice = false;break;}}}System.out.println("退出成功!");}
//收支明细public static void incomeAndExpenditureDetails(int i,String[][] arr) {//        System.out.println(Arrays.toString(arr));for (int k = 0; k < i; k++) {for (int j = 0; j <arr[k].length ; j++) {System.out.print(arr[k][j]+"\t");}System.out.println();}}
//登记收入public static void registrationIncome(int i,String[][] arr) {String[] arr1= new String[4];Scanner sc = new Scanner(System.in);System.out.println("请输入收入金额:");
//        String a = readKeyBoard(4);double c= readNumber();
//        double ch = Double.parseDouble(a);if (c>0){//强制类型转换为StringString ab = "+"+c + "";arr1[2] =ab;System.out.println("请输入说明:");String b = readKeyBoard(6);arr1[3]=b;arr1[0] ="收入";//强制类型转换为doubledouble x = Double.parseDouble(arr[i-1][1])+c;String y = x + "";arr1[1] =y;for (int j = 0; j < 1; j++) {for (int k = 0; k <arr[j].length ; k++) {System.out.print(arr[j][k]+"\t");}System.out.println();}for (int j = 0; j <arr1.length ; j++) {System.out.print(arr1[j]+"\t");}System.out.println();arr[1][1] = arr1[1];arr[1][2] =arr1[2];}else {System.out.println("您输入的数据有误,请重新选择");}for (int j = 0; j <=3 ; j++) {arr[i][j] = arr1[j];}}
//登记支出public static void registeredExpenditure(int i,String[][] arr) {String[] arr1= new String[4];Scanner sc = new Scanner(System.in);System.out.println("请输入支出金额:");double a= readNumber();double z = Double.parseDouble(arr[i-1][1]);if(a>z){System.out.println("余额不足,请重新选择");}else if(a>0){//强制类型转换为StringString ab = "-"+a + "";arr1[2] =ab;System.out.println("请输入说明:");String b = readKeyBoard(6);arr1[3]=b;arr1[0] ="支出";double x = Double.parseDouble(arr[i-1][1])-a;String y = x + "";arr1[1] =y;for (int j = 0; j < 1; j++) {for (int k = 0; k <arr[j].length ; k++) {System.out.print(arr[j][k]+"\t");}System.out.println();}for (int j = 0; j <arr1.length ; j++) {System.out.print(arr1[j]+"\t");}System.out.println();arr[1][1] = arr1[1];arr[1][2] = arr1[2];}else {System.out.println("您输入的数据有误,请重新选择");}for (int j = 0; j <=3 ; j++) {arr[i][j] = arr1[j];}}//限制长度public static String readKeyBoard(int limit) {Scanner sc = new Scanner(System.in);String line = "";//判断是否有数据输入sc.hasNext()while (sc.hasNext()) {line = sc.nextLine();if (line.length() < 1 || line.length() > limit) {System.out.println("输入长度(不大于" + limit + ")错误,请重新输入:");continue;}break;}return line;}//限制输入类型public static double readNumber() {double n;for (; ; ) {String str = readKeyBoard(4);try {n = Double.parseDouble(str);break;} catch (NumberFormatException e) {System.out.println("数字输入错误,请重新输入:");}}return n;}
}

这就是我的思路和代码,写的比较粗糙和笨拙,所以仅供大家参考。

Java小项目——家庭记账项目相关推荐

  1. java小项目家庭记账程序

    文章目录 java小项目家庭记账程序 **1.项目目标:** 2.项目需求: 3.具体思路: 4.具体代码: 1.页面: 2.Option_1类: 3.Option_2类: 4.Option_3类: ...

  2. java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试

    java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试 java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试 本源码技术栈: 项目架构:B/S架构 开 ...

  3. 基于Java小案例家庭收入支出记录

    基于Java小案例家庭收入支出记录 跟着视频来写的,不喜勿喷,谢谢 package JavaText;public class FamilyAccount {public static void ma ...

  4. Golang学习(二十四)家庭记账项目

    一.项目开发流程 需求分析-->设计阶段-->实现阶段(代码)-->测试阶段-->实施阶段-->维护阶段 二.项目需求说明 1.模拟实现基于文本界面的 <家庭记账软 ...

  5. 微信小程序--家庭记账本开发--01

    微信小程序的开发准备与开发工具的学习 在这次寒假伊始,临近春节,学习进程有所拉下,现在补上.寻找了好多网站的相关学习视频,包括微信公众平台关于小程序这方面也有好多相关资料供查阅. 1.开发准备: 首先 ...

  6. Java 编写一个家庭记账软件 -25天 学习笔记

    练习 package com.xin.base; import java.util.Scanner;public class Part {public static void main (String ...

  7. Java基础:家庭记账程序

    目标: 模拟实现一个基于文本界面的家庭记账软件,灵活运用基础知识 需求分析: 该软件能够记录家庭的收入.支出,并能够打印收支明细表 其主菜单如下: 需要满足的条件有: 工作流程图如下: 这里是实现代码 ...

  8. Java项目----家庭记账软件(基于文本界面)

    一.涉及要点: ①变量的定义 ②基本数据类的使用 ③循环语句 ④分支语句 ⑤方法声明.调用和返回值的接收 ⑥简单屏幕输出格式控制 二.需求说明 ①能够记录家庭的收入.支出,并能够打印收支明细表 ②采用 ...

  9. JAVA毕设项目家庭记账系统(java+VUE+Mybatis+Maven+Mysql)

    项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. activity 防止多次打开_杭州下沙罐式无负压供水设备防止水质污染变频电泵
  2. 801. Minimum Swaps To Make Sequences Increasing
  3. android 存储不被垃圾清理,手机内存足够大,就不需要清理垃圾了?你错了!
  4. python中set集合_Python中的SET集合操作
  5. MySQL 备份 nb3 和 psc的区别
  6. springsecurity3的验证过程
  7. Java、JSP大学生助学贷款管理系统的设计与实现
  8. 可以获得高排名的B2B平台大全
  9. QQ聊天记录的备份和恢复(含迁移与合并)
  10. textaligncenter仍然不居中_你不知道的中华文化,中华文化的根源不是儒家而是河图洛书...
  11. android 没有menu菜单键,android之onCreateOptionsMenu失效,按菜单键无反应
  12. Chrome设置--disable-web-security解决跨域问题
  13. 为什么五笔输入法打字那么快,现在使用的人却越来越少了?
  14. jQuery siblings() 方法
  15. uploadify html5 java_工作中碰到uploadify插件两个版本:HTML5和Flash
  16. python中怎么关闭文件-python_文件的打开和关闭
  17. 店铺如何提升流量,抢占先机
  18. 我成功转型大厂数据分析师后,总结了这些经验…
  19. 华为云麒麟arm架构docker启动redis报错:<jemalloc>: Unsupported system page size
  20. python 遥感图像分类

热门文章

  1. zip压缩到指定目录
  2. ie9 下面输入框后面怎么出现一个黑色叉叉
  3. 3DMax入门级—制作简易沙发
  4. 300iq Contest 1
  5. [某人的题解]徒步旅行(travel)
  6. 【托福独立写作】ETS 官方新托福 185 个作文题库话题分类
  7. pytorch训练网络冻结某些层
  8. Uni-app APP开发、适配指北
  9. 没有实习经验,没有项目经验,简历怎么写?
  10. 2019.08.20【NOIP提高组】模拟 B 组 排序、DP+递推、矩阵乘法+数位DP/类欧