Advertisement
JouJoy

Untitled

Mar 24th, 2022
961
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.82 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.         public override int GetHashCode() => Name.GetHashCode();
  64.         public virtual object DeepCopy()
  65.         {
  66.             Person temp = (Person) this.MemberwiseClone();
  67.             temp.Name = this.Name;
  68.             return temp;
  69.         }
  70.    
  71.     //    public override bool Equals(object obj)
  72.     //    {
  73.     //        if (obj == this)
  74.     //            return true;
  75.     //        return false;
  76.     //    }
  77.     //    public static bool operator ==(Person obj,Person obj1)
  78.     //    {
  79.     //        if(obj.Name==obj1.Name)
  80.     //            return true;
  81.     //        return false;
  82.     //    }
  83.     //    public static bool operator !=(Person obj, Person obj1)
  84.     //    {
  85.     //        if (obj.Name != obj1.Name)
  86.     //            return true;
  87.     //        return false;
  88.     //    }
  89.  
  90.     }
  91.     class Edition
  92.     {
  93.         protected string Name { get; set; }
  94.         protected DateTime date_of_publish { get; set; }
  95.         protected int ID
  96.         {
  97.             get
  98.             {
  99.                 return ID;
  100.             }
  101.             set
  102.             {
  103.                 ID = value;
  104.             }
  105.         }
  106.        
  107.  
  108.         public Edition(string name, DateTime date, int id)
  109.         {
  110.             Name = name;
  111.             date_of_publish = date;
  112.             ID = id;
  113.         }
  114.         public Edition()
  115.         {
  116.  
  117.         }
  118.        
  119.         //public string Name
  120.         //{
  121.         //    get => Name;
  122.         //    set => Name = value;
  123.         //}
  124.         //public DateTime PublishDate
  125.         //{
  126.         //    get => publishDate;
  127.         //    set => publishDate = value;
  128.         //}
  129.       //  public virtual string ToShortString()//виртуальный метод toShortString
  130.         //   => $"Name = {Name}"//для формирования строки без списка статей но  со значением среднего рейтинга статей
  131.           // + $"\nPublishDate = {PublishDate}";
  132.           // + $"\nEdition = {Edition}";
  133.     }
  134.     class Magazine
  135.     {
  136.         private string name;
  137.         private Frequency frequency;
  138.         private DateTime publishDate;
  139.         private int edition;
  140.         private Article[] articles;
  141.  
  142.         public Magazine(
  143.             string name,
  144.             Frequency frequency,
  145.             DateTime publishDate,
  146.             int edition)//конструктор для инициализации соотв-х полей класса
  147.         {
  148.             this.name = name;
  149.             this.frequency = frequency;
  150.             this.publishDate = publishDate;
  151.             this.edition = edition;
  152.         }
  153.  
  154.         public Magazine()//конструткор без параметров ,иницал-й по умолчанию
  155.         {
  156.         }
  157.  
  158.         public string Name//свойство типа string
  159.         {
  160.             get => name;
  161.             set => name = value;
  162.         }
  163.  
  164.         public Frequency Frequency
  165.         {
  166.             get => frequency;
  167.             set => frequency = value;
  168.         }
  169.  
  170.         public DateTime PublishDate
  171.         {
  172.             get => publishDate;
  173.             set => publishDate = value;
  174.         }
  175.  
  176.         public int Edition
  177.         {
  178.             get => edition;
  179.             set => edition = value;
  180.         }
  181.  
  182.         public Article[] Articles
  183.         {
  184.             get => articles;
  185.             set => articles = value;
  186.         }
  187.  
  188.         /*  public double GetAvgRating()
  189.            {
  190.                get {
  191.                    double result = 0;
  192.                    int count = 0;
  193.                    foreach (var item in Articles)
  194.                    {
  195.                        result += item.Rating;
  196.                        count++;
  197.                    }
  198.                    result /= count;
  199.                    if (count != 0) return result;
  200.                    else return 0;
  201.                }
  202.            }*/
  203.         public bool this[Frequency frequency]//индексатор булевского типа,true если значение поля равно индексу
  204.         {
  205.             get => Frequency == frequency;
  206.         }
  207.  
  208.         public void AddArticles(params Article[] newArticles)//метод для добававления элементов в список статей в журнале
  209.         {
  210.             if (newArticles?.Length == 0)
  211.             {
  212.                 return;
  213.             }
  214.  
  215.             if (articles == null)
  216.             {
  217.                 articles = Array.Empty<Article>();
  218.             }
  219.  
  220.             int oldLength = articles.Length;
  221.             Array.Resize(ref articles, articles.Length + newArticles.Length);
  222.             Array.Copy(newArticles, 0, articles, oldLength, newArticles.Length);
  223.         }
  224.  
  225.         public override string ToString()//перегруженная версия для формирования строки со значениями всех полей класса сос писокм статей
  226.         {
  227.             StringBuilder stroka = new StringBuilder();
  228.             foreach (var strk in Articles)
  229.             {
  230.                 stroka.Append($"{strk}");
  231.             }
  232.             return string.Format("\nName: {0}\nFrequency: {1}\nPublishDate: {2, 7} \nEdition: {3, 6}\n\nArticles: {4}", name, Frequency, PublishDate, Edition, stroka);
  233.         }
  234.         public virtual string ToShortString()//виртуальный метод toShortString
  235.             => $"Name = {Name}"//для формирования строки без списка статей но  со значением среднего рейтинга статей
  236.             + $"\nFrequency = {Frequency}"
  237.             + $"\nPublishDate = {PublishDate}"
  238.             + $"\nEdition = {Edition}";
  239.         // + $"\nAvg rating = {GetAvgRating()}";
  240.     }
  241. }
  242.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement