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日

相关文章

  • SpringBoot如何整合SpringDataJPA

    以下是整合Spring Data JPA的完整攻略: 1. 添加依赖 首先,在Spring Boot工程的pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star…

    Java 2023年5月20日
    00
  • java 线程中start方法与run方法的区别详细介绍

    什么是线程 在 Java 中,我们可以通过 java.lang.Thread 类创建线程。线程是一个可以独立运行的子任务。与程序中的其他子任务不同,线程在操作系统层面上是一种独立的执行单元。在单个应用程序内,多个线程可以同时执行,每个线程都有自己的栈和局部变量,线程之间可以共享堆上的变量。由于线程在同时执行,因此在多线程编程中需要引入线程同步、锁和互斥等概念…

    Java 2023年5月26日
    00
  • Java实现单人信息管理程序

    下面我将为你详细讲解“Java实现单人信息管理程序”的完整攻略。 1. 需求分析 在开始编写程序之前,我们需要确定具体的需求。本文中,我们需要实现单人信息管理程序,需要实现以下功能:1. 添加一个新的信息2. 查看所有信息3. 修改已有的信息4. 删除已有的信息 2. 数据结构设计 在确定需求之后,我们需要确定数据结构。这里我们使用Java中的ArrayLi…

    Java 2023年5月18日
    00
  • Java实现简单控制台版ATM系统

    Java实现简单控制台版ATM系统攻略 1. 需求分析 控制台版ATM系统主要需要实现以下功能: 用户登录、注册 存款、取款、查询余额 转账功能 2. 技术选型 本篇攻略使用Java语言实现控制台版ATM系统,使用了Java IO、集合等基础知识进行编写。在框架上,本篇攻略并未用到任何框架。 3. 代码实现 代码实现主要分为以下几个部分: 3.1 用户登录、…

    Java 2023年5月18日
    00
  • Java中字符串String的+和+=及循环操作String原理详解

    Java中字符串String的+和+=及循环操作String原理详解 在Java中,字符串是一种不可变类型,这意味着一旦一个字符串对象被创建,它的值就不能被改变。在本文中,我们将详细讲解Java中字符串的操作及其原理。 Java中字符串的+和+= 在Java中,你可以使用”+”或”+=”运算符来连接两个字符串。这两个运算符的作用相同,即将两个字符串连接为一个…

    Java 2023年5月26日
    00
  • Java实现批量导出导入数据及附件文件zip包

    下面我来详细讲解一下“Java实现批量导出导入数据及附件文件zip包”的完整攻略。 一、准备工作 1.引入相关依赖 我们需要引入以下依赖: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</ar…

    Java 2023年5月19日
    00
  • JSP验证码简单生成方法

    当我们网站需要进行用户登录、注册等操作时,我们通常需要使用验证码来防止机器人或者是恶意攻击,本文就来详细讲解一下如何使用JSP生成验证码。 一、验证码的生成方法 验证码的生成方法可以大致划分为以下步骤: 生成随机字符串 将随机字符串绘制成图片 将图片输出到网页上并传输随机字符串的值到后台进行验证 二、实现步骤 1. 生成随机字符串 使用Java的Random…

    Java 2023年6月15日
    00
  • servlet之session工作原理简介_动力节点Java学院整理

    我来讲解一下。 Servlet之Session工作原理简介 什么是Session Session是服务器端技术,用于在服务器端保存客户端的数据。 Session的原理 客户端第一次访问服务器时,服务器会创建一个session,并将session的id返回给客户端,客户端在接下来的请求中会将这个id带上。 服务器接收到客户端请求后,根据客户端带来的id找到对应…

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