学习过程整理
导包 import java.util.Scanner;
public class Unility {
private static Scanner scanner=new Scanner(System.in);
private static String readKeyBoard(int limit){
String line="";
while(scanner.hasNext()){
line=scanner.nextLine();
if (line.length()<1||line.length()>limit){
System.out.print("输入长度错误,请重新输入:");
continue;
}
break;
}
return line;
}
//用于菜单界面的选择。如果键盘输入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);
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;
}
}
主界面
public class FamilyAccount {
public static void main(String[] args){
boolean isFlag=true;
//用于记录用户收入和支出详情
String details ="收支\t\t账户金额\t\t收支金额\t\t说 明\n";
//初始金额
int money=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("-------------------------------------\n");
System.out.print(" 请选择(1-4):");
//获取用户的选择
char selection = Unility.readMenuSelection();
switch(selection){
case '1':
System.out.println("------------当前收支明细记录------------\n");
System.out.println(details);
System.out.println("-------------------------------------\n");
break;
case '2':
System.out.print("本次收入金额:");
int getMoney=Unility.readNumber();
System.out.print("本次收入说明:");
String getShuoMing=Unility.readString();
//处理money
money+=getMoney;
//处理details
details += ("收入\t\t" + money + "\t\t" + getMoney + "\t\t\t" + getShuoMing + "\n");
System.out.println("---------------登记完成---------------\n");
break;
case '3':
System.out.print("本次支出金额:");
int setMoney=Unility.readNumber();
System.out.print("本次支出说明:");
String setShuoMing=Unility.readString();
if(setMoney>money) {
System.out.println("支出超出账户额度,支付失败");
}
else{
money-=setMoney;
details += ("支出\t\t" + money + "\t\t" + setMoney + "\t\t\t" + setShuoMing+ "\n");
System.out.println("---------------登记完成---------------\n");
}
break;
case '4':
System.out.print("确定是否退出(Y/N):");
char isExit = Unility.readConfirmSelection();
if (isExit=='Y'){
isFlag=false;
}
break;
}
}
}
}