这里分两个java文件,Utility将我们要用到的功能封装成方法,FamilyAccount是运行的代码,有要用到的功能时直接调用utility中的方法来实现。直接附源码:
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;
}
/*
用于收入和支出金额的输入。该方法从键盘读取一个不超
过四位长度的整数,并将其作为方法的返回值。
*/
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;
}
}
Family Account:
class FamilyAccount{
public static void main(String[] args){
boolean is = true;
int balance = 10000;
String details ="收支\t账户金额\t收支金额\t说明\n";
while(is){
System.out.println("-----------------家庭收支记账软件-----------------\n");
System.out.println(" 1 收支明细 ");
System.out.println(" 2 登记收入 ");
System.out.println(" 3 登记支出 ");
System.out.println(" 4 退出 \n");
System.out.println(" 请选择1-4 ");
//获取1-4
char selection = Utility.readMenuSelection();
switch(selection){
case '1':
System.out.print("*******************当前收支明细记录********************\n");
System.out.print(details);
System.out.print("*******************************************************\n");
break;
case '2':
System.out.print("本次收入金额:");
int income = Utility.readNumber();
System.out.print("说明:");
String description1 = Utility.readString();
balance += income;
details +=("收入\t" + balance + "\t\t" + income + "\t\t" + description1 + "\n");
System.out.println("***********************登记完成************************");
break;
case '3':
System.out.print("本次支出金额:");
int expenditures = Utility.readNumber();
System.out.print("说明:");
String description2 = Utility.readString();
balance -= expenditures;
details += ("支出\t" + balance + "\t\t" + expenditures + "\t\t" + description2 + "\n");
System.out.println("***********************登记完成************************");
break;
case '4':
System.out.print("是否确认退出(y/n):");
char isExit = Utility.readConfirmSelection();
if(isExit == 'Y'){
is = false;
}
}
}
}
}
功能简单,解说一次运行后再次运行不会有上一次的记录,因为没有历史记录存储的地方