当前位置: 首页 > news >正文

Ruby 之交租阶段信息生成

题目

我看了一下,这个题目应该不是什么机密,所以先放上来了。大概意思是根据合同信息生成交租阶段信息。

解答

要求是要使用 Ruby 生成交租阶段信息,由于时间比较仓促,变量名那些就用得随意了些。要点主要有下面这些:

  • 第一个交费阶段是要单独算
  • 整月和非整月的计算方式是不一样的(同样的整月,不同月的天数不一样,但是租金还是要算成一样的,我目前是把合同起始结束月都当做非整月来算)
  • 循环结束时间判断(其实也就是缴费阶段结束日期和合同的结束日期进行对比判断)
require 'time'
require 'terminal-table'class Rentdef initialize(contract_start, contract_end, month_rent, cycle)@contract_start = Time.strptime(contract_start, "%Y-%m-%d").to_date@contract_end = Time.strptime(contract_end, "%Y-%m-%d").to_date@month_rent = month_rent@cycle = cycle@year_total_rent = 12 * month_rent.to_f@tb = Terminal::Table.newenddef generate_next_month_last_day(time)date = Date.new(time.year, time.month, time.day)date = date.next_monthDate.civil(date.year, date.month, -1)enddef calculate_first_month_rent(time)month_last_day = Date.civil(time.year, time.month, -1)month_day_left = month_last_day.day - time.day + 1@year_total_rent * month_day_left / 365enddef calculate_last_month_rent(time)@year_total_rent * time.day / 365enddef add_rows# 合同起始和结束日期当月都按非整月计算,其他整月按整月的租金计算rent_day = @contract_starttotal = calculate_first_month_rent(@contract_start)to_end = falsetmp_cycle = @cycle - 1next_month_last_day = rent_dayif tmp_cycle == 0 # 一月一租next_month_last_day = Date.civil(next_month_last_day.year, next_month_last_day.month, -1)enduntil tmp_cycle == 0next_month_last_day = generate_next_month_last_day(next_month_last_day)if next_month_last_day > @contract_endtotal += calculate_last_month_rent(@contract_end)next_month_last_day = @contract_endto_end = truebreakendtotal += @month_renttmp_cycle -= 1endstart_date = rent_dayend_date = next_month_last_day@tb.add_row([start_date, end_date, rent_day, "%.2f" % total])total = 0until to_endtmp_cycle = @cyclerent_day = Date.new(next_month_last_day.year, next_month_last_day.month, 15)start_date = next_month_last_day + 1until tmp_cycle == 0next_month_last_day = generate_next_month_last_day(next_month_last_day)if next_month_last_day > @contract_endtotal += calculate_last_month_rent(@contract_end)next_month_last_day = @contract_endto_end = truebreakendtotal += @month_renttmp_cycle -= 1endend_date = next_month_last_day@tb.add_row([start_date, end_date, rent_day, "%.2f" % total])total = 0endenddef show_tableset_table_titleset_table_headingsadd_rowsprint_tableenddef set_table_title@tb.title = "交租阶段信息"enddef set_table_headings@tb.headings = ["开始日期", "结束日期", "交租日期", "交租阶段总租金"]enddef set_align_column@tb.number_of_columns.times do |index|@tb.align_column(index + 1, :right)end@tb.align_column(0, :left)enddef print_tableputs @tbputsend
endrent = Rent.new("2020-11-16", "2021-03-16", 5000, 2)
rent.show_table
+------------+------------+------------+----------------+
|                     交租阶段信息                      |
+------------+------------+------------+----------------+
| 开始日期   | 结束日期   | 交租日期   | 交租阶段总租金 |
+------------+------------+------------+----------------+
| 2020-11-16 | 2020-12-31 | 2020-11-16 | 7465.75        |
| 2021-01-01 | 2021-02-28 | 2020-12-15 | 10000.00       |
| 2021-03-01 | 2021-03-16 | 2021-02-15 | 2630.14        |
+------------+------------+------------+----------------+

目前按照一月一交的话,交租日期那块显示还有点问题,这个后面再优化吧。

+------------+------------+------------+----------------+
|                     交租阶段信息                      |
+------------+------------+------------+----------------+
| 开始日期   | 结束日期   | 交租日期   | 交租阶段总租金 |
+------------+------------+------------+----------------+
| 2020-11-16 | 2020-11-30 | 2020-11-16 | 2465.75        |
| 2020-12-01 | 2020-12-31 | 2020-11-15 | 5000.00        |
| 2021-01-01 | 2021-01-31 | 2020-12-15 | 5000.00        |
| 2021-02-01 | 2021-02-28 | 2021-01-15 | 5000.00        |
| 2021-03-01 | 2021-03-16 | 2021-02-15 | 2630.14        |
+------------+------------+------------+----------------+

相关文章:

Ruby 之交租阶段信息生成

题目 我看了一下,这个题目应该不是什么机密,所以先放上来了。大概意思是根据合同信息生成交租阶段信息。 解答 要求是要使用 Ruby 生成交租阶段信息,由于时间比较仓促,变量名那些就用得随意了些。要点主要有下面这些&#xff1a…...

RUST语言值所有权之内存复制与移动

1.RUST中每个值都有一个所有者,每次只能有一个所有者 String::from函数会为字符串hello分配一块内存 内存示例如下: 在内存分配前调用s1正常输出 在分配s1给s2后调用报错 因为s1分配给s2后,s1的指向自动失效 s1被move到s2 s1自动释放 字符串克隆使用...

【Django学习笔记(三)】BootStrap介绍

BootStrap介绍 前言正文1、BootStrap 快速了解2、初识BootStrap2.1 下载地址2.2 创建目录2.3 引入BootStrap2.4 使用BootStrap 3、BootStrap 组件&样式3.1 导航条3.2 栅格系统3.3 container3.3.1 container3.3.2 container-fluid 3.4 面板3.5 媒体对象3.6 分页3.7 图标3.7.…...

ClickHouse开发相关(UDAF)

ClickHouse开发相关(UDAF) ClickHouse介绍 ClickHouse是一个开源、高性能的列式 OLAP 数据库管理系统,用于使用 SQL 进行实时分析。 为什么需要ClickHouse UDAF? ClickHouse中已存在了许多聚合函数,绝大多数情况下已经覆盖我们的需求,但是有时候我们仍然需要自定义函数…...

MySql并发事务问题

事务 事务概念: 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 事务的特性:ACID: 小…...

Windows下Docker创建Mysql5.7

安装 下载镜像,注意,要带版本号 docker pull mysql:5.7 等下载完成执行命令: 错误命令1,直接Windows下路径: docker run --name mysql57 --restartalways -p 3306:3306 -v F:/mysqldata/data57/log:/var/log/mysql…...

Redis(性能管理、主从复制、哨兵模式)概述及部署

目录 一、性能管理 1、查看Redis内存使用 2、内存碎片率 3、跟踪内存碎片率 4、内存使用率 5、内回收key 二、Redis集群有三种模式 三、Redis主从复制 1、主从复制的概念 2、主从复制的作用 3、主从复制的流程 4、搭建Redis主从复制 1.环境准备 2.安装Redis&#…...

LabVIEW挖坑指南

一、挖坑指南 1.1、输出变量放在条件框内 错误写法: 现象:如果没进入对应的分支,输出为默认值 正常写法: 让每个分支输出的值都在预料之内。 1.2、统计耗时不准 错误写法 现象:统计出来的耗时是2000ms 正常写法&a…...

docker容器环境安装记录(MAC M1)(完善中)

0、背景 在MAC M1中搭建商城项目环境时,采用docker统一管理开发工具,期间碰到了许多环境安装问题,做个总结。 1、安装redis 在宿主机新建redis.conf文件运行创建容器命令,进行容器创建、端口映射、文件挂载、以指定配置文件启动…...

Linux 常用命令(持续更新中...)

1. ls 查看文件列表命令 语法: ls [-a -l -h] [Linux路径] -a -l -h 是可选的选项 (-h需配合-l命令一起使用)Linux路径是此命令可选的参数 ls #查看当前目录所有非隐藏文件(平铺方式显示) ls -a #查看当前目录下所有文件 …...

xss.pwnfunction-Jefff

在eval中可以直接执行命令所以直接把"直接闭合在结尾再加上一个"因为后面的"没闭和会报错 ?jeffa";alert(1);" 或 ?jeffa"-alert(1)-" -是分隔符...

java——文件上传

一、文件上传——简介 文件上传的简介:文件上传是指将本地计算机中的文件传输到网络上的服务器或另一台计算机上的过程。在 Web 开发中,文件上传通常指的是将用户通过 Web 页面提交的文件(如图像、文档、音频、视频等)传输到服务器…...

RCE(远程命令执行)漏洞详解

漏洞描述 RCE(remote command/code execute,远程命令执行)漏洞 远程代码执行 (RCE) 攻击是指攻击者可以在一个组织的计算机或网络上运行恶意代码。执行攻击者控制的代码的能力可用于各种目的,包括部署额外的恶意软件或窃取敏感数据。 漏洞原理 远程代…...

K8S - Deployment 的版本回滚

当前状态 先看deployment rootk8s-master:~# kubectl get deploy -o wide --show-labels NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES …...

53 v-bind 和 v-model 的实现和区别

前言 这个主要的来源是 偶尔的情况下 出现的问题 就比如是 el-select 中选择组件之后, 视图不回显, 然后 model 不更新等等 这个 其实就是 vue 中 视图 -> 模型 的数据同步, 我们通常意义上的处理一般是通过 模型 -> 数据 的数据同步, 比如 我们代码里面更新了 model.…...

VMware-16.0配置虚拟机网络模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、为什么要配置网络?二、配置步骤1.检查VMware服务2.进入配置页面3.添加网络模式1.Bridge2.NAT3.Host-only 4.DHCP租约5.静态IP 三、使用总结 前言…...

element-ui badge 组件源码分享

今日简单分享 badge 组件的源码实现,主要从以下两个方面: 1、badge 组件页面结构 2、badge 组件属性 一、badge 组件页面结构 二、badge 组件属性 补充几个标签的用途: sub:下标、sup:上标、var 变量 代码如下&am…...

MySQL中日期有关函数

本次记录了获取日期时间的多种方式,还有日期和字符串之间的转换,以及加减日期的操作。 获取时间 # 1.获取当前时间(年月日时分秒格式) select now();# 2.获取当前时间(年月日格式) select curdate();# 3.获取当前时间(时分秒格式) select curtime();# 4.…...

jdbc工具类

jdbc 工具类,具体见下面代码,直接可以用。 /*** version 1.0* descpription: jdbc工具类* date 2024/4/6*/ public class JDBCUtils {private static final String URL "jdbc:mysql://127.0.0.1:3306/mybatis";private static final String …...

Svelte Web 框架介绍

Svelte 是一个用于构建网络应用程序的现代框架,它与其他用户界面框架(如React和Vue)有着本质的不同。Svelte 的核心理念是在构建应用程序时,将大部分工作转移到编译步骤中,而不是在用户的浏览器中运行时处理。这种方法…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...

React核心概念:State是什么?如何用useState管理组件自己的数据?

系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架

文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...

Qt Quick Controls模块功能及架构

Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...

基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解

在我的上一篇博客:基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目,该项目展示了一个强大的框架,旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人,更是一个集…...

[C++错误经验]case语句跳过变量初始化

标题:[C错误经验]case语句跳过变量初始化 水墨不写bug 文章目录 一、错误信息复现二、错误分析三、解决方法 一、错误信息复现 write.cc:80:14: error: jump to case label80 | case 2:| ^ write.cc:76:20: note: crosses initialization…...