Java里如何实现简易记账软件_记账软件开发项目实例解析

答案:该记账软件实现收支记录、查询、统计与文件持久化。通过Bill类存储账单信息,BillManager管理账单并处理数据存取,Main类提供用户交互菜单,支持添加、查看、查询和统计功能,数据保存至文本文件,程序重启后仍可读取,适合Java初学者掌握面向对象与IO操作。

java里如何实现简易记账软件_记账软件开发项目实例解析

开发一个简易记账软件在Java中是一个非常适合初学者练手的项目。它涵盖了面向对象编程、文件读写、集合操作和基础用户交互等核心知识点。下面通过一个具体实例,带你一步步实现一个命令行版的简易记账系统。

1. 项目需求分析

我们要实现的功能包括:

记录每一笔收支(类型、金额、时间、备注)查看所有账单记录按类型查询(如“餐饮”、“工资”)统计总收入、总支出和结余数据持久化保存到文件

2. 类设计与结构

根据需求,我们设计以下几个类:

Bill类:表示一条账单记录

public class Bill {    private String type;     // 收支类型,如“餐饮”、“工资”    private double amount;   // 金额    private String date;     // 日期    private String remark;   // 备注
public Bill(String type, double amount, String date, String remark) {    this.type = type;    this.amount = amount;    this.date = date;    this.remark = remark;}// getter方法(setter可根据需要添加)public String getType() { return type; }public double getAmount() { return amount; }public String getDate() { return date; }public String getRemark() { return remark; }@Overridepublic String toString() {    return "类型:" + type + " | 金额:" + amount +           " | 日期:" + date + " | 备注:" + remark;}

}

立即学习“Java免费学习笔记(深入)”;

网易人工智能 网易人工智能

网易数帆多媒体智能生产力平台

网易人工智能 206 查看详情 网易人工智能

BillManager类:管理账单的核心逻辑

import java.util.*;

public class BillManager {private List bills;private final String FILE_PATH = "bills.txt";

public BillManager() {    bills = new ArrayList();    loadFromFile(); // 启动时加载数据}// 添加账单public void addBill(Bill bill) {    bills.add(bill);    saveToFile();}// 显示所有账单public void showAllBills() {    if (bills.isEmpty()) {        System.out.println("暂无账单记录。");        return;    }    for (int i = 0; i < bills.size(); i++) {        System.out.println((i+1) + ". " + bills.get(i));    }}// 按类型查询public void searchByType(String type) {    List result = new ArrayList();    for (Bill b : bills) {        if (b.getType().equals(type)) {            result.add(b);        }    }    if (result.isEmpty()) {        System.out.println("未找到该类型的记录。");    } else {        System.out.println("【" + type + "】相关记录:");        for (Bill b : result) {            System.out.println(b);        }    }}// 统计收支情况public void showSummary() {    double income = 0, expense = 0;    for (Bill b : bills) {        if (b.getAmount() > 0) {            income += b.getAmount();        } else {            expense += Math.abs(b.getAmount());        }    }    System.out.println("总收入:" + income);    System.out.println("总支出:" + expense);    System.out.println("结余:" + (income - expense));}// 保存到文件(简单文本格式)private void saveToFile() {    try (java.io.PrintWriter out = new java.io.PrintWriter(new java.io.FileWriter(FILE_PATH))) {        for (Bill b : bills) {            out.println(b.getType() + "," + b.getAmount() + "," + b.getDate() + "," + b.getRemark());        }    } catch (Exception e) {        System.out.println("保存失败:" + e.getMessage());    }}// 从文件加载private void loadFromFile() {    java.io.File file = new java.io.File(FILE_PATH);    if (!file.exists()) return;    try (java.util.Scanner scanner = new java.util.Scanner(file)) {        while (scanner.hasNextLine()) {            String line = scanner.nextLine();            String[] parts = line.split(",");            if (parts.length == 4) {                String type = parts[0];                double amount = Double.parseDouble(parts[1]);                String date = parts[2];                String remark = parts[3];                bills.add(new Bill(type, amount, date, remark));            }        }    } catch (Exception e) {        System.out.println("读取数据失败:" + e.getMessage());    }}

}

立即学习“Java免费学习笔记(深入)”;

Main类:主程序入口,提供菜单交互

import java.util.Scanner;

public class Main {public static void main(String[] args) {BillManager manager = new BillManager();Scanner input = new Scanner(System.in);int choice;

    do {        System.out.println("n--- 简易记账系统 ---");        System.out.println("1. 添加账单");        System.out.println("2. 查看所有账单");        System.out.println("3. 查询某类型记录");        System.out.println("4. 查看收支统计");        System.out.println("0. 退出");        System.out.print("请选择操作:");        choice = input.nextInt();        input.nextLine(); // 消费换行符        switch (choice) {            case 1:                System.out.print("类型:"); String type = input.nextLine();                System.out.print("金额(收入为正,支出为负):"); double amount = input.nextDouble();                input.nextLine(); // 消费换行                System.out.print("日期(如2025-04-05):"); String date = input.nextLine();                System.out.print("备注:"); String remark = input.nextLine();                manager.addBill(new Bill(type, amount, date, remark));                System.out.println("添加成功!");                break;            case 2:                manager.showAllBills();                break;            case 3:                System.out.print("请输入要查询的类型:");                String queryType = input.nextLine();                manager.searchByType(queryType);                break;            case 4:                manager.showSummary();                break;            case 0:                System.out.println("再见!");                break;            default:                System.out.println("无效选择,请重试。");        }    } while (choice != 0);    input.close();}

}

立即学习“Java免费学习笔记(深入)”;

3. 运行效果示例

运行程序后,你可以进行如下操作:

添加一笔“工资”收入:8000元添加一笔“餐饮”支出:-50元查看所有记录,确认已保存查询“餐饮”类别,只显示相关条目查看统计:总收入8000,总支出50,结余7950

关闭程序再打开,数据依然存在,因为已保存到bills.txt文件中。

4. 可扩展方向

这个版本是基础实现,后续可以增强:

使用JSON或数据库替代文本存储增加日期排序功能加入图形界面(Swing或JavaFX)支持导入导出CSV添加预算提醒功能

基本上就这些。这个项目虽小,但完整体现了Java开发的基本流程:需求 → 设计 → 编码 → 测试。掌握它,对理解实际应用开发很有帮助。

以上就是Java里如何实现简易记账软件_记账软件开发项目实例解析的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1107194.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 18:28:35
下一篇 2025年12月2日 18:28:56

相关推荐

  • JavaScript数字格式化中意外空格问题的解决方案

    本文旨在解决JavaScript中处理用户输入时,因意外的空白字符导致数字格式化功能出现异常的问题。通过引入String.prototype.trim()方法,我们能够有效地清除输入字符串首尾的空白,确保Intl.NumberFormat等格式化工具能正确处理纯数字内容,从而提升数据处理的准确性和用…

    2025年12月5日
    000
  • TypeNotPresentException与泛型类型擦除的关系是什么?

    typenotpresentexception通常由运行时类型信息缺失引起,与泛型类型擦除间接相关。1. 泛型类型擦除是java在编译时移除泛型参数并替换为限定类型或object的机制,导致list和list在运行时无法区分;2. typenotpresentexception主要发生在依赖缺失、反…

    2025年12月5日 java
    000
  • QQ浏览器怎么下载安装_QQ浏览器下载安装最新版本教程

    想下载安装最新版QQ浏览器,整个过程其实很简单,几分钟就能搞定。关键是要去官网下,避免第三方平台捆绑的“坑”。下面一步步告诉你怎么操作。 1. 找到官方下载渠道 打开电脑浏览器,在地址栏输入腾讯官方网址 https://browser.qq.com,这是最安全的来源。页面会自动识别你的操作系统(Wi…

    2025年12月5日
    000
  • 什么是数据银行?天猫数据银行如何开通?揭秘天猫数据银行开通全流程!

    在数字经济迅猛发展的当下,数据银行正成为企业实现精准营销的关键利器。作为阿里巴巴生态中的核心大数据平台,天猫数据银行通过整合全域消费者行为数据,助力品牌打造精细化用户画像,推动从流量思维向人群运营的全面升级。本文将深度剖析数据银行的核心价值,并详细指导你如何一步步开通天猫数据银行。 一、什么是数据银…

    2025年12月5日
    000
  • 电脑的dll文件丢失怎么恢复 一文教你快速恢复

    在使用计算机的过程中,不少用户可能会碰到类似的问题:启动某个程序或游戏时,系统弹出提示信息,例如“xxx.dll文件缺失”或“程序无法运行”。这类问题通常是由dll(动态链接库)文件被误删、损坏或丢失所引起的。本文将为你整理一套完整的应对策略,帮助你迅速找回丢失的dll文件,恢复正常系统运行。 一、…

    2025年12月5日 电脑教程
    000
  • Java中Comparator的用法 掌握定制排序

    comparator在java中用于定制排序规则,其核心方法是compare(t o1, t o2),允许开发者自定义对象的比较逻辑。1. 可通过实现comparator接口并重写compare方法定义排序规则;2. 使用匿名内部类、lambda表达式或comparator.comparing()简…

    2025年12月5日 java
    000
  • ThinkPHP服务容器(Container)与依赖注入

    thinkphp的服务容器和依赖注入通过集中管理对象创建和降低对象耦合度,提升了代码的可维护性和灵活性。1.服务容器负责对象的创建和生命周期管理。2.依赖注入通过传递依赖对象,降低了代码耦合度。3.使用时需注意性能、复杂性和学习曲线。4.优化方法包括延迟加载、单例模式和接口实现分离。 在开发过程中,…

    2025年12月5日
    000
  • 智微智能2024年营收40.34亿元,净利润同比激增280.73%

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 4月9日,智微智能发布2024年度业绩快报,报告期内实现营业收入40.34亿元,较上年同期增长10.06%;归属于上市公司股东的净利润达1.25亿元,同比大幅增长280.73%。扣除非经常性损益…

    2025年12月5日
    000
  • 怎么关掉电脑的自动更新功能 试试这5个方法

    你是否经历过这样的困扰:刚打开电脑准备投入工作,系统却突然弹出更新提示,强制你等待漫长的下载和安装过程?又或者某次更新后,原本运行正常的软件开始出现兼容性问题?这些令人头疼的状况,往往都源于“windows自动更新”机制。接下来,我们将为你介绍几种有效的方法,帮助你彻底禁用或合理控制windows系…

    2025年12月5日 电脑教程
    000
  • 如何高效集成Elasticsearch到PHP项目?Spryker/Elastica助你轻松实现

    可以通过一下地址学习composer:学习地址 曾几何时,我负责的一个电商项目面临着一个迫切的需求:提升站内搜索的用户体验。随着商品数量的激增,传统的数据库模糊查询已经力不从心,响应速度慢、搜索结果不精准等问题日益突出。自然而然地,我们决定引入elasticsearch,以其强大的全文检索能力和高性…

    开发工具 2025年12月5日
    000
  • win11触摸板手势怎么设置_win11笔记本触摸板多指手势设置教程

    首先进入Windows 11设置中的触摸板选项,然后配置三指手势用于任务视图或切换应用,接着设置四指手势实现桌面与虚拟桌面管理,最后调整光标速度和触觉反馈以优化操作体验。 如果您希望提升在Windows 11笔记本电脑上的操作效率,自定义触摸板多指手势是一个高效的选择。通过设置三指或四指滑动、点击等…

    2025年12月5日
    000
  • 如何在Yii中配置基础路由(URL管理)?

    在yii中配置基础路由需要在配置文件中定义url规则。具体步骤包括:1. 在config/web.php或config/main.php中配置urlmanager组件,启用美化url并隐藏入口脚本名。2. 在’rules’数组中定义url规则,注意规则顺序和参数匹配。3. 使…

    2025年12月5日
    000
  • 如何解决电商库存管理难题,使用spryker/availability模块轻松实现精准防超卖

    可以通过一下地址学习composer:学习地址 想象一下,你经营着一家蓬勃发展的在线商店。突然,客服部门传来消息:有客户投诉,他们购买的限量版商品在下单后被告知缺货,导致订单被取消。这不仅让客户感到沮丧,也让你的团队陷入了处理退款和安抚客户的繁琐工作中。更糟糕的是,这种情况并非个例,而是时不时发生。…

    开发工具 2025年12月5日
    000
  • 开店就怕没生意?三翼鸟西安新店一年成果喜人

    当下,实体店的运营仍面临着挑战与机遇并存的局面。商家不仅要抵御线上电商的冲击,还需在高度同质化的市场竞争中探索出独特的经营模式。这样的市场背景,也让许多实体店铺在拓展业务时更加审慎,担心客流量无法达到预期。 然而,压力并不总是带来阻碍,有时也能转化为前进的动力。以三翼鸟西安大店为例,其最新公布的一组…

    2025年12月5日
    000
  • Java中如何比较日期 详解Java日期比较的三种方式

    在java中比较日期的三种常见方法为:1. 使用date.compareto()方法进行简单直接的日期比较;2. 使用calendar.compareto()方法实现更灵活的日期操作和比较;3. 使用localdate.isbefore()、isafter()、isequal()方法获得更清晰易用的…

    2025年12月5日 java
    000
  • win10怎么开启卓越性能模式_win10开启卓越性能模式指令

    首先通过管理员命令提示符执行powercfg指令创建卓越性能电源计划,随后在电源选项中启用该模式以提升系统响应速度与硬件性能。 如果您希望提升Windows 10系统的响应速度与硬件性能表现,可以通过启用隐藏的“卓越性能”电源模式来实现更高的系统效能。该模式在默认电源选项中不可见,需通过命令行指令激…

    2025年12月5日
    000
  • js如何创建自定义事件 自定义事件的3种创建方法

    自定义事件允许开发者在javascript中定义自己的事件类型,并在特定情况下触发和监听,从而实现更灵活的组件通信和状态管理。创建自定义事件主要有三种方式:1. 使用event构造函数,适用于简单的事件通知,但无法传递数据;2. 使用customevent构造函数,支持携带任意类型的数据,适合组件间…

    2025年12月5日 web前端
    200
  • win8怎么创建无线热点 win8利用自带功能建立WiFi热点教程

    首先通过命令提示符设置并启动虚拟Wi-Fi热点,再在网络连接属性中启用Internet连接共享,最后可创建批处理脚本实现一键开启或关闭热点,从而让Windows 8电脑共享上网。 如果您希望将Windows 8电脑作为无线热点,让其他设备共享上网,但发现系统未自动提供热点选项,则可以通过内置的命令行…

    2025年12月5日
    000
  • Firefox 144.0 发布

    firefox 144.0 已正式上线,本次更新带来多项新功能、改进与修复,具体内容如下: 新增功能 专注当前标签页,简化浏览界面现在即使折叠了标签页组,活动标签页仍会保留在视野中。这一改进帮助用户集中注意力于正在使用的页面,有效减少视觉混乱,提升工作效率。 更智能的标签页组操作标签页组功能进一步优…

    2025年12月5日
    000
  • 夸克AI怎么生成PPT_夸克AI自动生成演示文稿操作教程

    首先通过夸克AI文档功能将已有内容转为PPT,其次可用搜索指令直接生成环保主题等演示文稿,最后还能从网页内容提取要点并一键生成结构清晰的幻灯片。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 如果您想快速制作一份专业的演示文稿,但缺乏设计经…

    2025年12月5日
    100

发表回复

登录后才能评论
关注微信