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;
}
}
}