家庭收支管理系统
一、系统需要的类
1、FamilyAccount
包含主函数,系统运行的开始
public static void main(String[] args)
2、Utility
工具类,各种输入以及校验方法的集合
//从键盘读入长度不超过limit的字符串
private static String readKeyBorad(int limit)
//从键盘读入收支金额
public static int readNumber()
//从键盘读入菜单选项
public static char readMenuSelection()
//从键盘录入是否确认(Y/N)
public static boolean isConfirmChoose()
//从键盘读入收支说明
public static String readInfo()
二、系统所需类的具体代码
1、Utility
package hu7;
import java.util.Locale;
import java.util.Scanner;
public class Utility {
public static Scanner sc = new Scanner(System.in);
//从键盘读入长度不超过limit的字符串
private static String readKeyBorad(int limit) {
while (true) {
String str = sc.nextLine();
if ( str.length() < 1 || str.length() > limit) {
System.out.println("输入错误,(长度不能超过" + limit + ")请重新输入:");
continue;
} else {
return str;
}
}
}
//从键盘读入收支金额
public static int readNumber() {
int tempMoney;
while (true) {
String money = readKeyBorad(5);
try {
//将字符串转换为数字
tempMoney = Integer.parseInt(money);
break; //try语句中一定要加break跳出循环
} catch (NumberFormatException e) { //捕捉字符串转换为数字的异常
System.out.println("数字输入异常,请重新输入:");
}
}
return tempMoney;
}
//从键盘读入菜单选项
public static char readMenuSelection() {
char c;
while (true) {
String str = readKeyBorad(1);
c = str.charAt(0); //获取字符串的第一个字符
if ( c != '1' && c != '2' && c != '3' && c != '4') {
System.out.println("选项输入错误,请重新输入:");
continue;
} else {
break;
}
}
return c;
}
//从键盘录入是否确认(Y/N)
public static boolean isConfirmChoose() {
boolean flag;
while (true) {
String str = readKeyBorad(1);
//字符串转为大写
String strUpper = str.toUpperCase(Locale.ROOT);
//获取字符串的第一个字符
char c = strUpper.charAt(0);
if ( c == 'Y') {
flag = true;
break;
} else if ( c == 'N') {
flag = false;
break;
} else {
System.out.println("输入错误,请重新输入:");
continue;
}
}
return flag;
}
//从键盘读入收支说明
public static String readInfo() {
String str = readKeyBorad(16);
return str;
}
}
2、FamilyAccount
package hu7;
public class FamilyAccount {
public static void main(String[] args) {
Utility t = new Utility();
int balance = 10000;
boolean isFlag = true;
String details = "收支\t账户金额\t收支金额\t说 明\n";
while (isFlag) {
System.out.println("---------欢迎使用家庭收支系统---------");
System.out.println("1 收支明细");
System.out.println("2 登记收入");
System.out.println("3 登记支出");
System.out.println("4 退 出");
System.out.println("--------------------------------------\n");
System.out.println("请输如您的选项:");
char selectionMenu = t.readMenuSelection();
switch (selectionMenu) {
case '1':
// System.out.println("1 收支明细");
System.out.println(details);
break;
case '2':
// System.out.println("2 登记收入");
System.out.println("请输入收入金额:");
int money = t.readNumber();
System.out.println("请输入收入说明:");
String addInfo = t.readInfo();
//更新余额
balance += money;
details += ("收入" + "\t" + balance + "\t" + money + "\t\t" + addInfo + "\n");
System.out.println("------------------登记收入成功-----------------------\n");
break;
case '3':
// System.out.println("3 登记支出");
System.out.println("请输入支出金额:");
int outMoney = t.readNumber();
System.out.println("请输入支出说明:");
String outInfo = t.readInfo();
//更新余额
balance -= outMoney;
details += ("收入" + "\t" + balance + "\t" + outMoney + "\t\t" + outInfo + "\n");
System.out.println("------------------登记支出成功-----------------------\n");
break;
case '4':
// System.out.println("4 退 出");
System.out.println("是否确认退出? (Y or N)");
boolean confirmChoose = t.isConfirmChoose();
if ( confirmChoose == true ) {
isFlag = false;
}
break;
}
}
}
}
三、总结
本次家庭收支小系统来源于B站尚硅谷JAVA基础课程。自己跟着视频敲了一遍,然后又独立写了一遍。现在上传的这个版本是自己重写的,主要收获如下:
1、编写小系统的代码时,要先构思然后在写。先编写大框架,然后再逐步细化。
2、每编写一个方法都最好在单独的测试程序中测试,运行与预期相符后再进行下一步。
3、动手比纯粹的看更重要,动手编写程序才能更真切的感受从代码构思,程序编写,处理bug到程序运行成功的整个流程
4、所有涉及数据录入的都最好进行数据校验,避免输入异常导致错误
几个java方法:
<1>Integer.parseInt(String s) 将字符串转换为整型数字
NumberFormatException 捕捉字符串转换为数字的异常
详情见官方文档:Integer.parseInt(String s) 、NumberFormatException
package hu9;
public class test1 {
public static void main(String[] args) {
String str = "2345676";
int number;
//字符串转换为数字
try{
number = Integer.parseInt(str);
System.out.println("number="+number);
} catch (NumberFormatException e) { //捕捉字符串转换为数字异常
System.out.println("字符串转换为数字失败了!");
}
}
}
package hu9;
public class test1 {
public static void main(String[] args) {
String str = "2345676jgs";
int number;
//字符串转换为数字
try{
number = Integer.parseInt(str);
System.out.println("number="+number);
} catch (NumberFormatException e) { //捕捉字符串转换为数字异常
System.out.println("字符串转换为数字失败了!");
}
}
}
----------------------------------------------------------------------------------------------
<2>String 中charAt(int i) 方法,取出字符串中第i个字符
详情见官方文档:String 中charAt(int i) 方法
package hu9;
public class test1 {
public static void main(String[] args) {
String str = "2345676jgs";
char c1 = str.charAt(2);
char c2 = str.charAt(7);
System.out.println("c1="+c1);
System.out.println("c2="+c2);
}
}
<3>String中的toUpperCase方法,将字符串转换为大写
详情:
package hu9;
import java.util.Locale;
public class test1 {
public static void main(String[] args) {
String str = "jaGEG";
String str1 = str.toUpperCase(Locale.ROOT);
System.out.println("str1="+str1);
}
}