Java学习笔记day3--家庭收支明细小项目
/* 项目一:家庭记账软件: 模拟实现基于文本界面的《家庭记账软件》; 该软能记录家庭收入、支出,并能够打印收支明细表; 1.该项目采用分级菜单方式,主菜单如下: ================家庭收支记账软件=============== 1.收支明细 2.登记收入 3.登记支出 4.退 出 请选择(1-4):_ 2.收支明细要求输出格式如下: ================收支明细表================ 账户余额 收支明细 说明 10000 0 初始金额 9800 -200 购物 10300 +500 体力劳动 3.每次登记支出或收入完成后,控制台输出: =================登记完成================= 4.选择4退出是,控制台输出“是否确认退出?y/n” 如果用户输入y,则退出,否则继续显示主菜单 5.如果用户输入的不是1-4,提醒用户输入错误 6.除非用户选择4退出,否则其他选项展示完成后,继续向用户展示主菜单并继续询问用户下一步的操作 */ import java.util.Scanner; public class FamliyAccount{ static boolean isFlag=true; static int balance[]= {10000,0,0,0,0,0,0,0,0,0};//暂时不知道如何定义变长度的数组,先假定这个记账软件只能显示最近十次的交易明细 static int income[]= {0,0,0,0,0,0,0,0,0,0,0}; static String reason[]= {"","","","","","","","","",""}; static Scanner scan=new Scanner(System.in); static int count=0; public static void main(String[] agrs) { reason[0]=""; income[0]=0; while(isFlag) { System.out.println("================家庭收支记账软件==============="); System.out.println(" 1.收支明细"); System.out.println(" 2.登记收入"); System.out.println(" 3.登记支出"); System.out.println(" 4.退 出"); System.out.println(); System.out.println(" 请选择(1-4):_"); readMenuSelection() ; if(isFlag==false) { System.out.println("===============退出成功================="); break; } } } public static void readMenuSelection() { int selection=scan.nextInt(); switch(selection) { case 1: ReceiptDisbursement();//收支明细 break; case 2: RegisterIncome();//登记收入 break; case 3: RegisterOutcome();//登记支出 break; case 4: isFlag=Quit(isFlag);//退出; break; default: System.out.println("输入错误,请重新输入!"); break; } } public static void ReceiptDisbursement() { System.out.println("=======================收支明细表===================="); System.out.println("账户余额 \t收支明细\t\t说明"); for(int i=0;i<=count;i++) { System.out.println(balance[i]+"\t\t"+income[i]+"\t\t"+reason[i]); } } public static void RegisterIncome() { count++; System.out.println("请输入收入金额:元"); income[count]=scan.nextInt(); System.out.println("请输入收入原因:"); reason[count]=scan.next(); balance[count]=balance[count-1]+income[count]; System.out.println("=======================登记完成===================="); } public static void RegisterOutcome() { count++; System.out.println("请输入支出金额:元"); income[count]=-scan.nextInt(); System.out.println("请输入支出原因:"); reason[count]=scan.next(); balance[count]=balance[count-1]+income[count]; System.out.println("=======================登记完成===================="); } public static boolean Quit(boolean isFlag) { System.out.println("确定要退出吗?y/n"); String answer=scan.next(); char answer0=answer.charAt(0); if(answer0=='y') isFlag=false; //需格外注意的是,isFlag只是 Quit函数的形参,函数内部形参的改变并不能改变函数外面的isFlag;又考虑到Java没有指针, //因此,想到可以让该函数返回一个布尔型数据,在主函数里零isFlag等于返回的false,实现了主函数里isFlag的变化。 return isFlag; } //=======================================================本项目代码暂时存在的问题=================================================== //1.本项目由于balance和income、reason数组都是固定十个的,只能记录九次收支变化; //2.本项目没有做异常处理,比如对于操作选择,如果输入的不是整数,将报异常,本项目所有scan.nextInt()都需要加异常处理 }
分类:
Java学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)