Создать приложение, в котором генератор события передает трем приемникам название поезда, время прибытия и т.д - 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);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы