说明:
这篇文章主要运用了一些java基础知识的一个综合运用
主要涉及以下知识点:
变量的定义
基本数据类型的使用
循环语句
分支语句
方法声明、调用和返回值的接收
简单的屏幕输出格式控制
需求分析
模拟实现基于文本界面的《家庭记账软件》。
• 该软件能够记录家庭的收入、支出,并能够打印收支明细表。
• 项目采用分级菜单方式。
下载链接
项目演示
操作步骤
创建类Tool
public class Tool{
}
Tool加入键盘读入逻辑
private static Scanner scanner =new Scanner(System.in);
//键盘读入1~4,进行菜单的选择
public static char readMenuSelector() { //阅读菜单选择
char c;
for(;;){
String str=readKeyBoard(1);
c=str.charAt(0);
if(c!='1'&&c!='2'&&c!='3'&&c!='4'){
System.out.println("输入错误,请从新输入!");
}
else
break;
}
return c;
}
Tool里面加入收入支出读取方法
//用于读取4位数的收入或者支出,限制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;
}
Tool加入收入支出说明
//用于对收入或者支出的说明,不超过16个长度的字符串
public static String readString(){
String str=readKeyBoard(16);
return str;
}
Tool加入退出确认方法
//用于确认选择的输入
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.println("输入错误,请从新输入!");
}
return c;
}
Tool类加入输入规范方法
//写出readKeyBoard方法
private static String readKeyBoard(int limit){
String line="";
while(scanner.hasNext()) {
line = scanner.nextLine();
if(line.length()<1||line.length()>limit){
System.out.println("输入长度不超过"+limit+",请从新输入!");
continue;
}
break;
}
return line;
}
创建FamilyAccount类
public class FamilyAccount {
public static void main(String[] args) {
}
}
在FamilyAccount中定义变量
boolean isFlag=true;
String details="收支\t账户金额\t收支金额\t说 明\n";
//初始金额
int balance=10000;
在FamilyAccount中写出界面
while(isFlag){
System.out.println("-----------------家庭收支记账软件-----------------");
System.out.println(" 1 收支明细");
System.out.println(" 2 登记收入");
System.out.println(" 3 登记支出");
System.out.println(" 4 退 出\n");
System.out.println(" 请选择(1-4):");
在FamilyAccount中获取用户的选择,并在不同的选择中做出相应的逻辑操作。
char selection= Tool.readMenuSelector();
switch(selection){
case '1':
System.out.println("-----------------当前收支明细记录-----------------");
System.out.println(details);
System.out.println("--------------------------------------------------");
break;
case '2':
System.out.print("本次收入金额:");
int money1=Tool.readNumber();
System.out.print("本次收入说明:");
String info1=Tool.readString();
balance=balance+money1;
details+="收入\t"+balance+"\t\t"+money1+"\t\t\t"+info1+"\n";
System.out.println("---------------------登记完成---------------------");
break;
case '3':
System.out.print("本次支出金额:");
int money2 = Tool.readNumber();
System.out.print("本次支出说明:");
String info2 = Tool.readString();
if(money2<=balance) {
balance -= money2;
details += "支出\t" + balance + "\t\t" +
money2 + "\t\t\t" + info2 + "\n";
}
else
System.out.println("支出超出账户额度!支付失败");
System.out.println("---------------------登记完成---------------------");
break;
case '4':
System.out.print("确认是否退出!Y/N");
char isExit= Tool.readConfirmSelection();
if(isExit=='Y')
{
isFlag=false;
}
break;
}
}
完整代码
Tool类
import java.util.Scanner;
public class Tool {
private static Scanner scanner =new Scanner(System.in);
//键盘读入1~4,进行菜单的选择
public static char readMenuSelector() { //阅读菜单选择
char c;
for(;;){
String str=readKeyBoard(1);
c=str.charAt(0);
if(c!='1'&&c!='2'&&c!='3'&&c!='4'){
System.out.println("输入错误,请从新输入!");
}
else
break;
}
return c;
}
//用于读取4位数的收入或者支出,限制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;
}
//用于对收入或者支出的说明,不超过16个长度的字符串
public static String readString(){
String str=readKeyBoard(16);
return str;
}
//用于确认选择的输入
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.println("输入错误,请从新输入!");
}
return c;
}
//写出readKeyBoard方法
private static String readKeyBoard(int limit){
String line="";
while(scanner.hasNext()) {
line = scanner.nextLine();
if(line.length()<1||line.length()>limit){
System.out.println("输入长度不超过"+limit+",请从新输入!");
continue;
}
break;
}
return line;
}
}
FamilyAccount类
public class FamilyAccount {
public static void main(String[] args) {
boolean isFlag=true;
String details="收支\t账户金额\t收支金额\t说 明\n";
//初始金额
int balance=10000;
while(isFlag){
System.out.println("-----------------家庭收支记账软件-----------------");
System.out.println(" 1 收支明细");
System.out.println(" 2 登记收入");
System.out.println(" 3 登记支出");
System.out.println(" 4 退 出\n");
System.out.println(" 请选择(1-4):");
//获取用户的选择
char selection= Tool.readMenuSelector();
switch(selection){
case '1':
System.out.println("-----------------当前收支明细记录-----------------");
System.out.println(details);
System.out.println("--------------------------------------------------");
break;
case '2':
System.out.print("本次收入金额:");
int money1=Tool.readNumber();
System.out.print("本次收入说明:");
String info1=Tool.readString();
balance=balance+money1;
details+="收入\t"+balance+"\t\t"+money1+"\t\t\t"+info1+"\n";
System.out.println("---------------------登记完成---------------------");
break;
case '3':
System.out.print("本次支出金额:");
int money2 = Tool.readNumber();
System.out.print("本次支出说明:");
String info2 = Tool.readString();
if(money2<=balance) {
balance -= money2;
details += "支出\t" + balance + "\t\t" +
money2 + "\t\t\t" + info2 + "\n";
}
else
System.out.println("支出超出账户额度!支付失败");
System.out.println("---------------------登记完成---------------------");
break;
case '4':
System.out.print("确认是否退出!Y/N");
char isExit= Tool.readConfirmSelection();
if(isExit=='Y')
{
isFlag=false;
}
break;
}
}
}
}