记账软件软件分两个部分。分别是
Utility.java和FamilyAccount.java两个部分。
第一部分创建一个Utility工具类,很多瓜迷按视频操作的时候,会遇到一这样的错误:“The method readKeyBoard(int) is undefined for the type Utility”。
是因为缺少readKeyBoard方法。能运行的Utility.java如下:
import java.util.Scanner;
public class Utility{
private static Scanner scanner=new Scanner(System.in);
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;
}
else break;
}
return line;
}
}
注意readKeyBoard方法。
另外一个文件:FamilyAccount.java
稍作修改后的内容如下:
import java.util.Date;
import java.text.SimpleDateFormat;
class FamilyAccount{
public static void main(String[] args) {
boolean isFlag=true;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println(df.format(new Date()));// new Date()为获取当前系统时间
//long currentTime=0;
String currentTime = "";
String details="";
int balance=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说 明\t\t日 期\n");
System.out.println(details);
System.out.println("---------------------------------------------------------------------------------");
break;
case '2':
System.out.print("本次收入金额:");
int money=Utility.readNumber();
System.out.print("本次收入说明:");
String info=Utility.readString();
balance+=money;
Date now1 = new Date();
currentTime = df.format(now1);
details+=("收入\t\t"+balance+"\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(balance>=expend) {
balance-=expend;
Date now2 = new Date();
currentTime = df.format(now2);
details+=("支出\t\t"+balance+"\t\t-"+expend+"\t\t"+info2+"\t\t"+currentTime+"\n");
}
else {
System.out.println("本次支出超出账户额度,本次支出失败!");
Date now3 = new Date();
currentTime= df.format(now3);
details+=("支出\t\t"+balance+"\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;
}
}
}
}
具体的测试运行结果如下: