文章目录
java小项目家庭记账程序
1.项目目标:
1.模拟实现一个基于文本界面的家庭记账软件。
2.掌握初步的编程技巧和调试技巧。
3.灵活运用基础知识。
2.项目需求:
1 收支明细
2 登记收入
3 登记支出
4 退 出
请选择(1-4):_
3.具体思路:
首先,这个记账的页面只要你不按推出,肯定是会一直存在的,所以,我会考虑用一个while来装这个页面,然后就是对数据的打印等,我想到可以用一个二维数组来装这个数据,并且可以把选项123分别单独写一个类,为了程序的耦合性。
4.具体代码:
1.页面:
这个类实现了进入页面的显示,当用户输入1 2 3 4时,后会得到相应的反应,然后如果输入1234以外的数字和字母,程序会提醒用户输入错误并重新输入。
对输入的字符进行处理(如图1):
将nextInt用try包围起来,如果输入到int以外的字符,就抛出异常,我在catch中再次调用键盘扫描的方法即nextInt(),再次开启扫描。
图1
import java.util.InputMismatchException;
import java.util.Scanner;
public void face (){
boolean flag = true;
Scanner sc = new Scanner(System.in);
int num = 4;
String[][] acount = new String[10][4];
int StartMoney = 10000;
acount[0][0] = "1.收入";
acount[0][1] = "2.账户总金额";
acount[0][2] = "3.收支金额";
acount[0][3] = "说明";
while (flag){
System.out.println("-----------------家庭收支记账软件-----------------");
System.out.println("1.收支明细");
System.out.println("2.登记收入");
System.out.println("3.登记支出");
System.out.println("4.退\t\t出:请选择1-4");
try {
int option = sc.nextInt();
switch (option){
default:
System.out.println("输入错误");
case 1:
System.out.println("收入明细:");
new Option_1().ergodic(acount);//实例化这个选项1这个类,并传入数组。
break;
case 2:
System.out.println("登记收入:");
StartMoney = new Option_2().income(StartMoney,acount);//starMoney初始值为10000,然后每次调用完income方法后会返回一个经过求和以后的一个总金额。
System.out.println("总的:"+StartMoney);
break;
case 3:
System.out.println("登记支出:");
StartMoney = new Option_3().outcome(StartMoney,acount);//同option2
break;
case 4:
System.out.println("已退出");
flag = false;//将flag修改为false,跳出while循环。
break;
}
} catch (Exception e){
sc.next();
System.out.println("输入错误");
}
}
}
}
2.Option_1类:
这个类里面就是对传入的这个数组进行输出打印,
package com.ccw;
public class Option_1 {
public Option_1() {
}
public static void main(String[] args) {
String[][] acount = new String[10][4];
new Option_1().ergodic(acount);
}
public void ergodic(String[][] acount) {
acount[0][0] = "收入";
acount[0][1] = "账户总金额";
acount[0][2] = "收支金额";
acount[0][3] = "说明";
for (int i = 0; i < acount.length; i++) { // 8 4
for (int j = 0; j <acount[i].length ; j++) {
if(acount[1][1]==null){
acount[1][1] =10000+"";
}
if(acount[i][j]!=null){
System.out.print(acount[i][j]+'\t'+'\t');
}
}
System.out.println();
}
}
}
3.Option_2类:
package com.ccw;
import java.util.Scanner;
public class Option_2 {
int AllMoney ;
int index;
int money;
String str = "+";
String explain;
public Option_2() {
Scanner sc = new Scanner(System.in);
System.out.println("收入金额");
money = sc.nextInt();
System.out.println("说明");
explain = sc.next();
}
public String[][] copy(String[][] acount,int OutMoney){
String[][] copyacount;
copyacount = new String[acount.length+1][];
for (int i = 0; i < acount.length; i++) {
copyacount[i] = acount[i].clone();
}
copyacount[index][0] = "收入";
copyacount[index][1] = OutMoney+"" ;
copyacount[index][2] = str;
copyacount[index][3] = explain;
return copyacount;
}
public int income(int OutMoney,String[][] acount){
OutMoney+=money;
str = "+"+money;
for (int i = 0; i < acount.length; i++) {
if (acount[i][0]==null){
index = i ;
break;
}
}
if ((index+1)==acount.length){
}
acount[index][0] = "收入";
acount[index][1] = OutMoney+"" ;
acount[index][2] = str;
acount[index][3] = explain;
return OutMoney;
}
}
4.Option_3类:
这个类和Option2类基本都是差不多 的就不过多解释了。
package com.ccw;
import java.util.Scanner;
public class Option_3 {
int AllMoney ;
int index;
int money;
String str = "+";
String explain;
public Option_3() {
Scanner sc = new Scanner(System.in);
System.out.println("支出");
money = sc.nextInt();
System.out.println("说明");
explain = sc.next();
}
public String[][] copy(String[][] acount,int OutMoney){
String[][] copyacount;
copyacount = new String[acount.length+1][];
for (int i = 0; i < acount.length; i++) {
copyacount[i] = acount[i].clone();
}
copyacount[index][0] = "支出";
copyacount[index][1] = OutMoney+"" ;
copyacount[index][2] = str;
copyacount[index][3] = explain;
return copyacount;
}
public int outcome(int OutMoney,String[][] acount){
OutMoney-=money;
str = "-"+money;
for (int i = 0; i < acount.length; i++) {
if (acount[i][0]==null){
index = i ;
break;
}
}
if ((index+1)==acount.length){
}
acount[index][0] = "支出";
acount[index][1] = OutMoney+"" ;
acount[index][2] = str;
acount[index][3] = explain;
return OutMoney;
}
public void assignment() {
}
}
Test类:
public class Test {
public static void main(String[] args) {
Option_1 op1 = new Option_1();
Surface surface = new Surface();
surface.face();
}
}//实例化页面的类,并使用face方法加载页面。
5.总结:
项目中并没有做到对这个存放数据的数组的扩容,只有最初初始化数组的时候手动将数组长度调大,希望下次可以改进一下。