使用命令行参数输入

时间:2019-06-18 21:14:24

标签: ruby

定义具有三个三个属性“名称”,“ account_no”和“余额”的类帐户。创建帐户类的对象时,应设置名称和余额,帐户编号应为自动递增。此Account类必须具有两种方法,deposit()和withdraw()。

您的程序应包含三个参数 1.客户一 2.客户二 3.交易金额

输入格式: 客户名称1:帐户余额1客户名称2:帐户余额2转帐:交易金额

我正在尝试使用ARGV获取输入,但不确定如何获取格式的输入- ABC:2000 XYZ:3000传输:200

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我不确定使用程序参数进行这种测试是否是一个好主意(我将使用具有所有可能转换的文件)。

如果在调用红宝石程序时仍想使用ARGV,则如下:ruby prog_name.rb ABC:2000 XYZ:3000 transfer:200 ARGV将如下所示:["ABC:2000", "XYZ:3000", "transfer:200"]
所以

  • ARGV [0]是“ customer_name1:account_balance1”(使用split(':')&to_i获取正确的值)
  • ARGV [1]是“ customer_name2:account_balance2”
  • ARGV [2]是“ transfer:transaction_amount”

我对文件使用的建议涉及gets函数。基本上,您将创建一个包含以下内容的文件:

create_account ABC
create_account XYZ
deposit 2000 ABC
deposit 3000 XYZ
transfer 200 ABC XYZ

有了这些数据,您就知道自己在做什么和将调用什么函数,使用Account类的程序将具有以下结构:

require "account" # I'm supposing your $LOAD_PATH is correctly set

while (line = gets)
  command, *params = line.split(' ')
  case command
  when 'create_account'
    # Create an account with name = params.first
  when 'deposit'
    # Deposit params.first.to_i in account with name params[1]
  when 'transfer'
    # Make sure account with name params[1] has params.first.to_i in its balance
    # Withdraw params.first.to_i from account with name params[1]
    # Deposit params.first.to_i in account with name params[2]
  else
    puts "Unknown command #{command} in line #{line}"
  end
end

通过这种方式,您只需要调用ruby program_name.rb dataset.txt,它就会处理dataset.txt的所有行。您可以创建各种数据集,以确保您的客户经理执行正确的操作。 (因此,您需要在AccountManager类中进行转移方法并找到帐户方法。)