包含登录、注册、记账、每日账单查看、每月报表、添加记账类型这些功能。数据存储采用的是txt文档+xml文档。程序是一个控制台程序,用IntelliJ IDEA+jdk8开发。涉及到的知识有List集合、文件读写、xml文件和对象互转、还有在List的查询中使用lamda表达式。这是我复习javase,熟悉开发工具的练手项目。
主要想总结的地方是 List集合中使用lamda表达式和xml和对象的互转。
 
1、List集合中使用lamda表达式。
  1. Optional<String> co = listAll.stream().filter(item -> item.contains(temp)).findFirst();
  2. if (co.isPresent()) {
  3.  
  4. billType = co.get();
  5. Optional<BillItem> obi = listItems.stream().filter(item -> item.getName().contains(temp)).findFirst();
  6.  
  7. if (obi.isPresent()) {
  8. existItem = obi.get();
  9. }
  10. }
2.com.thoughtworks.xstream的使用。
这里主要想说说 xml带属性和子节点是集合的时候如何使用转换器转换。
  1. package com.ll.bm;
  2.  
  3. import com.thoughtworks.xstream.converters.Converter;
  4. import com.thoughtworks.xstream.converters.MarshallingContext;
  5. import com.thoughtworks.xstream.converters.UnmarshallingContext;
  6. import com.thoughtworks.xstream.io.HierarchicalStreamReader;
  7. import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
  8.  
  9. import java.util.*;
  10.  
  11. public class BillDateConvert implements Converter {
  12.  
  13. @Override
  14. public void marshal(Object o, HierarchicalStreamWriter writer, MarshallingContext mContext) {
  15.  
  16. BillDate bd = (BillDate) o;
  17.  
  18. writer.addAttribute("time", bd.getTime());
  19.  
  20. List<BillItem>listItems=bd.getListItems();
  21.  
  22. for (BillItem bi:listItems){
  23.  
  24. writer.startNode("BillItem");
  25. mContext.convertAnother(bi,new BillItemConvert());
  26.  
  27. writer.endNode();
  28.  
  29. }
  30. }
  31.  
  32. @Override
  33. public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext unContext) {
  34. BillDate bd = new BillDate();
  35. bd.setTime(reader.getAttribute("time"));
  36. List<BillItem> list = new ArrayList<BillItem>();
  37. while (reader.hasMoreChildren()) {
  38. reader.moveDown();
  39.  
  40. Object o = unContext.convertAnother(bd, BillItem.class, new BillItemConvert());
  41. BillItem od = (BillItem) o;
  42. list.add(od);
  43. reader.moveUp();
  44.  
  45. }
  46. bd.setAnimalList(list);
  47. // Object o= unContext.convertAnother(bd,bd.getListItems().getClass(),new BillItemConvert());
  48. return bd;
  49. }
  50.  
  51. @Override
  52. public boolean canConvert(Class aClass) {
  53. return aClass.equals(BillDate.class);
  54. }
  55. }
  1. <Bill>
  2. <BillDate time="2020-10-27">
  3. <BillItem name="1|购物" val="5.0"/>
  4. <BillItem name="2|餐饮" val="13.0"/>
  5. <BillItem name="6|交通" val="9.0"/>
  6. </BillDate>
  7. </Bill>

代码下载

javase记账本管理程序

java练习项目——记账本的更多相关文章

  1. Java后台+数据库+Java web前端——记账本

    下面是本人实现的网页版(设计思路见上一篇https://www.cnblogs.com/sengzhao666/p/10445984.html) 代码如下: 运行截图: 首页: 创建: 账本删除:(先 ...

  2. Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72566261 本文出自[赵彦军的博客] Java web 开发填坑记 1-如何正确 ...

  3. 记自己的第一个完整的java web项目

    我是从asp.net平台转到java平台的.基于asp.net平台开发网站的快速便捷性,工作几年来大小网站多少也写了6.7个.但是转到java后,因为是在一家大公司,而且做的功能也比较单一,局限于此, ...

  4. 安卓开发实战-记账本APP(四)

    今天实现的内容有:添加账本信息,个人头像的切换,密码的修改,退出登录. 添加账本信息有三个功能: ①记一笔支出项目 ②记一笔收入项目 ③清空所有项目 在此期间遇到的困难有:Activity与Fragm ...

  5. 安卓开发实战-记账本APP(六)

    记账本APP开发---终结篇 昨天的动态数字录屏奉上:在抖音上拍了一个(ps:欢迎点赞) https://v.douyin.com/poEjmG/ 今天将图表的内容进行了制作,我用的是MPChart的 ...

  6. 进度1_家庭记账本App

    今天完成了昨天的初步构想,详细介绍见上一篇博客,具体项目结构和案例如下: MainActivity.java: package com.example.familybooks; import andr ...

  7. java web项目由http转换成https遇到的各种坑

    java web项目由http转换成https遇到的各种坑 这篇文章写给自己在经历项目由http转换成https遇到的各种坑所做的一份笔记,留给以后自己看,或者和开发的朋友也刚好遇到和我一样的问题的朋 ...

  8. Eclipse上进行java web项目的打包

    以下是一个基于maven搭建的Spring Boot项目的目录结构 版权声明:本文为博主原创文章,未经博主允许不得转载. 原文地址: https://www.cnblogs.com/poterliu/ ...

  9. Android开发实战——记账本(2)

    开发日志(2)——Bean目录以及数据库 首先编写一些自己生成的数据进行测试,看一下能否显示在模拟器上.那前提就是先写出bean目录,这和之前学的Javaweb步骤差不多.bean目录有三个变量事件. ...

  10. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

随机推荐

  1. k8s之operator

    背景 数字经济的兴起推动了云计算.物联网.大数据行业的快速蓬勃发展,对数据中心提出了更高的要求,同时,用户对于数据库运维自动化的需求越来越高,数据库即服务的需求越来越强烈. 随着k8s的普及以及云原生 ...

  2. spring boot 配置文件占位符和多环境配置 [七]

    配置文件占位符 person.last-name=zhangsan person.age=${random.int} person.birth=2017/12/15 person.boss=false ...

  3. 面向切面编程AOP[二](java @EnableAspectJAutoProxy 代码原理)

    前言 @EnableAspectJAutoProxy 是启动aop功能的意思,那么里面是什么呢? 正文 @Target({ElementType.TYPE}) @Retention(Retention ...

  4. javascript现代编程系列教程之一:区块作用域对VAR不起作用的问题

    在JavaScript中,使用var声明的变量具有函数作用域,而不是块级作用域.这意味着在一个函数内部,使用var声明的变量在整个函数范围内都是可见的,包括嵌套的块(如if语句.for循环等).为了避 ...

  5. Java面试题:请谈谈对ThreadLocal的理解?

    ThreadLocal是一种特殊的变量存储机制,它提供了一种方式,可以在每个线程中保存数据,而不会受到其他线程的影响.这种机制在多线程编程中非常有用,因为它允许每个线程拥有自己的数据副本,从而避免了数 ...

  6. 框架hash/history实现简单原理

    1.hahs <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  7. linux系统关闭指定端口

    linux系统关闭指定端口 关闭指定端口 firewall-cmd --zone=public --remove-port=80/tcp --permanent systemctl restart f ...

  8. 力扣504(java)-七进制数(简单)

    题目: 给定一个整数 num,将其转化为 7 进制,并以字符串形式输出. 示例 1: 输入: num = 100输出: "202"示例 2: 输入: num = -7输出: &qu ...

  9. HarmonyOS NEXT应用开发案例——阻塞事件冒泡

    介绍 本示例主要介绍在点击事件中,子组件enabled属性设置为false的时候,如何解决点击子组件模块区域会触发父组件的点击事件问题:以及触摸事件中当子组件触发触摸事件的时候,父组件如果设置触摸事件 ...

  10. MaxCompute 挑战使用SQL进行序列数据处理

    简介: MaxCompute 挑战使用SQL进行序列数据处理 --而不是用MR和函数 日常编写数据加工任务,主要的方法就是使用SQL.第一是因为自己对SQL掌握的比较好(十多年数据开发经验,就这几个关 ...