daily pastebin goal
55%
SHARE
TWEET

Untitled

a guest Dec 7th, 2017 54 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.Threading;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace ООП_6лаба
  9. {
  10.  
  11.     //public enum Status { request, mas1, mas2 };
  12.  
  13.     public class Tehnic
  14.     {
  15.         public string Name;
  16.         public int Cost;
  17.         public Tehnic(string name, int cost)
  18.         {
  19.             Name = name;
  20.             Cost = cost;
  21.         }
  22.         public override string ToString()
  23.         {
  24.             return Name;
  25.         }
  26.     };
  27.  
  28.     public class Visiter
  29.     {
  30.         static Random rnd = new Random();
  31.         //Множество с заказанными блюдами
  32.         public HashSet<Tehnic> order;
  33.         //Имя посетителя
  34.         public string Name;
  35.         //Статус посетителя
  36.         public string Status;
  37.         public bool Priority;
  38.         //Стоимость заказа
  39.         public int orderCost
  40.         {
  41.             set; get;
  42.         }
  43.         //Во сколько вошел в кафе
  44.         public DateTime timeIn
  45.         { set; get; }
  46.  
  47.         public Visiter()
  48.         {  //вновь вошедший посетитель получает статус выбирающего блюда
  49.             Status = "request";
  50.             //Даем ему некоторое имя
  51.             Name = "Заявка_" + rnd.Next(1, 300).ToString();
  52.             if (rnd.Next(1, 100) > 80) Priority = true;
  53.             else Priority = false;
  54.             order = new HashSet<Tehnic>();
  55.         }
  56.         void calcOrderCost()
  57.         {
  58.             orderCost = 0;
  59.             if (Status != "request")
  60.                 foreach (Tehnic d in order)
  61.                     orderCost += d.Cost;
  62.  
  63.         }
  64.         //Строка с информацией о посетителе (Имя, статус, заказ)
  65.         public void info()
  66.         {
  67.             Console.Write(Name + " " + " со статусом " + Status + " и приоритетом " + Priority + ". Заказ: ");
  68.             foreach (Tehnic d in order)
  69.                 Console.Write(d.ToString() + " ");
  70.             Console.WriteLine();
  71.  
  72.         }
  73.  
  74.         public void genOrder(List<Tehnic> price)
  75.         {
  76.             do
  77.             {//выбирает технику на ремонт из списка
  78.                 foreach (Tehnic d in price)
  79.                     if (rnd.Next() % 2 == 0) order.Add(d);
  80.             } while (order.Count == 0);
  81.             calcOrderCost();
  82.  
  83.  
  84.         }
  85.     }
  86.  
  87.     public class Workshop
  88.     {
  89.         public List<Tehnic> price = new List<Tehnic>();
  90.         public List<Visiter> visiters = new List<Visiter>();
  91.         public List<Visiter> master1 = new List<Visiter>();
  92.         public List<Visiter> true1 = new List<Visiter>();
  93.         public List<Visiter> true2 = new List<Visiter>();
  94.         public List<Visiter> master2 = new List<Visiter>();
  95.         public DateTime curTime;
  96.         Random rnd = new Random();
  97.         //количество уже покинувших (обслуженных) посетителей
  98.         public int VisClose1, VisClose2;
  99.  
  100.  
  101.  
  102.         public Workshop()
  103.         {
  104.             //меню по умолчанию
  105.             price.Add(new Tehnic("микроволновка", 300));
  106.             price.Add(new Tehnic("миксер", 150));
  107.             price.Add(new Tehnic("мультиварка", 200));
  108.             price.Add(new Tehnic("холодильник", 400));
  109.             price.Add(new Tehnic("блендер", 250));
  110.         }
  111.  
  112.         public void genVisiters()
  113.         {
  114.             Visiter v = new Visiter();
  115.             visiters.Add(v);
  116.             v.timeIn = DateTime.Now;
  117.             v.genOrder(price);
  118.  
  119.         }
  120.  
  121.         public void printVisiters()
  122.         {
  123.             foreach (Visiter d in visiters)
  124.             {
  125.                 d.info();
  126.             }
  127.         }
  128.  
  129.         public void printVisitersM1()
  130.         {
  131.             foreach (Visiter d in true1)
  132.             {
  133.                 d.info();
  134.             }
  135.             foreach (Visiter d in master1)
  136.             {
  137.                 d.info();
  138.             }
  139.         }
  140.  
  141.         public void printVisitersM2()
  142.         {
  143.             foreach (Visiter d in true2)
  144.             {
  145.                 d.info();
  146.             }
  147.             foreach (Visiter d in master2)
  148.             {
  149.                 d.info();
  150.             }
  151.         }
  152.  
  153.         public void Mas1Job()
  154.         {
  155.             if (true1.Count > 0)
  156.             {
  157.                 {
  158.                     if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
  159.                     {
  160.                         this.VisClose1++;
  161.                         true1.Remove(true1[0]);
  162.                         this.curTime = DateTime.Now;
  163.                     }
  164.                 }
  165.             }
  166.             else if (master1.Count > 0)
  167.             {
  168.                 {
  169.                     if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
  170.                     {
  171.                         this.VisClose1++;
  172.                         master1.Remove(master1[0]);
  173.                         this.curTime = DateTime.Now;
  174.                     }
  175.                 }
  176.             }
  177.         }
  178.  
  179.         public void Mas2Job()
  180.         {
  181.             if (true2.Count > 0)
  182.             {
  183.                 {
  184.                     if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
  185.                     {
  186.                         this.VisClose2++;
  187.                         true1.Remove(true2[0]);
  188.                         this.curTime = DateTime.Now;
  189.                     }
  190.                 }
  191.             }
  192.             else if (master2.Count > 0)
  193.             {
  194.                 {
  195.                     if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
  196.                     {
  197.                         this.VisClose2++;
  198.                         master1.Remove(master2[0]);
  199.                         this.curTime = DateTime.Now;
  200.                     }
  201.                 }
  202.             }
  203.         }
  204.  
  205.         void manageVisiter(Visiter v)
  206.         {
  207.             {
  208.                 //Новый статус - распределение по мастерам              
  209.                 if (/*Convert.ToInt32(v.Name[7]) % 2 == 0*/master1.Count < master2.Count || master1.Count == 0)
  210.                 {
  211.                     v.Status = "master1";
  212.                     if (v.Priority == false)
  213.                         master1.Add(v);
  214.                     else true1.Add(v);
  215.                     visiters.Remove(v);
  216.  
  217.                 }
  218.  
  219.                 else //if (/*Convert.ToInt32(v.Name[7]) % 2 == 1*/master2.Count < master1.Count)
  220.                 {
  221.                     v.Status = "master2";
  222.                     if (v.Priority == false)
  223.                         master2.Add(v);
  224.                     else true2.Add(v);
  225.                     visiters.Remove(v);
  226.  
  227.                 }
  228.             }
  229.  
  230.         }
  231.  
  232.         public void manageOrgers()
  233.         {
  234.             //пробегаем по всем посетителям, проверяем и обслуживаем каждого
  235.             for (int i = 0; i < visiters.Count; i++)
  236.                 manageVisiter(visiters[i]);
  237.  
  238.         }
  239.     }
  240.  
  241.  
  242.  
  243.         class Program
  244.     {
  245.  
  246.         static void Main(string[] args)
  247.         {
  248.             List<Visiter> visiters = new List<Visiter>();
  249.             List<Visiter> master1 = new List<Visiter>();
  250.             List<Visiter> master2 = new List<Visiter>();
  251.             Workshop work = new Workshop();
  252.             work.curTime = DateTime.Now;
  253.             work.VisClose1 = 0;
  254.             work.VisClose2 = 0;
  255.             int num = 0;
  256.             Random rnd = new Random();
  257.  
  258.             while (true)
  259.             {
  260.                 if (num <= 20)
  261.                 {
  262.                     work.genVisiters();
  263.                     num++;
  264.                 }
  265.                     Console.WriteLine("Время: " + DateTime.Now);
  266.                    
  267.                 Console.WriteLine("Новые посетители:");
  268.                 work.printVisiters();
  269.                 Console.WriteLine();
  270.                 Console.WriteLine("Мастер 1. Обслужено заказов: " + work.VisClose1);
  271.                 work.printVisitersM1();
  272.                 work.Mas1Job();
  273.                 Console.WriteLine();
  274.                 Console.WriteLine("Мастер 2. Обслужено заказов: " + work.VisClose2);
  275.                 work.printVisitersM2();
  276.                 work.Mas2Job();
  277.  
  278.                 work.manageOrgers();
  279.                 Thread.Sleep(rnd.Next(1000, 3000));
  280.                 Console.Clear();
  281.             }          
  282.             Console.ReadKey();
  283.         }
  284.     }
  285. }
RAW Paste Data
Top