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.println("选择错误,请重新输入");
}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.println("输入错误 请重新输入");
}
}
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.println("选择错误 请重新输入");
}
}
return c;
}
private static String readKeyBoard(int limit) {
label:
for (; ; ) {
String str = scanner.next();
if (str.length() > limit) {
System.out.println("输入过长,请重新出入:");
continue label;
} else {
return str;
}
}
}
}
public class FamilyAccount {
public static void main(String[] args) {
boolean isFlag=true;
//用户详情记录
String details="收支\t账户金额\t收支金额\t说 明\n";
//初始金额
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.println("");
System.out.print(" 请选择1-4:");
//获取用户的选择1-41
char selection = Utility.readMenuSelection();
switch (selection){
case '1':
System.out.println("---------当前收支明细记录-----------");
System.out.println(details);
System.out.println("----------------------------------");
break;
case '2':
System.out.print("本次收入金额: ");
int money = Utility.readNumber();
System.out.println("本次收入说明");
String info = Utility.readString();
//处理balance
balance += money;
//处理details
details += ("收入\t" + balance+ "\t" +money +"\t\t"+info+"\n");
System.out.println("---------登记完成----------\n");
break;
case '3':
System.out.println("本次支出");
int outMoney = Utility.readNumber();
System.out.println("本次支出说明");
String outInfo = Utility.readString();
if(balance >= outMoney){
balance -= outMoney;
details += ("支出\t"+balance + "\t" + outMoney+"\t\t"+outInfo+"\n");
System.out.println("---------登记完成----------\n");
}else{
System.out.println("超出支付额度 支付失败");
}
break;
case '4':
System.out.println("确认是否退出(Y/N)");
char isExit=Utility.readConfirmSelection();
if(isExit=='Y'){
isFlag=false;
}
// break;
}
// isFlag=false;
}
}
}