尚硅谷的B站视频中所做的项目一不关注后面的工具类怎么实现的具体功能,只能看到一部份原码。对于想了解的同学我这里写了他的工具类的readKeyBoard()方法,对于他的主类中的String details我用了StringBuilder来代替(因为我自己写这个项目的时候最先想到的就是StringBuilder)下面直接上源码
//package jph;这是我源码所在的包名,你们需要按照实际情况写
/**
* 家庭记账主方法体
*/
public class FamilyAccount {
public static void main(String[] args) {
int balance = 10000;//初始金额
boolean goOn = true;//标志是否退出
char select;//用户的选择操作
//用于记录用户收入和支出的详情
StringBuilder details = new StringBuilder("收支\t账户金额\t收支金额\t说 明\n");//可变的字符串
while (goOn){
System.out.println("---------------家庭收支记账软件---------------\n");
System.out.println(" 1 收支明细");
System.out.println(" 2 登记收入");
System.out.println(" 3 登记支出");
System.out.println(" 4 退 出");
System.out.println(" 请选择(1-4)");
//获取用户的选择
select = Utility.readMenuSelection();
switch (select){
case '1':
System.out.println("-----正在查询收支明细-----");
System.out.println("---------------当前收支明细记录---------------");
System.out.println(details);//打印详细收支信息
System.out.println("--------------------------------------------\n");
break;
case '2':
System.out.println("-----登记收入中-----");
System.out.print("收入金额:");
//调用方法从键盘获得收入金额
int income = Utility.readNumber();
balance += income; //余额增加
System.out.print("收入说明:");
//从键盘获取指支出说明
String incomeDescription = Utility.readString();
//加上之前的收支信息,之所以说最先想到StringBuilder是因为提供的append方法可以直接扩展字符串
details = details.append("收入" + "\t" + balance + "\t\t" + income + "\t\t" + incomeDescription + "\n");
System.out.println("------登记完成------");
break;
case '3':
System.out.println("-----登记支出中------");
System.out.print("支出金额:");
//从键盘获取支出信息
int expenses = Utility.readNumber();
if (expenses > balance){ //处理余额不足的情况
System.out.println("余额不足,支付失败。。。");
}else {
balance -= expenses;
System.out.print("支出说明:");
String expensesDescription = Utility.readString();
details = details.append("支出" + "\t" + balance + "\t\t" + expenses + "\t\t" + expensesDescription + "\n");
}
System.out.println("------登记完成------");
break;
case '4':
System.out.println("-----退出操作------");
System.out.println("是否确认退出?(Y/N)");
char confirm = Utility.readConfirmSelection();
if (confirm == 'Y'){
System.out.println("退出成功...");
goOn = false;
}/*else {//可写可不写
continue;
}*/
break;
}
}
}
}
Utility类的源代码
package jph;
import java.util.Scanner;
/**
* 工具类
* 提供具体的人机界面交互的方法
*/
public class Utility {
private static Scanner scanner = new Scanner(System.in);
/**
* 从键盘读取信息
* @param i
* @return
*/
private static String readKeyBoard(int limit) {
label:for (;;){
String str = scanner.next();
if (str.length() > limit){
System.out.println("输入过长,请重新输入:");
continue label;
}else {
return str;
}
}
}
/**
* 用于界面的选择,该方法读取键盘,如果用户键入”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.println("数字输入有误,请重新输入:");
}
}
return n;
}
/**
* 用于收入和支出说明的输入,该方法从键盘读取一个不超过八位长度的字符串,并将其作为方法的返回值
*/
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;
}
}
版权声明:本文为qq_45757934原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。