using System.Collections.Generic;
namespace Assignment1_Net022_SargylanaSkrybykina
public static void Main()
var myCustomers = new CustomerLine<Customer>();
myCustomers.AddCustomer(new Customer { FirstName = "Joe", LastName = "Smith" });
myCustomers.AddCustomer(new Customer { FirstName = "Jack", LastName = "Jump" });
myCustomers.AddCustomer(new Customer { FirstName = "Jeff", LastName = "Run" });
myCustomers.AddCustomer(new Customer { FirstName = "Jill", LastName = "Hill" });
myCustomers.AddCustomer(new Customer { FirstName = "John", LastName = "Winstone" });
myCustomers.AddCustomer(new Customer { FirstName = "Albert", LastName = "Koch" });
myCustomers.AddCustomer(new Customer { FirstName = "Michael", LastName = "Smith" });
myCustomers.AddCustomer(new Customer { FirstName = "Andrea", LastName = "Geller" });
myCustomers.AddCustomer(new Customer { FirstName = "Joanna", LastName = "Bartel" });
myCustomers.AddCustomer(new Customer { FirstName = "Mark", LastName = "Stuart" });
myCustomers.AddCustomer(new Customer { FirstName = "Lilian", LastName = "Kuper" });
myCustomers.AddCustomer(new Customer { FirstName = "Joseffina", LastName = "Kovalsky" });
while (myCustomers.CustomerQueue.Count > 10)
myCustomers.CustomerQueue.Dequeue();
foreach (Customer person in myCustomers.CustomerQueue)
DisplayNumber(number); number++;
table.TableOpenEvent += person.GotTable;
Customer.Meals meal = Customer.Meals.none;
person.ServeMeal += person.Person_ServeMeal;
} while (meal != Customer.Meals.done);
Console.WriteLine("Everyone is full!");
private static void DrawLine()
Console.WriteLine(new string('-', tableWidth));
private static void DisplayNumber(int number)
Console.Write("{0}:", number);
public interface ICustomer
string FirstName { get; set; }
string LastName { get; set; }
public class Customer : ICustomer
public string FirstName { get; set; }
public string LastName { get; set; }
public enum Meals { none, appetizer, main, desert, done }
public void GotTable(object sender, TableNotifyEventArgs e)
Console.WriteLine("{0} {1} got a table!", FirstName, LastName);
public event CustomerServeEventHandeler ServeMeal;
public void Serve(Meals value)
Console.WriteLine("{0} {1} is having {2}", FirstName, LastName, value++);
CustomerServeEventHandeler open = ServeMeal;
open(this, new ServeEventArgs());
public void Person_ServeMeal(object source, ServeEventArgs e)
public event TableNotifyEventHandeler TableOpenEvent;
Console.WriteLine("\nTable open!");
TableNotifyEventHandeler open = TableOpenEvent;
if (TableOpenEvent != null)
open(this, new TableNotifyEventArgs());
public delegate void TableNotifyEventHandeler(object source, TableNotifyEventArgs e);
public class TableNotifyEventArgs : EventArgs
public string notify { get; set; }
public TableNotifyEventArgs()
public delegate void CustomerServeEventHandeler(object source, ServeEventArgs e);
public class ServeEventArgs : EventArgs
public string notify { get; set; }
public class CustomerLine<TCustomer>
where TCustomer : ICustomer
public Queue<TCustomer> CustomerQueue = new Queue<TCustomer>();
public void AddCustomer(TCustomer customer)
CustomerQueue.Enqueue(customer);