Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace TPhome
  7. {
  8. class Person
  9. {
  10. string name;//закрытое поле типа string, в котором хранится имя
  11. string familia;//закрытое поле типа string, в котором хранится фамилия;
  12. DateTime birthday;//закрытое поле типа System.DateTime для даты рождения
  13. public Person(string name, string familia, DateTime date)//конструктор c тремя параметрами типа string, string, DateTime дляинициализации всех полей класса;
  14. {
  15. this.name = name;
  16. this.familia = familia;
  17. this.birthday = date;
  18. }
  19. public Person()//конструктор без параметров, инициализирующий все поля класса некоторыми значениями по умолчанию.
  20. {
  21. birthday = new DateTime(2000, 10, 10);
  22. name = "Иван";
  23. familia = "Иванов";
  24. }
  25.  
  26. public string Name//свойство типа string для доступа к полю с именем посредством методов set и get
  27. {
  28. set { name = value; }
  29. get { return name; }
  30. }
  31. public string Familia//свойство типа string для доступа к полю с фамилием посредством методов set и get
  32. {
  33. set { familia = value; }
  34. get { return familia; }
  35. }
  36. public DateTime Birthday//свойство типа string для доступа к полю с датой рождением посредством методов set и get
  37. {
  38. set { birthday = value; }
  39. get { return birthday; }
  40. }
  41. public int Year//свойство типа string для доступа к полю с годом посредством методов set и get.AddYears года
  42. {
  43. set { birthday = birthday.AddYears(value - birthday.Year); }
  44. get { return birthday.Year; }
  45. }
  46. public override string ToString() { return "Имя " + this.name + "\nФамилия " + this.familia + "\nДата рождения " + birthday.ToString("D"); }//override виртуального метода string ToString() для формирования строки со значениями всех полей класса;
  47. public string ToShortString() { return "Имя " + this.name + "\nФамилия " + this.familia; }//виртуальный метод string ToShortString(), который возвращает строку, содержащую только имя и фамилию.
  48. }
  49. enum Frequency// Тип Frequency определен перечислением(enum).Значения Weekly, Monthly, Yearly
  50. {
  51. weekly, monthly, yearly
  52. }
  53. class Article
  54. {
  55. public Person avtor;//свойство типа Person, в котором хранятся данные автора статьи
  56. public string title;//свойство типа string для названия статьи
  57. public double rait;//свойство типа double для рейтинга статьи
  58. //класс Article который имеет 3 свойвства описанные выше на стр 55,56,57
  59. public Article()//конструктор без параметров, инициализирующий все свойства класса некоторыми значениями по умолчанию
  60. {
  61. avtor = new Person();
  62. title = "Статья по программированию";
  63. rait = 5;
  64. }
  65. public Article(Person avtor, string title, double raiting)//конструктор c параметрами типа Person, string, double для инициализации всех свойств класса
  66. {
  67. this.avtor = avtor;
  68. this.title = title;
  69. this.rait = raiting;
  70. }
  71. public double Raiting//свойство типа doyble для доступа к полю с рейтингом посредством методов set и get
  72. {
  73. set { rait = value; }
  74. get { return rait; }
  75. }
  76. public override string ToString() { return this.avtor.ToString() + "\nНазвание статьи " + this.title + "\nРейтинг статьи " + this.rait + "\n"; }//override версия виртуального метода string ToString() для формирования строки со значениями всех свойств класса.
  77. }
  78. //класс Magazine
  79. class Magazine
  80. {
  81. string titlemag;//закрытое поле типа string c названием журнала;
  82. Frequency pereodichnost;//закрытое поле типа Frequency с информацией о периодичности выхода журнала;
  83. DateTime datavihoda;//закрытое поле типа DateTime c датой выхода журнала;
  84. int tiraj;//закрытое поле типа int с тиражом журнала;
  85. private readonly List<Article> stati = new List<Article>();//закрытое поле типа Article со списком статей в журнале
  86. public Magazine()//конструктор без параметров, инициализирующий поля класса значениями по умолчанию.
  87. {
  88. titlemag = "Цифровой мир";
  89. pereodichnost = Frequency.weekly;
  90. datavihoda = DateTime.Now;
  91. tiraj = 1;
  92. }
  93. public Magazine(string title, Frequency periodoch, DateTime date, int tir)//конструктор с параметрами типа string, Frequency, DateTime, int для инициализации соответствующих полей класса;
  94. {
  95. this.titlemag = title;
  96. this.pereodichnost = periodoch;
  97. this.datavihoda = date;
  98. this.tiraj = tir;
  99. }
  100. public string Title//свойство типа string для доступа к полю с заголовкомом посредством методов set и get
  101. {
  102. set { titlemag = value; }
  103. get { return titlemag; }
  104. }
  105. public Frequency Period//свойство типа Frequency для доступа к полю с периодичностью посредством методов set и get
  106. {
  107. set { pereodichnost = value; }
  108. get { return pereodichnost; }
  109. }
  110. public DateTime Date//свойство типа DateTime для доступа к полю с временем посредством методов set и get
  111. {
  112. set { datavihoda = value; }
  113. get { return datavihoda; }
  114. }
  115. public int Tiraj//свойство типа int для доступа к полю с тиражом посредством методов set и get
  116. {
  117. set { tiraj = value; }
  118. get { return tiraj; }
  119. }
  120. public Article[] Stati//свойство типа Article для доступа к полю с статьями посредством методов set и get
  121. {
  122. get { return stati.ToArray(); }
  123. }
  124. public double srreit//свойство типа double ( только с методом get), в котором вычисляется среднее значение рейтинга в списке статей;
  125. {
  126. get
  127. {
  128. if (stati.Count == 0)
  129. return 0;
  130. else
  131. {
  132. double sumball = 0;
  133. foreach (Article a in stati)
  134. sumball += a.rait;
  135. return sumball / stati.Count;
  136. }
  137. }
  138. }
  139. public bool this[Frequency index]//индексатор булевского типа (только с методом get) с одним параметром типа Frequency; значение индексатора равно true, если значение поля типа Frequency совпадает со значением индекса, и false в противном случае;
  140. {
  141. get { return this.pereodichnost == index; }
  142. }
  143. public void AddArticles(params Article[] stati)//метод void AddArticles (params Article[]) для добавления элементов в список статей в журнале;
  144. {
  145. this.stati.AddRange(stati);
  146. }
  147. public override string ToString()//override виртуального метода string ToString() для формирования строки со значениями всех полей класса, включая список статей;
  148. {
  149. return String.Format("Название журнала: {0}\nПериодичность: {1}\nДата выхода: {2}\nТираж: {3}\nСтатьи: \n{4}", titlemag, pereodichnost, datavihoda.ToString("D"), tiraj, string.Join(",", stati));
  150. }
  151. public string ToShortString()//• виртуальный метод string ToShortString(), который формирует строку со значениями всех полей класса без списка статей, но со значением среднего рейтинга статей.
  152. {
  153. return String.Format("Название журнала: {0}\nПериодичность: {1}\nДата выхода: {2}\nТираж: {3}\nСредний рейтинг статей: {4}", titlemag, pereodichnost, datavihoda.ToString("D"), tiraj, srreit);
  154. }
  155. }
  156. class Program
  157. {
  158. static void Main(string[] args)
  159. {
  160. Magazine mag = new Magazine();//объект типа Magazine
  161. mag.ToShortString();
  162. Console.WriteLine(mag[Frequency.monthly]);//вывод значений индексатора для [Frequency.monthly]
  163. Console.WriteLine(mag[Frequency.weekly]);//вывод значений индексатора для [Frequency.weekly]
  164. Console.WriteLine(mag[Frequency.yearly]);//вывод значений индексатора для [Frequency.yearly]
  165. mag.AddArticles(new Article(new Person("Алексей", "Сергеев", new DateTime(1999, 2, 3)), "Новости робототехники", 5), new Article(new Person("Антон", "Доронин", new DateTime(1985, 5, 16)), "Новости C++", 4.3), new Article(new Person("Руслан", "Цветков", new DateTime(2001, 3, 9)), "Новости C#", 4.8));// добавляем элемент в список статей в журнала
  166. Console.WriteLine(mag.ToString());//выводим как строку постредством метода ToString
  167. Console.WriteLine("Количество времени на операции в секундах:\n");
  168. Article[] odnomer = new Article[10];//создаем одномерный массив
  169. Article[,] dvymer = new Article[2, 5];//создаем двумерный прямоугольный массив
  170. Article[][] stypench = new Article[4][];//создаем двумерный ступенчатый массив
  171. stypench[0] = new Article[1];//заполеяем ступенчатый массив
  172. stypench[1] = new Article[2];//заполеяем ступенчатый массив
  173. stypench[2] = new Article[3];//заполеяем ступенчатый массив
  174. stypench[3] = new Article[4];//заполеяем ступенчатый массив
  175. Console.WriteLine("Одномерный массив\n");
  176. long ms = DateTime.Now.Ticks;//Возвращает число тактов, которое представляет дату и время этого экземпляра.
  177. for (int i = 0; i < 10; i++)
  178. odnomer[i] = new Article();//заполеяем массив
  179. for (int i = 0; i < 10; i++)
  180. Console.WriteLine(odnomer[i]);//выводим массив
  181. Console.WriteLine("Затраченное время {0}с", (DateTime.Now.Ticks - ms) / 1000.0);//выводим время для одномерного массива
  182. Console.WriteLine("Двумерный массив\n");
  183. ms = DateTime.Now.Ticks; //Возвращает число тактов, которое представляет дату и время этого экземпляра.
  184. for (int i = 0; i < 2; i++)
  185. for (int j = 0; j < 5; j++)
  186. dvymer[i, j] = new Article();//заполеяем массив
  187. for (int i = 0; i < 2; i++)
  188. for (int j = 0; j < 5; j++)
  189. Console.WriteLine(dvymer[i, j]);//выводим массив
  190. Console.WriteLine("Затраченное время {0}с", (DateTime.Now.Ticks - ms) / 1000.0);//выводим время для двумерного массива Console.WriteLine("Ступенчатый массив\n");
  191. ms = DateTime.Now.Ticks;//Возвращает число тактов, которое представляет дату и время этого экземпляра.
  192. for (int i = 0; i < 4; i++)
  193. for (int j = 0; j < i + 1; j++)
  194. stypench[i][j] = new Article();//заполеяем массив
  195. for (int i = 0; i < 4; i++)
  196. for (int j = 0; j < i + 1; j++)
  197. Console.WriteLine(stypench[i][j]);//выводим массив
  198. Console.WriteLine("Затраченное время {0}с", (DateTime.Now.Ticks - ms) / 1000.0);//выводим время для ступенчатого массива
  199. Console.ReadLine();
  200. }
  201. }
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement