Advertisement
JouJoy

Untitled

Mar 24th, 2022
1,144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.70 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace _15._03
  6. {
  7.     enum Frequency { Weekly, Monthly, Yearly }//определяю тип Frequency
  8.  
  9.     public class Article : IRateAndCopy//класс, который имеет свойство с доступом для чтения и записи
  10.     {
  11.         public Article(string name, double rating, Person author)//конструктор с параметрами
  12.         {
  13.             Name = name;
  14.             Rating = rating;
  15.             Author = author;
  16.         }
  17.  
  18.         public Article()//конструктор без параметров
  19.             : this("Без названия", 0, new Person("Нет автора"))
  20.         {
  21.         }
  22.  
  23.         public string Name { get; set; }//свойства для чтения и записи
  24.         public double Rating { get; set; }
  25.         public Person Author { get; set; }
  26.  
  27.         public override string ToString()//перегруженная версия ToString
  28.             => $"${Name} с рейтингом ${Rating} от {Author}";
  29.  
  30.         public virtual object DeepCopy()
  31.         {
  32.             Article temp = (Article)this.MemberwiseClone();
  33.             temp.Name = this.Name;
  34.             temp.Rating = this.Rating;
  35.             temp.Author = (Person)this.Author.DeepCopy();
  36.             return temp;
  37.         }
  38.         //string IRateAndCopy.Rating { get => Name; }
  39.         //public Person(string name) => this.Name = name;
  40.     }
  41.     interface IRateAndCopy
  42.     {
  43.         double Rating { get; }
  44.         object DeepCopy();
  45.     }
  46.  
  47.     public class Person
  48.     {
  49.         public Person(string name)
  50.         {
  51.             Name = name;
  52.         }
  53.  
  54.         public string Name { get; set; }
  55.         public override bool Equals(object? obj)
  56.         {
  57.             // если параметр метода представляет тип Person
  58.             // то возвращаем true, если имена совпадают
  59.             if (obj is Person person) return Name == person.Name;
  60.             return false;
  61.         }
  62.        
  63.        
  64.         public virtual object DeepCopy()
  65.         {
  66.             Person temp = (Person) this.MemberwiseClone();
  67.             temp.Name = this.Name;
  68.             return temp;
  69.         }
  70.         // public override int GetHashCode() => Name.GetHashCode(); //другой вариант
  71.         public override int GetHashCode()
  72.         {
  73.             return HashCode.Combine(Name);
  74.         }
  75.  
  76.         public static bool operator ==(Person obj, Person obj1)
  77.         {
  78.             if (obj.Name == obj1.Name)
  79.                 return true;
  80.             return false;
  81.         }
  82.         public static bool operator !=(Person obj, Person obj1)
  83.         {
  84.             if (obj.Name != obj1.Name)
  85.                 return true;
  86.             return false;
  87.         }
  88.  
  89.     }
  90.     public class Edition
  91.     {
  92.         protected string Name { get; set; }
  93.         protected DateTime Date_of_publish { get; set; }
  94.         protected int circulation
  95.         {
  96.             get
  97.             {
  98.                 return circulation;
  99.             }
  100.             set
  101.             {
  102.                 circulation = value;
  103.             }
  104.         }
  105.        
  106.  
  107.         public Edition(string name, DateTime date, int id)
  108.         {
  109.             Name = name;
  110.             Date_of_publish = date;
  111.             circulation = id;
  112.         }
  113.         public Edition()
  114.         {
  115.  
  116.         }
  117.         public virtual object DeepCopy()
  118.         {
  119.             Edition temp = (Edition)this.MemberwiseClone();
  120.             temp.Name = this.Name;
  121.             temp.Date_of_publish = this.Date_of_publish;
  122.             temp.circulation = this.circulation;
  123.             return temp;
  124.         }
  125.  
  126.         public override bool Equals(object obj)
  127.         {
  128.             return obj is Edition edition &&
  129.                    Name == edition.Name &&
  130.                    Date_of_publish == edition.Date_of_publish &&
  131.                    circulation == edition.circulation;
  132.         }
  133.  
  134.         public override int GetHashCode()
  135.         {
  136.             return HashCode.Combine(Name, Date_of_publish, circulation);
  137.         }
  138.  
  139.         public static bool operator ==(Edition obj, Edition obj1)
  140.         {
  141.             if (obj.Name == obj1.Name && obj.circulation == obj1.circulation && obj.Date_of_publish == obj1.Date_of_publish)
  142.                 return true;
  143.             return false;
  144.         }
  145.         public static bool operator !=(Edition obj, Edition obj1)
  146.         {
  147.             if (obj.Name != obj1.Name || obj.circulation != obj1.circulation || obj.Date_of_publish != obj1.Date_of_publish)
  148.                 return true;
  149.             return false;
  150.         }
  151.  
  152.         public override string ToString()//перегруженная версия для формирования строки со значениями всех полей класса
  153.         {
  154.             return string.Format("\nName: {0}\nCirculation: {1}\nPublishDate: {2}\n", Name, circulation, Date_of_publish);
  155.         }
  156.         //public string Name
  157.         //{
  158.         //    get => Name;
  159.         //    set => Name = value;
  160.         //}
  161.         //public DateTime PublishDate
  162.         //{
  163.         //    get => publishDate;
  164.         //    set => publishDate = value;
  165.         //}
  166.         //  public virtual string ToShortString()//виртуальный метод toShortString
  167.         //   => $"Name = {Name}"//для формирования строки без списка статей но  со значением среднего рейтинга статей
  168.         // + $"\nPublishDate = {PublishDate}";
  169.         // + $"\nEdition = {Edition}";
  170.     }
  171.     class Magazine : Edition
  172.     {
  173.         //private string name;
  174.         private Frequency frequency;
  175.         //private DateTime publishDate;
  176.         //private int edition;
  177.         //private Person[] editors;
  178.         //private Article[] articles;
  179.         private System.Collections.ArrayList editors = new System.Collections.ArrayList();
  180.         private System.Collections.ArrayList articles = new System.Collections.ArrayList();
  181.  
  182.         public System.Collections.ArrayList ListOfEditors { get { return editors; } set { editors = value; } }
  183.         public System.Collections.ArrayList ListOfArticles { get { return articles; } set { articles = value; } }
  184.  
  185.         public Magazine(
  186.             string name,
  187.             Frequency frequency,
  188.             DateTime publishDate,
  189.             int id)//конструктор для инициализации соотв-х полей класса
  190.         {
  191.            
  192.             this.Name = name;
  193.             this.frequency = frequency;
  194.             this.Date_of_publish = publishDate;
  195.             this.circulation = id;
  196.         }
  197.  
  198.         public Magazine()//конструткор без параметров ,иницал-й по умолчанию
  199.         {
  200.         }
  201.         public void AddArticles(params Article[] NewArticles)
  202.         {
  203.             articles.AddRange(NewArticles);
  204.         }
  205.  
  206.         public string Name//свойство типа string
  207.         {
  208.             get => Name;
  209.             set => Name = value;
  210.         }
  211.  
  212.         public Frequency Frequency
  213.         {
  214.             get => frequency;
  215.             set => frequency = value;
  216.         }
  217.  
  218.         public DateTime PublishDate
  219.         {
  220.             get => Date_of_publish;
  221.             set => Date_of_publish = value;
  222.         }
  223.  
  224.         //public int Edition
  225.         //{
  226.         //    get => edition;
  227.         //    set => edition = value;
  228.         //}
  229.  
  230.         //public Article[] Articles
  231.         //{
  232.         //    get => articles;
  233.         //    set => articles = value;
  234.         //}
  235.  
  236.         public double GetAvgRating
  237.         {
  238.             get{
  239.                    double result = 0;
  240.                    int count = 0;
  241.                    foreach (Article item in articles)
  242.                    {
  243.                        result += item.Rating;
  244.                        count++;
  245.                    }
  246.                    result /= count;
  247.                    if (count != 0) return result;
  248.                    else return 0;
  249.                }
  250.         }
  251.         public bool this[Frequency frequency]//индексатор булевского типа,true если значение поля равно индексу
  252.         {
  253.             get => Frequency == frequency;
  254.         }
  255.         public override string ToString()
  256.         {
  257.             string stringListOfArticles = "";
  258.             foreach (Article art in articles)
  259.             {
  260.                 stringListOfArticles += art.ToString() + "\r\n";
  261.             }
  262.             string stringListOfEditors = "";
  263.             foreach (Person pers in ListOfEditors)
  264.             {
  265.                 stringListOfEditors += pers.ToString() + "\r\n";
  266.             }
  267.             return base.ToString() + string.Format("\r\n Name: {0} \r\n Frequency: {1} \r\n PublishDate: {2} \r\n Editors: {3} \r\n Articles: {4}", Name, Frequency, Date_of_publish, stringListOfEditors, stringListOfArticles);
  268.         }
  269.         //public void AddArticles(params Article[] newArticles)//метод для добававления элементов в список статей в журнале
  270.         //{
  271.         //    if (newArticles?.Length == 0)
  272.         //    {
  273.         //        return;
  274.         //    }
  275.  
  276.         //    if (articles == null)
  277.         //    {
  278.         //        articles = Array.Empty<Article>();
  279.         //    }
  280.  
  281.         //    int oldLength = articles.Length;
  282.         //    Array.Resize(ref articles, articles.Length + newArticles.Length);
  283.         //    Array.Copy(newArticles, 0, articles, oldLength, newArticles.Length);
  284.         //}
  285.  
  286.         //public override string ToString()//перегруженная версия для формирования строки со значениями всех полей класса сос писокм статей
  287.         //{
  288.         //    StringBuilder stroka = new StringBuilder();
  289.         //    foreach (var strk in Articles)
  290.         //    {
  291.         //        stroka.Append($"{strk}");
  292.         //    }
  293.         //    return string.Format("\nName: {0}\nFrequency: {1}\nPublishDate: {2, 7} \nEdition: {3, 6}\n\nArticles: {4}", name, Frequency, PublishDate, Edition, stroka);
  294.         //}
  295.         //public virtual string ToShortString()//виртуальный метод toShortString
  296.         //    => $"Name = {Name}"//для формирования строки без списка статей но  со значением среднего рейтинга статей
  297.         //    + $"\nFrequency = {Frequency}"
  298.         //    + $"\nPublishDate = {PublishDate}"
  299.         //    + $"\nEdition = {Edition}";
  300.         //// + $"\nAvg rating = {GetAvgRating()}";
  301.     }
  302. }
  303.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement