2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
|
||||||||||||||||||||||||||
Класс домов и класс улиц для учета поступлений квартплаты. Массив26.04.2013, 00:28. Показов 2711. Ответов 9
Метки нет Все метки)
(
Задание:
вырезано Файл StdAfx.h Кликните здесь для просмотра всего текста
Файл Home.h Кликните здесь для просмотра всего текста
Файл Home.cpp Кликните здесь для просмотра всего текста
Файл Street.h Кликните здесь для просмотра всего текста
Файл Street.cpp Кликните здесь для просмотра всего текста
Основная проблема - это массив. Растолкуйте плиз что надо добавить и переделать.. Добавлено через 1 час 30 минут Задание: Кликните здесь для просмотра всего текста
Вариант выбирается следующим образом: получить оста-ток от деления № студента по списку в электронном универси-тете на число вариантов, если остаток равен нулю, то берется последний вариант, если остаток не равен нулю, то это есть номер варианта. Первым шагом в выполнении ДЗ должно быть осмысление поставленной задачи, и, в частности, выделение новых типов объектов, для которых нужно разработать обоб-щенные описания объектов в виде классов на языке СИ++. Нужно определить свойства объектов каждого класса и его поведение. Другими словами, необходимо первоначально выделить основные данные для объектов класса и перечень методов/функций, которые эти данные изменяют. На первом этапе это делается на абстрактном уровне. Для начала проектирования является важным определение, так называемой, пред-метной области. Под предметной областью понимается совокупность понятий, объектов реального мира, их свойств, а также что с этими объектами можно делать в программе и делается в жизни. Для одной и той же системы классов может быть выделено много раз-личных предметных областей, которые, в конечном счете, зависят от решаемой (постав-ленной) задачи автоматизации. Поэтому первым шагом нужно задать одну или несколь-ко предметных областей, для которых будет разрабатываться система классов. Пример. Будем рассматривать для пояснения пример разработки системы классов улиц и классов домов, которые могут располагаться на конкретных улицах. Возможны следующие задачи, для которых разрабатывается такая система классов: контролирова-ние оплаты жителями коммунальных услуг, проведение выборов, ремонт строений на улице и самой улицы, ведение паспортного учета жителей (или прописки), оценка числа жителей на улице для планирования социальных услуг, построение карт города с ули-цами (детализация по домам), оценка движения автомобилей по улице и т.д. Из этого перечня задач видно, что от выбора конкретной задачи существенно зависят свойства будущих объектов и набор операций (методов), которые над этими объектами преду-сматриваются. Определим, для примера, предметную область так: учет числа жителей на улице и оценка необходимости ремонта строений улицы. Далее для каждого объекта предметной области, на содержательном уровне, нужно более детально задать перечень свойств (данных) и возможных операций над этими свойствами. Пример. Например, свойства для дома: номер дома, этажность дома, число жите-лей в доме, признак ремонта, тип строения и т.д. Операции для дома: установка числа жителей, изменение типа дома, установка или сброс признака необходимости ремонта дома. Для улицы можно выделить свойства: название улицы, тип улицы, число домов на улице, число жителей, признаки ремонта улицы и т.д. Далее целесообразно проанализировать предметную область и поставленную зада-чу и определить необходимость дополнительных классов для реализации. Эти классы могут быть технологическими (вспомогательными) и содержательными. Технологиче-ские классы могут быть выделены, например, для реализации контейнеров элементных объектов (списки, массивы, множества и т.д.) и для выполнения других функций реше-ния задачи. Эти классы не имеют явных аналогов в предметной области и выделяются на основе опыта программиста. Дополнительные содержательные классы могут потре-боваться для комплексного решения задачи. Например, Для нашего случая это могут быть: класс городов (при построении карт), класс планов ремонта улиц (в ремонтной задаче), классы бюджетов оплаты жилья (для контроля оплаты квартир) и т.д. Более важным является определение перечня возможных операций над объектами. Не всегда удается сразу определить его полностью: он наращивается и видоизменяется в процессе проектирования и реализации программной системы. Пример. Предположим тема задания следующая - разработать систему классов для описания объектов строений/домов улиц (элементные объекты) и объектов типа улица, содержащих в себе элементные объекты (дома). Улица - это контейнерный объект. Зада-чи, для которых разрабатывается система классов, заданы выше. Для домов целесообраз-но выделить свойства создания дома (построение), удаления дома (снос дома), изменения свойств дома (установка признаков необходимости ремонта, числа жителей и т.д.). Для улиц возможные операции: добавление и удаление домов, переименование улицы, по-верка признака ремонта улицы и домов на улице. Предположим, что нужно предусмот-реть операции для контейнерного объекта: добавления строений, переименования улиц, сноса строений, печати списка домов, добавления строений и т.д. Более детально это расшифровано ниже, включая и раскрытие понятий предметной области: 1. В нашем случае, на первом этапе мы должны выделить следующие понятия: дома/строения и улицы, как упорядоченной совокупности домов. 2. Понятие дома - объекта, возможно, будет обладать следующими свойствами: номер дома, этажность дома, число жителей дома, расположение на левой или правой стороне улицы, название дома, характеристика строения и т.д. 3. Понятие улицы – объекта, возможно, будет содержать следующие свойства: название улицы, перечень домов улицы, число проживающих на улице, число домов, район расположения, город улицы и т.д. 4. Поведение дома – набор методов, возможно, будет содержать следующие дей-ствия: создание дома, разрушение дома, чтение параметров, изменение номера дома и название, установка число проживающих, изменение этажности – пере-стройка дома, распечатка дома и т.д. 5. Поведение улицы – набор методов, возможно, будет содержать следующие дей-ствия: создание улицы, удаление улицы, добавление дома на улицу, удаление дома с улицы, новая нумерация домов на улице, распечатка домов улицы, из-менение названия улицы, чтение параметров улицы, объединение двух улиц, деление улиц на две и т.д. 6. Уже сейчас, можно придумать название для классов этих объектов: дом Home, а улица – Street. Так как это описание классов на языке программирования, то мы должны давать названия латиницей. Лучше эти названия дать осмысленно. 7. В качестве технологических классов можно выделить классы: список (List). Пример. В нашем случае материальный объект – дом/строение. Контейнерный объ-ект улица, как совокупность домов. На первом этапе необходимо очень внимательно на понятийном уровне продумать смысл каждого свойства и каждого действия над выде-ленными типами объектов. Ниже приведены некоторые свойства классов с описание содержания: 1. Номер дома порядковый – целочисленная переменная (int HomeNumber), а операции по изменению номера дома и чтению этих параметров (SetHome-Number и GetHomeNumber) и т.д. Придуманные обозначения желательно по-местить в таблицу, в которой будут перечислены все понятия их свойства и ме-тоды работы с данными объекта, их названия и типы. 2. Номер дома символьный – символьная переменная (char *Home_Number), по-требуется, так как дома часто имеют различные индексы в номере (Например: “Дом 5а-стр.2”). 3. Название улицы – символьный массив (char NameStreet[30]) или указатель на имя (char * pNameStreet). Для добавления дома на улицу придумаем метод (AddHome), а для удаления дома с улицы (DeleteHome). И т.д. Придуманные обозначения желательно поместить в таблицу, в которой будут перечислены понятия/методы, их названия и типы. Реализация контейнерных классов В каждом задании на ДЗ требуется создать минимум один контейнерный класс. Контейнерные классы – это такие классы, на основе которых создаются объекты, вклю-чающие в себя другие объекты (отношение накопления). Контейнерные классы могут быть упорядоченными (массивы и списки) и неупорядоченными (множества). Для реа-лизации контейнерных классов студенты могут выбрать один из подходов: • Использование стандартных (библиотечных) классов типа список или массив, а соб-ственный контейнерный класс наследовать от них. • Создание собственных списков в контейнерном классе задания (например, в классе улиц) и реализация в них всех операций над списками. Менее универсальный вари-ант. • Создание собственных отдельных классов типа список и массив, с дальнейшим наследованием контейнерных классов задания от них. Более универсальный вари-ант. Некоторые особенности выполнения ДЗ При выполнении задания должны быть учтены следующие требования. В этом разделе даются также методические указания для реализации задания. 1. Для классов объектов явно определяются и разрабатываются: конструкторы (не ме-нее двух для каждого класса) и деструкторы (для каждого класса); Пример. Конструкторы могут с первоначальным заданием параметров или нет, напри-мер, с заданием названия улицы и т.д. 2. В каждом классе помимо конструкторов и деструкторов должны быть определены не менее четырех методов (функций членов класса) и не менее четырех свойств (дан-ных класса); Пример. Методы для улиц могут быть такими: добавление дома, удаление дома, распе-чатки домов улицы, нумерация домов, сложение улиц, деление улиц и т.д. Например, деление улицы на две может интерпретироваться так: первые N домов переносятся на "улицу Горького", а остальные на "Тверскую". Т.е., другими словами, из одного объекта мы получаем два других объекта с определенными свойствами. Разрабатывая такую опе-рацию нужно продумать вопросы: где создаются новые объекты, как они заполняться, уничтожается ли исходный объект и т.д. 3. Один из разрабатываемых классов должен быть контейнерного типа (массив, спи-сок, множество и т.д.), в нем должны быть определены операции добавления, удале-ния и распечатки из контейнера. Пример. В контейнерном классе улица предусматриваются операции добавления домов, их удаления, печати всех домов улицы и т.д. 4. В одном классе по выбору, в зависимости от варианта, определяется как минимум одна перегружаемая операция (обязательная операция, обозначенная знаком "+" ). Пример. В нашем случае лучше определить операцию сложения двух улиц или опера-цию добавления дома на улицу. В первом случае это может выглядеть так: Оператор присваивания -Street3 = Street1+ Street2; а во втором просто выражение присваивания – Street1+Home1;. 5. Должен быть разработан, описан в отчете и представлен демонстрационный (тесто-вый) пример, иллюстрирующий работу всех составляющих разработанной системы классов (свойств и методов/функций членов), который является основой для сдачи домашнего задания; Пример. В демонстрационном примере должны быть показано использование всех клас-сов, на основе определения объектов и работу всех методов этих классов. Например, для классов улиц: создание улиц статическое и динамическое через операцию new, уничто-жение улиц через операцию delete, добавление домов на улицу, их удаление, распечатку домов, слияние улиц и т.д. 6. Описания классов должны быть вынесены в отдельные файлы (*.h). При этом необ-ходимо исключить повторное включение описаний в исходный текст. Пример. Например, с помощью переменных этапа компиляции (define __STREET_H): #if !defined( __STREET_H ) …… Основной текст файла #endif // 7. Обязательным является перегрузка операции вывода (<<) в стандартный поток COUT для предметного класса.
0
|
26.04.2013, 00:28 | |
Ответы с готовыми решениями:
9
Класс для учета стоунов и фунтов Класс: Разработать абстрактный класс класс Point для задания координаты... Класс Bill для учета стоимости разговоров |
![]() 4898 / 2692 / 919
Регистрация: 29.11.2010
Сообщений: 5,779
|
||||||||||||||||
26.04.2013, 18:41 | ||||||||||||||||
Не то задание выложил?
Какие еще отличия? Добавлено через 2 часа 36 минут Вы печально забили отвечать на мой вопрос, но не постеснялись написать в личку. Ну, разделять классы на заголовок и тело вы умеете сами, поэтому я этого делать не буду. ![]() Именовать методы, классы и свойства как в методичке мне тоже лень, да и никто на это смотреть не будет. Давайте есть слона по-частям. Первый класс, сущность "здание" у вас есть. Я взял на себя смелость его немного переписать "под себя", чтобы проще было. Вывод тоже заточен "под меня", можете исправить как вам нравится. Кликните здесь для просмотра всего текста
Едем дальше по методичке. Требуется создать контейнерный класс. Ок. Сделаем контейнерный класс зданий. Если вам нужен более "навороченый" контейнер, позволяющий хранить что угодно, можно взять стандартный std::vector или любой понравившийся велосипед с форума. Значит сущность на основе массива, хранящая здания (и только здания). Кликните здесь для просмотра всего текста
Добавлено через 3 минуты Теперь самая мякота. Композитный класс улицы, включающий в себя сущность-список домов. Тоже сразу со вспомогательной функцией и оператором вывода на экран. В общем-то обычный класс, у которого есть объект buildings, класса, описанного выше. Методы "контейнера" класс улицы подменяет своими, осмысленными. Кликните здесь для просмотра всего текста
0
|
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
|
||||||
26.04.2013, 19:11 [ТС] | ||||||
lemegeton, если будут проблемы, то обращусь.
И можете объяснить, как работает этот класс? Кликните здесь для просмотра всего текста
0
|
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
|
||||||
26.04.2013, 19:21 [ТС] | ||||||
Кликните здесь для просмотра всего текста
Я не понял, как работает эта функция и почему в методах агрегатах используются циклы
0
|
![]() 4898 / 2692 / 919
Регистрация: 29.11.2010
Сообщений: 5,779
|
|
27.04.2013, 00:49 | |
Эта функция последовательно копирует символы из второго параметра в переменную, переданную первым параметром.
![]() В этих методах агрегируется информация по всем вложенным объектам контейнера. Поэтому и циклы.
0
|
27.04.2013, 00:49 | |
Помогаю со студенческими работами здесь
10
Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? Создать Класс Coins (монеты). Класс сохраняет массив из 3 монет ... Класс: Создать класс, объектом которого будет являться двумерный массив размерностью n x m. Реализовать класс ModelWindow, добавив поле для курсора, используя для представления поля класс Cursor
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Шаблоны и протоколы для создания устойчивых микросервисов
ArchitectMsa 19.04.2025
Микросервисы — архитектурный подход, разбивающий сложные приложения на небольшие, независимые компоненты. Вместо монолитного гиганта, система превращается в созвездие небольших взаимодействующих. . .
|
Изменяемые и неизменяемые типы в Python
py-thonny 19.04.2025
Python славится своей гибкостью и интуитивной понятностью, а одна из главных его особенностей — это система типов данных. В этом языке все, включая числа, строки, функции и даже классы, является. . .
|
Интеграция Hangfire с RabbitMQ в проектах C#.NET
stackOverflow 18.04.2025
Разработка современных . NET-приложений часто требует выполнения задач "за кулисами". Это может быть отправка email-уведомлений, генерация отчётов, обработка загруженных файлов или синхронизация. . .
|
Построение эффективных запросов в микросервисной архитектуре: Стратегии и практики
ArchitectMsa 18.04.2025
Микросервисная архитектура принесла с собой много преимуществ — возможность независимого масштабирования сервисов, технологическую гибкость и четкое разграничение ответственности. Но как часто бывает. . .
|
Префабы в Unity: Использование, хранение, управление
GameUnited 18.04.2025
Префабы — один из краеугольных элементов разработки игр в Unity, представляющий собой шаблоны объектов, которые можно многократно использовать в различных сценах. Они позволяют создавать составные. . .
|
RabbitMQ как шина данных в интеграционных решениях на C# (с MassTransit)
stackOverflow 18.04.2025
Современный бизнес опирается на множество специализированных программных систем, каждая из которых заточена под решение конкретных задач. CRM управляет отношениями с клиентами, ERP контролирует. . .
|
Типы в TypeScript
run.dev 18.04.2025
TypeScript представляет собой мощное расширение JavaScript, которое добавляет статическую типизацию в этот динамический язык. В JavaScript, где переменная может свободно менять тип в процессе. . .
|
Погружение в Kafka: Концепции и примеры на C# с ASP.NET Core
stackOverflow 18.04.2025
Apache Kafka изменила подход к обработке данных в распределенных системах. Эта платформа потоковой передачи данных выходит далеко за рамки обычной шины сообщений, предлагая мощные возможности,. . .
|
Коммуникация в реальном времени с SignalR в C# на примере создания чата
UnmanagedCoder 17.04.2025
Современный веб стремительно эволюционирует от статичных страниц к динамичным приложениям, где пользователи ожидают мгновенной реакции на свои действия. Представим, что вы отправляете сообщение. . .
|
Реализация CQRS с MediatR на C# .NET
stackOverflow 17.04.2025
Современная разработка программного обеспечения постоянно ищет пути повышения эффективности организации кода. Архитектурные паттерны появляются, эволюционируют, и те, что проявляют свою. . .
|