以下就是我們這次的題:
需求說明
•模擬實現基於文本界面的《家庭記賬軟件》。
•該軟件能夠記錄家庭的收入、支出,並能夠打印收支明細表。
•項目采用分級菜單方式。主菜單如下:
-----------------家庭收支記賬軟件-----------------
1收支明細
2登記收入
3登記支出
4退 出
請選擇(1-4):_
需求說明
•假設家庭起始的生活基本金為10000元。
•每次登記收入(菜單2)后,收入的金額應累加到基本金上,並記
錄本次收入明細,以便后續的查詢。
•每次登記支出(菜單3)后,支出的金額應從基本金中扣除,並記
錄本次支出明細,以便后續的查詢。
•查詢收支明細( 菜單1)時,將顯示所有的收入、支出名細列表
需求說明
•“登記收入”的界面及操作過程如下所示:
-----------------家庭收支記賬軟件-----------------
1收支明細
2登記收入
3登記支出
4退 出
請選擇(1-4):2
本次收入金額:1000 本次收入說明:勞務費_
需求說明
•“登記支出”的界面及操作過程如下所示:
-----------------家庭收支記賬軟件-----------------
1收支明細
2登記收入
3登記支出
4退 出
請選擇(1-4):3
本次支出金額:800
本次支出說明:物業費_
需求說明
•“收支明細”的界面及操作過程如下所示:
-----------------家庭收支記賬軟件-----------------
1收支明細
2登記收入
3登記支出
4退 出
請選擇(1-4):1
-----------------當前收支明細記錄-----------------
需求說明
•“退 出”的界面及操作過程如下所示:
-----------------家庭收支記賬軟件-----------------
1收支明細
2登記收入
3登記支出
4退 出
請選擇(1-4):4 確認是否退出(Y/N):_
那么在下面有兩部分代碼可以供大家選擇:
**1**
import java.util.Scanner;
public class ndemo0001 {
public static void main(String[] args) {
int s= 1000;
String detai = " ";
System.out.println("--------------家庭收支記賬軟件-----------------");
System.out.println(" 1.收支明細");
System.out.println(" 2.登記收入");
System.out.println(" 3.登記支出");
System.out.println(" 4.退出");
System.out.println("請選擇1-4");
boolean key = true;
while(key){
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int a1 = a;
if(a1>=5||a1<=0) {
System.out.println("輸入錯誤");
}
else {
switch(a1) {
case 2:
int in=scanner.nextInt();
String wi = scanner.nextLine();
System.out.println("本次收入金額:"+in);
System.out.println("本次收入說明:"+ wi);
s = s+in;
detai += "收入\t"+s+"\t\t"+in+"\t\t" + wi+"\n";
System.out.println("--------------------------------------------------");
System.out.println("--------------家庭收支記賬軟件-----------------");
System.out.println(" 1.收支明細");
System.out.println(" 2.登記收入");
System.out.println(" 3.登記支出");
System.out.println(" 4.退出");
System.out.println("請選擇1-4");
break;
case 3:
int out = scanner.nextInt();
String wo = scanner.nextLine();
System.out.println("本次支出金額:"+out);
System.out.println("本次支出說明:"+wo);
s = s-out;
detai +="支出\t" +s+"\t\t"+out+"\t\t"+wo+"\n";
System.out.println("----------------------------------------------------");
System.out.println("--------------家庭收支記賬軟件-----------------");
System.out.println(" 1.收支明細");
System.out.println(" 2.登記收入");
System.out.println(" 3.登記支出");
System.out.println(" 4.退出");
System.out.println("請選擇1-4");
break;
case 1:
System.out.println("----------當前收支明細-------------------------");
System.out.println("收支\t賬戶余額\t\t\t收支金額\t\t\t\t說明\t");
System.out.println(detai);
System.out.println("-----------------------------------------------");
System.out.println("--------------家庭收支記賬軟件-----------------");
System.out.println(" 1.收支明細");
System.out.println(" 2.登記收入");
System.out.println(" 3.登記支出");
System.out.println(" 4.退出");
System.out.println("請選擇1-4");
break;
case 4:
System.out.println("是否確認退出(y/n):");
String turn = scanner.nextLine();
if(turn=="y") {
key = false;
System.out.println("結束");
}
// else {
// System.out.println("--------------家庭收支記賬軟件-----------------");
// System.out.println(" 1.收支明細");
// System.out.println(" 2.登記收入");
// System.out.println(" 3.登記支出");
// System.out.println(" 4.退出");
// System.out.println("請選擇1-4");
// }
//break;
}
}
}
}
}
但是在實際運行的過程中存在着一些小問題,在進行第四個步驟時,會報錯且沒有反應,希望大家能夠幫忙指錯錯誤。。。
那么還有一種代碼,采用的是以下方法:
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;
}
}
以上是方法庫
public class try101 {
public static void main(String[] args) {
String deta = "收支\t\t余額\t\t收支金額\t\t說明\n";
int danan = 10000;
boolean flag = true;
while(flag) {
System.out.println("---------------家庭記賬軟件------------");
System.out.println(" 1. 收支明細");
System.out.println(" 2. 收入金額");
System.out.println(" 3. 支出金額");
System.out.println(" 4. 退出");
System.out.println(" 請選擇服務項目:");
char a = Utility.readMenuSelection();
if(a=='1') {
System.out.println("--------------收支明細------------------");
System.out.println(deta);
System.out.println();
System.out.println(" 請選擇服務項目:");
}
if(a=='2') {
System.out.println("收入金額");
int in = Utility.readNumber();
System.out.println("收入說明");
String wi = Utility.readString();
danan = danan+in;
deta+="收入\t\t"+danan+"\t\t"+in+"\t\t"+wi+"\n";
System.out.println(" 請選擇服務項目:");
}
if(a=='3') {
System.out.println("支出金額");
int out=Utility.readNumber();
System.out.println("支出說明");
String wo =Utility.readString();
danan = danan-out;
deta += "支出\t\t"+danan+"\t\t"+out+"\t\t"+wo+"\n";
System.out.println(" 請選擇服務項目:");
}
if(a=='4') {
System.out.println("是否退出");
char of = Utility.readConfirmSelection();
if(of=='Y') {
flag = false;
System.out.println("已退出");
}
}
}
}
}