1
0
oop-1-labs/Lab2/Lab2.TouristInformationCenter/MuseumsRegister.cs

236 lines
6.9 KiB
C#

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