static string CalculateCheapestMonth(ListNodes<Residents> residentsListNodes, ListNodes<Utilities> utilitiesListNodes) { var cheapestMonth = new Dictionary<string, Dictionary<string, double>>(); var cheapestMonthListNodes = new ListNodes<CheapestMonth>(); var temp = residentsListNodes; for (residentsListNodes.StartingNode(); residentsListNodes.Contains(); residentsListNodes.RightNode()) { if (cheapestMonth.ContainsKey(residentsListNodes.GetData().Month)) { if (cheapestMonth[residentsListNodes.GetData().Month].ContainsKey(residentsListNodes.GetData().UtilityCode)) { cheapestMonth[residentsListNodes.GetData().Month][residentsListNodes.GetData().UtilityCode] += FindUtilityPrice(utilitiesListNodes, residentsListNodes.GetData().UtilityCode) * residentsListNodes.GetData().ServiceCount; } else { cheapestMonth[residentsListNodes.GetData().Month].Add( residentsListNodes.GetData().UtilityCode, FindUtilityPrice(utilitiesListNodes, residentsListNodes.GetData().UtilityCode) * residentsListNodes.GetData().ServiceCount ); } } else { cheapestMonth.Add(residentsListNodes.GetData().Month, new Dictionary<string, double>()); cheapestMonth[residentsListNodes.GetData().Month].Add( residentsListNodes.GetData().UtilityCode, FindUtilityPrice(utilitiesListNodes, residentsListNodes.GetData().UtilityCode) * residentsListNodes.GetData().ServiceCount ); } } foreach (KeyValuePair<string, Dictionary<string, double>> item in cheapestMonth) { foreach (KeyValuePair<string, double> utility in cheapestMonth[item.Key]) { cheapestMonthListNodes.AddData(new CheapestMonth(item.Key, utility.Key, utility.Value)); } } var cheapestMonthUtility = cheapestMonthListNodes.OrderBy(x => x.Price).FirstOrDefault(); for (utilitiesListNodes.StartingNode(); utilitiesListNodes.Contains(); utilitiesListNodes.RightNode()) { if (cheapestMonthUtility.UtilityCode == utilitiesListNodes.GetData().ServiceCode) { cheapestMonthUtility.UtilityCode = utilitiesListNodes.GetData().ServiceName; } } if (cheapestMonthUtility != null) { return $"{cheapestMonthUtility.Month} mėnesį {cheapestMonthUtility.UtilityCode} kainavo pigiausiai"; } return "Nerasta"; }
static ListNodes<Residents> FilterResidentsByMoneySpent(ListNodes<Residents> residentsListNodes) { var filteredResidents = new ListNodes<Residents>(); var averageMoneySpent = CalculateResidentsAverageMoneySpent(residentsListNodes); for (residentsListNodes.StartingNode(); residentsListNodes.Contains(); residentsListNodes.RightNode()) { if (averageMoneySpent > residentsListNodes.GetData().MoneySpent) { filteredResidents.AddData(residentsListNodes.GetData()); } } return filteredResidents; }
ListNodes<Utilities> ReadUtilitiesData(Stream file) { var utilitiesListNodes = new ListNodes<Utilities>(); using (var reader = new StreamReader(file)) { var line = reader.ReadLine(); while (line != null) { var values = line.Split(' '); var serviceCode = values[0]; var serviceName = values[1]; var serviceUnitPrice = double.Parse(values[2]); utilitiesListNodes.AddData(new Utilities(serviceCode, serviceName, serviceUnitPrice)); line = reader.ReadLine(); } } return utilitiesListNodes; }
ListNodes<Residents> ReadResidentsData(Stream file) { var residentsListNodes = new ListNodes<Residents>(); using (var reader = new StreamReader(file)) { var line = reader.ReadLine(); while (line != null) { var values = line.Split(' '); var surname = values[0]; var name = values[1]; var address = values[2]; var month = values[3]; var utilityCode = values[4]; var serviceCount = int.Parse(values[5]); residentsListNodes.AddData(new Residents(surname, name, address, month, utilityCode, serviceCount)); line = reader.ReadLine(); } } return residentsListNodes; }