using System; using System.Collections.Generic; using System.Text; namespace Lab5.TouristInformationCenter { /// /// Class used to store multiple museums in one place /// class MuseumsRegister { private MuseumsContainer AllMuseums; public MuseumsRegister() { AllMuseums = new MuseumsContainer(); } public MuseumsRegister(MuseumsContainer museums) { AllMuseums = new MuseumsContainer(museums); } /// /// Add one museum to the register. /// /// Target museum public void Add(Museum museum) { 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.Get(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 MuseumsContainer FilterByActiveMuseums(int threshold) { return AllMuseums.FilterByActivity(threshold); } /// /// Find museum that work the most days in a week /// /// Most active museum public Museum FindMostActiveMuseum() { if (AllMuseums.Count == 0) { return null; } Museum mostActive = AllMuseums.Get(0); for (int i = 0; i < AllMuseums.Count; i++) { Museum museum = AllMuseums.Get(i); if (museum.Workdays.Count > mostActive.Workdays.Count) { mostActive = museum; } } return mostActive; } /// /// Find all museums that work the most days in a week /// /// public MuseumsContainer FindMostActiveMuseums() { Museum mostActive = FindMostActiveMuseum(); MuseumsContainer activeMuseums = new MuseumsContainer(); for (int i = 0; i < AllMuseums.Count; i++) { Museum museum = AllMuseums.Get(i); 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() { return AllMuseums.GetAllCities(); } /// /// Filter the museums by city name from register /// /// Target city /// A container of museums public MuseumsContainer FilterByCity(string city) { return AllMuseums.FilterByCity(city); } /// /// Filter by property "Type". /// /// Target type /// A filtered container of museums public MuseumsContainer FilterByType(string type) { return AllMuseums.FilterByType(type); } private List GetMuseumNames() { List result = new List(); for (int i = 0; i < AllMuseums.Count; i++) { Museum museum = AllMuseums.Get(i); if (!result.Contains(museum.Name)) { result.Add(museum.Name); } } return result; } /// /// Find all museums that have matching names /// /// A container with museums that have matching names public MuseumsContainer FindMuseumsWithDuplicateNames() { MuseumsContainer result = new MuseumsContainer(); List names = GetMuseumNames(); foreach (string name in names) { MuseumsContainer museumsByName = AllMuseums.FilterByName(name); if (museumsByName.Count <= 1) continue; for (int i = 0; i < museumsByName.Count; i++) { result.Add(museumsByName.Get(i)); } } return result; } } }