Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Threading;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ООП_6лаба
- {
- //public enum Status { request, mas1, mas2 };
- public class Tehnic
- {
- public string Name;
- public int Cost;
- public Tehnic(string name, int cost)
- {
- Name = name;
- Cost = cost;
- }
- public override string ToString()
- {
- return Name;
- }
- };
- public class Visiter
- {
- static Random rnd = new Random();
- //Множество с заказанными блюдами
- public HashSet<Tehnic> order;
- //Имя посетителя
- public string Name;
- //Статус посетителя
- public string Status;
- public bool Priority;
- //Стоимость заказа
- public int orderCost
- {
- set; get;
- }
- //Во сколько вошел в кафе
- public DateTime timeIn
- { set; get; }
- public Visiter()
- { //вновь вошедший посетитель получает статус выбирающего блюда
- Status = "request";
- //Даем ему некоторое имя
- Name = "Заявка_" + rnd.Next(1, 300).ToString();
- if (rnd.Next(1, 100) > 80) Priority = true;
- else Priority = false;
- order = new HashSet<Tehnic>();
- }
- void calcOrderCost()
- {
- orderCost = 0;
- if (Status != "request")
- foreach (Tehnic d in order)
- orderCost += d.Cost;
- }
- //Строка с информацией о посетителе (Имя, статус, заказ)
- public void info()
- {
- Console.Write(Name + " " + " со статусом " + Status + " и приоритетом " + Priority + ". Заказ: ");
- foreach (Tehnic d in order)
- Console.Write(d.ToString() + " ");
- Console.WriteLine();
- }
- public void genOrder(List<Tehnic> price)
- {
- do
- {//выбирает технику на ремонт из списка
- foreach (Tehnic d in price)
- if (rnd.Next() % 2 == 0) order.Add(d);
- } while (order.Count == 0);
- calcOrderCost();
- }
- }
- public class Workshop
- {
- public List<Tehnic> price = new List<Tehnic>();
- public List<Visiter> visiters = new List<Visiter>();
- public List<Visiter> master1 = new List<Visiter>();
- public List<Visiter> true1 = new List<Visiter>();
- public List<Visiter> true2 = new List<Visiter>();
- public List<Visiter> master2 = new List<Visiter>();
- public DateTime curTime;
- Random rnd = new Random();
- //количество уже покинувших (обслуженных) посетителей
- public int VisClose1, VisClose2;
- public Workshop()
- {
- //меню по умолчанию
- price.Add(new Tehnic("микроволновка", 300));
- price.Add(new Tehnic("миксер", 150));
- price.Add(new Tehnic("мультиварка", 200));
- price.Add(new Tehnic("холодильник", 400));
- price.Add(new Tehnic("блендер", 250));
- }
- public void genVisiters()
- {
- Visiter v = new Visiter();
- visiters.Add(v);
- v.timeIn = DateTime.Now;
- v.genOrder(price);
- }
- public void printVisiters()
- {
- foreach (Visiter d in visiters)
- {
- d.info();
- }
- }
- public void printVisitersM1()
- {
- foreach (Visiter d in true1)
- {
- d.info();
- }
- foreach (Visiter d in master1)
- {
- d.info();
- }
- }
- public void printVisitersM2()
- {
- foreach (Visiter d in true2)
- {
- d.info();
- }
- foreach (Visiter d in master2)
- {
- d.info();
- }
- }
- public void Mas1Job()
- {
- if (true1.Count > 0)
- {
- {
- if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
- {
- this.VisClose1++;
- true1.Remove(true1[0]);
- this.curTime = DateTime.Now;
- }
- }
- }
- else if (master1.Count > 0)
- {
- {
- if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
- {
- this.VisClose1++;
- master1.Remove(master1[0]);
- this.curTime = DateTime.Now;
- }
- }
- }
- }
- public void Mas2Job()
- {
- if (true2.Count > 0)
- {
- {
- if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
- {
- this.VisClose2++;
- true1.Remove(true2[0]);
- this.curTime = DateTime.Now;
- }
- }
- }
- else if (master2.Count > 0)
- {
- {
- if ((DateTime.Now - this.curTime).TotalSeconds > rnd.Next(5, 10))
- {
- this.VisClose2++;
- master1.Remove(master2[0]);
- this.curTime = DateTime.Now;
- }
- }
- }
- }
- void manageVisiter(Visiter v)
- {
- {
- //Новый статус - распределение по мастерам
- if (/*Convert.ToInt32(v.Name[7]) % 2 == 0*/master1.Count < master2.Count || master1.Count == 0)
- {
- v.Status = "master1";
- if (v.Priority == false)
- master1.Add(v);
- else true1.Add(v);
- visiters.Remove(v);
- }
- else //if (/*Convert.ToInt32(v.Name[7]) % 2 == 1*/master2.Count < master1.Count)
- {
- v.Status = "master2";
- if (v.Priority == false)
- master2.Add(v);
- else true2.Add(v);
- visiters.Remove(v);
- }
- }
- }
- public void manageOrgers()
- {
- //пробегаем по всем посетителям, проверяем и обслуживаем каждого
- for (int i = 0; i < visiters.Count; i++)
- manageVisiter(visiters[i]);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- List<Visiter> visiters = new List<Visiter>();
- List<Visiter> master1 = new List<Visiter>();
- List<Visiter> master2 = new List<Visiter>();
- Workshop work = new Workshop();
- work.curTime = DateTime.Now;
- work.VisClose1 = 0;
- work.VisClose2 = 0;
- int num = 0;
- Random rnd = new Random();
- while (true)
- {
- if (num <= 20)
- {
- work.genVisiters();
- num++;
- }
- Console.WriteLine("Время: " + DateTime.Now);
- Console.WriteLine("Новые посетители:");
- work.printVisiters();
- Console.WriteLine();
- Console.WriteLine("Мастер 1. Обслужено заказов: " + work.VisClose1);
- work.printVisitersM1();
- work.Mas1Job();
- Console.WriteLine();
- Console.WriteLine("Мастер 2. Обслужено заказов: " + work.VisClose2);
- work.printVisitersM2();
- work.Mas2Job();
- work.manageOrgers();
- Thread.Sleep(rnd.Next(1000, 3000));
- Console.Clear();
- }
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement