记账软件软件分两个部分。分别是
Utility.java和FamilyAccount.java两个部分。
一:首先需要一个Utility工具类:将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。
具体实现如下:
import java.util.Scanner; 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); //是将整型数据Integer转换为基本数据类型int break; } catch(NumberFormatException e){ //如果有try catch则出现异常程序正常进行 后面加一个sout 则出现异常可以把异常打印出来 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(); //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; } else break; } return line; } }
二:然后需要另一个文件(FamilyAccount.java)
具体代码如下:
import java.util.Date; import java.text.SimpleDateFormat; //时间格式化 class FamilyAccount{ public static void main(String[] args) { boolean isFlag=true; String currentTime = ""; String details=""; int amount=10000; while(isFlag) { System.out.println("=======================================家庭收支记账软件==============================="); System.out.println(" 1 收入明细"); System.out.println(" 2 登记收入"); System.out.println(" 3 登记支出"); System.out.println(" 4 退出\n"); System.out.print(" 请选择(1-4):"); char selection=Utility.readMenuSelection(); switch(selection){ case '1': //System.out.println("1 收支明细"); System.out.println("=====================================当前收支明细记录================================="); System.out.println("收支\t\t账户金额\t\t收支金额\t\t说 明"); System.out.println(details); System.out.println("---------------------------------------------------------------------------------"); break; case '2': System.out.print("本次收入金额:"); int money=Utility.readNumber(); System.out.print("本次收入说明:"); String info=Utility.readString(); amount+=money; details+=("收入\t\t"+amount+"\t\t+"+money+"\t\t"+info+"\t\t"+currentTime+"\n"); System.out.println("-------------本次收入登记完成!--------------\n\n"); break; case '3': System.out.print("本次支出金额:"); int expend=Utility.readNumber(); System.out.print("本次支出说明:"); String info2=Utility.readString(); if(amount>=expend) { amount-=expend; details+=("支出\t\t"+amount+"\t\t-"+expend+"\t\t"+info2+"\t\t"+currentTime+"\n"); } else { System.out.println("本次支出超出账户额度,本次支出失败!"); details+=("支出\t\t"+amount+"\t\t-"+expend+"\t\t"+info2+"(超出余额,失败)"+"\t\t"+currentTime+"\n"); } System.out.println("-------------本次支出登记完成!--------------\n\n"); break; case '4': System.out.print("确认是否退出(Y/N):"); char isExit=Utility.readConfirmSelection(); if(isExit=='Y') { isFlag=false; } break; } } } }
三:具体的测试结果如下: