123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- using System;
- using System.Linq;
- using System.Collections.Generic;
- using System.Collections;
- namespace Lab18.Models
- {
- public class GSRecords
- {
- /// <summary>
- /// Массив объектов для связи
- /// </summary>
- GSLink[] gs_Links;
- /// <summary>
- /// Максимальное количество регистраций
- /// </summary>
- int max_counts;
- /// <summary>
- /// текущее количество регистраций
- /// </summary>
- int cur_counts;
- public GSLink[] Gs_Links
- {
- get { return gs_Links; }
- }
- //констурктор
- public GSRecords(int max_counts)
- {
- this.max_counts = max_counts;
- cur_counts = 0;
- //выделение памяти под массив ссылок
- gs_Links = new GSLink[max_counts];
- //память под объекты будет выделяться при регистрации поставщиков
- }
- //проверка, существует ли регистрация поставщика
- public bool GS_Find(int num_sp, int num_goods)
- {
- GSLink temp = new GSLink(num_sp, num_goods);
- int i = 0;
- while ((i < cur_counts) && !temp.Equals(gs_Links[i])) i++;
- return i != cur_counts;
- }
- /// <summary>
- /// Регистрация желания поставщика продавать товар
- /// </summary>
- /// <returns><c>true</c>, if record was added, <c>false</c> otherwise.</returns>
- /// <param name="num_sp">ID поставщика</param>
- /// <param name="num_gsr">ID товара</param>
- public bool AddRecord(int num_sp, int num_gsr)
- {
- if (GS_Find(num_sp, num_gsr) || (cur_counts == max_counts))
- {
- // Добавить поставщика нельзя - либо он уже есть, либо
- // нет памяти
- return false;
- }
- gs_Links[cur_counts] = new GSLink(num_sp, num_gsr);
- cur_counts++;
- return true;
- }
- /// <summary>
- /// Печать информации обо всех регистрациях поставщиков
- /// </summary>
- public void Display()
- {
- Console.WriteLine("Поставщик " + "товар " + "количество ");
- for (int i = 0; i < cur_counts; i++)
- {
- Console.WriteLine(
- "{0,4:d}{1,10:d}{2,9:d}",
- gs_Links[i].S_id,
- gs_Links[i].G_id,
- gs_Links[i].Quantity);
- }
- }
- /// <summary>
- /// Добавляет количество товару поставщика
- /// </summary>
- /// <returns><c>true</c>, if supply was added, <c>false</c> otherwise.</returns>
- /// <param name="goodID">Good identifier.</param>
- /// <param name="count">Count.</param>
- /// <param name="supplierID">Supplier identifier.</param>
- public bool AddSupply(int goodID, int count, int supplierID)
- {
- GSLink compareObj = new GSLink(supplierID, goodID);
- for (int i = 0; i < cur_counts; i++)
- {
- if (gs_Links[i].Equals(compareObj))
- {
- // Найден объект связи поставщика с товаром
- gs_Links[i].Quantity += count;
- return true;
- }
- }
- return false;
- }
- /// <summary>
- /// Возвращает информацию о товарах и их количествах
- /// </summary>
- /// <returns>The max data.</returns>
- public void GetGoodCountsData(out int goodID, out int goodCount)
- {
- var data = gs_Links.Where(l => l != null).GroupBy(l => l.G_id).Select(cl => new
- {
- GoodID = cl.Key,
- GoodCount = cl.Sum(i => i.Quantity)
- }).OrderByDescending(i => i.GoodCount).First();
- goodID = data.GoodID;
- goodCount = data.GoodCount;
- }
- }
- }
|