Интелектуальное фортепиано
Аналитический обзор сред программирования: Qt 5.3.0, Delphi, Builder C++ и Visual Studio C++. Разработка программы "Интелектуальное фортепиано", с помощью которой можно проиграть, записать, воспроизвести мелодию. Создание пользовательского интерфейса.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 13.04.2015 |
Размер файла | 296,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
программирование интеллектуальный фортепиано интерфейс
Введение
1. Аналитический обзор сред программирования
1.1 Qt 5.3.0
1.2 Delphi
1.3 Builder C++
1.4 Visual Studio C++
1.5 Обоснование выбора среды программирования
2. Разработка программы
2.1 Описание задания
2.2 Текст программы
3. Описание программы
3.1 Интерфейс
3.2 Запуск и работа
Выводы
Список используемой литературы
Введение
Программа - это детальное и законченное описание алгоритма средствами языка программирования. Исполнителем программы является компьютер. Для выполнения компьютером программа должна быть представлена в машинном коде - последовательности чисел, понимаемых процессором. Написать программу в машинных кодах вручную достаточно сложно. Поэтому сегодня практически все программы создаются с помощью языков программирования, которые по своим синтаксису и семантике приближены к естественному человеческому языку. Это снижает трудоемкость программирования.
При выполнении задания этой курсовой работы, и написании программы был выбран язык программирования С++, разработанный в 1983 году Бёрном Страуструпом. Синтаксис C++ унаследован от языка C. Одним из принципов разработки было сохранение совместимости с C. Тем не менее, C++ не является в строгом смысле надмножеством C; множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико, но не включает все возможные программы на C.
Последней крупной революцией, происходящей в программировании, считается переход на визуальное программирование. Этот переход происходит прямо на наших глазах. Визуальность дает нам еще более удобные средства разработки для более быстрого написания кода, но проигрывает ООП по быстроте работы. Примером языка визуального программирования является C++.
1. Аналитический обзор сред программирования
1.1 Основные особенности среды Qt 5.3.0
Qt - кросс-платформенный инструментарий разработчика прикладного программного обеспечения, широко используемый для создания графических интерфейсов. Он написан на C++ и предоставляет мощные расширения этого языка.
Также доступны интерфейсы для других языков программирования, таких как Python (PyQt), Ruby (Korundum/QtRuby) и Perl (PerlQt).
Отличительная особенность Qt от других библиотек - использование Meta Object Compiler (MOC) - предварительной системы обработки исходного кода. MOC позволяет во много раз увеличить мощь библиотек, вводя такие понятия, как слоты и сигналы. Кроме того, это позволяет сделать код более лаконичным. Утилита MOC ищет в заголовочных файлах на C++ описания классов, содержащие макрос Q_OBJECT, и создаёт дополнительный исходный файл на C++, содержащий метаобъектный код.
Qt позволяет создавать собственные плагины и размещать их непосредственно в панели визуального редактора. Также существует возможность расширения привычной функциональности виджетов, связанной с размещением их на экране, отображением, перерисовкой при изменении размеров окна.
Qt комплектуется визуальной средой разработки графического интерфейса "Qt Designer", позволяющей создавать диалоги и формы в режиме WYSIWYG. В поставке Qt есть "Qt Linguist" - графическая утилита, позволяющая упростить локализацию и перевод программы на многие языки; и "Qt Assistant" - справочная система Qt, упрощающая работу с документацией по библиотеке, а также позволяющая создавать кросс-платформенную справку для разрабатываемого на основе Qt ПО. Начиная с версии 4.5.0 в комплект Qt включена среда разработки "Qt Creator", которая включает в себя редактор кода, справку, графические средства "Qt Designer" и возможность отладки приложений. "Qt Creator" может использовать GCC или Microsoft VC++ в качестве компилятора и GDB в качестве отладчика. Для Windows версий библиотека комплектуется компилятором, заголовочными и объектными файлами MinGW .
Библиотека разделена на несколько модулей, для четвёртой версии библиотеки это:
· QtCore - классы ядра библиотеки, используемые другими модулями;
· QtGui - компоненты графического интерфейса;
· QtNetwork - набор классов для сетевого программирования. Поддержка различных высокоуровневых протоколов может меняться от версии к версии.
В версии 4.2.x присутствуют классы для работы с протоколами FTP и HTTP.
Для работы с протоколами TCP/IP предназначены такие классы, как:
· QTcpServer, QTcpSocket для TCP и QUdpSocket для UDP;
· QtOpenGL - набор классов для работы с OpenGL;
· QtSql - набор классов для работы с базами данных с использованием языка структурированных запросов SQL.
Основные классы данного модуля в версии 4.2.х: QSqlDatabase - класс для предоставления соединения с базой, для работы с какой-нибудь конкретной базой данных требует объект, унаследованный от класса QSqlDriver - абстрактного класса, который реализуется для конкретной базы данных и может требовать для компиляции SDK базы данных. Например, для сборки драйвера под базу данных FireBird/InterBase требует .h файлы и библиотеки статической линковки, входящие в комплект поставки данной БД:
· QtScript - классы для работы с Qt Scripts;
· QtSvg - классы для отображения и работы с данными Scalable Vector
· Graphics (SVG);
· QtXml - модуль для работы с XML, поддерживается SAX и DOM модели работы;
· QtDesigner - классы создания расширений QtDesigner для своих собственных виджетов;
· QtUiTools - классы для обработки в приложении форм Qt Designer;
· QtAssistant - справочная система;
· Qt3Support - модуль с классами, необходимыми для совместимости библиотекой Qt версии 3.х.х;
· QtTest - модуль для работы с UNIT тестами;
· QtWebKit - модуль WebKit, интегрированный в Qt и доступный через её классы;
· QtXmlPatterns - модуль для поддержки XQuery 1.0 и XPath 2.0;
· Phonon - модуль для поддержки воспроизведения и записи видео и аудио, как локально, так и с устройств и по сети;
· QtCLucene - модуль для поддержки полнотекстового поиска, применяется в новой версии Assistant в Qt 4.4;
· ActiveQt - модуль для работы с ActiveX и COM технологиями для Qt-разработчиков под Windows;
· QtDeclarative - модуль, предоставляющий декларативный фреймворк для создания динамичных, настраиваемых пользовательских интерфейсов.
· CamelCasing: имена классов выглядят как MyClassName, а имена методов - как myMethodName. При этом имена всех классов Qt начинаются с Q, например QObject, QList или QFont.
Для эффективной работы с классами на стадии выполнения в Qt используется специальная объектная модель, расширяющая модель C++. В частности, добавляются следующие возможности: древовидные иерархии объектов;
· аналог dynamic_cast для библиотеки, не использующий RTTI;
· взаимодействие объектов через сигналы и слоты;
· свойства объектов.
Многие объекты определяются значением сразу нескольких свойств, внутренними состояниями и связями с другими объектами. Они представляют собой индивидуальные сущности, и для них не имеет смысла операция буквального копирования, а также разделение данных в памяти. В Qt эти объекты наследуют свойства QObject [2] В тех случаях, когда объект требовалось бы рассматривать не как сущность, а как значение (например, при хранении в контейнере) - используются указатели.
Иногда указатель на объект, наследуемый от QObject, называют просто объектом.
При создании графических пользовательских интерфейсов взаимодействие объектов часто осуществляется через обратные вызовы, т.е. передачу кода для последующего выполнения (в виде указателей на функции, функторов, и т.д.).
Также популярна концепция событий и обработчиков, в которой обработчик действует как перехватчик события определенного объекта. В Qt вводится концепция сигналов и слотов. Сигнал отправляется при вызове соответствующего ему метода. Программисту при этом нужно только указать прототип метода в разделе signals.
Слот является методом, исполняемым при получении сигнала. Слоты могут объявляться в разделе pulic slots, protected slots или private slots. При этом уровень защиты влияет лишь на возможность вызова слотов в качестве обычных методов, но не на возможность подключения сигналов к слотам.
Модель сигналов и слотов отличается от модели событий и обработчиковnтем, что слот может подключаться к любому числу сигналов, а сигнал может подключаться к любому числу слотов. При отправке сигнала будут вызваны все подключенные к нему слоты.
Таким образом, для эффективной работы с классами на стадии выполнения Qt использует специальную объектную модель, в которой при помощи наследования от QObject и генерирования кода компилятором метаобъектов реализованы:
· иерархии объектов;
· специальный аналог dynamic_cast, не зависящий от RTTI;
· система сигналов и слотов;
· система свойств объектов;
· динамическая работа с классами.
1.2 Delphi
Borland Delphi - это объектно-ориентированная среда визуального программирования (RAD - Rapid Application Development). Она предназначена для ускоренной разработки высокопроизводительных 32-битных приложений, которые могут работать в среде Windows или Linux. При этом Delphi позволяет свести к минимуму объем вводимого вручную программного кода. В состав Delphi входят средства, необходимые для разработки, тестирования и установки приложений, включая обширную библиотеку компонентов (VCL - Visual Components Library), средства визуального проектирования, шаблоны приложений и форм, а также различные мастеры.
Внешний вид среды программирования Delphi отличается от многих других из тех, что можно увидеть в Windows. К примеру, Borland Pascal for Windows 7.0, Borland C++ 4.0, Word for Windows, Program Manager - это все MDI приложения и выглядят по-другому, чем Delphi. MDI (Multiple Document Interface) - определяет особый способ управления нескольких дочерних окон внутри одного большого окна. Среда Delphi же следует другой спецификации, называемой Single Document Interface (SDI), и состоит из нескольких отдельно расположенных окон. Это было сделано из-за того, что SDI близок к той модели приложений, что используется в Windows 95. Если использовать SDI приложение типа Delphi, то перед началом работы лучше минимизировать другие приложения, чтобы их окна не загромождали рабочее пространство. Если нужно переключиться на другое приложение, то достаточно щелкнуть мышкой на системную кнопку минимизации Delphi. Вместе с главным окном свернутся все остальные окна среды программирования, освободив место для работы других программ.
Основные составные части Delphi.
1. Дизайнер форм (Form Designer).
2. Окно редактора исходного текста (Editor Window).
3. Палитра (Component Palette).
4. Инспектор Объектов (Object Inspector).
5. Справочник (On-line help).
Есть, конечно, и другие важные составляющие Delphi, вроде линейки инструментов, системного меню и многие другие, нужные для точной настройки программы и среды программирования.
Программисты на Delphi проводят большинство времени переключаясь между Дизайнером форм и Окном редактора исходного текста (Редактор).
Дизайнер форм в Delphi столь интуитивно понятен и прост в использовании, что создание визуального интерфейса превращается в детскую игру. Дизайнер форм первоначально состоит из одного пустого окна, которое заполняется всевозможными объектами, выбранными на Палитре. Несмотря на всю важность Дизайнера форм, местом, где программисты проводят основное время является Редактор.
Компонент Палитра позволяет выбрать нужные объекты для размещения их на Дизайнере форм. Палитра использует постраничную группировку объектов. Внизу Палитры находится набор закладок - Standard, Additional, Dialogs и т.д.
Слева от Дизайнера форм находится Инспектор объектов. Информация в Инспекторе объектов меняется в зависимости от объекта, выбранного на форме. Важно понять, что каждый компонент является настоящим объектом и можно менять его вид и поведение с помощью Инспектора объектов.
Инспектор объектов состоит из двух страниц, каждую из которых можно использовать для определения поведения данного компонента. Первая страница - это список свойств, вторая - список событий.
Последняя важная часть среды Delphi - Справочник (on-line help). Для доступа к этому инструменту нужно просто выбрать в системном меню пункт Help и затем Contents.
Также существуют инструменты, которые можно воспринимать как вспомогательные для среды программирования.
1) Меню (Menu System).
2) Панель с кнопками для быстрого доступа (SpeedBar).
3) Редактор картинок (Image Editor).
Меню предоставляет быстрый и гибкий интерфейс к среде Delphi, потому что может управляться по набору "горячих клавиш". Это удобно еще и потому, что здесь используются слова или короткие фразы, более точные и понятные, нежели иконки или пиктограммы. Можно использовать меню для выполнения широкого круга задач; скорее всего, для наиболее общих задач вроде открытия и закрытия файлов, управления отладчиком или настройкой среды программирования.
SpeedBar находится непосредственно под меню, слева от Палитры Компонент. SpeedBar выполняет много из того, что можно сделать через меню. Если задержать мышь над любой из иконок на SpeedBar, то появится подсказка, объясняющая назначение данной иконки.
Редактор картинок - работает аналогично программе Paintbrush из Windows.
В дополнение к инструментам, существуют пять средств, поставляемых вместе с Delphi. Эти инструментальные средстваследующие.
1) Встроенный отладчик.
2) Внешний отладчик (поставляется отдельно).
3) Компилятор командной строки.
4) WinSight.
5) WinSpector.
Данные инструменты собраны в отдельную категорию не потому, что они менее важны, чем другие, а потому, что они играют достаточно абстрактную техническую роль в программировании.
Отладчик Delphi позволяет пройти пошагово по исходному тексту программы, выполняя по одной строке за раз, и открыть просмотровое окно (Watch), в котором будут отражаться текущие значения переменных программы. Встроенный отладчик, который наиболее важен из пяти вышеперечисленных инструментов, работает в том же окне, что и Редактор. Внешний отладчик более быстр и мощен, чем встроенный. Однако он не так удобен в использовании, главным образом из-за необходимости покидать среду Delphi.
Внешний компилятор называется DCC.EXE, полезен, в основном, чтобы скомпилировать приложение перед отладкой его во внешнем отладчике.
Основная функция WinSight - позволить наблюдать за системой сообщений Windows. Хотя Delphi делает много для того, чтобы спрятать сложные детали данной системы сообщений от неопытных пользователей, тем не менее Windows является операционной системой, управляемой событиями. Почти все главные и второстепенные события в среде Windows принимают форму сообщений, которые рассылаются с большой интенсивностью среди различными окнами на экране. Delphi дает полный доступ к сообщениям Windows и позволяет отвечать на них, как только будет нужно. В результате, WinSight становится просто необходим.
WinSpector сохраняет запись о текущем состоянии машины в текстовый файл. Данный инструмент полезен тем, что дает возможность получить важную информацию при крушении системы.
Достоинства Delphi:
Простота, скорость и эффективность для Delphi являются характерными. Delphi имеет один из самых быстрых компиляторов, порождающий, тем не менее, весьма и весьма неплохой объектный код. Есть и другие достоинства: простота изучения Object Pascal; облегчающие жизнь нововведения - вроде свойств (properties); программы, написанные на Delphi, не требуется снабжать дополнительными библиотеками (в отличии от связки C++/MFC). В самом деле, VCL предоставляет удобный, легко расширяемый объектно-ориентированный интерфейс к Windows, что ни в коей мере не мешает программисту опускаться в самые глубины Windows API. Создателям оригинальных компонентов это приходится делать довольно часто, в отличие от "просто программистов". Как было сказано выше, модель программирования в Delphi - компонентная, что позволяет пользоваться компонентами, написанными другими разработчиками, даже не имея их исходного кода и уж подавно не изучая его. В Интернете есть огромное количество компонентов, значительная часть которых распространяется бесплатно. Применение компонентной модели приводит к тому, что довольно многое в поведении объектов программировать не нужно вообще, и многое, на что в других средах ушли бы недели, можно сделать за часы или даже минуты. Оно и понятно - это ведь RAD-среда. К достоинствам можно отнести очень быстрый браузер классов и мгновенный вывод подсказки автозавершения кода (code completion). Если кратко - может все. Конечно, Object Pascal накладывает определенные ограничения, но для тех вещей, для которых ее писали, Delphi подходит практически оптимально. Из понравившихся (но, разумеется, нестандартных) "улучшений", внесенных Borland в Object Pascal, хотелось бы выделить свойства (properties) и перегружаемость процедур и функций (overloading). Определенные неудобства при работе с низкоуровневыми функциями API может вызвать то, что стандартным языком для API все же является С, и именно на нем пишутся все новые Software Development Kit (SDK) и заголовочные файлы к ним. Это ни в коем случае не означает, что вы не сможете работать с новыми SDK, просто вам придется написать несложный (но, возможно, объемный) код на Pascal, в котором определить интерфейсы данного SDK
Недостатки языка программирования:
Главный недостаток - статическое присоединение (linking) библиотеки VCL и компонентов к исполняемому файлу. Справедливости ради надо сказать, что VCL можно линковать и динамически, но тогда с каждым своим приложением вам придется распространять еще и VCL, а это более 3 Мбайт. Однако, если не увлекаться интерфейсными "наворотами" и использовать в программе минимально необходимое число компонентов, то исполняемый файл будет невелик. Другой недостаток состоит в том, что в используемой в Delphi парадигме форм (Forms) вся информация о форме, включая свойства, настройки компонентов, значения по умолчанию, хранится в exe-файле, причем не оптимальным образом. Анализ исходного кода VCL показывает, что при создании формы фактически происходит чуть ли не синтаксический разбор данных инициализации, что не может ее не замедлять. Третий недостаток, который кто-нибудь тоже может назвать достоинством, - это Object Pascal. Несмотря на простоту, эффективность и легкость в изучении, ему не хватает очень многих мощных средств C++, а именно не достает шаблонов, перегрузки операторов и объектной модели, похожей на объектную модель C++ . Разочаровала Delphi и малым числом параметров оптимизации кода. Кроме того, заметна тенденция к "разрастанию" exe-файлов, генерируемых Delphi. Так, большинство небольших проектов, разработанных в Delphi 4, при перекомпиляции в Delphi 5 "растолстели" на 40-70 Кбайт, при этом, разумеется, не обретая новой функциональности.
1.3 С++ Builder
C++ Builder представляет собой SDI-приложение, главное окно которого содержит настраиваемую инструментальную панель и палитру компонентов. Помимо этого, по умолчанию при запуске C++ Builder появляются окно инспектора объектов и форма нового приложения. Под окном формы приложения находится окно редактора кода.
Формы являются основой приложений C++ Builder. Создание пользовательского интерфейса приложения заключается в добавлении в окно формы элементов объектов C++ Builder, называемых компонентами. Компоненты C++ Builder располагаются на палитре компонентов, выполненной в виде многостраничного блокнота.
Компоненты разделяются на видимые (визуальные) и невидимые (невизуальные). Визуальные компоненты появляются во время выполнения точно так же, как и во время проектирования. Примерами являются кнопки и редактируемые поля. Невизуальные компоненты появляются во время проектирования как пиктограммы на форме. Они никогда не видны во время выполнения, но обладают определенной функциональностью (например, обеспечивают доступ к данным, вызывают стандартные диалоги Windows и др.)
Каждый компонент C++ Builder имеет три разновидности характеристик: свойства, события и методы.
Если выбрать компонент из палитры и добавить его к форме, инспектор объектов автоматически покажет свойства и события, которые могут быть использованы с этим компонентом. В верхней части инспектора объектов имеется выпадающий список, позволяющий выбирать нужный объект из имеющихся на форме.
Свойства являются атрибутами компонента, определяющими его внешний вид и поведение. Многие свойства компонента в колонке свойств имеют значение, устанав иваемое по умолчанию (например, высота кнопок). Свойства компонента отображаются а странице свойств (Properties). Инспектор объектов отображает опубликованные (published) свойства компонентов. Помимо published-свойств, компоненты могут и чаще всего имеют общие (public), опубликованные свойства, которые доступны только во время выполнения приложения. Инспектор объектов используется для установки свойств во время проектирования. Список свойств располагается на странице свойств инспектора объектов. Можно определить свойства во время проектирования или написать код для видоизменения свойств компонента во время выполнения приложения.
При определении свойств компонента во время проектирования нужно выбрать компонент на форме, открыть страницу свойств в инспекторе объектов, выбрать определяемое свойство и изменить его с помощью редактора свойств (это может быть п остое поле для ввода текста или числа, выпадающий список, раскрывающийся список, диалоговая панель и т.д.).
Страница событий (Events) инспектора объектов показывает список событий, распознаваемых компонентом (программирование для операционных систем с графическим пользовательским интерфейсом, в частности, для Windows 95 или Windows NT предполагает описание реакции приложения на те или иные события, а сама операционная система занимается постоянным опросом компьютера с целью выявления наступления какого-либо события). Каждый компонент имеет свой собственный набор обработчиков событий. В C++ Builder следует писать функции, называемые обработчиками событий, и связывать события с этими функциями. Создавая обработчик того или и ого события, вы поручаете программе выполнить написанную функцию, если это событие произойдет.
Для того, чтобы добавить обработчик событий, нужно выбрать на форме с помощью мыши компонент, которому необходим обработчик событий, затем открыть страницу событий инспектора объектов и дважды щелкнуть левой клавишей мыши на колонке значений рядом с событием, чтобы заставить C++ Builder сгенерировать прототип обработчика событий и показать его в редакторе кода. При этом автоматически генерируется текст пустой функции, и редактор открывается в том месте, где следует вводить код. Курсор позиционируется внутри операторных скобок { ... }. Далее нужно ввести код, который должен выполняться при наступлении события. Обработчик событий может иметь параметры, которые указываются после имени функции в круглых скобках.
Метод является функцией, которая связана с компонентом, и которая объявляется как часть объекта.
Нужно отметить, что при создании формы связанные с ней модуль и заголовочный файл с расширением *.h генерируются обязательно, тогда как при создании нового модуля он не обязан быть связан с формой (например, если в нем содержатся процедуры расчетов). Имена формы и модуля можно изменить, причем желательно сделать это сразу после создания, пока на них не появилось много ссылок в других формах и модулях.
Файлы, образующие приложение - формы и модули - собраны в проект. Менеджер проектов показывает списки файлов и модулей приложения и позволяет осуществлять навигацию между ними. Можно вызвать менеджер проектов , выбрав пункт меню View/Project Manager. По умолчанию вновь созданный проект получает имя Project1.cpp.
По умолчанию проект первоначально содержит файлы для одной формы и исходного кода одного модуля. Однако большинство проектов содержат несколько форм и модулей. Чтобы добавить модуль или форму к проекту, нужно щелкнуть правой кнопкой мыши и выбрать пункт New Form из контекстного меню. Можно также добавлять существующие формы и модули к проекту, используя кнопку Add контекстного меню менеджера проектов и выбирая модуль или форму, которую нужно добавить. Формы и модули можно удалить в любой момент в течение разработки проекта. Однако, из-за того, что форма связана всегда с модулем, нельзя удалить одно без удаления другого, за исключением случая, когда модуль не имеет связи с формой. Удалить модуль из проекта можно, используя кнопку Remove менеджера проектов.
Если выбрать кнопку Options в менеджере проектов, откроется диалоговая панель опций проекта, в которой можно выбрать главную форму приложения, определить, какие формы будут создаваться динамически, каковы параметры компиляции модулей (в том числе созданных в Delphi 2.0, так как C++ Builder может включать их в проекты) и компоновки.
Важным элементом среды разработки C++ Builder является контекстное меню, появляющееся при нажатии на правую клавишу мыши и предлагающее быстрый доступ к наиболее часто используемым командам.
Разумеется, C++ Builder обладает встроенной системой контекстно-зависимой помощи, доступной для любого элемента интерфейса и являющейся обширным источником справочной информации о C++ Builder.
Первым шагом в разработке приложения C++ Builder является создание проекта. Файлы проекта содержат сгенерированный автоматически исходный текст, который становится частью приложения, когда оно скомпилировано и подготовлено к выполнению. Чтобы создать новый проект, нужно выбрать пункт меню File/New Application.
C++ Builder создает файл проекта с именем по умолчанию Project1.cpp, а также make-файл с именем по умолчанию Project1.mak. При внесении изменений в проект, таких, как добавление новой формы, C++ Builder обновляет файл проекта.
Проект или приложение обычно имеют несколько форм. Добавление формы к проекту создает следующие дополнительные файлы.
1. Файл формы с расширением.DFM, содержащий информацию о ресурсах окон для конструирования формы.
2. Файл модуля с расширением .CPP, содержащий код на C++.
3. Заголовочный файл с расширением .H, содержащий описание класса формы..
Когда вы добавляете новую форму, файл проекта автоматически обновляется.
Для того чтобы добавить одну или более форм к проекту , выберите пункт меню File/New Form. Появится пустая форма, которая будет добавлена к проекту. Можно воспользоваться пунктом меню File/New, выбрать страницу Forms и выбрать подходящий шаблон из репозитория объектов.
Для того, чтобы просто откомпилировать текущий проект, из меню Compile нужно выбрать пункт меню Compile. Для того, чтобы откомпилировать проект и создать исполняемый файл для текущего проекта, из меню Run нужно выбрать пункт меню Run. Компоновка проекта является инкрементной (перекомпилируются только изменившиеся модули).
Если при выполнении приложения возникает ошибка времени выполнения, C++ Builder делает паузу в выполнении программы и показывает редактор кода с курсором, установленным на операторе, являющемся источником ошибки. Прежде чем делать необходимую коррекцию, следует перезапустить приложение, выбирая пункт меню Run из контекстного меню или из меню Run, закрыть приложение и лишь затем вносить изменения в проект. В этом случае уменьшится вероятность потери ресурсов Windows.
1.4 Visual Studio C++
Visual Studio 2010 (VS) представляет собой интегрированную среду разработки (Integrated Development Environment, IDE). IDE - это набор инструментов разработчика ПО, собранный в составе единого приложения и облегчающий труд программиста при написании приложений.
В состав VS входит целый набор типовых проектов, из которых каждый разработчик может подобрать именно то, что ему в данный момент требуется. Каждый раз, когда создается новый проект, VS автоматически создаст "скелет" будущего приложения, причем этот код можно немедленно скомпилировать и запустить на исполнение.
В составе каждого типового проекта имеются элементы, которые по желанию можно добавлять в проект. Любой проект, в любом случае, содержит автоматически сгенерированный код, который представляет собой основу будущей программы.
VS предлагает большое множество готовых к использованию элементов управления, включая и код, необходимый для их создания. Это экономит время
разработчиков, избавляя их от необходимости каждый раз заново создавать типовой программный код для решения часто встречающихся задач. Многие из более сложных элементов управления содержат так называемые "программы-мастера" (Wizards), которые помогают настроить поведение элементов управления, автоматически генерируя код в зависимости от выбранных опций.
Структура интерфейса следующая.
1. Меню.
2. Панель инструментов.
3. Стартовая страница.
4. Панель инструментов.
В верхнем левом углу экрана, показанного на рис. 1.1, вы увидите начало строки меню (меню бар), начинающейся с пунктов Файл, Правка, Вид, Отладка и т. д. Строка меню представляет собой стандартный элемент интерфейса любого Windows-приложения. Помимо стандартного управления файлами, меню File представляет собой стандартную "начальную точку", откуда можно начать работать с любым проектом. Кроме того, меню Файл предоставляет возможности быстрого доступа к недавно открывавшимся файлам и проектам. Меню Правка предоставляет стандартные возможности редактирования: функции вырезки в буфер (вырезать), копирования (копировать) и вставки (вставить). Кроме того, оно позволяет установить закладку (закладка), чтобы обеспечить быстрый доступ к нужному фрагменту кода и быструю навигацию по большим файлам.
Рисунок 1.1 - Начальный экран Visual Studio 2010
Меню Вид позволяет быстро получить доступ ко всем инструментальным окнам, имеющимся в VS. Кроме того, меню Вид содержит пункт Другие Окна, куда включены дополнительные окна приложений, которые могут оказаться удобными при написании новых программ.
Меню Отладка предоставляет множество различных функциональных возможностей: например, с его помощью вы можете подключить отладчик, чтобы просмотреть работу программ пошагово, проходя одну строку за другой, подключиться к базе данных, установить добавочные модули, макросы и выполнить множество других действий.
Меню Сервис можно использовать, чтобы выполнить модульное тестирование вашей новой программы, по одному модулю единовременно. Именно в этом меню различные редакции VS предоставляют доступ к различным наборам инструментов тестирования
Меню Окно и Справка имеют предназначение, стандартное для большинства приложений Windows. Так, меню Окно позволяет манипулировать различными окнами VS, а с помощью меню Справка можно читать техническую документацию по VS.
Под строкой меню на рис.1.1 находится инструментальная панель. На инструментальной панели расположены кнопки, предоставляющие быстрый доступ к наиболее часто используемым функциям. Набор кнопок инструментальной панели представляет собой подмножество команд, которые доступны через меню. Инструментальные панели контекстно-чувствительны, и набор доступных через них опций меняется в зависимости от той работы, которую вы выполняете через VS в данный момент. Любую инструментальную панель можно отобразить или скрыть. Делается это с помощью команд меню Вид | Панель инструментов. Кроме того, инструментальные панели можно настраивать по вашему выбору.
В центре окна, представленного на иллюстрации, находится стартовая страница. Это - та самая область, которой вы можете пользоваться для введения кода ваших программ и работы с визуальными редакторами. Стартовая страница разделена на две области: область управления проектами и информационную зону. Расположенная слева область управления проектами предоставляет возможность быстро начать работу над новым проектом или выбрать из списка один из проектов, с которыми вы работали недавно. Расположенная справа информационная область содержит ресурсы, помогающие новичку начать работу с VS, например, ссылки на Web-сайт Microsoft, пошаговые инструкции, помогающие разобраться с новыми возможностями.
В крайней правой части окна, показанного на рис. 1.1, располагается вертикальная вкладка, озаглавленная Панель элементов, которая содержит контекстно-чувствительный список элементов управления. Эти элементы управления можно перетаскивать мышью в текущую рабочую область, чтобы включить их в состав разрабатываемой программы.
1.5 Обоснование выбора среды программирования
Для реализации поставленной задачи данного курсового проекта, а именно для создания игрового приложения "Интелектуальное фиртепиано", существует достаточно много сред разработки. Среди таких сред возможность реализовать создание программы есть у Delphi, C++ Builder, Qt и Visual Studio C++.
Все вышеперечисленные среды разработки безусловно функциональны и предназначены для визуального создания программ.
Для данного проекта была выбранна Qt 5.3.0. Эта среда разработки включает в себя большой набор инструментов, достаточна проста в осваивании и тем самым эта IDE отлично подходит для студентов. Особенностью продукта является ориентирование на цель разработки. Данная среда используется для работы на практических занятиях, поэтому привычна в использовании.
Важным фактором в выборе среды разработке послужило удобство интерфейса. Расположение в окне различных панелей инструментов полностью подходят для удобной работы с проектом. В составе каждого типового проекта имеются элементы, которые по желанию можно добавлять в проект. Любой проект, в любом случае, содержит автоматически сгенерированный код, который представляет собой основу будущей программы. Qt предлагает множество готовых к использованию элементов управления, включая и код, необходимый для их создания. Это экономит время разработчиков, избавляя их от необходимости каждый раз заново создавать типовой программный код для решения часто встречающихся задач. Редактор кода в Qt особенно выигрывает, по сравнению с Delphi и C++ Builder. Предоставляется возможность полностью настроить клавиатуру под себя, настроить любую кнопку на нужное действие. Сам редактор имеет больше возможностей и более интуитивен. Присутствуют такие функции как автоматическое форматирование отступов, запись и воспроизведение макросов. Отладчик Qt не превосходит отладчик Visual C++, но он более чем пригоден, для отладки сложных приложений и с ним не возникает большого количества неудобств. Благодаря удобному интерфейсу и хорошему редактору кода, разработка приложения выполняется быстро и удобно.
Также Qt предоставляет многофункциональный редактор форм для создания графического интерфейса приложения. Конструктор Forms предлагает решения быстрой разработки при создании приложений Windows. Он позволяет наглядно разрабатывать формы на стороне клиента. Элементы управления можно перетащить на поверхность конструктора из панели элементов.
Итак, для выбора среды программирования послужили такие характеристики как: мощный и удобный интерфейс, подходящий набор инструментов, а так же функциональный редактор кода. Навыки, полученные на практических занятиях, облегчили работу в данной среде, к тому же способствовали углублению в изучении всех ее возможностей. Данные характеристики позволили написать программу и максимально быстро и качественно выполнить поставленную задачу.
2. Разработка программы
2.1 Описание задания
В курсовом проекте поставлена задача разработать программу "Интелектуальное фортепиано", с помощью которой можно проиграть, записать, воспроизвести мелодию.
При нажатии на кнопки, воспроизводится семпл из ресурсов.
В поле задаётся соответствующее число. При нажатии кнопки "Проверить" под формой ввода числа появляется сообщение, которое информирует нас о результате исследования.
Также нужно создать кнопку, при нажатии которой будет выводиться сообщение, содержащее информацию об авторе работы.
2.2 Текст программы
Mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "pianobutton.h"
class MainWindow : public QWidget
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
QList<PianoButton*>* list_piano;
QMenuBar* bar;
QToolBar* tools;
QTime timer;
virtual void keyPressEvent(QKeyEvent* event);
virtual void keyReleaseEvent(QKeyEvent* event);
private:
bool record;
signals:
void press(QKeyEvent* event);
void press(QKeyEvent* event, QTime elapsed);
void release(QKeyEvent* event);
void restart(QTime time);
void play();
void stop();
public slots:
void onRecord();
void onStopRecord();
void openFile();
void saveFile();
void about_dev();
};
#endif // MAINWINDOW_H
Pianobutton.h
#ifndef PIANOBUTTON_H
#define PIANOBUTTON_H
#include <QtWidgets>
#include <QtMultimedia>
class PianoButton : public QPushButton
{
Q_OBJECT
public:
explicit PianoButton(QWidget *parent = 0, QString name = "");
QSoundEffect* effect;
QQueue<QTime>* que;
QTime start;
private:
int summ;
int id;
bool isRecord;
protected:
virtual void timerEvent(QTimerEvent *e);
signals:
public slots:
void onPress(QKeyEvent* event);
void onPress(QKeyEvent* event,QTime elapsed);
void onRelease(QKeyEvent* event);
void onRestart(QTime time);
void onMousePress();
void onMouseRelease();
void onReplyRecord();
void onStopRecord();
};
#endif // PIANOBUTTON_H
Main.cpp
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow* win32 = new MainWindow;
win32->show();
win32->move(QApplication::desktop()->width()/2-win32->width()/2,
QApplication::desktop()->height()/2-win32->height()/2);
return a.exec();
}
Mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QWidget(parent), timer(QTime::currentTime()), record(false)
{
QString notes = "Q1W2ER4T5Y6UI8O9P[-]=,K.ZAXSCVFBGNHM";
bar = new QMenuBar;
bar->setFixedHeight(25);
QMenu* menu_file = new QMenu("&Файл");
menu_file->addAction("&Открыть запись",this,SLOT(openFile()),Qt::CTRL+Qt::Key_O);
menu_file->addAction("&Сохранить запись",this,SLOT(saveFile()),Qt::CTRL+Qt::Key_S);
menu_file->addSeparator();
menu_file->addAction("&Выход",qApp,SLOT(quit()),Qt::CTRL+Qt::Key_Q);
bar->addMenu(menu_file);
bar->addAction("&Разработчик",this,SLOT(about_dev()));
list_piano = new QList<PianoButton*>;
PianoButton* temp;
for(int i=0;i<2;++i)
{
temp = new PianoButton(0,notes.mid(i*12+0,1));
list_piano->append(temp);
temp = new PianoButton(0,notes.mid(i*12+1,1));
list_piano->append(temp);
temp = new PianoButton(0,notes.mid(i*12+2,1));
list_piano->append(temp);
temp = new PianoButton(0,notes.mid(i*12+3,1));
list_piano->append(temp);
temp = new PianoButton(0,notes.mid(i*12+4,1));
list_piano->append(temp);
temp = new PianoButton(0,notes.mid(i*12+5,1));
list_piano->append(temp);
temp = new PianoButton(0,notes.mid(i*12+6,1));
list_piano->append(temp);
temp = new PianoButton(0,notes.mid(i*12+7,1));
list_piano->append(temp);
temp = new PianoButton(0,notes.mid(i*12+8,1));
list_piano->append(temp);
temp = new PianoButton(0,notes.mid(i*12+9,1));
list_piano->append(temp);
temp = new PianoButton(0,notes.mid(i*12+10,1));
list_piano->append(temp);
temp = new PianoButton(0,notes.mid(i*12+11,1));
list_piano->append(temp);
}
PianoButton* btn;
for(int i=0;i<list_piano->count();++i)
{
btn = list_piano->at(i);
connect(this,SIGNAL(press(QKeyEvent*)),btn,SLOT(onPress(QKeyEvent*)));
connect(this,SIGNAL(press(QKeyEvent*,QTime)),btn,SLOT(onPress(QKeyEvent*,QTime)));
connect(this,&MainWindow::release,btn,&PianoButton::onRelease);
connect(this,&MainWindow::restart,btn,&PianoButton::onRestart);
connect(this,&MainWindow::play,btn,&PianoButton::onReplyRecord);
connect(this,&MainWindow::stop,btn,&PianoButton::onStopRecord);
list_piano->at(i)->effect->setSource(QUrl::fromLocalFile(":/sounds/"+QString::number(i)+".wav"));
}
tools = new QToolBar;
tools->addAction("Запись",this,SLOT(onRecord()));
tools->addAction("Стоп запись",this,SLOT(onStopRecord()));
tools->addAction("Проиграть",this,SIGNAL(play()));
QGridLayout* grid = new QGridLayout;
grid->setMargin(5);
grid->setSpacing(5);
for(int i=0;i<2;++i)
{
grid->addWidget(list_piano->at(i*12+0),1,i*7+0,1,1);
grid->addWidget(list_piano->at(i*12+1),0,i*7+0,1,2,Qt::AlignHCenter);
grid->addWidget(list_piano->at(i*12+2),1,i*7+1,1,1);
grid->addWidget(list_piano->at(i*12+3),0,i*7+1,1,2,Qt::AlignHCenter);
grid->addWidget(list_piano->at(i*12+4),1,i*7+2,1,1);
grid->addWidget(list_piano->at(i*12+5),1,i*7+3,1,1);
grid->addWidget(list_piano->at(i*12+6),0,i*7+3,1,2,Qt::AlignHCenter);
grid->addWidget(list_piano->at(i*12+7),1,i*7+4,1,1);
grid->addWidget(list_piano->at(i*12+8),0,i*7+4,1,2,Qt::AlignHCenter);
grid->addWidget(list_piano->at(i*12+9),1,i*7+5,1,1);
grid->addWidget(list_piano->at(i*12+10),0,i*7+5,1,2,Qt::AlignHCenter);
grid->addWidget(list_piano->at(i*12+11),1,i*7+6,1,1);
}
QVBoxLayout* vlayo = new QVBoxLayout;
vlayo->setMargin(5);
vlayo->setSpacing(5);
vlayo->addWidget(bar);
vlayo->addWidget(tools);
vlayo->addLayout(grid);
this->setLayout(vlayo);
}
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if(record)
{
emit press(event,QTime::currentTime());
} else
{
emit press(event);
}
}
void MainWindow::keyReleaseEvent(QKeyEvent *event)
{
emit release(event);
}
void MainWindow::onRecord()
{
timer = QTime::currentTime();
emit restart(timer);
record = true;
}
void MainWindow::onStopRecord()
{
record = false;
emit stop();
}
void MainWindow::openFile()
{
QString str = QFileDialog::getOpenFileName(this,"Открыть запись",QString(),"My melody files (*.mym)");
if(!str.isEmpty())
{
QFile file(str);
QTextStream stream(&file);
if(file.open(QIODevice::ReadOnly))
{
while(!stream.atEnd())
{
QStringList list = stream.readLine().split(';',QString::SkipEmptyParts);
// qDebug() << list;
list_piano->at(list.at(0).toInt())->start = QTime::fromString(list.at(1),"hh:mm:ss.zzz");
list_piano->at(list.at(0).toInt())->que->clear();
for(int i=2;i<list.count();++i)
{
list_piano->at(list.at(0).toInt())->que->enqueue(QTime::fromString(list.at(i),"hh:mm:ss.zzz"));
}
}
}
file.close();
}
}
void MainWindow::saveFile()
{
QString str = QFileDialog::getSaveFileName(this,"Сохранить запись",QString(),"My melody files (*.mym)");
if(!str.isEmpty())
{
QFile file(str);
QTextStream stream(&file);
if(file.open(QIODevice::WriteOnly))
{
for(int i=0;i<list_piano->count();++i)
{
QQueue<QTime> temp = *list_piano->at(i)->que;
if(temp.count()>0)
{
stream << QString::number(i)+";";
stream << list_piano->at(i)->start.toString("hh:mm:ss.zzz")+";";
while(!temp.isEmpty())
{
stream << temp.dequeue().toString("hh:mm:ss.zzz")+";";
}
stream << "\n";
}
}
}
file.close();
}
}
void MainWindow::about_dev(){
QMessageBox::information(this,"Разработчик","Резанов Богдан КИТ-83");
}
Pianobutton.cpp
#include "pianobutton.h"
PianoButton::PianoButton(QWidget *parent, QString name) :
QPushButton(parent), start(QTime::currentTime()), summ(0), isRecord(false)
{
effect = new QSoundEffect;
que new QQueue<QTime>;
this->setFixedSize(50,100);
this->setText(name);
this->setCheckable(true);
connect(this,SIGNAL(pressed()),this,SLOT(onMousePress()));
connect(this,SIGNAL(released()),this,SLOT(onMouseRelease()));
connect(effect,&QSoundEffect::playingChanged,this,[=]()
{
if(!effect->isPlaying())
{
this->setChecked(false);
}
});
void PianoButton::timerEvent(QTimerEvent *e)
{
effect->play();
this->setChecked(true);
this->killTimer(e->timerId());
}
void PianoButton::onPress(QKeyEvent *event)
{
QString notes = "Q1W2ER4T5Y6UI8O9P[-]=,K.ZAXSCVFBGNHM";
QChar c(event->key());
if(this->text().indexOf(c)!=-1)
{
if(!this->isChecked())
{
effect->play();
}
this->setChecked(true);
}
}
void PianoButton::onPress(QKeyEvent *event, QTime elapsed)
{
QChar c(event->key());
if(this->text().indexOf(c)!=-1)
{
if(!this->isChecked())
{
que->enqueue(elapsed);
qDebug() << start.msecsTo(elapsed);
}
}
this->onPress(event);
}
void PianoButton::onRelease(QKeyEvent *event)
{
QString notes = "Q1W2ER4T5Y6UI8O9P[-]=,K.ZAXSCVFBGNHM";
QChar c(event->key());
if(this->text().indexOf(c)!=-1)
{
this->setChecked(false);
}
}
void PianoButton::onRestart(QTime time)
{
que->clear();
start = time;
isRecord = true;
}
void PianoButton::onMousePress()
{
effect->play();
this->setChecked(true);
if(isRecord)
{
que->enqueue(QTime::currentTime());
}
}
void PianoButton::onMouseRelease()
{
this->setChecked(false);
}
void PianoButton::onReplyRecord()
{
QQueue<QTime> temp = *que;
while(!temp.isEmpty())
{
this->startTimer(start.msecsTo(temp.dequeue()),Qt::PreciseTimer);
}
}
void PianoButton::onStopRecord()
{
isRecord = false;
}
3. Описание программы
3.1 Интерфейс
Внешний вид готового и запущенного приложения (рис. 3.1).
Рисунок 3.1 - Внешний вид программы
Окно программы содержит компоненты QPushButton с обозначениями для игры на клавиатуре. Нажимая на них, можно проиграть мелодию (рис. 3.2).
В меню предложено записать и проиграть мелодию. Также можно выбрать пункт сохранить мелодию, для последующего воспроизведения (рис.3.3). В верхнем левом углу окна находиться кнопка Разработчик, при нажатии на которую отображается информация о том, кто выполнил данный курсовой проект (рис. 3.4).
Рисунок 3.2 - Результат работы программы
Рисунок 3.3 - функция сохранения
Рисунок 3.4 - Информация об авторе
3.2 Запуск и работа
Для запуска приложения достаточно запустить файл piano.exe.
Порядок выполнения следующий.
1) Запустить файл piano.exe.
2) На экран выводится окно программы.
3) Нажать кнопки мышкой или по обозначениям на клавиатуре.
4) Нажать кнопку запись.
5) По завершению игры нажать кнопку Стоп запись.
6) Нажать Файл, Сохранить запись.
7)Нажать Файл, Открыть запись.
8)Нажать Проиграть.
9) Выход из программы осуществляется нажатием на красную кнопку в верхнем правом углу окна.
Файлы, созданные в процессе разработки программы:
piano.pro - файл проекта;
main.cpp, mainwindow.cpp, pianobutton.cpp - рабочая часть программы;
Mainwindow.h, pianobutton.h - заголовочные файлы.
Выводы
В ходе выполнения данного курсового проекта были разработана программа на языке С++ с использованием фреймворка Qt. Также были исследованы основные возможности данного языка.
В ходе курсовой работы было программно реализовано интеллектуальное фортепиано.
При выполнении курсового проекта ознакомлено со специализированной литературой по написанию программ на данном языке.
Список используемой литературы
1. Макс Шлее. Qt4. Профессиональное программирование на C++. -
СПб.: БХВ-Петербург, 2007. - 880 с.
2. Кнут Д.Э. Основные алгоритмы. - Вильямс 2008г.
3. Юрий Земсков. Программирование на C++ с использованием библиотеки Qt 5. г. Волгоград 2007 г.
Размещено на Allbest.ru
Подобные документы
Создание БД "Экзамен". Характеристика методов класса. Необходимость использования стандартных подключаемых модулей (заголовочных файлов) Visual Studio для реализации пользовательского интерфейса и работы с вводом-выводом в поток консоли или в файл.
курсовая работа [1,7 M], добавлен 28.05.2013Общие сведения о работе программы в среде программирования Microsoft Visual Studio 2008, на языке программирования C++. Ее функциональное назначение. Инсталляция и выполнение программы. Разработанные меню и интерфейсы. Алгоритм программного обеспечения.
курсовая работа [585,5 K], добавлен 24.03.2009Общая характеристика языков программирования. Краткий обзор C, C++, Java, PHP, Python, Delphi и Visual Basic. Процесс разработки программы игра "Крестики и нолики" с помощью AppWizard. Компиляция и компоновка модулей, определение интерфейса приложения.
курсовая работа [2,5 M], добавлен 27.05.2014Рассмотрение основ работы в Microsoft Visual Studio 2010 с языком программирования С#. Реализация программы обработки данных авиапассажиров. Выбор метода ввода данных из текстового файла. Создание фильтра для обработки списка по определенным критериям.
курсовая работа [1,4 M], добавлен 17.01.2016Разработка программы проверки знаний для тестирования студентов по программированию с кодом на языке Delphi. Проектирование визуального интерфейса и словесный алгоритм работы программы. Алгоритмы разработанных процедур и функций, инструкция пользователя.
курсовая работа [506,5 K], добавлен 21.02.2011Выявление требований к информационной системе. Диаграмма вариантов использования. Проектирование информационного обеспечения с использованием семантических моделей. Проектирование пользовательского интерфейса. Реализация программы на Visual Studio.
дипломная работа [590,2 K], добавлен 28.08.2012Разработка электронной модели таблицы результатов соревнований по лыжному забегу с помощью объектно-ориентированный языка Паскаль. Схема связи главной формы с подчиненными формами. Разработка пользовательского интерфейса в среде программирования Delphi 7.
курсовая работа [2,1 M], добавлен 21.01.2013Разработка программы для фирм, занимающихся продажей и учетом лекарственных средств. Структурный анализ с помощью диаграмм SADT и диаграмм "сущность-связь". Создание приложения в Delphi и таблиц базы данных. Организация пользовательского интерфейса.
курсовая работа [618,5 K], добавлен 30.11.2009Создание программного модуля, выполненного на языке программирования VBA (Visual Basic for Applications) и позволяющего во введенном массиве символов удалить все повторные вхождения этих символов. Разработка пользовательского интерфейса. Код программы.
курсовая работа [317,4 K], добавлен 11.10.2012Разработка приложения "Ведомость начисления заработной платы" в среде программирования C++Builder. Алгоритм и сценарий работы программы. Проектирование интерфейса пользователя. Написание программных модулей и результаты тестирования данной программы.
курсовая работа [597,4 K], добавлен 31.01.2016