清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
class CustomFunctionsManager
attr_accessor :functions
def initialize(dataFilePath)
@dateFilePath = dataFilePath
@functions = []
loadFunctions
end
def loadFunctions
if File.exist?(@dateFilePath)
fileHandle = File.new(@dateFilePath, 'r')
fileHandle.each_line do |line|
@functions << CustomFunction.new(line.chomp)
end
fileHandle.close
return @functions
end
return ""
end
def appendCustomFunction(customFunctionString)
@functions << CustomFunction.new(customFunctionString.chomp)
updateDataFile
end
def deleteCustomFunction(function)
@functions.delete(function)
updateDataFile
end
def updateDataFile
fileHandle = File.new(@dateFilePath, 'w')
@functions.each do |func|
fileHandle.puts func.to_s
end
fileHandle.close
end
end
class CustomFunction
attr_accessor :customFuncionString
def initialize(customFuncionString)
#init BB-4aC to B*B-4*a*C
strTem = customFuncionString.gsub(/([\w])([A-Z])/,'\1*\2')
strTem = strTem.gsub(/(\d)([a-z])/,'\1*\2')
while !strTem.eql?(customFuncionString)
customFuncionString = strTem
strTem = customFuncionString.gsub(/([\w])([A-Z])/,'\1*\2')
strTem = strTem.gsub(/(\d)([a-z])/,'\1*\2')
end
@customFuncionString = strTem
#init 'a/b' to 'a.0/b'?
end
def to_s
@customFuncionString
end
def calculate
params = []
customFuncionStringTem = @customFuncionString
puts "请依次输入函数 '#{customFuncionStringTem}' 的参数:"
@customFuncionString.scan(/[A-Z]{1}[a-z]*|[a-z]+/) do |param|
params << param unless params.include?(param)
end
params.each do |param|
puts param + ' = ?'
inputs = gets.chomp
value = inputs.index('.') || @customFuncionString.index('/') ? inputs.to_f : inputs.to_i
customFuncionStringTem = customFuncionStringTem.gsub(eval('/' + param + '/'), value.to_s)
end
print @customFuncionString + ' = ' + customFuncionStringTem + ' = '
puts eval(customFuncionStringTem)
end
end
class UI
attr_accessor :functionManager
def initialize(dataFilePath)
@functionManager = CustomFunctionsManager.new(dataFilePath)
end
def displayMenu
value = 0
while value != 4
puts "请输入功能序号:"
puts "0.显示函数"
puts "1.增加函数"
puts "2.使用函数"
puts "3.删除函数"
puts "4.退出程序"
value = gets.chomp.to_i
displayAllFunction(@functionManager.functions) if value == 0
appendCustomFunction if value == 1
useCustomFunction if value == 2
deleteCustomFunction if value == 3
end
puts "程序已退出。"
end
def displayAllFunction(functions)
index = 1;
functions.each do |func|
puts " #{index}.#{func.to_s}"
index += 1
end
end
def selectingFunctions
puts "请选择一条函数:"
functions = @functionManager.functions
displayAllFunction(functions)
value = gets.chomp.to_i - 1
if value < 0 || value > functions.length - 1
puts "错误的数值!"
return nil
end
functions[value]
end
def appendCustomFunction
puts "请输入函数:"
str = gets.chomp
@functionManager.appendCustomFunction(str)
end
def useCustomFunction
function = selectingFunctions
function.calculate if function
end
def deleteCustomFunction
function = selectingFunctions
@functionManager.deleteCustomFunction(function) if function
end
end
UI.new("CustomFunctions.txt").displayMenu