#========================================================================
# 某某风险投资计算器 版本2.0
# 徐步陌上行
# 2012-10-28
# 保留所有权利
#------------------------------------------------------------------------
# 打包出来的exe文件下载地址:dl.vmall/c0g948daro
# 程序中主要的类和方法一览:
# Invest 用于计算收益时间点的类
# _calc 项目计算,ruby数组的操作
# _illegal 输入数据不合法时的提示
# _result 对计算结果的处理
# _save 计算结果保存到txt文件里,ruby文件的写入
# _log_in 登录,ruby模拟用户验证
# _register 注册功能,随机生成字符串,base64加密
# _about 显示关于内容
# _suicide 自杀选项
# _suicide_mode1 删除账号
# _suicide_mode2 删除软件,ruby软件自删除,利用的是批处理文件
# _soundA/B/C/D 声效提示,ruby程序发声,使用win32-sound库
# _getch 从键盘获得单个字符输入,得到的值是ASCII码
# _input_key 密码输入函数,模拟常见的密码输入模式:"***********"
# _read_key 从证书中读取密码,文件内容读取,base64解密
# _select_display 选择显示的界面
# _display1 登录后的主界面
# _display0 未登录前的主界面
# _main 主界面操作选项
#=========================================================================
require 'win32/sound'
require 'Win32API'
require 'base64'
#========================================================================
# ■计算收益代码
# Invest类,给定项目条件后,进行单个项目收益的计算,得到收益时间点,对于
# 收益,则在 _calc 里计算
# 各参数含义:
# date 项目开始日期,格式yyddmm,年份在1980至2079年之间
# period 项目分红周期,小于45天
# last 项目持续时间,为周期的整数倍
# bonus 项目周期分红,非负
#========================================================================
class Invest
#初始化
def initialize(date,period,last,bonus)
@date = date
@period = period
@last = last
@bonus = bonus
$m_date = Array.new(@last/@period){Array.new(2,@bonus)} #用于保存收益时间点的全局变量
@k = 0
end
#主函数
def run
for i in 1..@last/@period
split_date
leap_year
calc_date
save_data
end
end
#从用户输入信息中分割出年月日
def split_date
@year = (@date-@date%10000)/10000
@month = ((@date%10000)-@date%100)/100
@day = @date%100
end
#判断是否闰年
def leap_year
if (@year%4 == 0 and @year%100 !=0)or (@year%400 ==0)
@m_day = [31,29,31,30,31,30,31,31,30,31,30,31] #闰年月份天数
else
@m_day = [31,28,31,30,31,30,31,31,30,31,30,
31] #平年月份天数
end
end
#计算投资收益时间点
def calc_date
#当前年月信息
@p_year = @year
@p_month = @month
@month_day = @m_day[@p_month-1] #当月的天数
#经过一个周期
@p_day = @day+@period
#一个周期后的年月日
if @p_day > @month_day
@p_month += 1
@p_day = @p_day-@month_day
if @p_month == 13
@p_month = 1
@p_year = @year+1
end
end
#将计算的年月日信息当做下一个周期的信息
@year = @p_year
@month = @p_month
@day = @p_day
@date = @year*10000+@month*100+@day
end
#保存计算结果
def save_data
$m_date[@k][0] = @date
@k += 1
end
end
#=======================================================
# ■主界面选项:计算
#=======================================================
def _calc
in_date = [] #存储项目开始时间
in_period = [] #存储项目周期
in_last = [] #存储项目时长
in_bonus = [] #存储项目分红
p_date = [] #存储收益时间点
$atleast1 = 0 #至少有一个合法项目标志,初值为0,表示无合法项目
j = 1 #循环计数用
puts ""
#接收项目信息的输入
loop do
_soundB
puts "项目 #{j}: 完成所有项目输