Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Simulator
- {
- class BL_Department
- {
- DataProcessing DataProcess;
- OfficeClerk clerk;
- Task[] _arrFreeClerk;
- bool search;
- int _numberClerks;
- public int NumberClerks
- {
- get
- {
- return _numberClerks;
- }
- set
- {
- if (value <= 0 )
- {
- _numberClerks = Inquiry("clerks");
- }
- else
- _numberClerks = value;
- }
- }
- int _numberPeopleInLine;
- public int NumberPeopleInLine
- {
- get
- {
- return _numberPeopleInLine;
- }
- set
- {
- if (value <= 0 && search == true)
- {
- _numberPeopleInLine = Inquiry("clients");
- }
- else
- _numberPeopleInLine = value;
- }
- }
- int[] _arrTimeReceptionPerClerk { get; set; }
- public BL_Department(int numberClients, int numberClerks)
- {
- clerk = new OfficeClerk();
- DataProcess = new DataProcessing();
- search = true;
- NumberPeopleInLine = numberClients;
- NumberClerks = numberClerks;
- _arrTimeReceptionPerClerk = new int[NumberClerks];
- _arrFreeClerk = new Task[NumberClerks];
- }
- int Inquiry (string name)
- {
- int data;
- do
- {
- Console.WriteLine($"Entered number of {name} is not correct.Reentered please:");
- data = int.Parse(Console.ReadLine());
- }
- while (data <= 0);
- return data;
- }
- //It imitates the beginning of the work of the department, when initially all the officials are free, and also checks if there
- //are fewer clients than officials and immediately displays a message that there is enough staff.
- public void Open_Department ()
- {
- if (NumberPeopleInLine > NumberClerks)
- {
- for (int indexClerk = 0; indexClerk < NumberClerks; indexClerk++)
- {
- NextClient(indexClerk);
- }
- SearchFreeClerk();
- }
- else
- Console.WriteLine($"The number of officials in the amount {NumberClerks} is sufficient to serve a given number of people.");
- }
- void SearchFreeClerk()
- {
- while(NumberPeopleInLine != 0)
- {
- for (int indexClerk = 0; indexClerk < NumberClerks; indexClerk++)
- {
- if (_arrFreeClerk[indexClerk].IsCompleted)
- {
- NextClient(indexClerk);
- }
- }
- }
- Close_Department();
- }
- //Accesses the "OfficeClerk" class to start a thread ("enter client") and set the service time.
- void NextClient(int indexClerk)
- {
- _arrFreeClerk[indexClerk] = clerk.ServiceClerkAsync();
- _arrTimeReceptionPerClerk[indexClerk] += clerk.TimeReception;
- search = false;
- NumberPeopleInLine--;
- }
- //The Method sends data to class "DataProcessing" for processing
- void Close_Department ()
- {
- DataProcess.Processing(_arrTimeReceptionPerClerk, NumberClerks);
- }
- }
- }
Add Comment
Please, Sign In to add comment