家庭收支记账软件

跟大家分享一个简易的家庭收支记账软件,实现查看收支明细,登记收入,登记支出和退出四个功能。

代码的实现需要调用Utility工具类,有关Utility工具类的代码如下所示:

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;
    }
}

首先写出封面,搭建出了大体框架,现在只需对应四个不同功能写出对应代码即可。

class FamilyAccount{
	
	public static void main(String[] args){
		
		boolean isFlag = true;
		
		while(isFlag){
			
			System.out.println("-----------------家庭收支记账软件-----------------\n");
			System.out.println("                    1 收支明细");
			System.out.println("                    2 登记收入");
			System.out.println("                    3 登记支出");
			System.out.println("                    4 退    出\n");
			System.out.print("                    请选择<1-4>:");
			//获取用户选择:1-4(调用Utility工具库中的readMenuSelection方法,实现读取键盘’1’-’4’中的任意字符)
			char selection = Utility.readMenuSelection();
			switch(selection){
				
				case '1':
					System.out.println("收支明细");
					break;
				case '2':
					System.out.println("登记收入");
					break;
				case '3':
					System.out.println("登记支出");
			        break;
				case '4':
					System.out.println("退    出");

			}
			
		}
		
	}
	
}

由于现在while循环没有退出指令,是一个死循环,我们先来实现退出功能。

我们需要用到Utility工具库中的readConfirmSelection方法,该方法可以从键盘读取‘Y’或’N’,并将其作为方法的返回值,用来确认退出。

退出的实现可以给标识变量isFlag赋值false来实现,到下一次循环就会终止。代码如下:

case '4':
					System.out.println("确认是否退出<Y/N>:");
					char isExit = Utility.readConfirmSelection();
					if(isExit == 'Y'){
						isFlag = false;
					}

我们继续来实现查看收支明细功能

我们在while循环外定义一个details字符串用来显示对应的收入或者支出

		String details = "";

这样在登记收入和支出时只需修改details的值就可以显示出我们需要的结果。实现代码如下:

case '1':
					System.out.println("-----------------当前收支明细记录-----------------");
					System.out.println("收支\t账户金额\t收支金额\t说    明");
					System.out.println(details);
					System.out.println("--------------------------------------------------\n");
					break;

接下来实现登记收入功能,输入收入金额和收入说明时需要用到Utility工具库中的readNumber方法和readString方法。

我们在while循环外先定义一个家庭初始金额(这里假设为10000元)

		int balance = 10000;

用到Utility工具库方法从键盘获得收入金额addMoney和收入说明addInfo,接下来只需要改变details字符串就可以改变收支明细的记录。实现代码如下:

case '2':
					System.out.print("本次收入金额:");
					int addMoney = Utility.readNumber();
					System.out.print("本次收入说明:");
					String addInfo = Utility.readString();
					
					//处理balance
					balance += addMoney;
					
					//处理details
					details += ("收入\t" + balance + "\t\t" + addMoney + "\t\t" + addInfo + "\n");
					
					System.out.println("---------------------登记完成---------------------\n");
					break;

最后,与登记收入金额类似,只需加入一个if语句来排除支出大于所有以有金额的情况就可以实现支出金额的登记。实现代码如下:

case '3':
					System.out.print("本次支出金额:");
					int minusMoney = Utility.readNumber();
					System.out.print("本次收支出说明:");
					String minusInfo = Utility.readString();
					
					//处理balance
					if(balance >= minusMoney){
						balance -= minusMoney;
					}else{
						System.out.println("支出超出账户额度,支付失败!!");
						break;
					}

					//处理details
					details += ("支出\t" + balance + "\t\t" + minusMoney + "\t\t" + minusInfo + "\n");
					
					System.out.println("---------------------登记完成---------------------\n");
					break;

完整代码如下:

class FamilyAccount{
	
	public static void main(String[] args){
		
		boolean isFlag = true;
		//用于记录用户的收入和支出的详情
		String details = "";
		//初始金额
		int balance = 10000;
		
		while(isFlag){
			
			System.out.println("-----------------家庭收支记账软件-----------------\n");
			System.out.println("                    1 收支明细");
			System.out.println("                    2 登记收入");
			System.out.println("                    3 登记支出");
			System.out.println("                    4 退    出\n");
			System.out.print("                    请选择<1-4>:");
			//获取用户选择:1-4
			char selection = Utility.readMenuSelection();
			switch(selection){
				
				case '1':
					System.out.println("-----------------当前收支明细记录-----------------");
					System.out.println("收支\t账户金额\t收支金额\t说    明");
					System.out.println(details);
					System.out.println("--------------------------------------------------\n");
					break;
				case '2':
					System.out.print("本次收入金额:");
					int addMoney = Utility.readNumber();
					System.out.print("本次收入说明:");
					String addInfo = Utility.readString();
					
					//处理balance
					balance += addMoney;
					
					//处理details
					details += ("收入\t" + balance + "\t\t" + addMoney + "\t\t" + addInfo + "\n");
					
					System.out.println("---------------------登记完成---------------------\n");
					break;
				case '3':
					System.out.print("本次支出金额:");
					int minusMoney = Utility.readNumber();
					System.out.print("本次收支出说明:");
					String minusInfo = Utility.readString();
					
					//处理balance
					if(balance >= minusMoney){
						balance -= minusMoney;
					}else{
						System.out.println("支出超出账户额度,支付失败!!");
						break;
					}

					//处理details
					details += ("支出\t" + balance + "\t\t" + minusMoney + "\t\t" + minusInfo + "\n");
					
					System.out.println("---------------------登记完成---------------------\n");
					break;
				case '4':
					System.out.println("确认是否退出<Y/N>:");
					char isExit = Utility.readConfirmSelection();
					if(isExit == 'Y'){
						isFlag = false;
					}
					
			}
			
		}
		
	}
	
}

程序截图:

​​​​​​​

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ASP个人家庭记账管理系统是一种基于ASP技术开发的针对个人家庭记账管理软件。该系统主要用于帮助个人家庭记录和管理家庭日常的收支情况,帮助用户提高理财能力,合理规划家庭财务。 该系统具有以下主要功能: 1. 记账功能:用户可以登录系统,在系统中录入每天的收入支出相关信息,包括金额、日期、类别等。用户可以根据需要自定义账目分类,如食品、水电费、交通费等,方便对不同方面的开销进行统计和分析。 2. 统计分析功能:系统会自动将用户录入的账目信息进行统计和分析,生成图表和报表,用直观的方式展示用户的收支情况。用户可以根据自己的需求选择不同的统计周期,比如日、周、月、年等,方便用户及时掌握家庭的财务状况。 3. 预算管理功能:系统提供了预算管理功能,用户可以设定每个月的预算金额,并实时查看已使用金额和剩余金额。系统会自动提醒用户当月的支出是否超出预算,并根据历史数据进行预测和建议,帮助用户更好地控制开支和遵循预算。 4. 数据备份与恢复功能:系统允许用户进行数据备份,保证数据的安全性,用户在需要的时候可以随时恢复备份的数据,防止因为意外情况导致数据丢失。 总之,ASP个人家庭记账管理系统是一款功能全面、易于操作的记账管理软件,可以帮助用户有效地管理家庭财务,实现理财目标,并提供实时的统计和分析报表,帮助用户做出更明智的消费决策。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叁柚木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值