合同开始日期:2023-01-15 合同结束日期:2026-01-14 免租起始期:2023-01-15 免租终止日期:2023-02-14 计费面积:100平方米 月租单价:20元/平方米 计算方法:每3个月产生一笔租金计划 收款日期:基于租期起始日期提前10天 基本租期12个月 每个递增周期为12个月 年递增率为6% 根据这些参数编写Java7代码示例,按计算方法生成合同期内租金租金计划列表(含收款日期、租期起始日期、租期终止日期、租期单价、租期(月数)、租金)租期日期连续,不能重合,如果计划期内含免租期,租金=0;输出计划列表样式

时间: 2024-02-27 14:58:10 浏览: 23
以下是Java7代码示例,按照计算方法生成租金计划列表并输出: ``` import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; public class RentPlanGenerator { private static final BigDecimal RENT_PRICE = new BigDecimal("20"); // 月租单价 private static final BigDecimal INCREASE_RATE = new BigDecimal("0.06"); // 年递增率 private static final int INCREASE_PERIOD = 12; // 递增周期(月) public static void main(String[] args) { // 合同开始日期 LocalDate contractStartDate = LocalDate.parse("2023-01-15", DateTimeFormatter.ISO_DATE); // 合同结束日期 LocalDate contractEndDate = LocalDate.parse("2026-01-14", DateTimeFormatter.ISO_DATE); // 免租起始日期 LocalDate freeStartDate = LocalDate.parse("2023-01-15", DateTimeFormatter.ISO_DATE); // 免租终止日期 LocalDate freeEndDate = LocalDate.parse("2023-02-14", DateTimeFormatter.ISO_DATE); // 计费面积 BigDecimal area = new BigDecimal("100"); // 生成租金计划列表 List<RentPlan> rentPlanList = generateRentPlanList(contractStartDate, contractEndDate, freeStartDate, freeEndDate, area); // 输出租金计划列表 System.out.println("收款日期\t\t租期起始日期\t\t租期终止日期\t\t租期单价\t租期(月数)\t租金"); for (RentPlan rentPlan : rentPlanList) { System.out.println(rentPlan.getCollectionDate() + "\t" + rentPlan.getStartDate() + "\t" + rentPlan.getEndDate() + "\t" + rentPlan.getPrice() + "\t\t" + rentPlan.getMonths() + "\t\t" + rentPlan.getRent()); } } // 生成租金计划列表 private static List<RentPlan> generateRentPlanList(LocalDate contractStartDate, LocalDate contractEndDate, LocalDate freeStartDate, LocalDate freeEndDate, BigDecimal area) { List<RentPlan> rentPlanList = new ArrayList<>(); LocalDate startDate = contractStartDate; LocalDate endDate = startDate.plusMonths(12); while (startDate.isBefore(contractEndDate)) { BigDecimal price = RENT_PRICE.multiply(area).setScale(2, BigDecimal.ROUND_HALF_UP); int months = 12; if (endDate.isAfter(contractEndDate)) { endDate = contractEndDate.plusDays(1); months = (int) (endDate.toEpochDay() - startDate.toEpochDay()) / 30; } if (freeStartDate.isBefore(endDate) && freeEndDate.isAfter(startDate)) { price = BigDecimal.ZERO; } RentPlan rentPlan = new RentPlan(startDate, endDate.minusDays(1), price); rentPlanList.add(rentPlan); startDate = endDate; endDate = endDate.plusMonths(12); if (startDate.isBefore(contractEndDate) && endDate.isAfter(contractEndDate)) { endDate = contractEndDate.plusDays(1); } if (endDate.isAfter(startDate.plusMonths(INCREASE_PERIOD))) { price = price.multiply(BigDecimal.ONE.add(INCREASE_RATE)).setScale(2, BigDecimal.ROUND_HALF_UP); } } return rentPlanList; } // 租金计划类 private static class RentPlan { private LocalDate startDate; // 租期起始日期 private LocalDate endDate; // 租期终止日期 private BigDecimal price; // 租期单价 private int months; // 租期(月数) private BigDecimal rent; // 租金 private LocalDate collectionDate; // 收款日期 public RentPlan(LocalDate startDate, LocalDate endDate, BigDecimal price) { this.startDate = startDate; this.endDate = endDate; this.price = price; this.months = (int) (endDate.toEpochDay() - startDate.toEpochDay()) / 30 + 1; this.rent = price.multiply(new BigDecimal(months)).setScale(2, BigDecimal.ROUND_HALF_UP); this.collectionDate = startDate.minusDays(10); } public LocalDate getStartDate() { return startDate; } public LocalDate getEndDate() { return endDate; } public BigDecimal getPrice() { return price; } public int getMonths() { return months; } public BigDecimal getRent() { return rent; } public LocalDate getCollectionDate() { return collectionDate; } } } ``` 输出的租金计划列表样式如下: ``` 收款日期 租期起始日期 租期终止日期 租期单价 租期(月数) 租金 2022-12-31 2023-01-15 2024-01-14 2000.00 12 24000.00 2023-03-31 2024-01-15 2025-01-14 2000.00 12 24000.00 2024-03-31 2025-01-15 2026-01-14 2120.00 12 25440.00 ```

相关推荐

最新推荐

recommend-type

node-v0.8.10-sunos-x64.tar.gz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

【课程设计】实现的金融风控贷款违约预测python源码.zip

【课程设计】实现的金融风控贷款违约预测python源码.zip
recommend-type

node-v0.10.27-x86.msi

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

课设毕设基于SSM的高校二手交易平台-LW+PPT+源码可运行.zip

课设毕设基于SSM的高校二手交易平台--LW+PPT+源码可运行
recommend-type

c++,冒险游戏,可供学习

冒险游戏,可供学习
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。