目录
1. 项目背景
海豚记账软件是一款简单的个人财务管理工具,可以帮助用户记录收入和支出,以便更好地管理个人财务。本软件提供了收支明细、登记收入、登记支出等功能,方便用户进行日常的财务管理。
2. 代码思路
2.1 主要功能
- 收支明细:展示用户的收支情况,包括收支类型、账户金额、收支金额和说明等。
- 登记收入:允许用户输入收入金额和说明,更新账户余额。
- 登记支出:允许用户输入支出金额和说明,更新账户余额。
- 退出程序:用户可以选择退出程序。
2.2 数据结构
balance
:用于存储账户余额。info
:用于存储收支明细信息。
2.3 控制流程
- 主循环:通过一个布尔变量
isFlag
控制程序是否继续运行。 - 菜单选择:根据用户的输入选择相应的功能。
- 功能实现:根据用户的选择执行相应的操作。
3. 实现步骤
3.1 初始化变量
boolean isFlag = true;
int balance = 100000;
String info = "";
3.2 显示菜单
使用 Utility.readMenuSelection()
方法获取用户的选项,并根据选项执行相应的操作。
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(" 请选择(1-4):");
char selection = Utility.readMenuSelection();
// ...
}
3.3 处理用户输入
根据用户的选择,调用相应的方法处理用户输入的数据,并更新账户余额和收支明细。
switch (selection) {
case '1':
// 显示收支明细
break;
case '2':
// 登记收入
break;
case '3':
// 登记支出
break;
case '4':
// 退出程序
break;
}
3.4 退出程序
当用户选择退出时,询问用户是否确认退出,如果用户确认,则设置 isFlag
为 false
,结束程序。
case '4':
System.out.println("\n确认是否退出(Y/N):");
char isExit = Utility.readConfirmSelection();
if (isExit == 'Y') {
isFlag = false;
}
break;
4. 知识点解析
4.1 Scanner类
在本项目中,我们使用了 Scanner
类来读取用户的键盘输入。Scanner
是 Java 的一个实用工具类,可以方便地从不同的输入流(如键盘输入、文件输入等)中读取不同类型的数据。在本项目中,我们使用 Scanner
类的 nextLine()
方法读取一行字符串,然后进行处理。
4.2 字符与数字转换
在处理用户输入时,我们需要将字符转换为数字。在本项目中,我们使用了 Integer.parseInt()
方法将字符串转换为整数。需要注意的是,如果用户输入的不是有效的整数,parseInt()
方法会抛出 NumberFormatException
异常,因此我们需要使用 try-catch 语句来捕获这个异常,并提示用户重新输入。
4.3 循环与条件判断
在本项目中,我们使用了 while 循环来实现主菜单的循环显示,以及 switch-case 语句来实现不同选项的功能。同时,我们还使用了 if-else 语句来判断用户是否确认退出程序。这些控制结构使得程序能够根据用户的输入执行相应的操作,并保持程序的正常运行。
5.完整代码
Utility.java
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.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;
}
private static String readKeyBoard(int limit) {
String line = "";
while (scanner.hasNext()) {
line = scanner.nextLine();
if (line.length() < 1 || line.length() > limit) {
System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}
return line;
}
}
DolphinAcount.java
// 海豚记账软件的实现
public class DolphinAcount {
public static void main(String[] args) {
boolean isFlag = true;
//初始金额
int balance = 100000;
//记录收支的信息
String info = "";
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(" 请选择(1-4):");
char selection = Utility.readMenuSelection(); // 获取用户的选项:'1' '2' '3' '4'
switch (selection){
case '1':
System.out.println("--------------当前收支明细---------------");
System.out.println("收支\t\t账户金额\t收支金额\t说 明");
System.out.println(info);
System.out.println("---------------------------------------\n");
break;
case '2':
System.out.print("本次收入金额:");
int money1 = Utility.readNumber();
if (money1 > 0){
balance += money1;
}
System.out.print("本次收入说明:");
String addDesc = Utility.readString();
info += "收入\t\t" + balance + "\t" + money1 + "\t\t" + addDesc + "\n";
System.out.println("================登记完成===================");
break;
case '3':
System.out.print("本次支出金额:");
int money2 = Utility.readNumber();
if (money2 > 0 && balance >= money2){
balance -= money2;
}
System.out.print("本次支出说明:");
String minusDesc = Utility.readString();
info += "支出\t\t" + balance + "\t" + money2 + "\t\t" + minusDesc + "\n";
System.out.println("================登记完成===================");
break;
case '4':
System.out.println("\n确认是否退出(Y/N):");
char isExit = Utility.readConfirmSelection();
if (isExit == 'Y'){
isFlag = false;
}
break;
}
}
}
}
6.运行结果展示
1、收支明细
2、登记收入
3、登记支出
4、退出