《家庭记账软件》
模拟是实现一个基于文本界面的《家庭记账软件》
该程序是全网最全Java零基础入门教程的项目一,可以直接查看p127
- 掌握逐步的编程技巧和调试技巧
- 主要涉及以下知识点:
- 变量的定义
- 基本数据类型的使用
- 循环语句
- 分支语句
- 方法声明、调用和返回值的接收
- 简单的屏幕输出格式
话不多说直接上代码
源代码
- Utility.java
import java.util.Scanner;
/**
* @ClassName: Utility
* @Author: Y_peak
* @Date: 2021/08/09/19:14
*/
public class Utility {
private static Scanner scanner = new Scanner(System.in);
public static char readMenuSelection(){
char c;
while (true){
String str = readKeyBoard(1);
c = str.charAt(0);
if (c != '1' && c != '2' && c!='3' && c!='4')
{
System.out.print("选择错误,请重新选择:");
}else break;
}
return c;
}
public static int readNumber(){
int n;
while (true){
String str = readKeyBoard(4);
try{
n = Integer.parseInt(str);
break;
}catch (NumberFormatException e){
System.out.print("数字输入错误,请重新输入: ");
}
}
return n;
}
public static String readString(){
String str = readKeyBoard(8);
return str;
}
public static char readConfirmSelection(){
char c;
while (true){
String str = readKeyBoard(1).toUpperCase();
c=str.charAt(0);
if (c == 'Y' || c=='N'){
break;
}else {
System.out.print("选择输入错误,请重新输入:");
}
}
return c;
}
public static String readKeyBoard(int n){
while (true){
String str = scanner.next();
int len = str.length();
if (len <= n){
return str;
}else {
System.out.print("输入错误,请重新输入:");
}
}
}
}
- FamilyAccount.java
import javax.sound.midi.Soundbank;
/**
* @ClassName: FamilyAccount
* @Author: Y_peak
* @Date: 2021/08/09/19:30
*/
public class FamilyAccount {
public static void main(String[] args) {
boolean isFlag = true;
String userIncomeDetails = ""; //总的收支细节
int initAccount = 100000; //初始余额
String instruction; //单次收支细节
int money; //收支金额
while (isFlag){
System.out.println("-----------家庭收支记账软件-----------\n");
System.out.println(" 1.收支明细 ");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退 出");
System.out.print(" 请选择:");
char selection = Utility.readMenuSelection();
switch (selection){
case '1':
System.out.println("-------------当前收支明细记录---------");
System.out.println("收支\t账户金额\t收支金额\t说 明");
System.out.println(userIncomeDetails);
System.out.println("-----------------------------------");
break;
case '2':
System.out.print("本次收入金额:");
money = Utility.readNumber();
System.out.print("本次收入说明:");
instruction = Utility.readString();
initAccount += money;
if(money>=1000)
userIncomeDetails += "收入\t" + initAccount + '\t' + money + '\t' + instruction + '\n';
else
userIncomeDetails += "收入\t" + initAccount + '\t' + money + "\t\t" + instruction + '\n';
System.out.println("--------------登记完成---------------");
break;
case '3':
System.out.print("本次支出金额:");
money = Utility.readNumber();
System.out.print("本次支出说明:");
instruction = Utility.readString();
if(money>initAccount){
System.out.println("支出超出支付额度,支付失败····");
}else {
initAccount -= money;
if(money>=1000)
userIncomeDetails += "支出\t" + initAccount + '\t' + money + '\t' + instruction + '\n';
else
userIncomeDetails += "支出\t" + initAccount + '\t' + money + "\t\t" + instruction + '\n';
System.out.println("--------------登记完成---------------");
}
break;
case '4':
System.out.println("确认是否退出(Y/N):");
if(Utility.readConfirmSelection() == 'Y') {
isFlag = false;
}
break;
}
}
}
}