Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! interface INameAndCopy
{ string Name { get; set; } object DeepCopy(); } Определить новые версии классов Person, Paper и ResearchTeam из лабораторной работы 1. Класс ResearchTeam определить как производный от класса Team. В классы Team и ResearchTeam добавить реализацию интерфейса INameAndCopy. В классе Paper определить виртуальный метод object DeepCopy(). В новой версии класса Person дополнительно · переопределить метод virtial bool Equals (object obj) и определить операции == и! = так, чтобы равенство объектов типа Person трактовалось как совпадение всех данных объектов, а не ссылок на объекты Person; · переопределить виртуальный метод int GetHashCode(); · определить виртуальный метод object DeepCopy(). Определить класс Team. Класс Team имеет · защищенное (protected) поле типа string с названием организации; · защищенное поле типа int – регистрационный номер. В классе Team определить: · конструктор с параметрами типа string и int для инициализации полей класса; · конструктор без параметров для инициализации по умолчанию; · свойство типа string для доступа к полю с названием организации; · свойство типа int для доступа к полю с номером регистрации; в методе set бросить исключение, если присваиваемое значение меньше или равно 0; при создании объекта-исключения использовать один из определенных в библиотеке CLR классов-исключений, инициализировать объект-исключение с помощью конструктора с параметром типа string. В классе Team · определить виртуальный метод object DeepCopy(); · реализовать интерфейс INameAndCopy. В классе Team переопределить (override): · виртуальный метод virtial bool Equals (object obj) и определить операции == и! = так, чтобы равенство объектов типа Team трактовалось как совпадение всех данных объектов, а не ссылок на объекты Team; · виртуальный метод int GetHashCode(); · виртуальный метод string ToString() для формирования строки со значениями всех полей класса. Новая версия класса ResearchTeam имеет базовый класс Team и следующие поля: · закрытое поле типа string c названием темы исследований; · закрытое поле типа TimeFrame с информацией о продолжительности исследований; · закрытое поле типа System.Collections.ArrayList со списком участников проекта (объектов типа Person); · закрытое поле типа System.Collections.ArrayList для списка публикаций (объектов типа Paper). Код следующих конструкторов, методов и свойств из старой версии класса ResearchTeam необходимо изменить с учетом того, что часть полей класса перемещена в базовый класс Team, и в новой версии класса ResearchTeam для списка публикаций используется тип System.Collections.ArrayList: · конструктор c параметрами типа string, string, int, TimeFrame для инициализации соответствующих полей класса; · конструктор без параметров для инициализации по умолчанию; · свойство типа System.Collections.ArrayList для доступа к полю со списком публикаций; · свойство типа Paper (только с методом get), которое возвращает ссылку на публикацию с самой поздней датой выхода; если список публикаций пустой, свойство возвращает значение null; · метод void AddPapers (params Paper*+) для добавления элементов в список публикаций; · перегруженная версия виртуального метода string ToString() для формирования строки со значениями всех полей класса, включая список публикаций и список участников проекта; · метод string ToShortString(), который формирует строку со значениями всех полей класса без списка публикаций и списка участников проекта. Дополнительно в новой версии класса ResearchTeam определить · перегруженную версию виртуального метода object DeepCopy(); · свойство типа System.Collections.ArrayList для доступа к полю со списком участников проекта; · метод void AddMembers (params Person[]) для добавления элементов в список участников проекта; · свойство типа Team; метод get свойства возвращает объект типа Team, данные которого совпадают с данными подобъекта базового класса, метод set присваивает значения полям из подобъекта базового класса; · реализовать интерфейс INameAndCopy. В новой версии класса ResearchTeam определить · итератор для последовательного перебора участников проекта (объектов типа Person), не имеющих публикаций; · итератор с параметром типа int для перебора публикаций, вышедших за последние n лет, в котором число n передается через параметр итератора. В методе Main() 1. Создать два объекта типа Team с совпадающими данными и проверить, что ссылки на объекты не равны, а объекты равны, вывести значения хэш- кодов для объектов. 2. В блоке try/catch присвоить свойству с номером регистрации некорректное значение, в обработчике исключения вывести сообщение, переданное через объект-исключение. 3. Создать объект типа ResearchTeam, добавить элементы в список публикаций и список участников проекта и вывести данные объекта ResearchTeam. 4. Вывести значение свойства Team для объекта типа ResearchTeam. 5. С помощью метода DeepCopy() создать полную копию объекта ResearchTeam. Изменить данные в исходном объекте ResearchTeam и вывести копию и исходный объект, полная копия исходного объекта должна остаться без изменений. 6. С помощью оператора foreach для итератора, определенного в классе ResearchTeam, вывести список участников проекта, которые не имеют публикаций. 7. С помощью оператора foreach для итератора с параметром, определенного в классе ResearchTeam, вывести список всех публикаций, вышедших за последние два года.
Дополнительное задание: В классе ResearchTeam · реализовать интерфейс System.Collections.IEnumerable для перебора участников проекта (объектов типа Person), у которых есть публикации; для этого определить вспомогательный класс ResearchTeamEnumerator, реализующий интерфейс System.Collections.IEnumerator. · определить итератор для перебора участников проекта (объектов типа Person), имеющих более одной публикации, для этого определить метод, содержащий блок итератора и использующий оператор yield. · определить итератор для перебора публикаций (объектов типа Paper), вышедших за последний год, для этого определить метод, содержащий блок итератора и использующий оператор yield. В методе Main() 8. С помощью оператора foreach для объекта типа ResearchTeam вывести список участников проекта, у которых есть публикации. 9. С помощью оператора foreach для итератора, определенного в классе ResearchTeam, вывести список участников проекта, имеющих более одной публикации. 10. C помощью оператора foreach для итератора, определенного в классе ResearchTeam, вывести список публикаций, вышедших за последний год.
|