基础项目-家庭记录收支程序
思路
如图所示
1开始就开始写显示这个主菜单到控制台。叫用户输入想要了解的程序,然后开始对1-4的选择一个一个的写出它对应的功能。
问题与解决
用户不按要求输入
这里是一开始我只能让用户输入1-4的数字,但是如果用户输入其他的就要提示他输入错了,在输入一次。==所以。我直接写了一个死循环while()==还订了一个 int biao=0;但是写完才发现while(true)也行这里是我多次一举了。break;语句完全够了。
注意这里有个关键的地方就是输入了数字后肯定要回车,但是回车这个没有被接收,所以需要一个sc.nextLine();接收这点后面有讲。
这里用一个sc.hasNextInt()来判断是不是数字。如果不是数字那么
这里再提示用户输入。直到它输入1-4为止。
(这里我注意用sc.hasnextInt()后要用一个东西来接收你的输入。否则你进功能选择的时候它自动打印两行输出语句)
打印功能1
我其实一直在想如何如何打印。
1.一开始我想的是直接写成一个字符串,那么后续的添加就会很麻烦。
2.所以我决定直接启用4个String数组直接每一列都一一管理。
就对他进行一一打印==(解释这个isWrite[] 因为我先定义了其一个boolearn的数组那么只要false就是没有写过的哪一行,true就是写过的,所以就可以打印。)==
登记收入2
首先要注意
这里一定要有一个sc.nextLine()的接收否则他会直接打印两个输出语句后面就紧接着写下面的代码。
先拿3个String类型变量来接受用户输入。
然后一个for循环!当isWrite[i]没有被写过的时候才是false。所以写入。
但是对于收入我们要判断一下它是不是整数,如果是小数那么就会出现数字异常所以需要我们抓取。出错那么就叫用户重新输入一遍和界面的那个while一样一直循环。直到加上了后在出break;
登记支出3
这里一功能和上面的功能2差不多,但是这里有比如本金10000,你要取走20000,这种情况决定是不可能的。所以要进行一个判断。
如果出现问题就提示再输入一遍程序。
退出4
这里就是判断用户的输入
1.首先要是一个长度为1的字符串,不是就重新输入
2.要是大写的y/Y,和小写的n/N。
就结束了
代码
package swsm.six;
import jdk.swing.interop.SwingInterOpUtils;
import java.util.Scanner;
public class Start {
static boolean[] isWrite;
public static void main(String[] args) {
isWrite=new boolean[100];
String[] shouZhi=new String[100];
String[] allMoney=new String[100];
String[] incomeMoney=new String[100];
String[] explain=new String[100];
start(shouZhi,allMoney,incomeMoney,explain);
Scanner sc = new Scanner(System.in);
boolean loopFlag = true;
//我这个无限循环只能判断不是数字类型的 东西
while (loopFlag) {
System.out.println(“--------家庭收支记账软件--------”);
System.out.println(“1.收支明细”);
System.out.println(“2.登记收入”);
System.out.println(“3.登记支出”);
System.out.println(“4.退 出”);
System.out.print(“请选择(1-4):”);
if (sc.hasNextInt()) {
int choose = sc.nextInt();
//loopFlag = false;
//start 就是初始化 第一行的内容。
switch (choose) {
case 1:
transactionDetailEnquiry(shouZhi,allMoney,incomeMoney,explain);
break;
case 2:
addRecord(shouZhi,allMoney,incomeMoney,explain,sc);
break;
case 3:
reduceRecord(shouZhi,allMoney,incomeMoney,explain,sc);
break;
case 4:
if (isRealExit(sc)){
loopFlag=false;
break;
}else {
break;
}
default:
System.out.println("哥能输入1-4的数字很难吗?");
System.out.println(" ");
break;
}
} else {
sc.nextLine();
System.out.println("输入不对,请输入数字1-4");
System.out.println(" ");
}
}
}
private static void reduceRecord(String[] shouZhi, String[] allMoney, String[] incomeMoney, String[] explain, Scanner sc) {
sc.nextLine();
System.out.println("-----欢迎来到登记支出-----");
int biao=0;
while (biao==0) {
System.out.println("输入为何支出");
String add=sc.nextLine();
System.out.println("输入减少好多");
String add2=sc.nextLine();
System.out.println("输入说明");
String add3=sc.nextLine();
for (int i = 0; i < isWrite.length; i++) {
if (isWrite[i]==false){//这里我先说明一下 ==false是指当前没有数据。
try {
allMoney[i]=Integer.parseInt(allMoney[i-1])+Integer.parseInt(add2)+"";
}catch (NumberFormatException e){
System.out.println("只能输入整数!请重新输入");
break;
}
if (Integer.parseInt(allMoney[i-1])<Integer.parseInt(add2)){
System.out.println("钱不够你支出的");
break;
}
shouZhi[i]=add;
incomeMoney[i]="-"+add2;//这里"+"+add2 这样写是不对的,因为 不知道是否是+的 还是-的
//反驳上面的观点 因为上面那个是收入 tm的收入不会还有负的吧。
explain[i]=add3;
isWrite[i]=true;
System.out.println("收纳次记录成功!");
biao++;
break;
}
}
}
}
private static void addRecord(String[] shouZhi, String[] allMoney, String[] incomeMoney, String[] explain, Scanner sc) {
sc.nextLine();
System.out.println("-----欢迎来到登录收入-----");
int biao=0;
while (biao==0) {
System.out.println("输入为何收支");
String add=sc.nextLine();
System.out.println("输入增加好多");
String add2=sc.nextLine();//这里有个问题 就是接收的是字符串。但是你不直到这个字符串是
// 整数还是小数。
System.out.println("输入说明");
String add3=sc.nextLine();
for (int i = 0; i < isWrite.length; i++) {
if (isWrite[i]==false){//这里我先说明一下 ==false是指当前没有数据。
shouZhi[i]=add;
try {
allMoney[i]=Integer.parseInt(allMoney[i-1])+Integer.parseInt(add2)+"";
}catch (NumberFormatException e){
System.out.println("只能输入整数!请重新输入");
break;
}
//allMoney[i]=Integer.
incomeMoney[i]="+"+add2;//这里"+"+add2 这样写是不对的,因为 不知道是否是+的 还是-的
//反驳上面的观点 因为上面那个是收入 tm的收入不会还有负的吧。
explain[i]=add3;
isWrite[i]=true;
biao++;
break;
}
}
}
System.out.println("收纳次记录成功!");
}
private static void start(String[] shouZhi, String[] allMoney, String[] incomeMoney, String[] explain) {
shouZhi[0]="收支";
allMoney[0]="账号总金额";
incomeMoney[0]="收支金额";
explain[0]="说 明";
isWrite[0]=true;
shouZhi[1]="总收入";
allMoney[1]="10000";
incomeMoney[1]="0 ";
explain[1]="生活基本金";
isWrite[1]=true;
}
private static void transactionDetailEnquiry(String[] shouZhi, String[] allMoney, String[] incomeMoney, String[] explain) {
System.out.println("-----欢迎来到收支明细-----");
for (int i = 0; i < isWrite.length ; i++) {
if (isWrite[i]){
System.out.println(shouZhi[i]+" \t"+allMoney[i]+" \t"+incomeMoney[i]+" \t"+explain[i]);
}
}
System.out.println("-----3s后自动退出,来到原始界面-----");
try {
Thread.sleep(1000);
System.out.println("-----2s后自动退出,来到原始界面-----");
Thread.sleep(1000);
System.out.println("-----1s后自动退出,来到原始界面-----");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static boolean isRealExit(Scanner sc) {
System.out.println("你是真的想退出吗!请输入Y为退出,N为继续");
int biao=0;
while (biao==0) {
String ans=sc.next();
if (ans.length()!=1){
System.out.println("请输入Y/N");
}else{
if (ans.equals("Y")||ans.equals("y")){
return true;
}else if (ans.equals("N")||ans.equals("n")){
return false;
}else{
System.out.println("请输入Y/N");
}
}
}
return false;
}
}
复制进idea即可进行!
总结
本次项目感觉还是有所进步,但是我一开始做这个项目的时候还是很焦虑的。因为好久没写怎么多程序了!我感觉自己的火候不够。哈哈哈。写完才发现确实,但是只要自己进步一点点就行迈出第一步。还有就是本次项目就是如何加载数据使用String[] 还是其他的比如二维数组,然后我发现其实都可以。所以说希望自己不要太焦虑一切东西水到渠成就好,正所谓柳暗花明又一村啊!!!