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

Добавить 3 класса: Автомобиль, Камера и ГИБДД. У класса автомобиль объявлены свойства марка, гос. знак, ФИО владельца

19.01.2021, 23:17. Показов 3065. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добавить 3 класса автомобиль, камера и ГИБДД.
У класса автомобиль объявлены свойства марка, гос. знак, ФИО владельца.
Камера через определенный промежуток времени фиксирует скорость автомобиля.
Если скорость автомобиля превышает разрешенную скорость, тогда срабатывает событие отправки сообщения в ГИБДД.
ГИБДД выписывает штраф за превышение скорости с сохранением его в текстовый файл.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.01.2021, 23:17
Ответы с готовыми решениями:

Создать абстрактный класс Автомобиль и производные классы Легковой автомобиль,Грузовой автомобиль, Тягач
1) Создать класс Автомобиль, в котором есть закрытые поля Название, Скорость, конструктор с двумя параметрами, открытые свойства для работы...

Создать иерархии наследования: автомобиль - легковой автомобиль, грузовой автомобиль – внедорожник
Создать иерархии наследования: автомобиль - легковой автомобиль, грузовой автомобиль – внедорожник.

Подсобите пожалуйста создать базу данных "Автомобиль", включающую: ФИО владельца
1) Создать базу данных "Автомобиль", включающую: ФИО владельца, стоимость, марка и номер автомобиля. Количество записей в базе должно быть...

14
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.01.2021, 03:38
Лучший ответ Сообщение было отмечено инга1121 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
    public enum NotifyDictionaryChangedAction
    {
        /// <summary>Добавлен новый ключ.</summary>
        Add,
        /// <summary>Удалён ключ.</summary>
        Remove,
        /// <summary>Изменено значение для ключа.</summary>
        ChangedValue
    }
C#
1
2
3
4
5
6
7
8
9
    public class SpeedDto
    {
        public string MachineNumbers { get; }
        public int Speed { get; private set; }
        public SpeedDto(string machineNumbers, int speed)
        {
            MachineNumbers = machineNumbers; Speed = speed;
        }
    }
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
    /// <summary>Аргументы события изменения словаря.</summary>
    /// <typeparam name="TKey">Тип ключа словаря.</typeparam>
    /// <typeparam name="TValue">Тип значения словаря.</typeparam>
    public class NotifyDictionaryChangedEventArgs<TKey, TValue> : NotifyActionDictionaryChangedEventArgs
    {
 
        /// <summary>Ключ в отношении которого произведено действие.</summary>
        public TKey Key { get; }
 
        /// <summary>Удаляемое или измененое значение.</summary>
        public TValue OldValue { get; }
 
        /// <summary>Добавленное или новое значение.</summary>
        public TValue NewValue { get; }
 
        public NotifyDictionaryChangedEventArgs(NotifyDictionaryChangedAction action, TKey key, TValue oldValue, TValue newValue)
            : base(action)
        {
            Key = key;
            OldValue = oldValue;
            NewValue = newValue;
        }
 
    }
 
    /// <summary>Аргументы события изменения словаря. 
    /// Содержит только действие и метод создания экземпляров производных классов.</summary>
    public class NotifyActionDictionaryChangedEventArgs : EventArgs
    {
        /// <summary>Действие изменившее словарь.</summary>
        public NotifyDictionaryChangedAction Action { get; }
 
        /// <summary>Создаёт экземпляр.</summary>
        /// <param name="action">Действие изменившее словарь.</param>
        public NotifyActionDictionaryChangedEventArgs(NotifyDictionaryChangedAction action)
        {
            Action = action;
        }
 
        public static NotifyDictionaryChangedEventArgs<TKey, TValue> AddKey<TKey, TValue>(TKey key, TValue value)
          => new NotifyDictionaryChangedEventArgs<TKey, TValue>(NotifyDictionaryChangedAction.Add, key, default, value);
        public static NotifyDictionaryChangedEventArgs<TKey, TValue> RemoveKey<TKey, TValue>(TKey key, TValue value)
            => new NotifyDictionaryChangedEventArgs<TKey, TValue>(NotifyDictionaryChangedAction.Remove, key, value, default);
        public static NotifyDictionaryChangedEventArgs<TKey, TValue> ChangedValue<TKey, TValue>(TKey key, TValue oldValue, TValue newValue)
            => new NotifyDictionaryChangedEventArgs<TKey, TValue>(NotifyDictionaryChangedAction.ChangedValue, key, oldValue, newValue);
    }
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
public class CamDto
    {
        /// <summary>Словарь существующих на дороге машин.</summary>
        public Dictionary<string, CarDto> Cars { get; } = new Dictionary<string, CarDto>();
 
        /// <summary>Неизменяемый словарь скоростей.</summary>
        public IReadOnlyDictionary<string, SpeedDto> Speeds { get; }
 
        /// <summary>Внутреннее поле "Только для чтения" со со словарём скоростей.</summary>
        private readonly Dictionary<string, SpeedDto> speeds;
 
 
        /// <summary>Событие извещающее об изменении словаря.</summary>
        public EventHandler<NotifyDictionaryChangedEventArgs<string, SpeedDto>> ChangedSpeeds;
 
        /// <summary>Метод установки значения в словаре.</summary>
        /// <param name="speed">Номер машины и её скорость.</param>
        /// <remarks>Если валюты нет - она добавляется. Если есть, то заменяется значение.</remarks>
        private void SetSpeedValue(SpeedDto speed)
        {
            if (speeds.TryGetValue(speed.MachineNumbers, out SpeedDto oldSpeed))
            {
                speeds[speed.MachineNumbers] = speed;
                ChangedSpeeds?.Invoke(Speeds, NotifyActionDictionaryChangedEventArgs.ChangedValue(speed.MachineNumbers, oldSpeed, speed));
            }
        }
 
        /// <summary>Метод удаления скорости.</summary>
        /// <remarks>Только если удалили машину.</remarks>
        private void RemoveSpeed(string name)
        {
            if (speeds.TryGetValue(name, out SpeedDto oldSpeed))
            {
                speeds.Remove(name);
                ChangedSpeeds?.Invoke(Speeds, NotifyActionDictionaryChangedEventArgs.RemoveKey(name, oldSpeed));
            }
            else
            {
                // Здесь обработка на случай отсутствия в словаре удаляемой скорости.
            }
        }
 
 
        static Random random = new Random();
        public async void SetNewSpeedValueAsync(SpeedDto speed)
        {
            await Task.Run(() => {
                int newSpeedValue = random.Next(20, 80);
                SpeedDto newSpeed = new SpeedDto(speed.MachineNumbers, newSpeedValue);
                SetSpeedValue(newSpeed);
            });
        }
 
        private async void UpdateEveryTimeGandomSpeeds()
        {
            Random randomCar = new Random();
            await Task.Run(() => {
                while (true)
                {
                    int randCarValue = randomCar.Next(0, Cars.Count);
                    SetNewSpeedValueAsync(new SpeedDto(Cars.ToList().ElementAt(randCarValue).Key, 0));
                    Thread.Sleep(5000);
                }
            });
        }
 
        public CamDto()
        {
            Cars = new CarDto[]
            {
                new CarDto("E102CH", "Lada", "Филипп Бедросович Киркоров"),
                new CarDto("P070BK", "Nissan", "Ксения Анатольевна Собчак"),
                new CarDto("B170MM", "Opel", "Дима Николаевич Билан"),
                new CarDto("Y070OC", "Mersedess", "Николай Викторович Басков"),
                new CarDto("A853MP", "Lada", "Полина Сергеевна Гагарина")
            }.ToDictionary(carr => carr.MachineNumbers);
 
            speeds = new Dictionary<string, SpeedDto>(StringComparer.CurrentCultureIgnoreCase);
            foreach (var item in Cars)
            {
                speeds.Add(item.Key, new SpeedDto(item.Key, 0));
            }
            UpdateEveryTimeGandomSpeeds();
            Speeds = new ReadOnlyDictionary<string, SpeedDto>(speeds);
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    public class CarDto
    {
        /// <summary> Номера машины. </summary>
        public string MachineNumbers { get; }
        /// <summary> Марка машины. </summary>
        public string MachineBrand { get; }
        /// <summary> Фио владельца автомобиля. </summary>
        public string Owner { get; }
        public CarDto(string machineNumbers, string machineBrand, string owner)
        {
            MachineNumbers = machineNumbers; MachineBrand = machineBrand; Owner = owner;
        }
    }
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
    public class TrafficPolicePost
    {
        private readonly CamDto cam;
 
        public TrafficPolicePost(CamDto cam)
        {
            this.cam = cam;
            this.cam.ChangedSpeeds += CamModel_ActionSpeed;
        }
        private void CamModel_ActionSpeed(object sender, NotifyDictionaryChangedEventArgs<string, SpeedDto> e)
        {
            switch(e.Action)
            {
                case NotifyDictionaryChangedAction.ChangedValue:
                    Console.WriteLine(e.Key + " изменил свою скорость с " + e.OldValue.Speed + " на " + e.NewValue.Speed);
                    if (e.NewValue.Speed > 50)
                    {
                        Console.WriteLine("Внимание всем постам, машина с номерным знаком \"" + e.Key + "\" превысила скорость.");
                        string text = "Машина -- " + e.NewValue.MachineNumbers + ";\tВодитель -- " + cam.Cars[e.NewValue.MachineNumbers].Owner + ";\tЗафиксированна скорость -- " + e.NewValue.Speed + "\n";
                        File.AppendAllText("Info.txt", text);
                    }       
                    break;
            }
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
    public class Program
    {
        static void Main(string[] args)
        {
            CamDto camDto = new CamDto();
            TrafficPolicePost traffic = new TrafficPolicePost(camDto);
 
 
            Console.ReadKey();
        }
    }
ReaficCheker.rar

Файл

Консоль
2
0 / 0 / 0
Регистрация: 19.01.2021
Сообщений: 32
24.01.2021, 11:44  [ТС]
а какой именно вставлять код в программу ?
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
24.01.2021, 12:13
инга1121, обратите внимание, я знал что Вы зададите этот вопрос, поэтому скинул архив)
Там всё уже сделано как нужно за Вас.
0
24.01.2021, 12:21

Не по теме:

Цитата Сообщение от limeniye Посмотреть сообщение
Там всё уже сделано как нужно за Вас.
А зря. Им нужно сдать лабораторные, но учиться они не собираются. А Вы за них делаете.

0
24.01.2021, 12:27

Не по теме:

Цитата Сообщение от Bespridelschic Посмотреть сообщение
А зря. Им нужно сдать лабораторные, но учиться они не собираются. А Вы за них делаете.
У неё уровень "HelloWorld", а задача 3-го курса. Она бы не написала, а я выдвинулся помочь.
Я помог с наивной надеждой что человеку интересно, а человеку вообще не интересно программирование. Сидит на заочке, на пары не ходит, задание ей пишут. Толку, что я 3 часа писал эту программу.
Потом и диплом будет сюда выкладывать(хотя может и уже, не знаю).
Относительно людей, которые на этом форуме стараются продвигать программирование ЗА БЕСПЛАТНО -- очень невежливое и некультурное обращение.
Сейчас жалею что помог.

0
24.01.2021, 12:39

Не по теме:

limeniye, я не верю что даже заочникам дают такие задания на начальном уровне. Скорее всего ТС учится на околопрограммерской специальности, и уже не первый год. Я когда учился на магистратуре, параллельно вёл практические занятия по программированию у первых курсов наноэлектроников. Половина группы - типичные ТС. Сидят и ждут когда ты за них сделаешь задание, после того как разжевал как сделать, и подсказал где подсмотреть решения подобных заданий. А потом заходят на cyberforum, ни "здрасьте", ни "досвидания", просто выложат сухой текст задания, в ожидании доброго дяди программиста, который сделает за них.

0
24.01.2021, 12:45

Не по теме:

Цитата Сообщение от Bespridelschic Посмотреть сообщение
ни "здрасьте", ни "досвидания", просто выложат сухой текст задания
Я, вообще, человек сдержанный и культурный, но такого хамства, простите, терпеть уже не могу, от сего и столько оффтопа от меня.
Теперь то я понимаю таких людей как Почтальон, которые и палец и палец не ударят, если у тебя нет огромного желания решить задачу.

0
24.01.2021, 12:50

Не по теме:

Цитата Сообщение от Bespridelschic Посмотреть сообщение
заходят на cyberforum, ни "здрасьте", ни "досвидания", просто выложат сухой текст задания, в ожидании доброго дяди программиста, который сделает за них.
Я вообще не понимаю, почему подобные темы не закрываются автоматически.
Раздел "C# для начинающих" превратился в какую-то мусорку, где 90% тем - это "сделайте за меня лабу".

0
24.01.2021, 12:52

Не по теме:

Цитата Сообщение от aenye Посмотреть сообщение
"сделайте за меня лабу"
Ого сколько Вы слов написали. Обычно просто "сделайте" и задание))
В этой теме вообще сразу задание

0
24.01.2021, 12:56

Не по теме:

Цитата Сообщение от limeniye Посмотреть сообщение
Обычно просто "сделайте" и задание
Обычно "!" или "C#" ))

0
24.01.2021, 13:01

Не по теме:

Цитата Сообщение от limeniye Посмотреть сообщение
Сейчас жалею что помог.
Не нужно жалеть. Просто любую свою помощь на форуме рассматривайте как - инвестирование в себя и это действительно так. Делая за других их работу, вы сами набираете себе же опыт, становитесь лучше и за это вам только плюс. Просто не стоит ждать благодарности или питать надежды, что "диванный студент" возьмётся за голову.

0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
24.01.2021, 13:01
samana, так я-то и так знаю то, что написал. Мне-то оно зачем?
0
24.01.2021, 13:06

Не по теме:

Цитата Сообщение от samana Посмотреть сообщение
Просто любую свою помощь на форуме рассматривайте как - инвестирование в себя
Решение однообразных лаб, ага, инвестирование)) Kek

0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
24.01.2021, 13:14

Не по теме:

Цитата Сообщение от limeniye Посмотреть сообщение
samana, так я-то и так знаю то, что написал. Мне-то оно зачем?
Это что-то вроде разминки для мозгов. Ведь даже когда сто раз пишешь знакомое решение, периодически всплывают и другие подходы или варианты и это приятно, так сказать разнообразие мыслительного процесса.



Добавлено через 4 минуты

Не по теме:

Цитата Сообщение от aenye Посмотреть сообщение
Решение однообразных лаб, ага, инвестирование)) Kek
Ну конечно всему есть предел и за базовые вещи совсем даже не хочется браться, например - создать класс Автомобиль) Но бывают и интересные задачки, но редко.
Мне и самому уже надоели эти сотни одинаковых тем по типу "найти меньшее в массиве" и т.п. Редко стал помогать, так как просто тратится время..

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2021, 13:14
Помогаю со студенческими работами здесь

Функции для класса автомобиль
подскажите пожалуста как можно написать следующие функции для класса автомобиль: 1.функция Void принимает километры пройденные...

"База данных ГАИ: гос.номер АВТОМОБИЛЯ, марка, модель, Фамилия И.О. владельца, год выпуска
а как сделать эту программу, чтобы считывала данные с файла и мы задавали условие, вывести все машины например 2000 года, или вывести...

Создать объект класса Автомобиль, используя класс Колесо
Ребята помогите решить задачу Создать объект класса Автомобиль, используя класс Колесо. Методы: ехать, заправляться, менять колесо,...

На основе базового класса «Автомобиль», создать производный класс «Общественный транспорт»
На основе базового класса «Общественный транспорт», создать производный класс «Автобус». На основе базового класса «Общественный...

Создать иерархии наследования: легковой автомобиль, грузовой автомобиль – внедорожник
Создать иерархии наследования: легковой автомобиль, грузовой автомобиль – внедорожник.


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru