目录
前言::时隔一天我又回来啦,今天的任务只是编写一个超难超难的小程序(对于我来说就是难!不能反驳),我从来没都没写过这么长的小程序。脑壳都给我扣痛了,我都无从下笔。想键盘敲(kao)脑壳。那就先进入正题。
标题1:操作主流程
/*需求:
* -----------------家庭收支记账软件----------------
1 收支明细
2 登记收入
3 登记支出
4 退 出
请选择(1-4):_
• 假设家庭起始的生活基本金为10000元。
• 每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记录本次收入明细,以便后续的查询。
• 每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记录本次支出明细,以便后续的查询。
• 查询收支明细( 菜单1)时,将显示所有的收入、支出名细列表.
*/
// 需求分析:
// 1.抽象出变量:lifeMoney、list明细
// 2.如何更新变量
// 3.抽象出类:FamilyAccount类,分类讨论switch case或者使用if语句(1 2 3 4)*/
标题2:主菜单
⑴首先是进入主菜单,选择1、2、3、4;再然后选择收入或者支出;然后选择收支明细。查看完收支明细将会返回主菜单。
⑵通过分析,主菜单最后又返回到主菜单。 这里明显需要一个循环语句。说明什么呢?整个操作流程都是放在一个循环语句里。这里推荐使用while语句。
以下在代码里面的效果:
while (tag) {
Scanner sc = new Scanner(System.in);
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");
以下为输出后在控制台的效果:
-----------家庭收支记账系统------------
1.收支明细
2.登记收入
3.登记支出
4.退出
请输入1-4
标题3:选项1
⑶ 在这里我们要进入选项,操作当然是while语句下面嵌套if语句。(有人也用switch语句)。
假如我首先进入的是选项1,请看代码图:
char num = Utility.readMenuSelection();//从这儿开始调用工具类
if (num == '1') {//这为什么用字符类型的1,因为输入的数据是char,是单个字符
System.out.println("-----------当前收支明细--------------");
System.out.println(" 收支 账户金额 收支明细 说明");
for (int i = 0; i < arr.length; i++) {
if (arr[i][0] != null) {
System.out.println(" "+arr[i][0]+" "+arr[i][1] + " " + arr[i][2] + " " + arr[i][3]);
}
}
}
解释说明
首先引入工具类,避免一定的错误。初学者辉仔建议懂怎么调用就好了。工具集是一个char类型,数字是int类型的那怎么将int变成char类型呢。可以将数字看做一个字符就好了,如图。
当我们循环了一周怎么存储数据呢?可以设置一个String类型的数组。将数据存储在arr里面。
以下是控制台输出结果:
-----------家庭收支记账系统------------
1.收支明细
2.登记收入
3.登记支出
4.退出
请输入1-4
1
-----------当前收支明细--------------
收支 账户金额 收支明细 说明
标题4:选项2
⑷进入了选项1之后,我们来学习如何进入选项2。同理我们也需要if语句,当输入2的时候,会自动跳转“收入金额”,然后有跳转“项目类型”,回车之后,回到主菜单。
以下在代码里面的效果:
if (num == '2') {//这个时候拿来count
System.out.println("请输入收入的金额:");
int getmoney = Utility.readNumber();
System.out.println("请输入项目类型:");
String way = Utility.readString();
arr[count][0] = "收入";
cash += getmoney;
arr[count][1] = cash + " ";//用+“ ” 将数字类型转换成字符类型
arr[count][2] = "+" + getmoney;//这里写的输入的钱
arr[count][3] = way;//输入的是项目
count++;
System.out.println("--输入成功");
注意: cash代表初始现金10000;将它转换为字符串,必须用以上的格式;getmoney前面有一个"+"主要表达现金加减。
注意:这里我们要调用两个工具类
其一:
/**
用于收入和支出金额的输入。该方法从键盘读取一个不超过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;
}
以下是控制台输出结果 :
-----------家庭收支记账系统------------
1.收支明细
2.登记收入
3.登记支出
4.退出
请输入1-4
2
请输入收入的金额:
6666
请输入项目类型:
running
--输入成功
标题5:选项3
⑸既然完成了选项2,那么选项3就不是多难的事,依样画葫芦就好了。直接上代码图。
以下是代码图:
if (num == '3') {//3必须用字符表示
System.out.println("请输入支出金额:");
int losemoney = Utility.readNumber();
System.out.println("请输入项目类型:");
String way = Utility.readString();
arr[count][0] = "支出";
cash -= losemoney;
arr[count][1] = cash + " ";//用+“ ” 将数字类型转换成字符类型
arr[count][2] = "-" + losemoney;//这里写的支出的钱
arr[count][3] = way;//输入的是项目
count++;
System.out.println("--输入成功");
}
以下是执行流程图:
-----------家庭收支记账系统------------
1.收支明细
2.登记收入
3.登记支出
4.退出
请输入1-4
3
请输入支出金额:
585
请输入项目类型:
看电影
--输入成功
标题6:回到选项1
⑹我们完成了收入和支出的操作。那么我们需要再进一次选项1,查看我们的数据被存入进去没有。
以下是控制台流程图:
-----------家庭收支记账系统------------
1.收支明细
2.登记收入
3.登记支出
4.退出
请输入1-4
1
-----------当前收支明细--------------
收支 账户金额 收支明细 说明
收入 16666 +6666 running
支出 16081 -585 看电影
标题7:选项4
到这里我们的项目是执行得很顺利,这个时候我想。退出那么就需要选项四,那么怎么操作呢?用代码实现?这里我们将使用我们的第四个工具。Yes就是退出系统,No就是退出选项4。肯定用if语句实现。
以下是代码图:
if (num == '4') {
System.out.println("请确定是否退出?(Y/N)");
char ch = Utility.readConfirmSelection();
if (ch == 'N') {
System.out.println("谢谢成功退出");//选N是退出循环,Y是直接退出系统
} else {
break;
}
}
}
char 类型的工具集,如下:
/**
用于确认选择的输入。该方法从键盘读取‘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;
}
以下是控制台输出结果:
-----------家庭收支记账系统------------
1.收支明细
2.登记收入
3.登记支出
4.退出
请输入1-4
4
请确定是否退出?(Y/N)
y
标题8:总结
到这里我们的整个流程都结束了。其实这道题的逻辑很简单。辉仔拿到的第一时间无法下笔。不知道如何去做,没有理解到这道题该如何运行,通过查看别人的思路与代码再加问同学,才真正的搞懂这道题。详细的代码图和工具集都会放在下面给大家查看。希望能帮上一点忙。
ps:不定期更新自己学习Java的心得体会。以日记的方式见证自己的成长或者退步哈哈哈!!!