小项目实践

发布于:2023-02-11 ⋅ 阅读:(462) ⋅ 点赞:(0)

基础项目-家庭记录收支程序

思路

在这里插入图片描述
如图所示
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[] 还是其他的比如二维数组,然后我发现其实都可以。所以说希望自己不要太焦虑一切东西水到渠成就好,正所谓柳暗花明又一村啊!!!


网站公告

今日签到

点亮在社区的每一天
去签到