首页 > 编程语言 >Java模拟实现一个基于文本界面的《记账软件》

Java模拟实现一个基于文本界面的《记账软件》

时间:2023-04-25 22:26:09浏览次数:49  
标签:Java String System 记账 Unility println 文本 public out

/*
*@author: Noiimplant
*@version: 1.0
*/

1. 利用java实现简易记账软件

根据尚硅谷java教程进行练习

2. 实现功能

  • 记录家庭支出、收入,打印收支明细表
  • 使用分级菜单的方式

3. 代码实现

3.1 GuliAccount.java

package GuliAccount;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
@author Noiimplant
@data 2023-4-21
@name: 阶段一 项目:谷粒记
账软件实现
*/
public class GuliAccount {

    public static void main(String args[]){
        boolean flag = true;

        SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss"); //设计日期格式
        System.out.println(df.format(new Date())); //new Data()获取当前时间
        String currentTime = "";

        //初始金额
        int init_Money = 0;
        String info = ""; //用来记录收支的记录

        while(flag){
            System.out.println("------------谷粒记账软件--------------\n");
            System.out.println("            1.收支明细\n");
            System.out.println("            2.登记收入\n");
            System.out.println("            3.登记支出\n");
            System.out.println("            4.退   出\n");
            System.out.println("            请选择(1-4)\n");

            char selction = Unility.readMenuSelection();

            switch(selction){
                case '1':
                    System.out.println("--------------收入明细--------------");
                    System.out.println("收支\t账户金额\t收支金额\t说  明\t日  期\n");
                    System.out.println(info);
                    System.out.println("-----------------------------------");
                    break;
                case '2':
                    System.out.println("本次收入金额:");
                    int money1 = Unility.readNumber();

                    if(money1 > 0){
                        init_Money += money1; //
                    }

                    System.out.println("本次收入金额说明:");
                    String addExample = Unility.readString();

                    Date Now1 = new Date();
                    currentTime = df.format(Now1);

                    info += "收入\t\t" + init_Money + "\t\t" + money1 + "\t\t" + addExample + "\t\t" + currentTime + "\n";

                    System.out.println("--------------登记完成--------------");
                    break;
                case '3':
                    System.out.println("登记支出");
                    System.out.println("本次收入金额:");
                    int money2 = Unility.readNumber();

                    if(money2 > 0 && init_Money > money2){
                        init_Money -= money2; //
                    }

                    System.out.println("本次支出金额说明:");
                    String addExample2 = Unility.readString();

                    Date Now2 = new Date();
                    currentTime = df.format(Now2);

                    info += "收入\t\t" + init_Money + "\t\t" + money2 + "\t" + currentTime + addExample2 + "\n";

                    System.out.println("--------------登记完成--------------");
                    break;
                case '4':
                    System.out.println("请确认是否退出(Y/N)");
                    char isExit = Unility.readConfirmSelect();
                    if(isExit == 'Y'){
                        flag = false;
                    }
                    break;
            }
        }
    }
}

3.2 Unility

package GuliAccount;
import java.util.*;
public class Unility {
    private static Scanner sc = new Scanner(System.in);

    /*
    * 判断selection
    * */
    public static char readMenuSelection(){
        char c;
        for(;;){
            String str = readKeyBoard(1);
            c = str.charAt(0);
            if(c != '1' && c != '2' && c != '3' && c != '4'){
                System.out.println("输入的数据有误,请重新输入:");
            }
            else{
                break;
            }
        }
        return c;
    }



    /*
     * 用于收入和支出说明的输入。
     * 该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。
     */
    public static String readString(){
        String str = readKeyBoard(8);
        return str;
    }

    /*
     * 用于收入和支出金额的存储
     */
    public static int readNumber(){
      int num;
      for(;;){
          String str = readKeyBoard(4);
          try{
              num = Integer.parseInt(str);
              break;
          }
          catch(NumberFormatException e){
              System.out.println("输入数据有误,请重新输入");
          }
      }
      return num;
    };


    /*
     * 用于确认选择的输入。
     * 该方法从键盘读取‘Y’或‘N’,并将其作为方法的返回值。
     */
    public static char readConfirmSelect() {
        char c;
        for(;;){
            String str = readKeyBoard(1).toUpperCase();
            c = str.charAt(0);
            if(c == 'Y' || c == 'N'){
                break;
            }
            else{
                System.out.println("输入有误,请重新输入");
            }
        }
        return c;
    }

    /*
    * 从键盘键入的字符判断
    */
    public static String readKeyBoard(int limit){
        String line = "";

        while(sc.hasNext()){
            line = sc.nextLine();
            if(line.length() < 1 || line.length() > limit){
                System.out.println("输入的长度不大于" + limit + ",请重新输入");
                continue;
            }
            else break;
        }
        return line;
    }
}

原文链接:
尚硅谷java教程链接

标签:Java,String,System,记账,Unility,println,文本,public,out
From: https://www.cnblogs.com/Noiimplant/p/17354112.html

相关文章

  • java stream 多重groupingBy
    importcom.alibaba.fastjson.JSON;importlombok.Data;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;/***@ClassNameTest*@Description*@Authorcsg*@Data2023/4/2521:31*@Version......
  • Java静态代理总结
    总结:真实对象和代理对象都要实现同一个接口代理对象要代理真实角色优点:代理对象可以补充真实对象所要做的事情真实对象只需要关注自己做的事情代码示例:执行结果:......
  • 快速上手Linux核心命令(五):文本处理三剑客
    @目录前言正则表达式第一剑客grep第二剑客sed第三剑客awk小结剑仙镇楼~O(∩_∩)O前言上一篇中已经预告,我们这篇主要说Linux文本处理三剑客。他们分别是grep、sed、awk。既然能被业界称为三剑客,可见其在Linux命令中占有举足轻重得地位。所以呢,这里也专门写一篇文章说一说......
  • Java 编程问题:三、使用日期和时间
    本章包括20个涉及日期和时间的问题。这些问题通过Date、Calendar、LocalDate、LocalTime、LocalDateTime、ZoneDateTime、OffsetDateTime、OffsetTime、Instant等涵盖了广泛的主题(转换、格式化、加减、定义时段/持续时间、计算等)。到本章结束时,您将在确定日期和时间方面没有问题,......
  • hive数据从文本导入
    1,建表语句(idint,namestring,ageint,telstring)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'STOREDASTEXTFILE;2,url.txt文本1 wyp25131888888888882test30138888888888883zs348993141213,加载......
  • Java endorsed
    endorsed目录下放置的jar会覆盖JDK。endorsed目录可以通过以下代码获得:System.out.println(System.getProperty("java.endorsed.dirs"))可以通过-Djava.endorsed.dirs指定的目录面放置的jar文件,将有覆盖系统API的功能。可以牵强的理解为,将自己修改后的API打入到虚拟机指定的启动A......
  • 面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?
    认识基本数据类型在学习基本数据类型之前,我们先认识一下这两个单词:1、bit--位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为“0”或“1”。2、byte--字节:字节是计算机存储容量的基本单位,一个字节由8位二进制数组成。在计算机内部,一个字节可以表示一个数据,也可以表......
  • 面试官:Java装箱与拆箱的区别?
    关注“Java后端技术全栈”回复“000”获取大量电子书认识装箱和拆箱装箱就是自动将基本数据类型转换为包装器类型(int-->Integer);调用方法:Integer的valueOf(int)方法。拆箱就是自动将包装器类型转换为基本数据类型(Integer-->int);调用方法:Integer的intValue方法。在JavaSE5之前,如果要......
  • Java学习笔记(五)
    一、面向对象程序设计思想找一个对象帮助我们做事情(万物皆为对象),用虚拟思想去模拟现实生活。二、类和对象的概念是事物相关属性和行为的集合,可以看成是一类事物的模板,使用事物的属性特征来描述该类事物。是一类事物的具体体现,对象就是类的一个具体实例,对象具备该类事物的......
  • java中的容器
    java中的容器(1)List接口:java.util.List<>实现:java.util.ArrayList<>:变长数组java.util.LinkedList<>:双链表函数:add():在末尾添加一个元素clear():清空size():返回长度isEmpty():是否为空get(i):获取第i个元素set(i,val):将第i个元素设置为val代码:List<Integer>li......