一、来源
该项目(案例)来自是Java -Java 学习- Java 基础到高级-宋红康-零基础自学Java-尚硅谷中的项目一
下面的代码是按照视频中的思路写的,基本与视频相同
二、代码
MyUtil.java文件代码
import java.util.Scanner;
public class MyUtil {
private static Scanner sc = new Scanner(System.in);
/*
该方法用于从键盘读取主菜单的1,2,3,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() {
return readKeyBoard(8);
}
public static char readConfirmSelection(){
char c;
System.out.print("是否退出,请输入(Y/N):");
for(; ;){
String str = readKeyBoard(1).toUpperCase();
c = str.charAt(0);
if(c == 'Y' || c == 'N'){
break;
} else {
System.out.println("输入错误,请重新输入:");
}
}
return c;
}
/*
改方法用于从键盘读指定长度的取字符串,返回一个字符串
*/
public static String readKeyBoard(int length) {
String str;
for (; ;){
str = sc.next();
if(str.length() > length){
System.out.println("输入数据超出范围,请重新输入" + length + "个数据:");
} else break;
}
return str;
}
}
FamilyAccount.java文件代码
public class FamilyAccount {
public static void main(String[] args) {
boolean isFlag = true; //循环的标志
int balance = 10000; //余额
String datails = ""; //账户信息
while (isFlag){
System.out.println("---------------家庭收支记账软件------------------");
System.out.println(" 1.收支明细");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退 出");
System.out.print(" 请输入(1~4):");
char selection = MyUtil.readMenuSelection();
System.out.println();
switch (selection){
case '1':
System.out.println("---------------当前收支明细记录----------------");
System.out.println("收 支\t\t账户金额\t\t收支金额\t\t说 明");
System.out.println(datails);
System.out.println("----------------------------------------------");
System.out.println();
break;
case '2':
System.out.println("---------------登记收入信息---------------------");
System.out.print("本次收入金额:");
int money = MyUtil.readNumber(); //调用readNumber方法读取金额
balance += money; //修改金额
System.out.print("本次收入说明:");
String info = MyUtil.readString(); //调用readString方法读取信息
//将信息写入datails
datails += "收 入\t\t" + balance + "\t\t" + money + "\t\t\t" + info + "\n";
System.out.println();
break;
case '3':
System.out.println("---------------登记支出信息-----------------");
System.out.print("本次支出金额:");
int money2 = MyUtil.readNumber();
balance -= money2;
System.out.print("本次支出说明:");
String info2 = MyUtil.readString();
datails += "支 出\t\t" + balance + "\t\t" + money2 + "\t\t\t" + info2 + "\n";
System.out.println();
break;
case '4':
char confirmSelection = MyUtil.readConfirmSelection();
if (confirmSelection == 'Y') {
isFlag = false;
System.out.println("退出成功!");
}
break;
}
}
}
}
三、运行效果
四、思路小结
- 该项目有两个java文件
MyUtil.java中保存的是数据读取的方法
FamilyAccount.java是程序的界面和具体功能实现 - 整个程序是通过循环来控制,循环标志是isFlag,默认为true,确认退出时将它变为false来退出循环
- String变量datails实现账目的数据储存,每次执行登记收入或支出时将新的字符串连接到datails的后面
ps:纯新人,写得不算好,基本打算只是自己记录学习使用,如果有什么问题欢迎在评论区留言~~(别想了,没什么人会看的)~~