如何制作一个简易的家庭记账系统
记录一下自己所手打的小项目,帮助自己不断的进步,有写的不好的地方请各位在评论区指出。
一 项目需求
•需要管理个人每月收支,包括资金流向,数目,消费时间(可根据实际需求更改)
• 假设家庭起始的生活基本金为10000元。
• 每次登记收入后,收入的金额应累加到基本金上,并记
录本次收入明细,以便后续的查询。
• 每次登记支出后,支出的金额应从基本金中扣除,并记
录本次支出明细,以便后续的查询。
• 查询收支明细时,将显示所有的收入、支出名细列表
二 模块与功能
1.在控制台进行自己所需要的操作,并对所操作的内容进行判断,需要调用TSUtility类中的算法进
行操作。
2.控制台中有登记收入,登记支出,收支明细,退出等操作,需要根据提示来进行。
3.进入所需要的操作后(登记支出,收支明细),下一步要进行支出或收入的说明,并记录在details中,方便后续收支明细的查询操作。
4.收支明细操作是基于登记收入与登记支出完成的,用于记录用户的支出明细,实现了数据的可管理化,方便用户的后期查询,并用构造器与收支的算法来判定用户经过一系列的操作与记录余额所剩,方便用户直接管理操作。
三 代码的详细与解析
代码中较为重要的类TSUtility,内容主要包含用户在控制台中使用的数字输入操作,并返回判断该操作的正确与否,方便后期的操作。其中设置了limit的参数判断输入字符串的长度
本代码大多以封装性的思想去执行所需要的操作,将个个内容写入方法中方便后期的直接调用。
主要用户操作代码(用户与收支系统的交互)
System.out.println("************家庭收支记账软件************");System.out.println("*************1 登记收入****************");System.out.println("*************2 登记支出****************");System.out.println("*************3 收支明细****************");System.out.println("*************4***退出*****************");}System.out.println("1-登记收入 2-登记支出 3-收支明细 4-退出 前选择(1-4)");
金额收支记录
利用简易的算法来对收支的判断与余额剩余
public static void deposit(double amt) {if (amt >= 0) {balance += amt;mat = amt;System.out.println("记录存钱成功");depDtails();}}public static void withdraw(double amt) {if (balance >= amt) {balance -= amt;tma = amt;System.out.println("记录取钱成功·");witDtails();} else {System.out.println("超过可透支额度");}}
收支记录代码块
将每登记的一笔支出与消费都记录在check中
public static void depDtails(){check += "记录到一笔收入" + mat + "\t" + "说明:" + "\t" + userInterface.sayrev + "\n";}public static void witDtails(){check += "记录到一笔支出:" + tma + "\t" + "说明:" + "\t" + userInterface.sayspe + "\n";}
退出程序的代码块
System.out.println("确认是否退出(Y/N)");char isExit = TSUtility.readConfirmSelection();if (isExit == 'Y') {ifFlag = false;}break;
以下附上全部源码(分别用三个类 )
userInterface
import java.util.Scanner;public class userInterface {public static Scanner sca1 ;public static Scanner sca2 ;static String sayrev;static String sayspe;balanceDtail bal = new balanceDtail(10000);public void enterMainMenu() {boolean ifFlag = true;char menu = 0;while (ifFlag) {if ((menu != '1')) {System.out.println("************家庭收支记账软件************");System.out.println("*************1 登记收入****************");System.out.println("*************2 登记支出****************");System.out.println("*************3 收支明细****************");System.out.println("*************4***退出*****************");}System.out.println("1-登记收入 2-登记支出 3-收支明细 4-退出 前选择(1-4)");menu = TSUtility.readMenuSelection();switch (menu) {case '1':sayRev();break;case '2':saySpe();break;case '3':balanceDtail.allDtails();break;case '4':System.out.println("确认是否退出(Y/N)");char isExit = TSUtility.readConfirmSelection();if (isExit == 'Y') {ifFlag = false;}break;}}}private void recordRevenue(){System.out.println("请输入你所要登记的收入:");sca1 = new Scanner(System.in);double s1 = sca1.nextDouble();balanceDtail.deposit(s1);}private void sayRev(){System.out.println("本次登记收入的说明:");sayrev = TSUtility.readString();recordRevenue();}private void recordSpend(){System.out.println("请输入你所要登记的支出:");sca2 = new Scanner(System.in);double s2 = sca2.nextDouble();balanceDtail.withdraw(s2);}private void saySpe(){System.out.println("本次登记支出的说明:");sayspe = TSUtility.readString();recordSpend();}public static void detail(){System.out.println("起始余额为:10000.0");System.out.println("最终余额为:"+balanceDtail.getBalance());}public static void main(String[] args) {new userInterface().enterMainMenu();}}
balanceDtails
public class balanceDtail {private static double balance = 10000;static double amt;static double mat = 0;static double tma = 0;static String check = "";public balanceDtail(double balance) {this.balance = balance;}public static double getBalance() {return balance;}public static void deposit(double amt) {if (amt >= 0) {balance += amt;mat = amt;System.out.println("记录存钱成功");depDtails();}}public static void withdraw(double amt) {if (balance >= amt) {balance -= amt;tma = amt;System.out.println("记录取钱成功·");witDtails();} else {System.out.println("超过可透支额度");}}public static void depDtails(){check += "记录到一笔收入" + mat + "\t" + "说明:" + "\t" + userInterface.sayrev + "\n";}public static void allDtails() {System.out.println(check);userInterface.detail();}public static void witDtails(){check += "记录到一笔支出:" + tma + "\t" + "说明:" + "\t" + userInterface.sayspe + "\n";}
}
TSUtility
import java.util.Scanner;public class TSUtility {private static Scanner scanner = new Scanner(System.in);public static char readMenuSelection() {char c;for(;;) {String str = readkeyBoard(1,false);c = str.charAt(0);if(c != '1'&&c !='2'&&c !='3'&&c != '4') {System.out.println("选择错误,请重新输入");}else break;}return c;}public static void readReturn() {System.out.println("按回车键继续。。。");readkeyBoard(100,true);}public static int readInt() {int n;for(;;) {String str = readkeyBoard(2,false);try {n = Integer.parseInt(str);break;}catch(NumberFormatException e ) {System.out.println("数字输入错误,请重新输入:");}}return n;}public static char readConfirmSelection() {char c;for(;;) {String str = readkeyBoard(1,false).toUpperCase();c = str.charAt(0);if(c =='Y' ||c == 'N') {break;}else {System.out.println("选择错误,请重新输入:");}}return c;}private static String readkeyBoard(int limit, boolean blankReturn) {String line ="";while(scanner.hasNextLine()) {line = scanner.nextLine();if(line.length() == 0) {if(blankReturn)return line;else continue;}if(line.length() < 1||line.length() > limit) {System.out.println("输入长度(不大于"+limit+")错误,请重新输入:");continue;}break;}return line;}/**用于收入和支出说明的输入。该方法从键盘读取一个不超过20位长度的字符串,并将其作为方法的返回值。*/public static String readString() {String str = readKeyBoard(20);return str;}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 GUI)实现连接数据库的操作,并将每一条的收支记录永久保存在数据库中,实现数据的可持久化,并将每次余额的剩余导入到数据库中,(利用文本域的getText()以及setText())方便下次的重复使用。
如何制作一个简易的家庭记账系统相关推荐
- 10分钟手把手教你用Android手撸一个简易的个人记账App
用Android手撸一个简易的个人记账系统 ⛱️序言
- arduino智能浇花系统_解放双手!自己动手做一个简易智能浇花系统
原标题:解放双手!自己动手做一个简易智能浇花系统 面对疫情,宅在家的我们可以以各种方式为战"疫"一线的医护工作者.紧急研究病毒的科研人员.口罩厂日夜工作的人们......加油打气. ...
- 使用Java制作一个简易的远控终端
使用Java制作一个简易的远控终端 远控终端的本质 1.服务端(攻击者)传输消息 ----> socket连接 ----> 客户端(被攻击者)接收消息 2.客户端执行消息内容(即执行服务端 ...
- 微信字 签到 java_java微信签到功能实现:java做的一个简易的微信签到系统
java微信签到功能实现,现在微信签到功能很流行,这个签到功能帮助微信用户更好的管理自己的微信公众号,那你想知道java微信签到功能如何实现呢,今天小编就特意为大家分享一个关于java微信签到功能实现 ...
- java设计按月每天签到_java微信签到功能实现:java做的一个简易的微信签到系统的案例...
java微信签到功能实现,现在微信签到功能很流行,这个签到功能帮助微信用户更好的管理自己的微信公众号,那你想知道java微信签到功能如何实现呢,今天小编就特意为大家分享一个关于java微信签到功能实现 ...
- [单片机框架] [kv_sys] 实现一个简易KV键值系统(最终版)
[单片机框架] [kv_sys] 实现一个简易KV键值系统 [单片机框架] [kv_sys] 实现一个简易KV键值系统(升级版) 本版本改为数据任意长度,灵活性更高. 版本 Code byte RO ...
- 利用CSS浮动制作一个简易导航栏
初学CSS,利用CSS浮动和无序列表制作一个简易导航栏: <!DOCTYPE html> <html lang="en"> <head>< ...
- [单片机框架] [kv_sys] 实现一个简易KV键值系统(升级版)
[单片机框架] [kv_sys] 实现一个简易KV键值系统 Env 小型KV数据库,支持 写平衡(磨损平衡) 及掉电保护模式 让Flash变为NoSQL(非关系型数据库)模型的小型键值(Key-Val ...
- 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具
查看本章节 查看作业目录 需求说明: 使用 history 对象和 location 对象中的属性和方法制作一个简易的网页浏览工具 实现思路: 使用history对象中的 forward() 方法和 ...
- 用Python制作一个简易的计时器
前言 今天又带来个小玩意 - 用Python制作一个简易的计时器 这个其实也能自定义一些东西的 就比如名字 颜色啥的 自己看着改就行 有想法的朋友也能自己再写写改改出其他的小功能 效果展示 实现代码 ...
最新文章
- 微软解释Edge浏览器比Chrome更加安全的原因
- iOS高级-RunLooper
- mysql update锁_mysql中update语句的锁
- mysql怎么创建文字表_myMySQL数据库 如何将中文转拼音 MySQL数据库使用教程
- 男朋友和女朋友的区别。。。
- 项目管理(2):管理过程二
- 这份免费AI论文太强了,我肝了!
- 几种开源软件授权协议
- Linux内核深入理解中断和异常(1)
- OpenCV2.3.1 VS 安装
- 打开桌面计算机窗口闪动,电脑进去桌面就一直闪
- 与生命赛跑,Serverless提升AI诊断效率90% | 凌云时刻
- C语言课程设计报告(学生成绩管理系统)
- 如何在64位win10中装个win98虚拟机
- IDE、SCSI、SATA、USB、并口和串口
- MacOS怎么使用分区加密功能?MacOS硬盘分区加密功能使用方法
- cmd命令结束端口进程
- 服务器日志显示意外关闭,服务器多次异常关闭,错误日志:计算机已经从检测错误后重新启动。。检测错误: - Microsoft Community...
- WRF主程序与WPS的编译与安装
- 有房间匹配和无房间匹配