Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
-7 / 0 / 0
Регистрация: 04.05.2024
Сообщений: 13

Наблюдатель (Информационное агентство "Ulan-Ude news")

29.09.2024, 13:47. Показов 958. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, написать программный код на C# к следующей задаче:
ТЕКСТ ЗАДАЧИ
Информационное агентство "Ulan-Ude news" аккумулирует различную информацию после чего публикует её. Информация агентства имеет следующую структуру:
Сообщение, дата в формате YYYY-mm-dd (например, 2020-09-30), тип сообщения (целое число).
Типы сообщения: 1 - информация о погоде, 2 - курс валют, 3 - новости города.
Газета информ полис и телеканал Ариг Ус хотят получать свежую информацию.
Вашей задачей является: Разработать структуру классов, которая позволит получать данные и производить оповещение наблюдателей. Разработанное решение должно удовлетворять следующим критериям:
• Позволяет добавлять новых наблюдателей без изменения кода;
• Позволяет удалять наблюдателей;
• Считывание данных нужно производить из текстового файла с задержкой в 5 секунд;
• Для тестирования информация о получении наблюдателями оповещений должна выводится в консоль (если в задании не сказано другого). Например, при получении информации должно выводится сообщение вида «Информ полис получил информацию: <Текст сообщения>, <Дата>, <Тип сообщения>».
Пример сообщений:
-15 1 20; 2020-11-14; 1
dollar 74; 2020-11-14; 2
euro 90; 2020-11-14; 2
Курс доллара опять растёт он стал 74;2020-11-14;3
Первое сообщение означает, что температура -15, вид осадков – 1, скорость ветра 20. Дата – 2020-11-14 и само сообщение является информацией о погоде (тип 1)
Второе сообщение означает, что курс доллара 74, Дата – 2020-11-14 и само сообщение является курсов валют (тип 2)
Третье сообщение означает, что курс евро 90, Дата – 2020-11-14 и само сообщение является курсов валют (тип 2)
Четвёртое сообщение: «Курс доллара опять растёт он стал 74», Дата – 2020-11-14 и само сообщение новостью города (тип 3)

Дополнительная задача №1
Приложение "Погода в Улан-Удэ" интересуют только новости погоды. Поэтому вы задали чёткий формат сообщений о погоде - в этих сообщениях передаётся три числа: температура, вид осадков, скорость ветра (например, можно считать что формат сообщения выглядит следующим образом: <температура>, <вид осадков>, <скорость ветра>).
Виды осадков: 1 - ясное небо, 2 - дождь, 3 - снег.
Приложение должно получать информацию и выводить на экран изображение, которое демонстрирует изображение с соответсвующими осадками.
Дополнительная задача №2
Сайт НовостиБурятии.рф интересуют все сообщения, при получении сообщения этот сайт каким-то образом формирует рейтинг сообщения (для тестирования назначайте произвольное число) и выставляет его в виде новости.
Сайт НовостиРоссии интересуют новости рейтинг которых выше 10. Сайт НовостиМира интересуют новости рейтинг которых выше 20. Разработайте решение, которое позволит реализовать подобную ситуацию.
Дополнительная задача №3
Центр статистики и исследований хочет получать сообщения и фиксировать её в базе данных. Для тестирования реализуйте запись в текстовый файл данных в формате:
<Текст сообщения>, <Дата>, <Тип сообщения>, <Системная дата и время>
Дополнительная задача №4
Агрегатор новостей компании Гугл вычисляет информационную мощность сообщения следующим образом:
<Коэффициент типа>*<Количество символов в сообщении>/100
Где коэффициент типа равен
0.83- информация о погоде
0.57 - курс валют
0.95 - новости города.
Кроме прочего, в любой момент времени хотят формировать топ 5 новостей (по коэффициенту, если коэффициент равен, то сначала нужно вывести более раннее сообщение).

Дополнительная задача №5
Группу финансовых аналитиков интересует только курс валют. Допустим, что в сообщениях передаётся информацию о двух типах валют - евро и доллары.
В группе аналитиков уверены, что если курс доллара превысит 80 рублей или курс евро превысит 100 рублей, то дальнейшее получение сообщений бессмысленно. Реализовать такую возможность (при выполнении условия нужно удалять из списка рассылки).
Дополнительная задача №6
Исследовательская группа экономистов фиксирует рост доллара. Допустим, что в сообщениях передаётся информацию о двух типах валют - евро и доллары. Задачей группы является фиксировать всю информацию о курсе и выдавать оповещение всякий раз, когда курс любой из валют изменяется более чем на 10%.
Дополнительная задача №7
Комитет городской безопасности оценивает всю информацию в медиапространстве и пытается найти странные сообщения. Для этих целей в комитете хотят получать информацию и планируют анализировать новости города.
Аналитики комитета хотят выделять подозрительные дни. Подозрительным день считается если в течении дня было два или более сообщения в котором встречалось число 13.
В этом случае комитет должен производить запись в файл:
<Дата>, количество встреченных чисел 13.
Дополнительная задача №8
Клуб юных метеорологов очень сильно интересуется данными о погоде. Поэтому вы задали чёткий формат сообщений о погоде - в этих сообщениях передаётся три числа: температура, вид осадков, скорость ветра (например, можно считать, что формат сообщения выглядит следующим образом: <температура>, <вид осадков>, <скорость ветра>).
Виды осадков: 1 - ясное небо, 2 - дождь, 3 - снег.
Помимо публикации материалов в Клубе решили собрать информацию сколько дней была ясная погода, сколько дней шёл дождь или снег.
В разрабатываемом классе необходимо реализовать метод, который выведет эту информацию.

Я в объектно-ориентированном программировании полный ноль!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2024, 13:47
Ответы с готовыми решениями:

База данных "Информационное агентство"
Помогите плиз.....нужно написать программу на языке программирования C# - Windows Forms на тему &quot;Информационное агентство&quot;. ...

Разработать информационную систему "Информационное агентство" в MS Access
Необходимо разработать ИС в БД MS ACCESS помогите начать, я новичок. Разработать информационную систему ИНФОРМАЦИОННОЕ АГЕНТСТВО. ...

Разработать БД "ИНФОРМАЦИОННОЕ АГЕНТСТВО"
Здравствуйте я очень плохо понимаю в БД и нужна помощь, чтобы хотя бы понять, как начать делать. Разработать информационную систему...

5
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,385
30.09.2024, 11:18
Хочешь оставаться нулем бесплатно? При этом сесть на шею другим и ехать вперед? Если нет, то вернись к более простым задачам, напрмер хелловорд.
Потому что сишарп это 100% ооп.
0
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
04.10.2024, 18:34
Лучший ответ Сообщение было отмечено math_and_it03 как решение

Решение

math_and_it03, Помогаю. Почитайте про паттерн одноименный с этой темой. Посмотрите на примерах его реализацию в C#

Добавлено через 1 час 41 минуту
Блин, увлекся, и таки написал
vlisp, помилуй
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
[Flags]
public enum MessageType
{
    None = 0,
    WeatherInformation = 1,
    ExchangeRate = 2,
    CityNews = 4
}
 
public enum PrecipitationType
{
    ClearSky = 1,
    Rain,
    Snow
}
 
// Интерфейс для всех сообщений
public interface INewsMessage
{
    MessageType Type { get; }
    DateTime Date { get; }
    string Text { get; }
}
 
// Сообщение о погоде
public class WeatherMessage : INewsMessage
{
    public MessageType Type => MessageType.WeatherInformation;
    public DateTime Date { get; }
    public string Text { get; }
    public int Temperature { get; }
    public PrecipitationType Precipitation { get; }
    public int WindSpeed { get; }
 
    public WeatherMessage(int temperature, PrecipitationType precipitation, int windSpeed, DateTime date)
    {
        Temperature = temperature;
        Precipitation = precipitation;
        WindSpeed = windSpeed;
        Date = date;
        Text = $"Температура: {temperature}, Осадки: {precipitation}, Скорость ветра: {windSpeed}";
    }
}
 
// Сообщение о новостях
public class CityNewsMessage : INewsMessage
{
    public MessageType Type => MessageType.CityNews;
    public DateTime Date { get; }
    public string Text { get; }
 
    public CityNewsMessage(string text, DateTime date)
    {
        Text = text;
        Date = date;
    }
}
 
// Сообщение о курсе валют
public class ExchangeRateMessage : INewsMessage
{
    public MessageType Type => MessageType.ExchangeRate;
    public DateTime Date { get; }
    public string Text { get; }
    public string Currency { get; }
    public decimal Rate { get; }
 
    public ExchangeRateMessage(string currency, decimal rate, DateTime date)
    {
        Currency = currency;
        Rate = rate;
        Date = date;
        Text = $"Курс {currency}: {rate}";
    }
}
 
public interface IObserver
{
    void Update(INewsMessage message);
}
public interface IMessageObserver : IObserver
{
    MessageType SupportedMessageType { get; }
}
 
// Класс информационного агентства
public class NewsAgency
{
    private List<IMessageObserver> observers = new List<IMessageObserver>();
    private string filePath;
 
    public NewsAgency(string filePath)
    {
        this.filePath = filePath;
    }
 
    public void Subscribe(IMessageObserver observer)
    {
        observers.Add(observer);
    }
 
    public void Unsubscribe(IMessageObserver observer)
    {
        observers.Remove(observer);
    }
 
    public void NotifyObservers(INewsMessage message)
    {
        foreach (var observer in observers)
        {
            if (observer.SupportedMessageType.HasFlag(message.Type))
            {
                observer.Update(message);
            }
        }
    }
 
    public void StartReadingData()
    {
        while (true)
        {
            try
            {
                using (var reader = new StreamReader(filePath))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        var parts = line.Split(';');
                        if (parts.Length == 3)
                        {
                            int type = int.Parse(parts[2]);
                            DateTime date = DateTime.Parse(parts[1]);
                            INewsMessage message = null;
                            switch (type)
                            {
                                case (int)MessageType.WeatherInformation:
                                    var weatherParts = parts[0].Split(' ');
                                    message = new WeatherMessage(
                                        int.Parse(weatherParts[0]),
                                        (PrecipitationType)int.Parse(weatherParts[1]),
                                        int.Parse(weatherParts[2]),
                                        date);
                                    break;
                                case (int)MessageType.ExchangeRate:
                                    var exchangeParts = parts[0].Split(' ');
                                    message = new ExchangeRateMessage(
                                        exchangeParts[0],
                                        decimal.Parse(exchangeParts[1]),
                                        date);
                                    break;
                                case (int)MessageType.CityNews:
                                    message = new CityNewsMessage(parts[0], date);
                                    break;
                            }
 
                            if (message != null)
                            {
                                NotifyObservers(message);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Ошибка при чтении данных: {ex.Message}");
            }
 
            Thread.Sleep(5000); // Задержка в 5 секунд
        }
    }
}
 
// Класс для Газеты Информ полис
public class InformPolis : IMessageObserver
{
    public MessageType SupportedMessageType => MessageType.ExchangeRate | MessageType.CityNews;
 
    public void Update(INewsMessage message)
    {
        Console.WriteLine($"Информ полис получил информацию: {message.Text}, {message.Date}, {message.Type}");
    }
}
 
// Класс для телеканала Ариг Ус
public class ArigUs : IMessageObserver
{
    public MessageType SupportedMessageType => MessageType.WeatherInformation;
 
    public void Update(INewsMessage message)
    {
        Console.WriteLine($"Ариг Ус получил информацию: {message.Text}, {message.Date}, {message.Type}");
    }
}
Использование:
C#
1
2
3
4
5
6
var newsAgency = new NewsAgency("news.txt");
var informPolis = new InformPolis();
var arigUs = new ArigUs();
newsAgency.Subscribe(informPolis);
newsAgency.Subscribe(arigUs);
newsAgency.StartReadingData();
1
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,385
05.10.2024, 06:49
iLinks, а зачем тебе 2 класса наблюдателя? Увлекся?
1
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
05.10.2024, 12:52
Цитата Сообщение от vlisp Посмотреть сообщение
а зачем тебе 2 класса наблюдателя? Увлекся?
Ну можешь показать как правильно.
0
 Аватар для iLinks
800 / 458 / 237
Регистрация: 03.01.2017
Сообщений: 1,339
07.10.2024, 23:43
vlisp, а да, я сначала один запилил, потом для разных сообщений сделал и оставил два
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2024, 23:43
Помогаю со студенческими работами здесь

цитируемость новостного сайта в новостных каталогах Yandex News, Google News, Rambler News
Как повысить цитируемость новостного сайта в различных новостных каталогах Yandex News, Google News, Rambler News?

Как разместить bitrix::news компонент в шаблоне компонента news::detail другого bitrix::news?
Доброго времени суток, не так давно окунулся в мир битрикс разработки и передо мной встал следующий вопрос, подскажите пожалуйста как это...

Инфоблок без уровня news.list, а только с news.detail
С пятницей! (Вдруг здесь кто-то есть, в отличие от dev.1c-bitrix.ru :)) Клиент не захотел, чтобы в определенном инфоблоке был какой-то...

sqlalchemy.exc.UnboundExecutionError: Could not locate a bind configured on mapper mapped class News->news, SQL expressi
Я создал веб-сайт на Flask используя базу данных sqllite3 и хочу разместить на pythonanywhere. После загрузки файлов открывается только...

Сортировкой в news,news.list
Добрый день пытаюсь сделать сортировку в новостях. В /bitrix/news/novnov/section.php Прописал &lt;?if ($_GET ==...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru