1. Создайте класс типа коллекции по имени People, представляющий собой
коллекцию показанного ниже класса Person. Элементы в этой коллекции должны
быть доступны через строковый индексатор, в роли которого должно выступать
имя человека, идентичное хранящемуся в свойстве Person.Name:
public class Person
{
private string name;
private int age;
public string Name
{
get
{
return name;
}
коллекцию показанного ниже класса Person. Элементы в этой коллекции должны
быть доступны через строковый индексатор, в роли которого должно выступать
имя человека, идентичное хранящемуся в свойстве Person.Name:
public class Person
{
private string name;
private int age;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
public int Age
get
return age;
set
age = value;
}
}
2. Расширьте класс Person из предыдущего упражнения так, чтобы в нем
перегружались операции >,<,>= и <= и выполнялось сравнение свойства Age со
свойством Age других экземпляров Person.
3. Добавьте в класс People метод GetOldest, возвращающий массив объектов
Person с наибольшим значением в свойстве Age (их может быть как один, так
и больше, поскольку многие элементы могут иметь в этом свойстве одинаковое
значение) с использованием перегруженных версий операций, которые
определили ранее.
4. Реализуйте в классе People интерфейс ICloneable для обеспечения
возможности глубокого копирования.
5. Добавьте в класс People итератор, позволяющий получать значения Age всех
членов в цикле f о reach показанным ниже образом:
foreach (int age in myPeople.Ages)
{
// Отображение значений возраста.
}
Person.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch11HW1
{
class Person:ICloneable
{
private string name;
private int age;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
public Person(string imaya, int vozrast)
{
Name = imaya;
Age = vozrast;
}
public override string ToString()
{
return name + " " + age;
}
public object Clone()
{
return MemberwiseClone();
}
public static bool operator <=(Person per1, Person per2)
{
return (per1.age <= per2.age);
}
public static bool operator >(Person per1, Person per2)
{
return (per1.age > per2.age);
}
public static bool operator <(Person per1, Person per2)
{
return (per1.age < per2.age);
}
public static bool operator >=(Person per1, Person per2)
{
return (per1.age >= per2.age);
}
}
}
People.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch11HW1
{
class People:DictionaryBase,ICloneable
{
public void Add(Person newPerson)
{
Dictionary.Add(newPerson.Name, newPerson);
}
public void Remove(Person newPerson)
{
Dictionary.Remove(newPerson);
}
public Person this[string Name]
{
get
{
return (Person)Dictionary[Name];
}
set
{
Dictionary[Name] = value;
}
}
public object Clone()
{
People CP =new People();
foreach (Person copyper in InnerHashtable.Values)
{
CP.Add((Person)copyper.Clone());
}
return CP;
}
public People GetOldest(People otryad)
{
Person min = new Person("0", 0);
People max = new People();
foreach (DictionaryEntry per in otryad)
{
if (((Person)per.Value).Age == min.Age)
{
max.Add((Person)per.Value);
min.Age = ((Person)per.Value).Age;
min.Name = ((Person)per.Value).Name;
}
else if (((Person)per.Value).Age > min.Age)
{
max.Clear();
max.Add((Person)per.Value);
min.Age = ((Person)per.Value).Age;
min.Name = ((Person)per.Value).Name;
}
}
return max;
}
public new IEnumerator GetEnumerator()
{
int age;
foreach(DictionaryEntry per in InnerHashtable)
{
yield return age = ((Person)per.Value).Age;
}
}
}
}
Program.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch11HW1
{
class Program
{
static void Main(string[] args)
{
string otvet="y";
while (otvet == "y")
{
Console.Clear();
People otryad = new People();
People max = new People();
People clone = new People();
Console.WriteLine("Введите количество людей в отряде.");
int kolvo = Convert.ToInt16(Console.ReadLine());
for (int i = 0; i < kolvo; i++)
{
Console.WriteLine("Введите имя бойца:");
string newimya = Console.ReadLine();
Console.WriteLine("Введите возраст бойца:");
int newvozrast = Convert.ToInt16(Console.ReadLine());
otryad.Add(new Person(newimya, newvozrast));
Console.WriteLine("Новый боец включен в отряд, его зовут - {0}, его возраст - {1}.",otryad[newimya].Name,otryad[newimya].Age);
}
Console.WriteLine();
clone = (People)otryad.Clone();
foreach (int age in otryad)
{
Console.WriteLine("Возрасты всех членов отряда {0}", age);
}
/* foreach (DictionaryEntry otr in clone)
{
Console.WriteLine("Клонированный массив - имя {0}", ((Person)otr.Value).Name);
Console.WriteLine("Клонированный массив - возраст {0}", ((Person)otr.Value).Age);
}*/
max = otryad.GetOldest(otryad);
foreach (DictionaryEntry otr in max)
{
Console.WriteLine("Имя бойца с максимальным возрастом : {0}", ((Person)otr.Value).Name);
}
Console.WriteLine("Сравним бойцов по возрасту.");
Console.WriteLine("Введите имя первого бойца.");
string boec1 = Console.ReadLine();
Console.WriteLine("Введите имя второго бойца.");
string boec2 = Console.ReadLine();
if (otryad[boec1] > otryad[boec2])
{
Console.WriteLine("Боец:{0}, старше чем боец {1}.",boec1,boec2);
}
else if (otryad[boec1] >= otryad[boec2])
{
Console.WriteLine("Боец:{0}, одинакового возраста с бойцом {1}.", boec1, boec2);
}
else
Console.WriteLine("Боец:{0}, младше чем боец {1}.", boec1, boec2);
Console.WriteLine("Введите имя, чтобы узнать возраст.");
string currname = Console.ReadLine();
Console.WriteLine("Его возраст: {0}.", otryad[currname].Age);
Console.WriteLine("Изменяем значение возраста этого бойца на 1.");
otryad[currname].Age = otryad[currname].Age + 1;
Console.WriteLine("Его возраст теперь = {0}.", otryad[currname].Age);
Console.WriteLine("Проверяем клонированный массив.");
foreach (DictionaryEntry otr in clone)
{
Console.WriteLine("Клонированный массив - имя {0}", ((Person)otr.Value).Name);
Console.WriteLine("Клонированный массив - возраст {0}", ((Person)otr.Value).Age);
}
Console.WriteLine("Введите \"y\" что бы продолжить.");
otvet = Console.ReadLine();
}
}
}
}
Комментариев нет:
Отправить комментарий