Разработка информационно-аналитической системы на тему "Конкурс поэтов" с использованием технологии объектно-ориентированного программирования

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Федеральное государственное бюджетное образовательное

учреждение высшего профессионального образования

ТАМБОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ТЕХНИЧЕСКИЙ КОЛЛЕДЖ

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту на тему:

Разработка информационно аналитической системы на тему «Конкурс поэтов» с использованием технологии объектно-ориентированного программирования

Автор

Корчагин Роман Александрович

Группа КПР-33

Тамбов, 2013

Задание на курсовой проект

Автор курсового проекта Корчагин Р. А.

1 Тема Разработка информационно аналитической системы на тему «Конкурс поэтов» с использованием технологии объектно-ориентированного программирования утверждена приказом по Техническому колледжу ТГТУ

№ от «__"__201 г

2 Срок представления проекта к защите «___» _____________201_г.

3 Исходные данные для проектирования:

Данные по курсовому проекту указаны в списке используемой литературы

4 Перечень разделов пояснительной записки

4.1 Введение

4.2 Задание на разработку

4.3 Анализ предметной области

4.4 Разработка оконного приложения

4.5 Результаты тестирования

4.6 Заключение

4.7 Список использованной литературы

5 Перечень графического материала: общий вид главного окна MFC приложения, фрагменты программного кода приложения

Руководитель курсового проекта: Мосягина Н. Г.

Задание принял к исполнению: Дорошина Е. Э.

Аннотация

Тема курсового проекта: «Разработка информационно аналитической системы на тему „Конкурс поэтов“ с использованием технологии объектно-ориентированного программирования»

Объем курсового проекта 43 страницы, он содержит 1 таблицу, 1 рисунок, 2 плаката, 5 источников литературы, а также 2 приложения.

В пояснительной записке курсового проекта содержится данные из введения, четырех основных разделов, заключения, списка использованных источников и приложений.

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

В первой части поставлены задачи и цели на создание курсового проекта.

Во второй части произведен анализ предметной области «Конкурс поэтов» на основе объектно-ориентированного подхода.

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

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

Заключение содержит основные выводы по результатам курсового проектирования. В нем отмечены основные моменты создания оконного приложения, рекомендации по его дальнейшему использованию.

Содержание

Введение

1. Задание на разработку

2. Анализ предметной области

3. Разработка оконного приложения

3.1 Разработка информационной модели предметной области

3.2 Выбор и описание средств проектирования

3.3 Реализация приложения

4. Результаты тестирования

Заключение

Список использованных источников

Приложение

Введение

Сегодня компьютеры все больше и больше внедряются в нашу жизнь. Для их эффективного использования необходимы удобные и практичные программы, которые создаются на языках программирования. Один из самых распространенных языков является С++.

С++ - был разработан в начале 80-х годов в Bell Laboratories. С++ - расширение С, т. е. он обеспечивает кардинальное преимущество языка С++, как над своим предшественником языком С так и над другими языками высокого уровня: поддержка объектно-ориентированного программирования, перегруженных операций и возможность разработки полномасштабных windows-приложений. Можно сказать, что язык С++ является одним из совершенных и сложных языков программирования на сегодняшний день.

С помощью языка С++ можно решать всевозможные задачи ставящиеся перед современным программистом: написание системных программ, разработка полноценных windows-приложений, объектное моделирование. Благодаря тому, что язык С++ первоначально разрабатывался как язык системного программирования, то он предоставляет программисту широкие возможности для работы с аппаратурой. Так как язык С++ подвергся полномасштабной обработки, то он обеспечивает пользователя широким набором средств для решения задач объектно-ориентированного программирования, благодаря этому язык С++ позволяет осуществить интеграцию принципов объектно-ориентированного программирования на аппаратный уровень. В связи с тем, что сегодня уровень сложности программного обеспечения очень высок, разработка приложений Windows с использованием только одного какого-либо языка (например, языка С) значительно затрудняется. Чтобы облегчить работу программиста, все современные компиляторы языка С++ содержат специальные библиотеки классов. Такие библиотеки включают в себя практически весь программный интерфейс Windows и позволяют пользоваться при программировании средствами более высокого уровня, чем обычные вызовы функций. За счет этого значительно упрощается разработка приложений, имеющих сложный интерфейс пользователя, облегчается поддержка технологии OLE и взаимодействие с базами данных. В этом курсовом проекте проиллюстрированы основные разделы программирования, изучаемые в курсе программирования на языке С++. Выполнение данного курсового проекта позволяет приобрести следующие практические умения и навыки:

1. Отображение областей языка С++.

2. Алгоритмизация задач.

3. Разработка и отладка программ с помощью языка С++;

4. Оформление программной документации.

Темой курсового проекта является: «Разработка информационно аналитической системы на тему „Конкурс поэтов“ с использованием технологии объектно-ориентированного программирования». Данная программа будет незаменима организаторам подобных мероприятий.

Целью курсового проекта является разработка аналитической системы, в которой должны поддерживаться режимы учета зрителей и выступающих, их произведений, жанра, творческого багажа, порядка проведения. Система будет реализована на основе языка программирования C++ и библиотеки MFC. Для достижения намеченной цели необходимо будет решить следующие задачи:

1. произвести анализ предметной области;

2. разработать информационную модель предметной области

3. осуществить обоснованный выбор средств проектирования

4. реализовать приложения

5. оформить работу;

6. сделать выводы и заключение;

7. защитить курсовой проект.

1. Задание на разработку

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

1. Произвести анализ предметной области «Конкурс поэтов» и разработать информационную модель рассматриваемой области. В системе должны поддерживаться режимы учета гостей, выступающих, творческого багажа поэтов, произведений и их жанров.

2. Осуществить обоснованный выбор средств реализации информационной модели

3. На основе разработанной модели осуществить проектирование информационно аналитической системы «Конкурс поэтов» с использованием технологии объектно-ориентированного программирования

4. Произвести тестирование разработанного продукта.

2. Анализ предметной области

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

В ходе анализа предметной области необходимо на основе знакомства с литературными источниками и общения с заказчиком выявить:

1. Чему посвящена предметная область, какие в ней есть термины и понятия, субъекты и объекты, способы взаимодействия субъектов, способы использования объектов, закономерности.

2. Что входит в словарь предметной области.

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

Результат анализа предметной области оформляется в виде реферативного описания предметной области.

Предметная область должна представлять собой описание деятельности организаторов конкурса, необходима поддержка режимов учета зрителей и выступающих, их произведений, жанра, творческого багажа, порядка проведения. В соответствии с этим на главном окне приложения должны находиться поля для ввода фамилии, имени, отчества поэта или зрителя. Имеются переключатели для определения посетителя мероприятия. При использовании переключателя Зритель деактивируются окна учета произведения, жанра и очереди выступающего, если используется переключатель Участник, то эти окна активируются. Для учета произведений будет использоваться поле для ввода его названия. Должна быть реализована возможность выбора жанра произведения из комбинированного списка. Для просмотра творческого багажа поэтов будет использован также комбинированный список с фамилиями поэтов, при выборе которого в браузере будет открыта HTML-страничка с фамилией именем, отчеством, фотографией и опубликованными работами поэта.

Таким образом, в словарь предметной области будут входить следующие объекты: Фамилия поэта или зрителя, Имя посетителя, Отчество посетителя, Название произведения, жанр произведения, Очередь выступающего, Продолжительность гастролей, Количество голосов зрителей.

На поля ввода: Фамилия, Имя, Отчество должен быть установлен запрет на ввод чисел. А на поле Очередь должен быть установлен запрет на ввод текстовой информации, иначе программа выдаст окно с указанием ошибки. Так же необходимо предусмотреть возможность обновления полей ввода, обеспечить удобство пользовательского интерфейса.

оконный приложение информационный тестирование

3. Разработка оконного приложения

3.1 Разработка информационной модели предметной области

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

Таблица 1 -Переменные, планируемые к использованию

Имя переменной

Описание

Тип данных

Familiya

Фамилия поэта или зрителя

Текстовый

Imya

Имя поэта или зрителя

Текстовый

Otchestvo

Отчество поэта или зрителя

Текстовый

Zhanr

Жанр произведения

Текстовый

Poets

Фамилии поэтов

Текстовый

Ochered

Очередь участника

Числовой

Proiz

Название произведения

Текстовый

Окно приложения должно обеспечивать необходимые функции системы, связи между ее компонентами, его модель может выглядеть как на рисунке 1:

Рисунок 1 — Главное окно программы

Главное окно программы разделено на 2 области. Первая область предусматривает занесение основных сведений об участниках конкурса или зрителях. Вторая область нужна просмотра творческого багажа поэтов.

Так для добавления фамилии, имени, отчества поэта или зрителя, очереди или произведения, с которым будет выступать участник, нужно ввести необходимые данные в соответствующие поля. Так как жанр это исторически сложившиеся группы литературных произведений, то они заранее известны, а значит есть возможность создания комбинированного списка для выбора основных видов жанра. Так же у постоянных участников конкурса накапливается творческих багаж. Им заводится уникальная HTML-страничка с фамилией, именем, отчеством, фотографией и работами поэта. Для того чтобы перейти на страничку поэта на главном окне программы используется комбинированный список с фамилиями. Так же присутствуют два переключателя. При выборе переключателя Зритель поля: Очередь, произведение и жанр становятся неактивными, так как выступать могут только участники конкурса.

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

Нажав кнопку Следующий, главное окно обновляется, поля ввода и комбинированные списки примут начальные значения. Это позволит быстрее перейти к записи нового посетителя конкурса. При нажатии пользователем кнопки Завершить, программа заканчивает сеанс работы.

3.2 Выбор и описание средств проектирования

MFC является альтернативой системам визуального программирования, таким как Delphi или Visual Basic, предназначенной для опытных программистов. На сегодняшний день подавляющее большинство программ разрабатывается при помощи Microsoft Visual С++ и MFC. MFC — это стандарт программирования под Windows и «интернациональный язык общения». Такая ситуация объясняется многими причинами. В частности, только MFC позволяет создавать наиболее эффективные и устойчивые приложения, которые будут корректно вести себя не только в системе разработчика, но и в системах реальных пользователей. Также очень важно, что MFC поддерживает все современные технологии, реализованные в Windows, и при дополнении Windows почти сразу же дополняется и MFC.

MFC — это инструмент для программирования сложных приложений, от которых требуется высокая эффективность и надежность. MFC поощряет использование объектно-ориентированного программирования, что дает ощутимые преимущества при решении сложных (не с точки зрения только интерфейса пользователя) задач, по сравнению с компонентно-ориентированным подходом, применяемым в системах RAD (быстрой разработки приложений). Разрабатывая приложение в системе RAD, программист часто вообще не использует ООП, по крайней мере в явном виде, до тех пор, пока не соберется разработать собственный компонент. Это негативно сказывается на возможности последующего расширения возможностей. Тем не менее, не стоит воспринимать сказанное как критику систем RAD. Есть много классов приложений (например, базы данных), которые разумнее всего разрабатывать именно при помощи систем RAD, что и делают даже опытные Windows-программисты.

Библиотека MFC содержит большую иерархию классов, написанных на С++. На иерархии вершине находится класс СObject, который содержит различные функции, используемые во время выполнения программы и предназначенные, в частности, для предоставления информации о текущем типе во время выполнения, для диагностики, и для сериализации.

Если указатель или ссылка ссылается на объект, производный от класса CObject, то в этом случае предусмотрен механизм определения реального типа объекта с помощью макроса RUNTIME_CLASS (). Хотя в С++ имеется механизм RTTI, механизм, реализованный в MFC, намного более эффективен по производительности.

Каждый класс, производный от CObject, может по запросу проверить свое внутреннее состояние и выдать диагностическую информацию. Это интенсивно используется в MFC при отладке.

Сериализация — это механизм, позволяющий преобразовать текущее состояние объекта в последовательный поток байт, который обычно затем записывается на диск, и восстановить состояние объекта из последовательного потока, обычно при чтении с диска. Это позволяет сохранять текущее состояние приложения на диске, и восстанавливать его при последующем запуске.

Некоторые классы порождаются непосредственно от CObject. Наиболее широко используемыми среди них являются CCmdTarget, CFile, CDC, CGDIObject и CMenu. Класс ССmdTarget предназначен для обработки сообщений. Класс СFile предназначен для работы с файлами. Класс CDC обеспечивает поддержку контекстов устройств. Об контекстах устройств мы будем говорить несколько позднее. В этот класс включены практически все функции графики GDI. CGDIObject является базовым классом для различных DGI-объектов, таких как перья, кисти, шрифты и другие. Класс СMenu предназначен для манипуляций с меню. От класса CCmdTarget порождается очень важный класс CWnd. Он является базовым для создания всех типов окон, включая масштабируемые («обычные») и диалоговые, а также различные элементы управления. Наиболее широко используемым производным классом является CFrameWnd. Как Вы увидите в дальнейшем, в большинстве программ главное окно создается с помощью именно этого класса.

От класса CCmdTarget, через класс CWinThread, порождается, наверное, единственный из наиболее важных классов, обращение к которому в MFC-программах происходит напрямую: CWinApp. Это один из фундаментальных классов, поскольку предназначен для создания самого приложения. В каждой программе имеется один и только один объект этого класса. Как только он будет создан, приложение начнет выполняться.

Большинство функций, вызываемых в MFC-программе, являются членами одного из классов, определенных в библиотеке. Большинство функций API доступны через функции-члены MFC. Тем не менее, всегда можно обращаться к функциям API напрямую. Иногда это бывает необходимым, но все же в большинстве случаев удобнее использовать функции-члены MFC.

В библиотеке есть ряд глобальных функций. Все они начинаются с префикса Afx. (Когда MFC только разрабатывалась, то проект назывался AFX, Application Framework. После ряда существенных изменений AFX была переработана в MFC, но прежнее название сохранилось во многих идентификаторах библиотеки и в названиях файлов.) Например, очень часто используется функция AfxMessageBox (), отображающая заранее определенное окно сообщения. Но есть и член-функция MessageBox (). Таким образом, часто глобальные функции перекрываются функциями-членами.

Все MFC-программы включают заголовочный файл AFXWIN.H. В нем, а также в различных вспомогательных файлах, содержатся описания классов, структур, переменных и других объектов MFC. Он автоматически подключает большинство заголовочных файлов, относящихся к MFC, в том числе и WINDOWS. H, в котором определены все функции Windows API и другие объекты, которые используются при традиционном программировании на С и «чистом» API.

В простейшем случае программа, написанная с помощью MFC, содержит два класса, порождаемые от классов иерархии библиотеки: класс, предназначенный для создания приложения, и класс, предназначенный для создания окна. Другими словами, для создания минимальной программы необходимо породить один класс от CWinApp, а другой — от CFrameWnd. Эти два класса обязательны для любой программы.

API функции

Большинство функций, вызываемых в MFC-программе, являются членами одного из классов, определенных в библиотеке. Большинство функций API доступны через функции-члены MFC. Тем не менее, всегда можно обращаться к функциям API напрямую. Иногда это бывает необходимым, но все же в большинстве случаев удобнее использовать функции-члены MFC.

Глобальные функции AFX

В библиотеке есть ряд глобальных функций. Все они начинаются с префикса Afx. Когда MFC только разрабатывалась, то проект назывался AFX, Application Framework. После ряда существенных изменений AFX была переработана в MFC, но прежнее название сохранилось во многих идентификаторах библиотеки и в названиях файлов. Например, очень часто используется функция AfxMessageBox (), отображающая заранее определенное окно сообщения. Но есть и член-функция MessageBox (). Таким образом, часто глобальные функции перекрываются функциями-членами.

Все MFC-программы включают заголовочный файл AFXWIN.H. В нем, а также в различных вспомогательных файлах, содержатся описания классов, структур, переменных и других объектов MFC. Он автоматически подключает большинство заголовочных файлов, относящихся к MFC, в том числе и WINDOWS. H, в котором определены все функции Windows API и другие объекты, которые используются при традиционном программировании на С и «чистом» API.

Windows взаимодействует с программой, посылая ей сообщения.

Цикл сообщений

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

Создание приложения с помощью Visual C++

О принципах устройства приложения рассказывалось выше. Теперь рассмотрим, как оно создается с помощью Visual C++. Сначала разберем одно важное понятие — проект. До сих пор приложение рассматривалось, как только как совокупность объектов базовых и производных классов. Но для обеспечения работы приложения требуется нечто большее — наряду с описанием классов необходимо описание ресурсов, связанных с приложением, нужна справочная система и т. п. Термин «проект» как раз и используется, когда имеется в виду такой общий взгляд на приложение.

В среде Visual C++ можно строить различные типы проектов. Такие проекты после их создания можно компилировать и запускать на исполнение. Фирма Microsoft разработала специальный инструментарий, облегчающий и ускоряющий создание проектов в среде Visual C++. Например, мастер MFC AppWizard (exe) позволяет создать проект, Windows-приложения которое имеет однодокументный, многодокументный или диалоговый интерфейс и использует библиотеку MFC.

Инструментальное средство — ClassWizard (мастер классов)

Создаваемый остов приложения составлен так, что в дальнейшей работе с проектом можно использовать другое инструментальное средство — ClassWizard (мастер классов), предназначенное для создания остовов новых производных классов. Еще одно основное назначение ClassWizard в том, что он создает остовы для переопределяемых методов. Он позволяет показать все сообщения, приходящие классу, и создать остов обработчика любого из этих сообщений. Это только две основные функции ClassWizard. Он не всесилен, но его возможности довольно велики.

Средство ClassWizard предоставляет широкий спектр услуг. Он позволяет не только добавлять к существующему классу новые методы и данные.

Создание нового класса

При помощи ClassWizard можно добавить новый класс, созданный на основе базовых классов. В качестве базового класса можно использовать классы, наследованные от класса CCmdTarget или класса CRecordset. Для наследования классов от других базовых классов использовать средства ClassWizard нельзя. Такие классы надо создавать вручную, непосредственно в текстовом редакторе.

Полученная заготовка класса полностью работоспособна. Ее можно дополнить по своему усмотрению новыми методами и данными. Эту работу можно выполнить вручную, но гораздо лучше и проще воспользоваться услугами ClassWizard. За счет использования ClassWizard процедура создания собственного класса значительно ускоряется и уменьшается вероятность совершить ошибку во время объявления методов.

Включение в класс новых методов

Очень удобно использовать ClassWizard для включения в состав класса новых методов. Можно добавлять к классу методы, служащие для обработки сообщений Windows и команд от объектов, а также методы, переопределяющие виртуальные методы базовых классов.

ClassWizard не только позволяет добавить в класс новые методы, но и удалить их. ClassWizard самостоятельно удалит объявление метода из класса.

Включение в класс новых элементов данных

ClassWizard позволяет включать в класс не только новые методы, но и элементы данных, связанные с полями диалоговых панелей, форм просмотра и форм для просмотра записей баз данных и полей наборов записей. ClassWizard использует специальные процедуры, чтобы привязать созданные им элементы данных к класса к полям диалоговых панелей. Эти процедуры носят названия «обмен данными диалоговой панели» и «проверка данных диалоговой панели» (Dialog Data Exchange and Dialog Data Validation — DDX/DDV). Чтобы привязать поля из наборов записей к переменным, используется процедура обмена данными с полями записей (Record Field Exchange — RFX).

Процедуры DDX/DDV и RFX

Значительно упрощают программисту работу с диалоговыми панелями. Они позволяют связать поля диалоговых панелей и переменные. Когда пользователь редактирует поля диалоговых панелей, процедуры DDV проверяют введенные значения и блокируют ввод запрещенных значений. Затем процедуры DDX автоматически копируют содержимое полей диалоговых панелей в привязанные к ним элементы данных класса. И наоборот, когда приложение изменяет элементы данных класса, привязанные к полям диалоговой панели, процедуры DDX могут сразу отобразить новые значения полей на экране компьютера. Процесс получения и обработки сообщений может показаться чересчур сложным, но, тем не менее, ему должны следовать все Windows-программы. К счастью, при использовании библиотеки MFC большинство частных деталей скрыты от программиста, хотя и продолжают неявно присутствовать в программе. В простейшем случае программа, написанная с помощью MFC, содержит два класса, порождаемые от классов иерархии библиотеки: класс, предназначенный для создания приложения, и класс, предназначенный для создания окна. Другими словами, для создания минимальной программы необходимо породить один класс от CWinApp, а другой — от CFrameWnd. Эти два класса обязательны для любой программы. Кроме создания вышеупомянутых классов, в программе также должна быть организована обработка всех сообщений, поступающих от Windows. В данном примере программа еще ничего полезного не делает, поэтому отвечать на каждое сообщение не нужно. MFC обработает все сообщения, которые нас не интересуют. Тем не менее, в этом примере присутствует карта откликов на сообщения, или просто карта сообщений. Позже мы рассмотрим ее подробнее. Как уже упоминалось, MFC — это базовый набор (библиотека) классов, написанных на языке С++ и предназначенных для упрощения и ускорения процесса программирования для Windows. Библиотека содержит многоуровневую иерархию классов, насчитывающую около 200 членов. Они дают возможность создавать Windows-приложения на базе объектно-ориентированного подхода. С точки зрения программиста, MFC представляет собой каркас, на основе которого можно писать программы для Windows.

Преимущество MFC библиотек

Библиотека MFC разрабатывалась для упрощения задач, стоящих перед программистом. Как известно, традиционный метод программирования под Windows требует написания достаточно длинных и сложных программ, имеющих ряд специфических особенностей. В частности, для создания только каркаса программы таким методом понадобится около 75 строк кода. По мере же увеличения сложности программы ее код может достигать поистине невероятных размеров. Однако та же самая программа, написанная с использованием MFC, будет примерно в три раза меньше, поскольку большинство частных деталей скрыто от программиста.

Одним из основных преимуществ работы с MFC является возможность многократного использования одного и того же кода. Так как библиотека содержит много элементов, общих для всех Windows-приложений, нет необходимости каждый раз писать их заново. Вместо этого их можно просто наследовать (говоря языком объектно-ориентированного программирования). Кроме того, интерфейс, обеспечиваемый библиотекой, практически независим от конкретных деталей, его реализующих. Поэтому программы, написанные на основе MFC, могут быть легко адаптированы к новым версиям Windows (в отличие от большинства программ, написанных обычными методами).

Еще одним существенным преимуществом MFC является упрощение взаимодействия с прикладным программным интерфейсом (API) Windows. Любое приложение взаимодействует с Windows через API, которое содержит несколько сот функций. Внушительный размер API затрудняет попытки понять и изучить его целиком. Зачастую, даже сложно проследить, как отдельные части API связанны друг с другом! Но поскольку библиотека MFC объединяет (путем инкапсуляции) функции API в логически организованное множество классов, интерфейсом становится значительно легче управлять. Поскольку MFC представляет собой набор классов, написанных на языке С++, поэтому программы, написанные с использованием MFC, должны быть в то же время программами на С++. Для этого необходимо владеть соответствующими знаниями. Для начала необходимо уметь создавать собственные классы, понимать принципы наследования и уметь переопределять виртуальные функции. Хотя программы, использующие библиотеку MFC, обычно не содержат слишком специфических элементов из арсенала С++, для их написания тем не менее требуются солидные знания в данной области

3.3 Реализация приложения

В данной программе используются следующие переменные:

Familiya — CString

Imya — CString

Otchestvo — CString

Zhanr — CComboBox

Poets — CComboBox

Ochered — CString

Proiz — CString

Для типов данных CString и int использовал категорию Value. А для типа данных CComboBox использовал категорию Control.

Основные элементы программного кода:

Определение списка жанров и списка поэтов:

BOOL CPoets_KonkursDlg: :OnInitDialog ()

{

CDialogEx: :OnInitDialog ();

Zhanr. AddString (_T («Зритель»));

Zhanr. AddString (_T («Повесть»));

Zhanr. AddString (_T («Рассказ»));

Zhanr. AddString (_T («Роман»));

Zhanr. AddString (_T («Водевиль»));

Zhanr. AddString (_T («Трагедия»));

Zhanr. AddString (_T («Драма»));

Zhanr. AddString (_T («Поэма»));

Zhanr. AddString (_T («Ямб»));

Zhanr. AddString (_T («Эпопея»));

Zhanr. AddString (_T («Очерк»));

Zhanr. AddString (_T («Сказка»));

Zhanr. AddString (_T («Ода»));

Zhanr. AddString (_T («Миф»));

Poets. AddString (_T («Тютчев»));

Poets. AddString (_T («Гоголь»));

Poets. AddString (_T («Пушкин»));

Poets. AddString (_T («Лермонтов»));

Poets. AddString (_T («Есенин»));

Poets. SetCurSel (0);

В переменные Poets и Zhanr записывается строка с названием жанра или фамилии поэта с помощью функции AddString. Начальное значение списка установлено, с помощью функции SetCurSel, установлено только для комбинированного списка с названием переменной Poets, так как жанр должен быть пустым, для того чтобы не приписать его Зрителю в текстовый файл.

Для того, чтобы переключатели активировали и деактивировали поля ввода и комбинированный список создал обработчик событий для каждого и записал код:

Для переключателя Зритель

void CPoets_KonkursDlg: :OnBnClickedRadio1()

{

GetDlgItem (IDC_EDIT4)-> EnableWindow (false);

GetDlgItem (IDC_EDIT5)-> EnableWindow (false);

GetDlgItem (IDC_COMBO1)-> EnableWindow (false);

}

Для переключателя Участник

void CPoets_KonkursDlg: :OnBnClickedRadio2()

{

GetDlgItem (IDC_EDIT4)-> EnableWindow (true);

GetDlgItem (IDC_EDIT5)-> EnableWindow (true);

GetDlgItem (IDC_COMBO1)-> EnableWindow (true);

}

Функция GetDlgItem используется для выбора какого-либо поля, списка, или любого элемента панели инструментов, по его идентификатору.

Функция EnableWindow включает или отключает мышь и ввод с клавиатуры в определенном окне или элементе управления. Когда ввод заблокирован, в скобках после функции стоит значение false, окно не принимает ввод типа щелчков мыши и нажатий клавиш. Когда ввод включен в скобках после функции стоит значение true, окно принимает всю вводимую информацию

Запись данных в файл:

void CPoets_KonkursDlg: :OnBnClickedButton1()

{

UpdateData (true);

if (Familiya> ="0"&&Familiya<="9″)

{CWnd: :MessageBox (_T («В поле < Фамилия> должно быть текстовое значение»),_T («Ошибка»), 0);

return; }

if (Imya> ="0"&&Imya<="9″)

{CWnd: :MessageBox (_T («В поле < Имя> должно быть текстовое значение»),_T («Ошибка»), 0);

return; }

if (Otchestvo> ="0"&&Otchestvo<="9″)

{CWnd: :MessageBox (_T («В поле < Отчество> должно быть текстовое значение»),_T («Ошибка»), 0);

return; }

char *locale=setlocale (LC_ALL,"RUS");

CString r;

Zhanr. GetLBText (Zhanr. GetCurSel (), r);

fstream datei;

datei. open («Konkurs_Poetov. txt», ios: app);

if (!datei)

{

cout< <"Error"<<endl;

}

else

{

datei< <Familiya<<" «< <Imya<<» «< <Otchestvo<<» «< <r<<» «< <Proiz<<» «< <Ochered<<» «< <endl;

}

datei. close ();

UpdateData (false);

}

В первую очередь, используя оператор if, ставлю запрет на ввод числовых данных в поля Фамилия, Имя, Отчество. Для этого использовал оконный класс CWnd. MessageBox указывает на то, что будет создано окно с текстом, который написан в скобках.

С помощью оператора fstream создал текстовый поток с именем datei.

Строка datei. open («Konkurs_Poetov. txt «, ios: :app) открывает поток с именем datei и открывает для записи текстовый файл.

С помощью записи datei< <… в файл записываются значения всех перечисленных переменных в том порядке, в каком переменные расставлены слева на право.

Сброс значений в полях Фамилия, Имя, Отчество, Очередь и Жанр:

void CPoets_KonkursDlg: :OnBnClickedButton2()

{

UpdateData (true);

Familiya=Imya=Otchestvo=Proiz=Ochered=" «;

UpdateData (false);

}UpdateData (false);

После нажатия кнопки Следующий, все перемененные принимают свои начальные значения.

Открытие HTML-страниц с творческим багажом поэтов:

void CPoets_KonkursDlg: :OnBnClickedButton3()

{

switch (Poets. GetCurSel ())

{

case 0:

ShellExecute (NULL,_T («open»), _T («http: //demo. aiva-studio. ru/gogol. html»), _T (««), _T («c: «), SW_SHOWNORMAL);

break;

case 1:

ShellExecute (NULL,_T («open»), _T («http: //demo. aiva-studio. ru/esenin. html»), _T (««), _T («c: «), SW_SHOWNORMAL);

break;

case 2:

ShellExecute (NULL,_T («open»), _T («http: //demo. aiva-studio. ru/lermontov. html»), _T (««), _T («c: «), SW_SHOWNORMAL);

break;

case 3:

ShellExecute (NULL,_T («open»), _T («http: //demo. aiva-studio. ru/pushkin. html»), _T (««), _T («c: «), SW_SHOWNORMAL);

break;

case 4:

ShellExecute (NULL,_T («open»), _T («http: //demo. aiva-studio. ru/tutchev. html»), _T (««), _T («c: «), SW_SHOWNORMAL);

break;

}}

Использовал оператор выбора Switch, который, при нажатии на кнопку Найти, позволит выбрать одно значение из комбинированного списка и перейти на страничку к конкретно выбранному поэту.

4. Результаты тестирования

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

Заключение

В ходе выполнения курсового проекта был проведен анализ предметной области в соответствие с заданием. Разработанная система была написана на языке C++ и библиотеки MFC.

Для создания проекта были использованы знания, полученные в ходе лекций.

Разработанную систему можно использовать на конкурсных мероприятиях с участием поэтов, в котором нужен учет посетителей.

Список использованных источников

1. Дейл, Н. Программирование на С++/Н. Дейл, Ч. Уимз, М. Хедингтон. -М.: ДМК Пресс, 2007. — 672 с.

2. ИНТУИТ: Национальный открытый университет [Электронный ресурс]. — Режим доступа: URL: http: //www. intuit. ru/studies/courses/17/17/lecture/265 (дата обращения: 25. 03. 13).

3. Википедия: свободная энциклопедия [Электронный ресурс]. — Режим доступа: URL: http: //ru. wikipedia. org (дата обращения: 5. 04. 13).

4. Семакин, И. Г. Основы программирования: учебник для сред. проф. образования / И. Г. Семакин, А. П. Шестаков. -М.: Академия, 2008.- 374 с.

Приложение А

Общий вид главного окна приложения

Рисунок, А — Общий вид главного окна приложения информационно аналитической системы на тему «Конкурс поэтов»

Приложение Б

// Poets_KonkursDlg. cpp: файл реализации

//

#include «stdafx. h»

#include «Poets_Konkurs. h»

#include «Poets_KonkursDlg. h»

#include «afxdialogex. h»

#include «afxdialogex. h»

#include < iostream>

#include «stdio. h»

#include < fstream>

#include < clocale>

#include < string>

using namespace std;

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// Диалоговое окно CAboutDlg используется для описания сведений о приложении

class CAboutDlg: public CDialogEx

{

public:

CAboutDlg ();

// Данные диалогового окна

enum { IDD = IDD_ABOUTBOX };

protected:

virtual void DoDataExchange (CDataExchange* pDX); // поддержка DDX/DDV

// Реализация

protected:

DECLARE_MESSAGE_MAP ()

};

CAboutDlg: :CAboutDlg (): CDialogEx (CAboutDlg: :IDD)

{

}

void CAboutDlg: :DoDataExchange (CDataExchange* pDX)

{

CDialogEx: :DoDataExchange (pDX);

}

BEGIN_MESSAGE_MAP (CAboutDlg, CDialogEx)

END_MESSAGE_MAP ()

// диалоговое окно CPoets_KonkursDlg

CPoets_KonkursDlg: :CPoets_KonkursDlg (CWnd* pParent /*=NULL*/)

: CDialogEx (CPoets_KonkursDlg: :IDD, pParent)

, Familiya (_T (««))

, Imya (_T (««))

, Otchestvo (_T (««))

, Ochered (_T (««))

, Proiz (_T (««))

{

m_hIcon = AfxGetApp ()-> LoadIcon (IDR_MAINFRAME);

}

void CPoets_KonkursDlg: :DoDataExchange (CDataExchange* pDX)

{

CDialogEx: :DoDataExchange (pDX);

DDX_Text (pDX, IDC_EDIT1, Familiya);

DDX_Text (pDX, IDC_EDIT2, Imya);

DDX_Text (pDX, IDC_EDIT3, Otchestvo);

DDX_Text (pDX, IDC_EDIT4, Ochered);

DDX_Text (pDX, IDC_EDIT5, Proiz);

DDX_Control (pDX, IDC_COMBO1, Zhanr);

DDX_Control (pDX, IDC_COMBO2, Poets);

}

BEGIN_MESSAGE_MAP (CPoets_KonkursDlg, CDialogEx)

ON_WM_SYSCOMMAND ()

ON_WM_PAINT ()

ON_WM_QUERYDRAGICON ()

ON_BN_CLICKED (IDC_BUTTON3, & CPoets_KonkursDlg:OnBnClickedButton3)

ON_BN_CLICKED (IDC_BUTTON1, & CPoets_KonkursDlg:OnBnClickedButton1)

ON_BN_CLICKED (IDC_BUTTON2, & CPoets_KonkursDlg:OnBnClickedButton2)

ON_BN_CLICKED (IDC_RADIO1, & CPoets_KonkursDlg:OnBnClickedRadio1)

ON_BN_CLICKED (IDC_RADIO2, & CPoets_KonkursDlg:OnBnClickedRadio2)

END_MESSAGE_MAP ()

// обработчики сообщений CPoets_KonkursDlg

BOOL CPoets_KonkursDlg: :OnInitDialog ()

{

CDialogEx: :OnInitDialog ();

Zhanr. AddString (_T («Поэма»));

Zhanr. AddString (_T («Зритель»));

Zhanr. AddString (_T («Рассказ»));

Zhanr. AddString (_T («Роман»));

Zhanr. AddString (_T («Водевиль»));

Zhanr. AddString (_T («Трагедия»));

Zhanr. AddString (_T («Повесть»));

Zhanr. AddString (_T («Ямб»));

Zhanr. AddString (_T («Эскиз»));

Zhanr. AddString (_T («Эпопея»));

Zhanr. AddString (_T («Очерк»));

Zhanr. AddString (_T («Сказка»));

Zhanr. AddString (_T («Ода»));

Zhanr. AddString (_T («Миф»));

Poets. AddString (_T («Тютчев»));

Poets. AddString (_T («Гоголь»));

Poets. AddString (_T («Пушкин»));

Poets. AddString (_T («Лермонтов»));

Poets. AddString (_T («Есенин»));

Poets. SetCurSel (0);

// Добавление пункта «О программе…» в системное меню.

// IDM_ABOUTBOX должен быть в пределах системной команды.

ASSERT ((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT (IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu (FALSE);

if (pSysMenu ≠ NULL)

{

BOOL bNameValid;

CString strAboutMenu;

bNameValid = strAboutMenu. LoadString (IDS_ABOUTBOX);

ASSERT (bNameValid);

if (!strAboutMenu. IsEmpty ())

{

pSysMenu-> AppendMenu (MF_SEPARATOR);

pSysMenu-> AppendMenu (MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Задает значок для этого диалогового окна. Среда делает это автоматически,

// если главное окно приложения не является диалоговым

SetIcon (m_hIcon, TRUE); // Крупный значок

SetIcon (m_hIcon, FALSE); // Мелкий значок

// TODO: добавьте дополнительную инициализацию

return TRUE; // возврат значения TRUE, если фокус не передан элементу управления

}

void CPoets_KonkursDlg: :OnSysCommand (UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout. DoModal ();

}

else

{

CDialogEx: :OnSysCommand (nID, lParam);

}

}

// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,

// чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений,

// это автоматически выполняется рабочей областью.

void CPoets_KonkursDlg: :OnPaint ()

{

if (IsIconic ())

{

CPaintDC dc (this); // контекст устройства для рисования

SendMessage (WM_ICONERASEBKGND, reinterpret_cast< WPARAM>(dc. GetSafeHdc ()), 0);

// Выравнивание значка по центру клиентского прямоугольника

int cxIcon = GetSystemMetrics (SM_CXICON);

int cyIcon = GetSystemMetrics (SM_CYICON);

CRect rect;

GetClientRect (& rect);

int x = (rect. Width () — cxIcon + 1) / 2;

int y = (rect. Height () — cyIcon + 1) / 2;

// Нарисуйте значок

dc. DrawIcon (x, y, m_hIcon);

}

else

{

CDialogEx: :OnPaint ();

}

}

// Система вызывает эту функцию для получения отображения курсора при перемещении

// свернутого окна.

HCURSOR CPoets_KonkursDlg: :OnQueryDragIcon ()

{

return static_cast< HCURSOR>(m_hIcon);

}

void CPoets_KonkursDlg: :OnBnClickedButton3()

{

switch (Poets. GetCurSel ())

{

case 0:

ShellExecute (NULL,_T («open»), _T («http: //demo. aiva-studio. ru/gogol. html»), _T (««), _T («c: «), SW_SHOWNORMAL);

break;

case 1:

ShellExecute (NULL,_T («open»), _T («http: //demo. aiva-studio. ru/esenin. html»), _T (««), _T («c: «), SW_SHOWNORMAL);

break;

case 2:

ShellExecute (NULL,_T («open»), _T («http: //demo. aiva-studio. ru/lermontov. html»), _T (««), _T («c: «), SW_SHOWNORMAL);

break;

case 3:

ShellExecute (NULL,_T («open»), _T («http: //demo. aiva-studio. ru/pushkin. html»), _T (««), _T («c: «), SW_SHOWNORMAL);

break;

case 4:

ShellExecute (NULL,_T («open»), _T («http: //demo. aiva-studio. ru/tutchev. html»), _T (««), _T («c: «), SW_SHOWNORMAL);

break;

}

void CPoets_KonkursDlg: :OnBnClickedButton1()

{

UpdateData (true);

if (Familiya> ="0"&&Familiya<="9″)

{CWnd: :MessageBox (_T («В поле < Фамилия> должно быть текстовое значение»),_T («Ошибка»), 0);

return; }

if (Imya> ="0"&&Imya<="9″)

{CWnd: :MessageBox (_T («В поле < Имя> должно быть текстовое значение»),_T («Ошибка»), 0);

return; }

if (Otchestvo> ="0"&&Otchestvo<="9″)

{CWnd: :MessageBox (_T («В поле < Отчество> должно быть текстовое значение»),_T («Ошибка»), 0);

return; }

char *locale=setlocale (LC_ALL,"RUS");

CString r;

Zhanr. GetLBText (Zhanr. GetCurSel (), r);

fstream datei;

datei. open («Konkurs_Poetov. txt», ios: app);

if (!datei)

{

cout< <"Error"<<endl;

}

else

{

datei< <Familiya<<" «< <Imya<<» «< <Otchestvo<<» «< <r<<» «< <Proiz<<» «< <Ochered<<» «< <endl;

}

datei. close ();

UpdateData (false);

}

void CPoets_KonkursDlg: :OnBnClickedButton2()

{

UpdateData (true);

Familiya=Imya=Otchestvo=Proiz=Ochered=" «;

UpdateData (false);

}

void CPoets_KonkursDlg: :OnBnClickedRadio1()

{

GetDlgItem (IDC_EDIT4)-> EnableWindow (false);

GetDlgItem (IDC_EDIT5)-> EnableWindow (false);

GetDlgItem (IDC_COMBO1)-> EnableWindow (false);

}

void CPoets_KonkursDlg: :OnBnClickedRadio2()

{

GetDlgItem (IDC_EDIT4)-> EnableWindow (true);

GetDlgItem (IDC_EDIT5)-> EnableWindow (true);

GetDlgItem (IDC_COMBO1)-> EnableWindow (true);

}

ПоказатьСвернуть
Заполнить форму текущей работой