实现一个基于文本界面的《家庭记账软件》

需求:能够记录家庭的收入,支出,并能够收支明细表

主要涉及一下知识点:

- 局部变量和基本数据类型

- 循环语句

- 分支语句

- 方法调用和返回值的接受

- 简单的屏幕输出格式

工具类介绍

将不同的功能封装为方法,就可以直接通过调用的方法使用它的功能,而无需考虑具体的功能实现。在Utility.java类中提供了以下静态方法:









FamilyAccount.java类代码实现

public class FamilyAccount {

public static void main(String[] args) {

	boolean isFlag = true;
//用于记录用户的收入与支出的详情
String details = ("收支\t账户金额\t\t收支金额\t\t说 明 \n");
//初始账户金额
int balance = 10000; while(isFlag) {
System.out.println("-----------------家庭收支记账软件-----------------\n");
System.out.println(" 1 收支明细");
System.out.println(" 2 登记收入");
System.out.println(" 3 登记支出");
System.out.println(" 4 退 出\n");
System.out.print(" 请选择(1-4): ");
//获取用户的选择 1-4
char selection = Utility.readMenuSelection();
switch(selection) {
case '1':
//System.out.println("1.收支明细");
System.out.println("-----------------当前收支明细记录-----------------");
System.out.println(details);
System.out.println("-----------------------------------------------");
break;
case '2':
//登记收入
System.out.print("本次收入金额: ");
int addMoney = Utility.readNumber();
System.out.print("本次收入说明: ");
String addInfo = Utility.readString();
balance += addMoney;
//处理details`
details += ("收入"+"\t"+ balance +"\t\t"+ addMoney +"\t\t"+ addInfo +"\n"); System.out.println("-------------------登记完成---------------------");
break;
case '3':
//登记支出
System.out.print("本次支出金额: ");
int minusMoney = Utility.readNumber();
System.out.print("本次支出说明: ");
String minusInfo = Utility.readString();
//处理balance
if(balance >= minusMoney) {
balance -= minusMoney;
//处理details
details += ("支出"+"\t"+ balance +"\t\t"+ minusMoney +"\t\t"+ minusInfo +"\n");
}else {
System.out.println("支出金额大于余额,支付失败");
}
System.out.println("-------------------登记完成---------------------");
break;
case '4':
//退出
System.out.print("请确认是否退出(Y/N): ");
char isExit = Utility.readConfirmSelection();
if(isExit == 'Y') {
isFlag=false;
}
}
}
}

}

Utility.java类代码实现

import java.util.Scanner;

/**

Utility工具类:

将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。

/

public class Utility {

private static Scanner scanner = new Scanner(System.in);

/
*

用于界面菜单的选择。该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。

/

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.print("选择错误,请重新输入:");

} else break;

}

return c;

}

/
*

用于收入和支出金额的输入。该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。

/

public static int readNumber() {

int n;

for (; ; ) {

String str = readKeyBoard(4);

try {

n = Integer.parseInt(str);

break;

} catch (NumberFormatException e) {

System.out.print("数字输入错误,请重新输入:");

}

}

return n;

}

/
*

用于收入和支出说明的输入。该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。

*/

public static String readString() {

String str = readKeyBoard(8);

return str;

}

/**
用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。
*/
public static char readConfirmSelection() {
char c;
for (; ; ) {
String str = readKeyBoard(1).toUpperCase();
c = str.charAt(0);
if (c == 'Y' || c == 'N') {
break;
} else {
System.out.print("选择错误,请重新输入:");
}
}
return c;
} private static String readKeyBoard(int limit) {
String line = ""; while (scanner.hasNext()) {
line = scanner.nextLine();
if (line.length() < 1 || line.length() > limit) {
System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
continue;
}
break;
} return line;
}

}

Java基础自学小项目的更多相关文章

  1. java基础部分小项目

    贪吃蛇项目 import java.awt.Color; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.even ...

  2. Java自学路线图之Java基础自学

    自学Java要从Java基础语法开始自学,自学Java的过程中打好基础是很重要的!首先自学:面向对象基础,API基础,集合基础.这些对Java小白的数学和英语能力的要求门槛不高,在学习的过程中积累相应 ...

  3. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  4. java基础知识小小结

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  5. 【Java基础 项目实例--Bank项目5】Account 和 customer 对象等 继承、多态、方法的重写

    延续 Java基础 项目实例--Bank项目4 实验要求 实验题目 5: 在银行项目中创建 Account 的两个子类:SavingAccount 和 CheckingAccount 实验目的: 继承 ...

  6. java客房管理小项目,适合java小白练手的项目!

    java客房管理小项目 这个客房管理小项目,适合java初学者练手.功能虽然不多,但是内容很齐全! 喜欢这样文章的可以关注我,我会持续更新,你们的关注是我更新的动力!需要更多java学习资料的也可以私 ...

  7. Java Swing客户端小项目

    记录一下两个用java swing写的客户端. 项目1: 关键词:swing  jtable 代码如下: 1.主类: package com.my.agent.client; import java. ...

  8. java 购物商城小项目训练

    java web 模拟购物车练习(项目一) 首页(index.jsp) <div align="center" class="index"> < ...

  9. Python基础--01小项目体现的基础知识

    part1:猜拳游戏 #coding=utf-8 #当有汉语时可能编译器不认识,需要定义代码 ''' 多行注释 写这个程序是为了熟悉python的基本语法 这是第一个小例子包含简单的if判断,循环和输 ...

随机推荐

  1. 一文弄懂-BIO,NIO,AIO

    目录 一文弄懂-BIO,NIO,AIO 1. BIO: 同步阻塞IO模型 2. NIO: 同步非阻塞IO模型(多路复用) 3.Epoll函数详解 4.Redis线程模型 5. AIO: 异步非阻塞IO ...

  2. Codeforces Round #652 (Div. 2) D. TediousLee(dp)

    题目链接:https://codeforces.com/contest/1369/problem/D 题意 最初有一个结点,衍生规则如下: 如果结点 $u$ 没有子结点,添加 $1$ 个子结点 如果结 ...

  3. hdu5365Shortest Path (floyd)

    Problem Description There is a path graph G=(V,E) with n vertices. Vertices are numbered from 1 to n ...

  4. jenkins:实现Jenkinsfile与Json的转换

    实现Jenkinsfile与Json的转换 目录 实现Jenkinsfile与Json的转换 方法1:使用现有的jenkins插件 参考 方法2:解析原生的jenkinsfile文件 参考 最近在做个 ...

  5. 国产smartbits版本-minismb测试高恪路由器IP限速

    Minismb测试仪表是复刻smartbits的国产版本,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具测试任何ip网络设备的端口吞吐率,带宽,并发连接数和 ...

  6. Kubernets二进制安装(3)之准备签发证书环境

    1.在mfyxw50机器上分别下载如下几个文件:cfssl.cfssl-json.cfssl-certinfo cfssl下载连接地址: https://pkg.cfssl.org/R1.2/cfss ...

  7. nginx的log、upstream和server

    一.log 首先一个log格式化的例子. #配置格式main的log log_format main '$host $status [$time_local] $remote_addr [$time_ ...

  8. 深入理解JavaScript垃圾回收

    JavaScript中的垃圾回收是自动进行的,在平常开发中我们可能并不在意,但是深入理解JavaScript中的垃圾回收却是必要的; JavaScript 中主要的内存管理概念是 可达性,简而言之就是 ...

  9. SSL 数据加密原理简述

    最近调试mqtt协议,为了保证数据安全性和将来客户端的对云的兼容性选择了openssl作为安全加密中间层,而没有使用私有的加密方式.所以花了点时间学习了一下ssl 加密流程整理如下: 因为正常正式使用 ...

  10. 006.NET 项目建立+传值

    1. 创建项目 2.传值(控制器向视图传递) 接收值 3.视图向控制器传递 4.session配置