Java阶段三:基础项目—家庭记录收支程序

(怎样选择要执行的操作?) 根据我们所学的基础知识,不难发现使用switch语句就可以做到。

为了简化主界面代码,我把对应实现的功能设计成各个方法,使用时直接调用即可。(设计的各个方法写在本类中,主方法main之外)

界面效果的代码:

//导包

import java.util.Scanner;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Demo {

//定义私有静态对象,创建后每个方法都可使用

private static Scanner sc = new Scanner(System.in);

//定义账户余额,并设置初始值

private static int sumMoney = 10000;

//定义数组中记录的条数

private static int count = 0;

public static void main(String[] args) {

//定义二维数组并设置容量

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

//定义一个boolean值,用于判断主界面的循环

boolean flag=true;

while(flag){

//调用数组扩容的方法

arr = expandArray(arr);

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("请选择(1-4): ");

//输入你想要进行的操作数

String num = sc.next();

//调用判断输入的方法

char b1 = readMenuSelection(num);

switch(b1){

case ‘1’:

//调用查看信息的方法

readInfo(arr);

break;

case ‘2’:

//调用添加收入记录的方法

addRecord(arr);

break;

case ‘3’:

//调用添加支出记录的方法

reduceRecord(arr);

break;

case ‘4’:

//调用选择退出的方法

boolean b = quitSystem();

if(b==true)

flag=false;

else break;

}

}

}

}

界面效果图:

设计判断输入的各个方法


1. 判断主界面功能选择输入的方法

**目的:**用户输入错误时给出提示,直到输入正确的操作数字符后再进行操作,而不是输入错误,程序就直接停止运行。

//创建判断输入的方法

//返回值类型char(需要返回一个字符和操作数字符匹配)

//参数为String(用户输入的类型是String)

public static char readMenuSelection(String n) {

char c;

//设置死循环,满足条件后退出,直到获取到正确操作数字符

while(true){

//获取参数字符串的第一个字符

c = n.charAt(0);

//判断是否对应给定的操作数字符

if (c != ‘1’ && c != ‘2’ && c != ‘3’ && c != ‘4’) {

System.out.print(“输入数字错误,请按提示正确输入:”);

String n1 = sc.next();

n = n1;

} else break;

}

//返回给定的正确操作数字符

return c;

}

2. 判断输入是否全为数字

目的: 在用户输入收入金额和支出金额时进行判断,为了使输入的内容规范,要求输入的字符串只能是数字,然后再转换成 int 类型的数字进行操作。

//把全为数字的字符串转换为int类型,并返回其数值

public static int printInt(String x){

//调用判断字符串是否全为数字的方法的返回值进行判断

if(isNumberic(x)){

//将获取到的数字字符串转为int类型的数字

int y = Integer.parseInt(x);

return y;

}else{

//写一个死循环,直到用户输入全为数字字符串时才停止

while(true){

System.out.print("你输入的值无意义! 请你重新输入: ");

String num = sc.next();

if(isNumberic(num)){

int y1 = Integer.parseInt(num);

return y1;

}

}

}

}

//判断字符串是否全是数字,是返回true,否则返回false

//设置参数为String类型的字符串

public static boolean isNumberic(String str) {

//使用正则表达式进行判断是否全为数字

Pattern pattern = Pattern.compile(“[0-9]*”);

return pattern.matcher(str).matches();

}

3. 判断输入是否全为汉字

**目的:**在用户输入收入说明和支出说明时进行判断,为了使输入的内容规范,要求输入的字符串只能是汉字。

//判断字符串是否全为汉字,是则返回,否则从新输入字符串

public static String printString(String x){

if(isChinese(x)){

return x;

}else{

while(true){

System.out.print("输入错误! 请你重新输入: ");

String t = sc.next();

if(isChinese(t)){

return t;

}

}

}

}

//判断字符串是否全是汉字,是返回true,否则返回false

public static boolean isChinese(String str) {

//使用正则表达式进行判断是否全为汉字

Pattern p_str = Pattern.compile(“[\u4e00-\u9fa5]+”);

Matcher m = p_str.matcher(str);

if(m.find()&&m.group(0).equals(str)){

return true;

}

return false;

}

添加收入记录的方法


**设计思路:**根据需求可知用户首先应该输入收入的金额及说明,并且判断输入的规范性;然后再算出增加收入后的总金额;最后将各个记录保存到二维数组中。(将数组中的记录条数加1)

代码实现:

//创建添加收入记录的方法

//该方法直接使用无需返回值,设置参数为String类型的二维数组

public static void addRecord(String[][] arr){

System.out.println(“收入的金额:”);

String num1 = sc.next();

//调用判断输入是否全为数字的方法

int money = printInt(num1);

System.out.println(“收入的原因:”);

String b1 = sc.next();

//调用判断输入是否全为汉字的方法

String because = printString(b1);

arr[count][0]=“收入”;

//计算收入的总金额值

sumMoney += money;

//将int类型的总金额和收入金额转为String类型

String t1=String.valueOf(sumMoney);

String t2=String.valueOf(money);

arr[count][1]=t1;

arr[count][2]=t2;

arr[count][3]=because;

//数组中的记录条数加1

count++;

System.out.println(“添加成功!”);

}

效果展示:

添加支出记录的方法


**设计思路:**跟添加收入记录的方法大同小异,可对比起来设计。(将数组中的记录条数加1)

代码实现:

//创建添加支出记录的方法

public static void reduceRecord(String[][] arr){

System.out.println(“支出的金额:”);

String num2 = sc.next();

int money1 = printInt(num2);

System.out.println(“支出的原因:”);

String b2 = sc.next();

String because1 = printString(b2);

arr[count][0]=“支出”;

sumMoney -= money1;

String t3=sumMoney+“”;

String t4=money1+“”;

arr[count][1]=t3;

arr[count][2]=t4;

arr[count][3]=because1;

count++;

System.out.println(“添加成功!”);

}

效果展示:

查看信息记录的方法


**设计思路:**用户在还没有录入信息的时候也有可能会进行查询操作,此时我们首先就应该进行判断并给出提示信息;然后再进行二维数组的遍历;最后进行判断查询的类别,格式化输出记录。

代码实现:

//创建查看信息的方法

public static void readInfo(String[][] arr){

//判断二维数组是否为空,如果为空给出提示信息,如不为空进行查询操作

if(arr[0][0]==null){

System.out.println(“暂无收支记录,账户余额为:10000元”);

}else{

System.out.println(“收支\t\t账户总金额\t\t收支金额\t\t说 明”);

//循环二维数组

for(int i=0; i<arr.length; i++){

//循环二维数组中的一维数组

for(int j=0; j<arr[i].length; j++){

if(arr[i][j]!=null){

//判断查询的记录是收入还是支出,以便给出不同的展示效果

if(arr[i][0]==“收入”){

//格式化输出,为了美观

System.out.println(String.format(“%-6s %-15s +%-11s %-8s”,arr[i][j],arr[i][1],arr[i][2],arr[i][3]));

break;

}else{

System.out.println(String.format(“%-6s %-15s -%-11s %-8s”,arr[i][j],arr[i][1],arr[i][2],arr[i][3]));

break;

}

}

}

}

}

}

效果展示:

确认退出的方法


**设计思路:**给出提示语句让用户输入,再对用户的输入进行判断,如果输入的是y或者Y表示用户确认退出返回 true,输入其他则认为用户选择取消退出返回 false。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-ptLCAAsH-1714852800443)]

[外链图片转存中…(img-Hn0ftZCF-1714852800444)]

[外链图片转存中…(img-612MppHf-1714852800444)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 15
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值