一、项目目标
1.模拟实现一个基于文本界面的《家庭记账软件》
2.掌握初步的编程技巧和调试技巧
3.灵活运用基础知识
二、基本实现功能
1.首先启动层序之后有一个初始页面,它能展示出整个程序的子功能,其中包含了收支明细(打印收支报表);登记收入(添加自己的收入信息);登记支出(添加自己的消费信息)以及退出程序;
代码:
System.out.println("--------------家庭收支记账系统----------------");
System.out.println(" 1.收支明细");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退出");
System.out.print(" 请输入你的选择(1-4):");
Scanner sc = new Scanner(System.in);
xuanze(sc.nextInt(), ZD);
}
public static void xuanze(int a,String [][]ZD){
switch (a){
case 1:
shouzhi(ZD);
break;
case 2:
shouru(ZD);
break;
case 3:
zhichu(ZD);
break;
case 4:
tuichu();
break;
default:
System.out.print(" 您选择有误!请重新选择:");
Scanner sc=new Scanner(System.in);
xuanze(sc.nextInt(),ZD);
}
}
2.收支明细:
根据菜单页面(登录页面)选择输入功能模块1;进入功能模块1后可以根据自己的需求填写自己想要打印(几条)的账单信息,其中还能实现总金额的计算即可以根据你存入的收支状况计算出其最后的总金额;这里就需要定义一个全局变量的ZD数组记录收支信息和一个全局变量index记录收支信息条数。
初始时账单信息默认为null:
添加信息后就可以根据自己的需求打印账单信息了:
3.登记收入:
用户可以根据自己事实状况登记自己的收入信息;进入功能模块2之后用户可以更具自己的需求选择填入几条收入信息,然后系统就会根据用户输入选择分配空间进行信息存储,系统会提示用户每次输入是第几条信息,在用户输入信息完成后会提示用户收入存帐已成功,然后提示用户输入0返回上一级目录,如果输入其他数据会提示用户:您输入有误!请重新输入:;这样的信息提示。存入的信息可以在功能模块1中全部打印出来。
现已有两条收入信息,如果用户还有其他收入可以继续选择登记收入信息填入且不会覆盖之前存入的信息;
public static void shouru(String [][]ZD){
Scanner sc=new Scanner(System.in);
int a=0;
System.out.println();
System.out.print("请输入你想要存入几条收入信息:");
int t=sc.nextInt();
int step = 0;
while (step < t){
for(int j=0;j<ZD[index].length;j++){
System.out.println();
if(j==0) {
//System.out.print("请输入收支类型:");
//ZD[i][j] =sc.next();
ZD[index][j] ="收入";
}else if(j==1){
System.out.print("请输入第"+(step+1)+"条收支金额:");
a=sc.nextInt();
ZD[index][j] =Integer.toString(a);
}else if(j==2){
if(ZD[index][j]==null){
ZD[index][j] = "0";
}
if(index==0){
ZD[index][j] = Integer.toString(Integer.parseInt(ZD[index][j]) + a);
}else {
ZD[index][j] = Integer.toString(Integer.parseInt(ZD[index - 1][j]) + a);
}
}else{
System.out.print("请输入收支说明:");
ZD[index][j] =sc.next();
}
}
index++;
step++;
}
System.out.println("收入存帐已成功!");
System.out.println();
System.out.print(" 输入0返回上一级:");
int b=sc.nextInt();
do {
if (b == 0) {
System.out.println();
System.out.println("--------------家庭收支记账系统----------------");
System.out.println(" 1.收支明细");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退出");
System.out.print(" 请输入你的选择(1-4):");
xuanze(sc.nextInt(),ZD);
break;
} else {
System.out.println();
System.out.print(" 您选择有误!请重新选择:");
b = sc.nextInt();
}
}while (true);
}
4.登记支出
其功能与登记收入功能相似,用户可以根据自己的支出状况填写支出信息,用户填入自己的支出信息后,也可以通过功能模块一进行打印出来,且不会覆盖原本已存入的收入登记信息;
public static void zhichu(String [][]ZD){
Scanner sc=new Scanner(System.in);
int a=0,c=0;
System.out.println();
System.out.print("请输入你想要存入几条支出信息:");
int t=sc.nextInt();
for(int i=index;i<index+t;i++){
c++;
for(int j=0;j<ZD[i].length;j++){
System.out.println();
if(j==0) {
//System.out.print("请输入收支类型:");
//ZD[i][j] =sc.next();
ZD[i][j] ="支出";
}else if(j==1){
System.out.print("请输入第"+c+"条支出金额:");
a=sc.nextInt();
ZD[i][j] =Integer.toString(a);
}else if(j==2){
if(ZD[i][j]==null){
ZD[i][j] = "0";
}
if(i==0){
ZD[i][j] = Integer.toString(Integer.parseInt(ZD[i][j]) - a);
}else {
ZD[i][j] = Integer.toString(Integer.parseInt(ZD[i - 1][j]) - a);
}
}else{
System.out.print("请输入收支说明:");
ZD[i][j] =sc.next();
}
}
}
index+=c;
System.out.println("支出存帐已成功!");
System.out.println();
System.out.print(" 输入0返回上一级:");
int b=sc.nextInt();
do {
if (b == 0) {
System.out.println();
System.out.println("--------------家庭收支记账系统----------------");
System.out.println(" 1.收支明细");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退出");
System.out.print(" 请输入你的选择(1-4):");
xuanze(sc.nextInt(), ZD);
break;
} else {
System.out.print(" 您选择有误!请重新选择:");
b = sc.nextInt();
}
}while (true);
}
5.退出
退出就是用户登记信息完毕之后选择退出本程序的功能,当用户退出成功之后会提示用户已退出成功。
6.程序源码:
package guanqiaqi;
import java.util.Arrays;
import java.util.Scanner;
public class shouzhichengxu {
static String[][] ZD = new String[100][4];
static int index = 0;
public static void main(String[] args) {
System.out.println("--------------家庭收支记账系统----------------");
System.out.println(" 1.收支明细");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退出");
System.out.print(" 请输入你的选择(1-4):");
Scanner sc = new Scanner(System.in);
xuanze( sc.nextInt(), ZD);
//xuanze( Utility.readMenuSelection(sc.nextInt()), ZD);
}
public static void xuanze(int a,String [][]ZD){
switch (a){
case 1:
shouzhi(ZD);
break;
case 2:
shouru(ZD);
break;
case 3:
zhichu(ZD);
break;
case 4:
tuichu();
break;
default:
System.out.print(" 您选择有误!请重新选择:");
Scanner sc=new Scanner(System.in);
xuanze(sc.nextInt(),ZD);
}
}
public static void shouzhi(String [][]ZD){
Scanner sc=new Scanner(System.in);
System.out.println();
System.out.print("请输入你想要打印几条收支明细:");
int t=sc.nextInt();
System.out.println();
System.out.println("---------收支明细----------");
System.out.println(" 收支 收支金额 总金额 说明");
for(int i=0;i<t;i++) {
System.out.println(Arrays.toString(ZD[i]));
}
System.out.println("---------------------------");
System.out.print(" 输入0返回上一级:");
int b=sc.nextInt();
do {
if (b == 0) {
System.out.println();
System.out.println("--------------家庭收支记账系统----------------");
System.out.println(" 1.收支明细");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退出");
System.out.print(" 请输入你的选择(1-4):");
xuanze(sc.nextInt(), ZD);
break;
} else {
System.out.println();
System.out.print(" 您选择有误!请重新选择:");
b=sc.nextInt();
}
}while (true);
}
public static void shouru(String [][]ZD){
Scanner sc=new Scanner(System.in);
int a=0;
System.out.println();
System.out.print("请输入你想要存入几条收入信息:");
int t=sc.nextInt();
int step = 0;
while (step < t){
for(int j=0;j<ZD[index].length;j++){
System.out.println();
if(j==0) {
//System.out.print("请输入收支类型:");
//ZD[i][j] =sc.next();
ZD[index][j] ="收入";
}else if(j==1){
System.out.print("请输入第"+(step+1)+"条收支金额:");
a=sc.nextInt();
ZD[index][j] =Integer.toString(a);
}else if(j==2){
if(ZD[index][j]==null){
ZD[index][j] = "0";
}
if(index==0){
ZD[index][j] = Integer.toString(Integer.parseInt(ZD[index][j]) + a);
}else {
ZD[index][j] = Integer.toString(Integer.parseInt(ZD[index - 1][j]) + a);
}
}else{
System.out.print("请输入收支说明:");
ZD[index][j] =sc.next();
}
}
index++;
step++;
}
System.out.println("收入存帐已成功!");
System.out.println();
System.out.print(" 输入0返回上一级:");
int b=sc.nextInt();
do {
if (b == 0) {
System.out.println();
System.out.println("--------------家庭收支记账系统----------------");
System.out.println(" 1.收支明细");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退出");
System.out.print(" 请输入你的选择(1-4):");
xuanze(sc.nextInt(),ZD);
break;
} else {
System.out.println();
System.out.print(" 您选择有误!请重新选择:");
b = sc.nextInt();
}
}while (true);
}
public static void zhichu(String [][]ZD){
Scanner sc=new Scanner(System.in);
int a=0,c=0;
System.out.println();
System.out.print("请输入你想要存入几条支出信息:");
int t=sc.nextInt();
for(int i=index;i<index+t;i++){
c++;
for(int j=0;j<ZD[i].length;j++){
System.out.println();
if(j==0) {
//System.out.print("请输入收支类型:");
//ZD[i][j] =sc.next();
ZD[i][j] ="支出";
}else if(j==1){
System.out.print("请输入第"+c+"条支出金额:");
a=sc.nextInt();
ZD[i][j] =Integer.toString(a);
}else if(j==2){
if(ZD[i][j]==null){
ZD[i][j] = "0";
}
if(i==0){
ZD[i][j] = Integer.toString(Integer.parseInt(ZD[i][j]) - a);
}else {
ZD[i][j] = Integer.toString(Integer.parseInt(ZD[i - 1][j]) - a);
}
}else{
System.out.print("请输入收支说明:");
ZD[i][j] =sc.next();
}
}
}
index+=c;
System.out.println("支出存帐已成功!");
System.out.println();
System.out.print(" 输入0返回上一级:");
int b=sc.nextInt();
do {
if (b == 0) {
System.out.println();
System.out.println("--------------家庭收支记账系统----------------");
System.out.println(" 1.收支明细");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退出");
System.out.print(" 请输入你的选择(1-4):");
xuanze(sc.nextInt(), ZD);
break;
} else {
System.out.print(" 您选择有误!请重新选择:");
b = sc.nextInt();
}
}while (true);
}
public static void tuichu(){
System.out.println(" 退出成功!欢迎下次光临!");
}
}