需求说明

  • 模拟实现基于文本界面的《家庭记账软件》。
  • 该软件能够记录家庭的收入、支出,并能够打印收支明细表。
  • 假设家庭起始的生活基本金为10000元。
  • 每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记 录本次收入明细,以便后续的查询。
  • 每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记 录本次支出明细,以便后续的查询。
  • 查询收支明细(菜单1)时,将显示所有的收入、支出名细列表
  • “登记收入”的界面及操作过程如下所示:

键盘访问的实现

项目中提供了Utility.java类,可用来方便地实现键盘访问。
该类提供了以下静态方法:

  • public static char readMenuSelection():该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。
  • public static int readNumber() :该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。
  • public static String readString() :该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。
  • public static char readConfirmSelection() :该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。

utility代码

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;}
}

项目实现

class FamilyAccount{public static void main(String[] args){boolean isFlag = true;//用于记录用户的收入和支出的详情String details = "收支\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-4char 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.println("2.登记收入");System.out.print("本次收入金额:");int addMoney = Utility.readNumber();System.out.print("本次收入说明:");String addInfo = Utility.readString();//处理balancebalance += addMoney;//处理detailsdetails += ("收入\t" + balance + "\t\t" + addMoney + "\t\t" + addInfo + "\n");System.out.print("---------------------登记完成---------------------\n");break;case '3'://System.out.println("3.登记支出");System.out.print("本次支出金额:");int minusMoney = Utility.readNumber();System.out.print("本次支出说明:");String minusInfo = Utility.readString();//处理balanceif (balance >= minusMoney){balance -= minusMoney;//处理detailsdetails += ("支出\t" + balance + "\t\t" + minusMoney + "\t\t" + minusInfo + "\n");}else{System.out.println("支出超出账户额度,支付失败");}System.out.print("---------------------登记完成---------------------\n");break;case '4'://System.out.println("4.退    出");System.out.println("确认是否退出(Y/N):");char isExit = Utility.readConfirmSelection();if (isExit == 'Y'){isFlag = false;}//break;}}}
}

本章完结!

小白自学笔记——JAVA基础 2.12 项目一 家庭记账软件相关推荐

  1. 小白自学笔记——JAVA基础 0.1Java语言概述

    我学习的是宋红康老师的视频,首先是课程大纲. 课程大纲 课程体系 第1章 Java语言概述 第2章 基本语法 第3章 数组 第4章 面向对象编程(上) 第5章 面向对象编程(中) 第6章 面向对象编程 ...

  2. 小白自学笔记——JAVA基础 2.2变量

    变量概述 概念: - 内存中的一个存储区域 - 该区域的数据可以在同一类型范围内不断变化 - 变量是程序中最基本的存储单元,包含变量类型.变量名和存储值 作用 - 用于在内存中保存数据 变量的使用 j ...

  3. 小白自学笔记——JAVA基础 2.9循环结构

    循环结构 在某些条件满足的情况下,反复执行特定代码的功能. 循环语句分类 for 循环 while 循环 do-while 循环 FOR循环结构 for (①初始化部分;②循环条件部分;④迭代部分){ ...

  4. 小白自学笔记——JAVA基础 2.8分支结构

    名词解释 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块. 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即: 顺序结构 程序从上到下逐行地执 ...

  5. 小白自学笔记——JAVA基础 3.2 多维数组

    名词解释 Java 语言里提供了支持多维数组的语法. 如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格,像Excel中的表格一样. 对于二维数组的理解,我们可以看成是一维数组a ...

  6. 小白自学笔记——JAVA基础 1.1常用的DOS文件

    今天开始自学JAVA第一课.看的是B站上宋红康老师的视频. 一 学习常用的DOS命令 在搜索栏输入'cmd'打开 eg1:打开D盘文件 [输入] D: eg2:列出当前文件夹下的所有文件 [输入] d ...

  7. 小白自学笔记——JAVA基础 2.6运算符

    名词解释 运算符是一种特殊的符号,用以表示数据的运算.赋值和比较等. - 算术运算符 - 赋值运算符 - 比较运算符(关系运算符) - 逻辑运算符 - *位运算符 - 三元运算符 算术运算符 eg: ...

  8. 小白自学笔记——JAVA基础 2.5进制

    计算机中不同进制的使用说明 所有数字在计算机底层都以二进制形式存在. 对于整数,有四种表示方式: - 二进制(binary):0,1 ,满2进1.以0b或0B开头. - 十进制(decimal):0- ...

  9. 小白自学笔记——JAVA基础 3.1 一维数组

    名词解释 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理. 数组的常见概念 数组名 下标(或索引) 元素 数组的长度 数组的特点 ...

最新文章

  1. web应用程序和web网站_Web应用程序和移动应用程序的基本启动清单
  2. 3寸以上java手机_7寸屏手机有哪些(堪称性价比之王的四款手机)
  3. WPF Wonders: Transformations (and Robots!)
  4. 分布式系统中处理参数配置的 4 种方案
  5. hdu oj1095题解
  6. TrinityCore3.3.5编译过程-官方指导-踩坑总结
  7. iOS属性传值传递不过去
  8. linux mysql connector_fd_在CentOS里使用MySQL Connector/C++
  9. register关键字-1
  10. Python 3 - 如何下载视图和保存证书
  11. 滚动后mouseleave失效_滚动直线导轨副用钳制器可靠性试验设计
  12. kafka生产者API操作
  13. 2016年统计用区划代码和城乡划分代码(截止2016年07月31日) 省市县镇+url
  14. strom 在linux下部署、基本命令
  15. 西交大计算机考博学术英语,西安交大电子与信息学部2020博士招生资格考核(审核)细则...
  16. dell笔记本外接显示器_戴尔笔记本怎么连接外接显示器?
  17. AUTOCAD——偏移命令、移动命令
  18. rand()和srand()函数
  19. python计算机视觉学习第8章——图像内容分类
  20. bzoj5020[THUWC 2017]在美妙的数学王国中畅游(LCT)

热门文章

  1. 【Python的自学之路】(六):案例分析第四课-小工具2.0
  2. 移植智能卡/读卡器系列驱动(libusb、pcsc-lite、pcsc_tools、ccid)到嵌入式ARM开发板上
  3. 数据结构家族谱问题(map)
  4. 调用SMT.ZEBRA.dll斑马打印机库文件,打印条形码。
  5. 事业单位计算机岗位等级晋升,事业单位等级晋升制度政策规定
  6. 数据仓库和传统数据库的关系
  7. 四子棋 java_java智能四子棋人机大战游戏设计(附项目,以及原创PSD,设计文档)...
  8. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java网上旅游订票服务系统10r27
  9. 10w字!前端知识体系+大厂面试总结(算法篇)
  10. IDC中国区副总裁武连峰:打造数据驱动的未来创新企业