Группа друзей отслеживает мили на галлон для каждого из своих автомобилей.Каждый раз, когда один из них заполняет свой бензобак, они записывают в файл следующее:
Его или ее имя, Тип машины, которую они проехали, Сколько миль проехало с тех пор, как они последний раз заправлялись, Сколько галлоновприобретено при этом заполнении, Дата заполнения.
Их данные отформатированы в виде файла значений с запятой (csv) в следующем формате для каждой строки: (# person, carName, milesDriven, gallonsFilled, fillupDate)Мили записываются как числа с плавающей точкой, а галлоны - как целые числа.
Задача состоит в том, чтобы создать программу, позволяющую членам этой группы определять мили на галлон (MPG) каждого из своих автомобилей в течение определенного промежутка времени.,Примечание: у пользователя может быть больше одного, поэтому запрос временного диапазона может потребовать вывода данных для одного или нескольких автомобилей.
Запрос: GetRangeMPG (PersonName, StartDate, EndDate) Возвращает список объектов, содержащих (CarName, MPG)
MPG рассчитывается как (общее количество пройденных миль за период времени) / (общее количество заполненных галлонов за период времени.
Попытка выяснить лучший способ хранения данных такого типа, вот чтоУ меня есть ниже:
Хранение данных CSV в словаре с PersonName в качестве ключа и списка объектов типа Car. Метод GetRangeMPG будет искать в этом словаре с предоставленным аргументом PersonName и пытаться найти MPG длямашины, которыми владеет человек.
class Car
{
public string CarName { get; set; }
public double MilesDriven { get; set; }
public int GallonFilled { get; set; }
public DateTime DateFilled { get; set; }
}
class MPGCalc
{
Dictionary<string, List<Car>> log = new Dictionary<string, List<Car>>();
public void LoadData(string inp)
{
string[] lines = inp.Split(new[] { Environment.NewLine },StringSplitOptions.None);
string personName, carName;
double milesDriven;
int gallonsFilled;
DateTime fillupDate;
List<Car> carList = new List<Car>();
foreach(var line in lines)
{
string[] info = line.Split(',');
//(#person,carName,milesDriven,gallonsFilled,fillupDate)
personName = info[0];
carName = info[1];
Double.TryParse(info[2], out milesDriven);
int.TryParse(info[2], out gallonsFilled);
DateTime.TryParse(info[4], out fillupDate);
if(log.ContainsKey(info[0]))
{
log.TryGetValue(personName, out carList);
carList.Add(new Car {CarName = personName, MilesDriven = milesDriven, GallonFilled = gallonsFilled, DateFilled = fillupDate});
log[personName] = carList;
}
else
{
carList.Add(new Car {CarName = personName, MilesDriven = milesDriven, GallonFilled = gallonsFilled, DateFilled = fillupDate});
log.Add(personName, carList);
}
}
}
Как мой прогресс на данный момент? Является ли этот лучший подход к решению проблем похожим на эти?