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

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

主要涉及一下知识点:

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

- 循环语句

- 分支语句

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

- 简单的屏幕输出格式

工具类介绍

将不同的功能封装为方法,就可以直接通过调用的方法使用它的功能,而无需考虑具体的功能实现。在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. HDU-4773 Problem of Apollonius (圆的反演)

    参考: https://oi-wiki.org/geometry/inverse/ https://blog.csdn.net/acdreamers/article/details/16966369 ...

  2. Codeforces Round #589 (Div. 2) D. Complete Tripartite(模拟)

    题意:给你n个点 和 m条边 问是否可以分成三个集合 使得任意两个集合之间的任意两个点都有边 思路:对于其中一个集合v1 我们考虑其中的点1 假设点u和1无边 那么我们可以得到 u一定和点1在一个集合 ...

  3. Educational Codeforces Round 94 (Rated for Div. 2)【ABCD】

    比赛链接:https://codeforces.com/contest/1400 A. String Similarity 题意 给出一个长 $2n-1$ 的二进制串 $s$,构造一个长 $n$ 的字 ...

  4. Codeforces Global Round 7 A. Bad Ugly Numbers(数学)

    题意: 给你一个 n,输出一个 n 位不含 0 且不被任一位整除的正数. 思路: 构造 233 或 899. #include <bits/stdc++.h> using namespac ...

  5. manacher算法——回文串计算的高效算法

    manacher算法的由来不再赘述,自行百度QWQ... 进入正题,manacher算法是一个高效的计算回文串的算法,回文串如果不知道可以给出一个例子:" noon ",这样应该就 ...

  6. 牛客编程巅峰赛S1第6场 - 黄金&钻石&王者 C.星球游戏 (单源最短路,Dijkstra)

    题意:有\(n\)个点,\(m\)条双向边,两个方向的权值都是相等的,可以从\(A\)中的某个点出发走到\(B\)中的某个点,求所有路径中的最短距离,如果A和B中没有点联通,则输出\(-1\). 题解 ...

  7. 国产网络测试仪MiniSMB - 如何3秒内创建出16,000条IP递增流

    国产网络测试仪MiniSMB(www.minismb.com)是复刻smartbits的IP网络性能测试工具,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太 ...

  8. Kubernets二进制安装(16)之安装部署traefik(ingress)

    K8S的DNS实现了服务在集群"内"被自动发现,如何使得服务在Kuberneters集群"外"被使用和访问呢,有二种方法 1)使用NodePort型的Servi ...

  9. cdn jsdelivr + github releases 以wordpress sakura主题manifest为例

    1 创建github repository 在本地创建文件,这里为文件夹 /manifest 在github创建库wordpresscdn,上传 /manifest到库中 2 github relea ...

  10. pyspark Py4JJavaError: Unsupported class file major version 56

    在jupyter notebook跑上面的代码的时候报错Py4JJavaError: An error occurred while calling z:org.apache.spark.mllib. ...