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

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

主要涉及一下知识点:

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

- 循环语句

- 分支语句

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

- 简单的屏幕输出格式

工具类介绍

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









FamilyAccount.java类代码实现

public class FamilyAccount {

  1. public static void main(String[] args) {
  2. boolean isFlag = true;
  3. //用于记录用户的收入与支出的详情
  4. String details = ("收支\t账户金额\t\t收支金额\t\t说 明 \n");
  5. //初始账户金额
  6. int balance = 10000;
  7. while(isFlag) {
  8. System.out.println("-----------------家庭收支记账软件-----------------\n");
  9. System.out.println(" 1 收支明细");
  10. System.out.println(" 2 登记收入");
  11. System.out.println(" 3 登记支出");
  12. System.out.println(" 4 退 出\n");
  13. System.out.print(" 请选择(1-4): ");
  14. //获取用户的选择 1-4
  15. char selection = Utility.readMenuSelection();
  16. switch(selection) {
  17. case '1':
  18. //System.out.println("1.收支明细");
  19. System.out.println("-----------------当前收支明细记录-----------------");
  20. System.out.println(details);
  21. System.out.println("-----------------------------------------------");
  22. break;
  23. case '2':
  24. //登记收入
  25. System.out.print("本次收入金额: ");
  26. int addMoney = Utility.readNumber();
  27. System.out.print("本次收入说明: ");
  28. String addInfo = Utility.readString();
  29. balance += addMoney;
  30. //处理details`
  31. details += ("收入"+"\t"+ balance +"\t\t"+ addMoney +"\t\t"+ addInfo +"\n");
  32. System.out.println("-------------------登记完成---------------------");
  33. break;
  34. case '3':
  35. //登记支出
  36. System.out.print("本次支出金额: ");
  37. int minusMoney = Utility.readNumber();
  38. System.out.print("本次支出说明: ");
  39. String minusInfo = Utility.readString();
  40. //处理balance
  41. if(balance >= minusMoney) {
  42. balance -= minusMoney;
  43. //处理details
  44. details += ("支出"+"\t"+ balance +"\t\t"+ minusMoney +"\t\t"+ minusInfo +"\n");
  45. }else {
  46. System.out.println("支出金额大于余额,支付失败");
  47. }
  48. System.out.println("-------------------登记完成---------------------");
  49. break;
  50. case '4':
  51. //退出
  52. System.out.print("请确认是否退出(Y/N): ");
  53. char isExit = Utility.readConfirmSelection();
  54. if(isExit == 'Y') {
  55. isFlag=false;
  56. }
  57. }
  58. }
  59. }

}

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;

}

  1. /**
  2. 用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。
  3. */
  4. public static char readConfirmSelection() {
  5. char c;
  6. for (; ; ) {
  7. String str = readKeyBoard(1).toUpperCase();
  8. c = str.charAt(0);
  9. if (c == 'Y' || c == 'N') {
  10. break;
  11. } else {
  12. System.out.print("选择错误,请重新输入:");
  13. }
  14. }
  15. return c;
  16. }
  17. private static String readKeyBoard(int limit) {
  18. String line = "";
  19. while (scanner.hasNext()) {
  20. line = scanner.nextLine();
  21. if (line.length() < 1 || line.length() > limit) {
  22. System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
  23. continue;
  24. }
  25. break;
  26. }
  27. return line;
  28. }

}

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. 南阳ccpc C题 The Battle of Chibi 树状数组+dp

    题目: Cao Cao made up a big army and was going to invade the whole South China. Yu Zhou was worried ab ...

  2. AcWing 243. 一个简单的整数问题2 (树状数组,区间更新/询问)

    题意:区间更新,区间询问. 题解;对于区间更新,我们还是用差分数组\(b_i\)来更新,区间询问时,我们的答案是:\(\sum_{i=l}^{r}\sum_{j=1}^{i}b_j\), 所以,我们搞 ...

  3. Codeforces Round #570 (Div. 3) G. Candy Box (hard version) (贪心,优先队列)

    题意:你有\(n\)个礼物,礼物有自己的种类,你想将它们按种类打包送人,但是打包的礼物数量必须不同(数量,与种类无关),同时,有些礼物你想自己留着,\(0\)表示你不想送人,问你在送出的礼物数量最大的 ...

  4. 升级到WLS2

    WLS2相对WSL1有重大改变,其中最重要的是subsystem linux可以说是真正意义上的linux发行版了,当然也提升了i/o性能. 1. 升级windows WSL 2 is only av ...

  5. Java进阶专题(二十五) 分布式锁原理与实现

    前言 ​ 现如今很多系统都会基于分布式或微服务思想完成对系统的架构设计.那么在这一个系统中,就会存在若干个微服务,而且服务间也会产生相互通信调用.那么既然产生了服务调用,就必然会存在服务调用延迟或失败 ...

  6. 部署开源IP管理工具phpIPAM

    一.安装环境程序: yum install httpd mariadb-server php php-cli php-gd php-common php-ldap php-pdo php-pear p ...

  7. .NET中使用DebuggerDisplay轻松定制调试

    前言 对于调试的方式有多种,不过在今天我们将看到的监视窗口对变量的监视,当然在这里我们是定制内部的变量值,或者说变量的显示与计算的内容. 注:监视窗口在调试时可以一次显示多个变量."快速监视 ...

  8. React & Strict Mode

    React & Strict Mode https://reactjs.org/docs/strict-mode.html#detecting-unexpected-side-effects ...

  9. github & markdown & image layout

    github & markdown & image layout css & right https://github.com/sindresorhus/log-symbols ...

  10. open an iOS simulator from the terminal

    open an iOS simulator from the terminal # simulator $ open -a Simulator flutter https://flutter.dev/ ...