Создать приложение, в котором генератор события передает трем приемникам название поезда, время прибытия и т.д - C#
Формулировка задачи:
Помогите пож-ста решить задачку!
1. Создать приложение, в котором генератор события передает трем приемникам следующую информацию: название поезда, время прибытия, станция назначения, станция отправления. Приемники события распечатывают эту информацию, только если станция назначения соответствует заданной.
2. Создать приложение, в котором генератор события может генерировать четыре разных события. Приемники событий выступают в качестве абонентов почтового отделения и могут пересылать друг другу информацию, используя генератор в качестве почтового ящика. При этом они указывают номер (от 1 до 4) следующего приемника и некоторое целое число, которое передается получателю. Такой цикл передачи продолжается до тех пор, пока какой либо из приемников в качестве получателя не укажет -1. В этом случае приложение завершает свою работу. При запуске приложения первое почтовое извещение всегда получает от генератора первый приемник. Для адресации и передачи информации использовать второй аргумент обработчика события.
С первым заданием я справился(код проги во вложении), но вот со вторым возникли проблемы, не могу понять, что да как. Помогите пож-ста, может кто-нибудь уже сталкивался с этим или знает как это решается, буду очень благодарен, заранее большое спасибо!!!
Код первой проги:
using System; namespace sobit { class ChangeEventArgs : EventArgs { string str; public string Str { get { return str; } } int change; public int Change { get { return change; } } string stotp; public string Stotp { get { return stotp; } } string stpr; public string Stpr { get { return stpr; } } string poezd; public string Poezd { get { return poezd; } set { poezd = value; } } public ChangeEventArgs(string str, int change, string stotp, string stpr) { this.str = str; this.change = change; this.stotp = stotp; this.stpr = stpr; } } class GenEvent // Генератор событий - издатель { public delegate void ChangeEventHandler (object source, ChangeEventArgs e); public event ChangeEventHandler OnChangeHandler; public void UpdateEvent(string str, int change, string stotp, string stpr) { if (change == 0) return; ChangeEventArgs e = new ChangeEventArgs(str, change, stotp, stpr); if (OnChangeHandler != null) OnChangeHandler(this, e); } } //Подписчик class RecEvent { //Обработчик события void OnRecChange(object source, ChangeEventArgs e) { int change = e.Change; if (e.Str == "1") Console.WriteLine("Поезд '{0}' прибыл на станцию {2} время прибытия {1} станция отправления {3} ", e.Str, e.Change, e.Stpr, e.Stotp); //Math.Abs(e.Change)); } // в конструкторе класса осуществляется подписка public RecEvent(GenEvent gnEvent) { gnEvent.OnChangeHandler += //здесь осуществляется подписка new GenEvent.ChangeEventHandler(OnRecChange); } } //Подписчик 2 class RecEvent2 { //Обработчик события void OnRecChange2(object source, ChangeEventArgs e) { int change = e.Change; if (e.Str == "2") Console.WriteLine("Поезд '{0}' прибыл на станцию {2} время прибытия {1} станция отправления {3} ", e.Str, e.Change, e.Stpr, e.Stotp); //Math.Abs(e.Change)); } // в конструкторе класса осуществляется подписка public RecEvent2(GenEvent gnEvent2) { gnEvent2.OnChangeHandler += //здесь осуществляется подписка new GenEvent.ChangeEventHandler(OnRecChange2); } } //Подписчик 3 class RecEvent3 { //Обработчик события void OnRecChange3(object source, ChangeEventArgs e) { int change = e.Change; if (e.Str == "3") Console.WriteLine("Поезд '{0}' прибыл на станцию {2} время прибытия {1} станция отправления {3} ", e.Str, e.Change, e.Stpr, e.Stotp); //Math.Abs(e.Change)); } // в конструкторе класса осуществляется подписка public RecEvent3(GenEvent gnEvent3) { gnEvent3.OnChangeHandler += //здесь осуществляется подписка new GenEvent.ChangeEventHandler(OnRecChange3); } } class Class1 { [STAThread] static void Main(string[] args) { //Console.WriteLine("Введите название поезда "); //string poezd = Console.ReadLine(); GenEvent gnEvent = new GenEvent(); RecEvent inventoryWatch = new RecEvent(gnEvent); RecEvent2 inventoryWatch2 = new RecEvent2(gnEvent); RecEvent3 inventoryWatch3 = new RecEvent3(gnEvent); gnEvent.UpdateEvent("1", 12-00, "Москва", "Казань"); gnEvent.UpdateEvent("2", 15-00, "Питер", "Воронеж"); gnEvent.UpdateEvent("3", 18-00, "Красноярск", "Псков"); } } }
Решение задачи: «Создать приложение, в котором генератор события передает трем приемникам название поезда, время прибытия и т.д»
textual
Листинг программы
using System; namespace ConsoleAppTesting { public delegate void PostSendedSender(int post, int abonent); // Генератор public class PostOffice { public event PostSendedSender PostSendedTo1; public event PostSendedSender PostSendedTo2; public event PostSendedSender PostSendedTo3; public event PostSendedSender PostSendedTo4; public void SendMessage(int abonent, int post) { switch (abonent) { case 1: if (PostSendedTo1 != null) { PostSendedTo1(post, 1); //Console.WriteLine("Событие PostSendedTo1 произошло!"); } break; case 2: if (PostSendedTo2 != null) { PostSendedTo2(post, 2); //Console.WriteLine("Событие PostSendedTo2 произошло!"); } break; case 3: if (PostSendedTo3 != null) { PostSendedTo3(post, 3); //Console.WriteLine("Событие PostSendedTo3 произошло!"); } break; case 4: if (PostSendedTo4 != null) { PostSendedTo4(post, 4); //Console.WriteLine("Событие PostSendedTo4 произошло!"); } break; default: break; } // обнуляем подписку на все методы после посылки очередного сообщения // иначе с каждой последующей посылкой мы будет посылать +1 сообщений PostSendedTo1 = null; PostSendedTo2 = null; PostSendedTo3 = null; PostSendedTo4 = null; } } public class Abonents { static void AppendInvokations(PostOffice office) { PostSendedSender lambdaForPosting = new PostSendedSender( (postData, abonent) => { if (postData == -1) { Console.WriteLine("Послано -1! Завершаем работу..."); Environment.Exit(0); } else Console.WriteLine("Сообщение \"{0}\" послано абоненту {1}", postData, abonent); } ); office.PostSendedTo1 += lambdaForPosting; office.PostSendedTo2 += lambdaForPosting; office.PostSendedTo3 += lambdaForPosting; office.PostSendedTo4 += lambdaForPosting; } public static void Abonent1SendPost(PostOffice office, int to, int post) { AppendInvokations(office); office.SendMessage(to, post); Console.WriteLine("Послано абонентом 1\n-------------"); } public static void Abonent2SendPost(PostOffice office, int to, int post) { AppendInvokations(office); office.SendMessage(to, post); Console.WriteLine("Послано абонентом 2\n-------------"); } public static void Abonent3SendPost(PostOffice office, int to, int post) { AppendInvokations(office); office.SendMessage(to, post); Console.WriteLine("Послано абонентом 3\n-------------"); } public static void Abonent4SendPost(PostOffice office, int to, int post) { AppendInvokations(office); office.SendMessage(to, post); Console.WriteLine("Послано абонентом 4\n-------------"); } } public class Program { public static void Main(string[] args) { PostOffice mainOffice = new PostOffice(); Abonents.Abonent1SendPost(mainOffice, 3, 100); Abonents.Abonent4SendPost(mainOffice, 2, 45); Abonents.Abonent3SendPost(mainOffice, 1, 280); Abonents.Abonent2SendPost(mainOffice, 4, -1); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д