Этап 7. Тестирование и усовершенствование

После завершения работ необходимопроверить функционирование приложения в каждом из возможных режимов. Под проверкой функционирования приложения в каждом из возможных режимов понимается последовательный вызов каждого из методов класса и сервисных функций с целью правильности их функционирования.

Рекомендуемый план выполнения курсового проекта

1. Получение задания на курсовой проект. Задание выдается на установочном занятии и имеет целью ознакомить студентов с постановкой задач курсовой работы, особенностями выполнения отдельных его этапов и необходимой литературой.

2. Уяснение задачи.

3. Оформление календарного плана, который целесообразно выполнять последовательно, согласно методическим рекомендациям. Консультации проводятся в установленном порядке.

4. Разработка класса.

5. Разработка интерфейса.

6. Создание приложения.

7. Анализ полученных результатов.

8. Оформление пояснительной записки.

9. Подготовка и защита курсового проекта.

Защита работы предусматривается до начала летней экзаменационной сессии. На защиту представляется пояснительная записка и CD-RW с разработанной программой. Защита работы осуществляется перед комиссией, в состав которой входят преподаватели кафедры, состоит из доклада исполнителя работы продолжительностью до 5 минут и ответов на вопросы членов комиссии.

 

Содержание задания на курсовое проектирование

Целью курсового проекта является разработка приложения, предусматривающего создание класса, работа с объектами данного класса.
Постановка задачи: в интересах Н-ской фирмы (учреждения) разработать фрагмент автоматизированной информационной системы поиска и поддержки принятия решения. В качестве пользователя выступает сотрудник структурного подразделения.

 

В заданиях требуется реализовать в том или ином виде определение нового класса. Во всех заданиях необходимо реализовать конструктор инициализации (один или несколько) и конструктор без аргументов. Указанные в задании операции реализуются посредством перегрузки подходящих операций. Во всех заданиях обязательно должны быть реализованы соответствующие операции с присваиванием, ввод с клавиатуры, вывод на экран, преобразования в строку toString. Хранение введенных данных в файле на жестком диске компьютера. Поиск данных по заданному условию согласно варианта. Отображение всех данных, хранящихся в системе. Отображение результатов поиска данных по условию.

Также надо реализовать операции инкремента и декремента в обеих формах, если они имеют смысл для реализуемого типа.

Перегрузка операций выполняется двумя способами:

- все операции реализуются как внешние дружественные функции;

- подходящие операции реализуются как методы класса, а остальные — как внешние дружественные функции.

Для демонстрации работы с объектами нового типа во всех заданиях требуется написать главную функцию. Объявление класса и реализация методов класса должны быть выполнены в отдельных файлах.

В программе обязательно должны быть продемонстрированы различные способы создания объектов и массивов объектов.

Массивы и константы в классе.

Дополнительно к требуемым в заданиях операциям перегрузить операцию индексирования []. Максимально возможный размер массива задать константой. В отдельном поле size должно храниться максимальное для данного объекта количество элементов массива; реализовать метод size(), возвращающий установленную длину. Если количество элементов массива изменяется во время работы, определить в классе поле count. Первоначальные значения size и count устанавливаются конструктором.

В тех задачах, где возможно, реализовать конструктор инициализации строкой.

Программа должна демонстрировать использование всех функций и методов. Созданные массивы объектов должны хранится во внешнем файлы. Программа должна загружать массивы из файла, сохранять изменения в файле.

 

Вариант задания преподаватель назначает индивидуально каждому студенту.

Варианты задания

Вариант 1. Класс Dictionary

Карточка иностранного слова представляет собой структуру, содержащую иностранное слово и его перевод. Для моделирования электронного словаря иностранных слов реализовать класс Dictionary. Данный класс имеет поле-название словаря и содержит массив структур WordCard, представляющих собой карточки иностранного слова. Название словаря задается при создании нового словаря, но должна быть предоставлена возможность его изменения во время работы. Карточки добавляются в словарь и удаляются из него. Реализовать поиск определенного слова как отдельный метод. Аргументом операции индексирования должно быть иностранное слово. В словаре не должно быть карточек-дублей. Реализовать операции объединения, пересечения и вычитания словарей. При реализации должен создаваться новый словарь, а исходные словари не должны изменяться. При объединении новый словарь должен содержать без повторений все слова, содержащиеся в обоих словарях-операндах. При пересечении новый словарь должен состоять только из тех слов, которые имеются в обоих словарях-операндах. При вычитании новый словарь должен содержать слова первого словаря-операнда, отсутствующие во втором.

Вариант 2. Класс TestContent

Один тестовый вопрос представляет собой структуру Task со следующими полями: вопрос, пять вариантов ответа, номер правильного ответа, начисляемые баллы за правильный ответ. Для моделирования набора тестовых вопросов реализовать класс TestContent, содержащий массив тестовых вопросов. Реализовать методы добавления и удаления тестовых вопросов, а также метод доступа к тестовому заданию по его порядковому номеру в списке. В массиве не должно быть повторяющихся вопросов. Реализовать операцию слияния двух тестовых наборов, операцию пересечения и вычисления разности (см. задание 1). Дополнительно реализовать операцию генерации конкретного объекта Test объемом не более К вопросов из объекта типа TestContent.

Вариант 3. Класс ListPerson

Карточка персоны содержит фамилию и дату рождения. Реализовать класс ListPerson для работы с картотекой персоналий. Класс должен содержать массив карточек персон. Реализовать методы добавления и удаления карточек персон, а также метод доступа к карточке по фамилии. Фамилии в массиве должны быть уникальны. Реализовать операции объединения двух картотек, операцию пересечения и вычисления разности (см. задание 1). Реализовать метод, выдающий по фамилии знак зодиака. Для этого в классе должен быть объявлен массив структур Zodiac с полями: название знака зодиака, дата начала и дата окончания периода. Индексом в массиве должен быть перечислимый тип zodiас. Реализовать два варианта класса: с обычным массивом и статическим массивом Zodiac.

Вариант 4. Класс Goods

Товарный чек содержит список товаров, купленных покупателем в магазине. Один элемент списка представляет собой пару: товар-сумма. Товар — это класс Goods с полями кода и наименования товара, цены за единицу товара, количества покупаемых единиц товара. В классе должны быть реализованы методы доступа к полям для получения и изменения информации, а также метод вычисления суммы оплаты за товар. Для моделирования товарного чека реализовать класс Receipt, полями которого являются номер товарного чека, дата и время его создания, список покупаемых товаров. В классе Receipt реализовать методы добавления, изменения и удаления записи о покупаемом товаре, метод поиска информации об определенном виде товара по его коду, а также метод подсчета общей суммы, на которую были осуществлены покупки. Методы добавления и изменения принимают в качестве аргумента объект класса Goods. Метод поиска возвращает объект класса Goods в качестве результата.

Вариант 5. Класс Subscriber

Информационная запись о книге в библиотеке содержит следующие поля: автор, название, год издания, издательство, цена. Для моделирования учетной карточки абонента реализовать класс Subscriber, содержащий фамилию абонента, его библиотечный номер и список взятых в библиотеке книг. Один элемент списка состоит из информационной записи о книге, даты выдачи, требуемой даты возврата и признака возврата. Реализовать методы добавления книг в список и удаления книг из него; метод поиска книг, подлежащих возврату; методы поиска по автору, издательству и году издания; метод вычисления стоимости всех подлежащих возврату книг. Реализовать операцию слияния двух учетных карточек, операцию пересечения и вычисления разности (см. задание 1). Реализовать операцию генерации конкретного объекта Debt (долг), содержащего список книг, подлежащих возврату из объекта типа Subscriber.

Вариант 6. Класс Directory

Информационная запись о файле в каталоге содержит поля: имя файла, расширение, дата и время создания, атрибуты «только чтение», «скрытый», «системный», размер файла на диске. Для моделирования каталога реализовать класс Directory, содержащий название родительского каталога, количество файлов в каталоге, список файлов в каталоге. Один элемент списка включает в себя информационную запись о файле, дату последнего изменения, признак выделения и признак удаления. Реализовать методы добавления файлов в каталог и удаления файлов из него; метод поиска файла по имени, по расширению, по дате создания; метод вычисления полного объема каталога. Реализовать операцию объединения и операцию пересечения каталогов (см. задание 1). Реализовать операцию генерации конкретного объекта Group (группа), содержащего список файлов, из объекта типа Directory. Должна быть возможность выбирать группу файлов по признаку удаления, по атрибутам, по дате создания (до или после), по объему (меньше или больше).

 

Вариант 7. Класс ListPayer

Используя класс Bill, реализовать класс ListPayer. Класс содержит список плательщиков за телефонные услуги, дату создания списка, номер списка. Поля одного элемента списка — это: плательщик (класс Bill), признак оплаты, дата платежа, сумма платежа. Реализовать методы добавления плательщиков в список и удаления их из него; метод поиска плательщика по номеру телефона и по фамилии, по дате платежа. Метод вычисления полной стоимости платежей всего списка. Реализовать операцию объединения и операцию пересечения списков (см. задание 1). Реализовать операцию генерации конкретного объекта Group (группа), содержащего список плательщиков, из объекта типа ListPayer. Должна быть возможность выбирать группу плательщиков по признаку оплаты, по атрибутам, по дате платежа, по номеру телефона. Класс Bill представляет собой разовый платеж за телефонный разговор. Класс включает поля: фамилия плательщика, номер телефона, тариф за минуту разговора, скидка (в процентах), время начала разговора, время окончания разговора, сумма к оплате. Время разговора, подлежащее оплате, вычисляется в минутах; неполная минута считается за полную. Метод toString() должен выдавать сумму в рублях.

Вариант 8. Класс PlanEducation

Учебный план специальности является списком дисциплин, которые студент должен изучить за время обучения. Одна дисциплина представляет собой структуру с полями: номер дисциплины в плане, тип дисциплины (федеральная региональная, по выбору), название дисциплины, семестр, в котором дисциплина изучается, вид итогового контроля (зачет или экзамен), общее количество часов, необходимое для изучения дисциплины, количество аудиторных часов, которые состоят из лекционных часов и часов практики. Реализовать класс PlanEducation для моделирования учебного плана специальности. Класс должен содержать код и название специальности, дату утверждения, общее количество часов специальности по стандарту и список дисциплин. Один элемент списка дисциплин должен содержать запись о дисциплине, количество часов для самостоятельной работы (разность между общим количеством часов и аудиторными часами), признак наличия курсовой работы, выполняемой по данной дисциплине. Реализовать методы добавления и удаления дисциплин; метод поиска дисциплины по семестру, по типу дисциплины, по виду итогового контроля; метод вычисления суммарного количества часов всех дисциплин; метод вычисления количества экзаменов и зачетов по семестрам. Реализовать операцию объединения, операцию вычитания учебных планов и операцию пересечения учебных планов (см. задание 1). Реализовать операцию генерации конкретного объекта Group (группа дисциплин), содержащего список дисциплин, из объекта типа PlanEducation. Должна быть возможность выбирать группу дисциплин по типу, по семестру, по виду итогового контроля, по наличию курсовой работы. Должен осуществляться контроль за суммарным количеством часов, за количеством экзаменов в семестре (не более пяти и не менее трех).

Вариант 9. Класс WorkTeacher

Нагрузка преподавателя за учебный год представляет собой список дисциплин, преподаваемых им в течение года. Одна дисциплина представляется информационной структурой с полями: название дисциплины, семестр проведения, количество студентов, количество часов аудиторных лекций, количество аудиторных часов практики, вид контроля (зачет или экзамен). Реализовать класс WorkTeacher, моделирующий бланк назначенной преподавателю нагрузки. Класс содержит фамилию преподавателя, дату утверждения, список преподаваемых дисциплин, объем полной нагрузки в часах и в ставках. Дисциплины в списке не должны повторяться. Объем в ставках вычисляется как частное от деления объема в часах на среднюю годовую ставку, одинаковую для всех преподавателей кафедры. Элемент списка преподаваемых дисциплин содержит дисциплину, количество часов, выделяемых на зачет (0,35 ч на одного студента) или экзамен (0,5 ч на студента), сумму часов по дисциплине. Реализовать добавление и удаление дисциплин; вычисление суммарной нагрузки в часах и ставках. Должен осуществляться контроль за превышением нагрузки более полутора ставок.

Вариант 10. Класс DailySchedule

Одна запись в списке запланированных дел представляет собой структуру DailyItem, которая содержит время начала и окончания работы, описание и признак выполнения. Реализовать класс DailySchedule, представляющий собой план работ на день. Реализовать методы добавления, удаления и изменения планируемой работы. При добавлении проверять корректность временных рамок (они не должны пересекаться с уже запланированными мероприятиями). Реализовать метод поиска свободного промежутка времени. Условие поиска задает размер искомого интервала, а также временные рамки, в которые он должен попадать. Метод поиска возвращает структуру DailyItem с пустым описанием вида работ. Реализовать операцию генерации объекта Redo (еще раз), содержащего список дел, не выполненных в течение дня, из объекта типа DailySchedule.

Вариант 11. Класс PriceList

Прайс-лист компьютерной фирмы включает в себя список моделей продаваемых компьютеров. Одна позиция списка (Model) содержит марку компьютера, тип процессора, частоту работы процессора, объем памяти, объем жесткого диска, объем памяти видеокарты, цену компьютера в условных единицах и количество экземпляров, имеющихся в наличии. Реализовать класс PriceList, полями которого являются дата его создания, номинал условной единицы в рублях и список продаваемых моделей компьютеров. В списке не должно быть двух моделей одинаковой марки. В классе PriceList реализовать методы добавления, изменения и удаления записи о модели, метод поиска информации о модели по марке компьютера, по объему памяти, диска и видеокарты (равно или не меньше заданного), а также метод подсчета общей суммы. Реализовать методы объединения и пересечения прайс-листов (см. задание 1). Методы добавления и изменения принимают в качестве входного параметра объект класса Model. Метод поиска возвращает объект класса Model в качестве результата.

Вариант 12. Класс Polinom

Создать класс Polinom для работы с многочленами до 100-й степени. Коэффициенты должны быть представлены массивом из 100 элементов-коэффициентов. Младшая степень имеет меньший индекс (нулевая степень — нулевой индекс). Размер массива задается как аргумент конструктора инициализации. Реализовать арифметические операции и операции сравнения, вычисление значения полинома для заданного значения х, дифференцирование, интегрирование.

Вариант 13. Класс Fraction

Создать класс Fraction для работы с беззнаковыми дробными десятичными числами. Число должно быть представлено двумя массивами типа unsigned char: целая и дробная часть, каждый элемент — десятичная цифра. Для целой части младшая цифра имеет меньший индекс, для дробной части старшая цифра имеет меньший индекс (десятые — в нулевом элементе, сотые — в первом, и т. д.). Реальный размер массивов задается как аргумент конструктора инициализации. Реализовать арифметические операции сложения, вычитания и умножения, и операции сравнения.

Вариант 14. Класс Money

Реализовать класс Money, используя для представления суммы денег массив структур. Структура имеет два поля: номинал купюры и количество купюр данного достоинства. Номиналы представить как перечислимый тип nominal. Элемент массива структур с меньшим индексом содержит меньший номинал. Номиналы российских рублей могут принимать значения 1, 2, 5, 10, 50, 100, 500, 1000, 5000. Копейки представить как 0.01 (1 копейка), 0.05 (5 копеек), 0.1 (10 копеек), 0.5 (50 копеек). Создать класс Money для работы с денежными суммами. Сумма должна быть представлена полями-номиналами, значениями которых должно быть количество купюр данного достоинства. Реализовать сложение сумм, вычитание сумм, деление сумм, деление суммы на дробное число, умножение на дробное число и операции сравнения. Дробная часть (копейки) при выводе на экран должны быть отделена, от целой части запятой.

Вариант 15. Класс Data

Реализовать класс Data, используя для представления месяцев массив структур. Структура имеет два поля: название месяца (строка), количество дней в месяце. Индексом в массиве месяцев является перечислимый тип month. Реализовать два варианта класса: с обычным массивом и статическим массивом месяцев. Класс Date для работы с датами в формате «год.месяц.день». Дата представляется структурой с тремя нолями типа unsigned int: для года, месяца и дня. Класс должен включать не менее трех функций инициализации: числами, строкой вида «год.месяц.день» (например, «2004.08.31») и датой. Обязательными операциями являются: вычисление даты через заданное количество дней, вычитание заданного количества дней из даты, определение високосности года, присвоение и получение отдельных частей (год, месяц, день), сравнение дат (равно, до, после), вычисление количества дней между датами.

 

Литература

1. С/С++. Программирование на языке высокого уровня / Т.А.Павловская. –СПб.:Питер, 2002. -646 с.

2. С/С++. Объектно-ориентированное программирование: Практикум /Т.А.Павловская, Ю.А.Щупак. –СПб.: Питер, 2008. – 265 с.

3. Прата, Стивен. Язык программирования С++. Лекции и упражнения, 5-е изд.: Пер. с англ. – М.: ООО «И.Д.Вильямс», 2007. – 1184 с.

4. Страутструп Б. Язык программирования С++. 2-е издание. – М.: Бином, 2000. –358 с.

5. Б.И. Пахомов С/С++ и MS Visual C++ 2010 для начинающих. [Книга]. - СПб.: , : БХВ-Петербург, 2011. - 736 с..

6. Культин Н. Б. Microsoft Visual C++ в задачах и примерах [Книга]. - СПб. : БХВ-Петербург, 2010. - 272 с..

7. Лаптев В.В. С++. Объектно-ориентированное программирование: учебное пособие [Книга]. - СПб. : Питер, 2008. - 464 с..

8. Хортон А Visual C++ 2010: полный курс.: Пер. с англ [Книга]. - М. : ООО "И.Д. Вильямс", 2011. - 1216 с..