GSRecords.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using System.Collections;
  5. namespace Lab18.Models
  6. {
  7. public class GSRecords
  8. {
  9. /// <summary>
  10. /// Массив объектов для связи
  11. /// </summary>
  12. GSLink[] gs_Links;
  13. /// <summary>
  14. /// Максимальное количество регистраций
  15. /// </summary>
  16. int max_counts;
  17. /// <summary>
  18. /// текущее количество регистраций
  19. /// </summary>
  20. int cur_counts;
  21. public GSLink[] Gs_Links
  22. {
  23. get { return gs_Links; }
  24. }
  25. //констурктор
  26. public GSRecords(int max_counts)
  27. {
  28. this.max_counts = max_counts;
  29. cur_counts = 0;
  30. //выделение памяти под массив ссылок
  31. gs_Links = new GSLink[max_counts];
  32. //память под объекты будет выделяться при регистрации поставщиков
  33. }
  34. //проверка, существует ли регистрация поставщика
  35. public bool GS_Find(int num_sp, int num_goods)
  36. {
  37. GSLink temp = new GSLink(num_sp, num_goods);
  38. int i = 0;
  39. while ((i < cur_counts) && !temp.Equals(gs_Links[i])) i++;
  40. return i != cur_counts;
  41. }
  42. /// <summary>
  43. /// Регистрация желания поставщика продавать товар
  44. /// </summary>
  45. /// <returns><c>true</c>, if record was added, <c>false</c> otherwise.</returns>
  46. /// <param name="num_sp">ID поставщика</param>
  47. /// <param name="num_gsr">ID товара</param>
  48. public bool AddRecord(int num_sp, int num_gsr)
  49. {
  50. if (GS_Find(num_sp, num_gsr) || (cur_counts == max_counts))
  51. {
  52. // Добавить поставщика нельзя - либо он уже есть, либо
  53. // нет памяти
  54. return false;
  55. }
  56. gs_Links[cur_counts] = new GSLink(num_sp, num_gsr);
  57. cur_counts++;
  58. return true;
  59. }
  60. /// <summary>
  61. /// Печать информации обо всех регистрациях поставщиков
  62. /// </summary>
  63. public void Display()
  64. {
  65. Console.WriteLine("Поставщик " + "товар " + "количество ");
  66. for (int i = 0; i < cur_counts; i++)
  67. {
  68. Console.WriteLine(
  69. "{0,4:d}{1,10:d}{2,9:d}",
  70. gs_Links[i].S_id,
  71. gs_Links[i].G_id,
  72. gs_Links[i].Quantity);
  73. }
  74. }
  75. /// <summary>
  76. /// Добавляет количество товару поставщика
  77. /// </summary>
  78. /// <returns><c>true</c>, if supply was added, <c>false</c> otherwise.</returns>
  79. /// <param name="goodID">Good identifier.</param>
  80. /// <param name="count">Count.</param>
  81. /// <param name="supplierID">Supplier identifier.</param>
  82. public bool AddSupply(int goodID, int count, int supplierID)
  83. {
  84. GSLink compareObj = new GSLink(supplierID, goodID);
  85. for (int i = 0; i < cur_counts; i++)
  86. {
  87. if (gs_Links[i].Equals(compareObj))
  88. {
  89. // Найден объект связи поставщика с товаром
  90. gs_Links[i].Quantity += count;
  91. return true;
  92. }
  93. }
  94. return false;
  95. }
  96. /// <summary>
  97. /// Возвращает информацию о товарах и их количествах
  98. /// </summary>
  99. /// <returns>The max data.</returns>
  100. public void GetGoodCountsData(out int goodID, out int goodCount)
  101. {
  102. var data = gs_Links.Where(l => l != null).GroupBy(l => l.G_id).Select(cl => new
  103. {
  104. GoodID = cl.Key,
  105. GoodCount = cl.Sum(i => i.Quantity)
  106. }).OrderByDescending(i => i.GoodCount).First();
  107. goodID = data.GoodID;
  108. goodCount = data.GoodCount;
  109. }
  110. }
  111. }