目标:
该软件能够记录家庭的收入、支出,并能够打印收支明细表
- 1.项目采用分级菜单方式。主菜单如下:
-
-----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记支出
4 退 出请选择(1-4):_
-
假设家庭起始的生活基本金为10000元
-
查询收支明细( 菜单1)时,
将显示所有的收入、支出名细列表 - 每次登记收入(菜单2)后,
收入的金额应累加到基本金上,并记录本次收入明细,
以便后续的查询。。
- 每次登记支出(菜单3)后,
支出的金额应从基本金中扣除,并记
录本次支出明细,以便后续的查询
二维数组:
语法:数据类型 [] []数组名=new 数据类型 [大小] [大小];
比如:int a [] []=new int [2][3];
内存的存在形式:
java中如何输入char类型
java中基本数据类型的输入包括整形的输入:in.nextInt();单精度浮点型:in.nextFloat();双精度浮点型:in.nextDouble();字符串类型:in.next();in.nextLine();但是并没有in.nextChar(); 有时候需要我们用Scanner接收char类型数据,而不是接收String
正常使用Scanner时,可以这样:
Scanner in = new Scanner(System.in);
char c = in.next().charAt(i);
把str的第i个char值赋值给c,类似于数组的查找。
charAt(int index)方法是一个能够用来检索特定索引下的字符的String实例的方法.
charAt()方法返回指定索引位置的char值。如: str.charAt(0)检索str中的第一个字符,str.charAt(str.length()-1)检索最后一个字符.
try catch 错误处理;
执行规则:首先执行try中的代码 如果抛出异常会由catch去捕获并执行 如果没有发生异常 catch去捕获会被忽略掉 但是不管有没有异常最后都会执行。
try和catch:
* try {
*可能出现异常的代码
*} catch(异常类名A e){
*如果出现了异常类A类型的异常,那么执行该代码
*} ...(catch可以有多个)
* finally {
*最终肯定必须要执行的代码(例如释放资源的代码)
*}
格式:
1. try (创建流对象语句,如果多个,使用';'隔开) {
2. // 读写数据
3. } catch (IOException e) {
4. e.printStackTrace();
5. }
演示代码:
public static int getInt(){
Scanner sc = new Scanner(System.in);
int res;
while (true){
String str = sc.nextLine();
try{
res = Integer.parseInt(str);
break;
}catch (Exception e){
System.out.println("请输入数字");
continue;
}
}
return res;
}
//输入一个字符串;try语句中如果没有
代码:
package task;
import java.util.Scanner;
public class practice {
public static void main(String[] args) {
int cml=2;
String[][] arr = new String[cml][4];
int count=0;
int sumNum=10000;
Scanner sc=new Scanner(System.in);
while (true) {
Scanner ab = new Scanner(System.in);
System.out.println("-------------------家庭收支记账软件---------------------\n");
System.out.println(" 1.收支明细");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退 出\n");
System.out.print("请选择(1-4):");
int num = sc.nextInt();
switch(num){
case 1:
System.out.println("-------------------收支明细记录表-----------------------");
System.out.println("收支\t\t账户总金额\t\t收支金额\t\t说 明");
for (int j = 0; j <arr.length ; j++) {
if (arr[j][0]!=null)
{
System.out.println(arr[j][0]+"\t\t"+arr[j][1]+"\t\t\t\t"+arr[j][2]+"\t\t\t\t"+arr[j][3]);
}
}
System.out.println("--------------------------------------------------------\n");
break;
case 2:
System.out.println("请输入本次收入的金额:");
int money = InputTool.getInt();
System.out.println("请输入本次收入的说明:");
String info = sc.next();
arr[count][0]="收入";
sumNum+=money;
arr[count][1]=sumNum+"";
arr[count][2]=money+"";
arr[count][3]=info;
count++;
System.out.println("添加成功!");
break;
case 3:
System.out.println("请输入本次支出的金额:");
//int num1 = sc.nextInt();
int num1= InputTool.getInt();
System.out.println("请输入本次支出的说明:");
String info1 = sc.next();
arr[count][0]="支出";
sumNum-=num1;
arr[count][1]=sumNum+"";
arr[count][2]=num1+"";
arr[count][3]=info1;
count++;
System.out.println("添加成功!");
break;
case 4:
System.out.println("确认是否退出(y/n)?:");
Scanner in=new Scanner(System.in);
char c1 = in.next().charAt(0);//输出char类型
if (c1=='y') {
System.out.println("拜拜!退出成功!");
return;
}else {
break;
}
}//当输入的长度满了时,开始新的数组
if(cml==count) {
cml *= 2;
String [][] temp = new String[cml][4];
for (int j = 0; j <count; j++) {
temp[j] = arr[j];
}
arr = temp;
}
}
}
}
工具类(Utility)
package task;
import java.util.Scanner;
public class InputTool {
public static int getInt(){
Scanner sc = new Scanner(System.in);
int res;
while (true){
String str = sc.nextLine();
try{
res = Integer.parseInt(str);
break;
}catch (Exception e){
System.out.println("请输入数字");
continue;
}
}
return res;
}
public static void main(String[] args) {
int a = getInt();
System.out.println(a);
}
}