using System; using System.Collections.Generic; using System.Text; namespace Lab2.TouristInformationCenter { /// /// Class used to store multiple museums in one place /// class MuseumsRegister { private List AllMuseums; public int size = 100; public MuseumsRegister() { AllMuseums = new List(); } public MuseumsRegister(List museums) { AllMuseums = new List(); foreach (Museum museum in museums) { Add(museum); } } /// /// Add one museum to the register. /// /// Target museum public void Add(Museum museum) { this.AllMuseums.Add(museum); } /// /// The amount of stored museums in the register. /// /// Museum count public int Count() { return AllMuseums.Count; } /// /// Access museum from register by index /// /// Target index /// Museum public Museum GetByIndex(int index) { return AllMuseums[index]; } /// /// Return a list of active museums from the register. /// A museum is considered active if it is working at least some amount a week. /// /// Threshold which determines what is active /// A list of active museums public List FilterByActiveMuseums(int threshold) { List filtered = new List(); foreach (Museum museum in AllMuseums) { if (museum.Workdays.Count >= threshold) { filtered.Add(museum); } } return filtered; } /// /// Find museum that work the most days in a week /// /// Most active museum private Museum FindMostActiveMuseum() { if (AllMuseums.Count == 0) { return null; } Museum mostActive = AllMuseums[0]; foreach (Museum museum in AllMuseums) { if (museum.Workdays.Count > mostActive.Workdays.Count) { mostActive = museum; } } return mostActive; } /// /// Find all museums that work the most days in a week /// /// public List FindMostActiveMuseums() { Museum mostActive = FindMostActiveMuseum(); List activeMuseums = new List(); foreach (Museum museum in AllMuseums) { if (museum.Workdays.Count == mostActive.Workdays.Count) { activeMuseums.Add(museum); } } return activeMuseums; } /// /// Get all of the different types of cities. /// /// A list of city names public List GetAllCities() { List cities = new List(); foreach (Museum museum in AllMuseums) { if (!cities.Contains(museum.City)) { cities.Add(museum.City); } } return cities; } /// /// Get the number of museums that a certain city has. /// /// Target city /// Museum count by target city public int GetCountByCity(string city) { int count = 0; foreach (Museum museum in AllMuseums) { if (museum.City == city) { count++; } } return count; } /// /// Filter the museums by city name from register /// /// Target city /// A list of museums public List FilterByCity(string city) { List filtered = new List(); foreach (Museum museum in AllMuseums) { if (museum.City == city) { filtered.Add(museum); } } return filtered; } /// /// Count the number of museums that have a guide from given list /// /// A list of museums /// Museum count that have guides public static int CountByGuide(List museums) { int count = 0; foreach (Museum museum in museums) { if (museum.HasGuide) { count++; } } return count; } /// /// Find city which has the most guides from the register /// /// City with the most guides public string FindCityWithMostGuides() { List cities = GetAllCities(); if (cities.Count == 0) { return null; } string mostPopular = cities[0]; int mostPopularCount = CountByGuide(FilterByCity(cities[0])); for (int i = 1; i < cities.Count; i++) { string city = cities[i]; int count = CountByGuide(FilterByCity(city)); if (count > mostPopularCount) { mostPopular = city; mostPopularCount = count; } } return mostPopular; } /// /// Filter given museums by property "Type". /// /// List of museums /// Target type /// A filtered list of museums public static List FilterByType(List museums, string type) { List filtered = new List(); foreach (Museum museum in museums) { if (museum.Type == type) { filtered.Add(museum); } } return filtered; } } }