Как сохранить и справочный ввод для программы командировочных расходов в Ruby - PullRequest
0 голосов
/ 31 марта 2020

Я новичок в Ruby, и я пишу трекер расходов на командировки, который подсчитает сумму, потраченную на каждую поездку, и процент от общих расходов на поездку за каждую поездку. (Пока что я могу рассчитать только общую сумму расходов на все поездки вместе взятые) Сначала я хочу также иметь возможность рассчитать общие расходы для каждой поездки. Как мне ссылаться на ввод пользователя, чтобы сделать это?
Кроме того, мне также интересно, как я могу ссылаться на местоположения поездки, которые были введены пользователем, Пример: «Ваша поездка в Испанию составила 50% от стоимости все поездки. "

Это то, что я имею до сих пор:

# asks the user how many trips they've taken and prompts them that number of times
puts "How many trips did you take?"
trip_count = gets.chomp.to_i

# prompts the user the trip locations and stores them in a hash
trip_data = trip_count.times.map do |x| 
puts "Where did you go for your trip ##{x+1}?" 
trip_location = gets.chomp

puts "How much did you spend on lodging?"
lodging_cost = gets.chomp.to_i

puts "How much did you spend on round-trip transportation?"
transit_cost = gets.chomp.to_i

puts "How many bags did you check?"
bags_checked = gets.chomp.to_i

{
location: trip_location,
lodging: lodging_cost,
transit: transit_cost,
bags: bags_checked *50
}
end

#total spent on all trips
total_spent = trip_data.reduce(0) do |sum, trip| sum + trip[:lodging] + trip[:transit] + trip[:bags] 
end

1 Ответ

0 голосов
/ 01 апреля 2020

Вы можете хранить данные в виде таблицы в базе данных. Я предлагаю изучить базу данных sqlite3, которой легко управлять. Вот репозиторий sqlite3 в github, который содержит полезную информацию о том, как его использовать, если вы посмотрите в файле Readme https://github.com/sparklemotion/sqlite3-ruby.

Шаг 0: Подключение к базе данных

require "sqlite3"

db = SQLite3::Database.new "myTrips.db"
db.results_as_hash = true

Шаг 1. По сути, чтобы упростить задачу, вы можете создать таблицу, содержащую столбец для каждого из этих вопросов плюс один для общего количества.

 rows = db.execute <<-SQL
   create table Trips (
     trip_pk integer primary key autoincrement,
     location varchar(50),
     lodging_cost float,
     transit_cost float,
     bags_cost float,
     total_cost float
   );
 SQL

Шаг 2: Каждый раз, когда вы go проходите через свою программу и отвечаете на вопросы, вы можете вставить новую запись в таблицу. Таким образом, каждая строка будет представлять одну поездку. Введенные вами ответы будут добавлены в оператор SQL ниже в разделе значений. Вы можете вводить их динамически, используя ha sh, который вы уже сформировали в приведенном выше примере, который выглядит следующим образом:

responses = {
  location: trip_location,
  lodging: lodging_cost,
  transit: transit_cost,
  bags: bags_checked *50
}

def add_new_trip
  total = responses[:lodging] + responses[:transit] + responses[:bags]

  db.execute("insert into Trips(location, lodging_cost, transit_cost, 
  number_of_bags, total_cost) values(responses[:location], responses[:lodging], responses[:transit], responses[:bags], total)")

Шаг 3: Затем, как только вы заполните данные в базе данных, вы можете запросить Информация, которую вы хотите. Поэтому, если вы хотите узнать стоимость поездки в Испанию, вы должны выполнить следующую инструкцию sql:

select total_price from Trips where location = 'Spain'

. Вы можете использовать ее для расчета процентов.

Сохранить в Имейте в виду, что часть этого является псевдокодом и может не работать точно из сумки, но если вы посмотрите на ссылку, которую я разместил, вы сможете найти то, что вы ищете, чтобы заполнить пробелы.

...