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

/*
*@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教程链接

原文链接:https://www.cnblogs.com/Noiimplant/p/17354112.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java模拟实现一个基于文本界面的《记账软件》 - Python技术站

(0)
上一篇 2023年4月27日
下一篇 2023年4月27日

相关文章

  • java实现斐波那契数列的3种方法

    以下是详细讲解“Java实现斐波那契数列的3种方法”的完整攻略。 一、斐波那契数列简介 斐波那契数列(Fibonacci Sequence)是一个非常经典的数学问题,它的定义如下: 斐波那契数列是一列数字,第一和第二项为 1,之后的每一项都是前两项之和。 数列的前几项为:1,1,2,3,5,8,13,21,34,55,89,144,… … 二、Java实现斐…

    Java 2023年5月19日
    00
  • spring配置文件加密方法示例

    《spring配置文件加密方法示例》的完整攻略如下: 一、背景 在某些情况下,我们需要在spring配置文件中保存一些敏感信息,比如数据库连接用户名和密码等,为了保证这些信息的安全性,我们需要对这些信息进行加密处理。 二、实现方法 1. 使用spring jasypt spring jasypt是一个基于Jasypt的Spring安全加密工具库,可以对Spr…

    Java 2023年6月15日
    00
  • 浅析Java的Hibernate框架中的继承关系设计

    浅析Java的Hibernate框架中的继承关系设计 什么是Hibernate? Hibernate是一个Java持久化框架,它可以将Java对象映射到关系数据库中。Hibernate提供了一个对象关系映射(ORM)的实现,通过使用这个框架,Java程序员就可以使用面向对象的方式来处理数据库操作。 继承关系设计在Hibernate中的应用 Hibernate…

    Java 2023年5月20日
    00
  • 常见的对象引用有哪些?

    关于“常见的对象引用有哪些”这个问题,下面我将为大家提供一份完整的使用攻略,具体步骤如下: 第一步:理解对象引用的含义 对象引用,是指在 Java 中,存储在变量中的引用,指向在内存中分配的实际的对象。变量只存储引用,而不存储实际的对象。因此,Java 中的对象引用是一种非常重要的概念。 第二步:了解常见的对象引用 Java 中常见的对象引用有以下四种: 强…

    Java 2023年5月11日
    00
  • 用JAVASCRIPT帮我写个计数器

    请先确保你已经有一个网站,并且能够在页面上进行JavaScript编程。 下面是使用JavaScript编写计数器的详细攻略: 步骤1: 创建一个HTML文档,并在其中添加一个按钮和一个初始值为0的文本框。 <!DOCTYPE html> <html> <head> <title>计数器</title&g…

    Java 2023年6月15日
    00
  • mybatis查询返回Map类型的讲解

    Mybatis是一个优秀的ORM框架,常见的查询结果是将数据封装在POJO类中,但有时我们还需要查询结果封装到Map类型中,本文将详细讲解如何使用mybatis查询返回Map类型的方法。 1. 返回Map类型的Mapper接口方法 我们可以定义一个返回Map类型的Mapper接口方法,具体过程如下: 1.1 定义Mapper接口 public interfa…

    Java 2023年5月20日
    00
  • Java aop面向切面编程(aspectJweaver)案例详解

    Java AOP面向切面编程(AspectJ Weaver)案例详解 什么是AOP? AOP全称Aspect-Oriented Programming,即面向切面编程。它是一种基于OOP(Object-Oriented Programming,面向对象编程)的编程思想,用于解决模块化开发中横切关注点的问题,以通过对横切关注点进行抽象,实现系统各模块之间的解耦…

    Java 2023年5月19日
    00
  • springboot jpa分库分表项目实现过程详解

    那我就来详细讲解一下“springboot jpa分库分表项目实现过程详解”的完整攻略。 1. 什么是分库分表 分库分表是一种水平扩展数据库的方式。 在一个分库分表的架构中,一个应用的数据被分为多个库或表。 这些库或表通常基于某个可配置的关键字划分数据。 比如用户ID可以作为划分关键字,用户的数据会根据关键字散列到多个库或表中。 2. 分库分表的优缺点 2.…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部