Диплом, курсовая, контрольная работа
Помощь в написании студенческих работ

Проектирование реляционной базы данных «Личная фонотека»

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

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

Проектирование реляционной базы данных «Личная фонотека» (реферат, курсовая, диплом, контрольная)

Министерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего профессионального образования Национальный исследовательский ядерный университет МИФИ Технологический институт филиал НИЯУ МИФИ Кафедра информационных технологий и прикладной математики ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к курсовой работе по дисциплине «Базы данных»

Проектирование реляционной базы данных «Личная фонотека»

Лесной, 2015

1. Проектирование

1.1 Выбор языка программирования

1.2 Выбор компилятора

1.3 Анализ существующих решений

2. Разработка

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

2.2 Диаграмма взаимодействия

2.3 Проектирование функциональности

2.4 Структура программы

2.5 Использованные алгоритмы

2.6 Взаимодействие с пользователем

3. Тестирование

3.1 Руководство пользователя Заключение Список литературы Приложение Приложение А

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

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

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

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

Цели работы — исследовать предметную область, разработать приложение и протестировать его.

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

1. ПРОЕКТИРОВАНИЕ

1.1 Выбор языка программирования

Для разрабатываемого проекта выбран язык программирования C++, в силу следующих причин:

1. Компилируемый язык со статической типизацией;

2. Сочетание высокоуровневых и низкоуровневых средств;

3. Реализация ООП;

4. STL;

Раскроем сущность всех этих пунктов:

Статическая типизация. На примере языка со статической типизацией проще понять, что такое тип данных, зачем он нужен и от чего зависит. Видно, что собой представляет объявление, определение и инициализация. Использование языка C++ даёт это явно увидеть, что способствует дальнейшему пониманию того, как работают эти механизмы в других языках. Помимо этого можно на реальных примерах понять, чем беззнаковые целые отличаются от целых со знаком, чем отличаются числа двойной и одинарной точности, чем отличается символ от строки и т. д.

Высокоуровневые и низкоуровневые средства. Использование таких средств, как указатели и динамическое выделение памяти, позволяет понять (или в дальнейшем способствует пониманию), что такое стек, куча, стек вызовов, раскрутка стека и т. д. Помимо этого, на практике закрепляется понимание концепции адресов и адресной арифметики. На примерах демонстрируется, что память надо выделять, освобождать, потому что она не бесконечная, что существуют утечки памяти. В будущем, при изучении языков с GC проще будет понять, что же это такое. Отдельно стоит отметить простой механизм передачи значений по ссылке, значению, указателю и перенос объекта. Что такое изменяемые и не изменяемые параметры. В дальнейшем данные концепции могут быть использованы и при изучении других языков. Студент будет понимать, например, что объект в языке N передаётся по ссылке, и если его значение изменить в функции-члене, то оно изменится везде.

Реализация ООП. Это относительно чистая реализация ООП без всякого синтаксического сахара (относительно некоторых других языков). Чётко разграниченные уровни доступа к членам класса, возможность множественного наследования и динамический полиморфизм дают возможность быстро усвоить основные концепции ООП (абстракция, наследование, инкапсуляция и полиморфизм). Указатели и динамическое выделение памяти позволяют наглядно понять такие важные механизмы, как upcasting и downcasting. В дальнейшем, основываясь на этих знаниях, легко можно понять весь синтаксический сахар в других языках. Необходимость контроля ресурсов (в том числе и «правило трёх» или уже «правило пяти», с учётом C++11), захват их в конструкторе и освобождение в деструкторе также способствуют более глубокому пониманию ООП.

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

STL. Сама по себе концепция шаблонов C++, генерации кода и применения широкого спектра алгоритмов к различным контейнерам положительно влияет на процесс обучения. Здесь все на поверхности и понятно, почему можно создать вектор целых чисел и вектор пользовательских объектов на основе одного класса-контейнера. Почему можно применить некоторую операцию к последовательности объектов или как отсортировать объекты, для которых не предусмотрена встроенная операция сравнения. Можно понять, как осуществляется доступ к элементам, и узнать о категориях итераторов. Помимо этого закрепляется понимание обобщённого программирования.

1.2 Выбор компилятора

C++Builder и Delphi стали одними из самых популярных на сегодняшний день инструментов для создания как настольных, так и корпоративных информационных систем благодаря уникальному сочетанию удобства разработки пользовательских интерфейсов, компонентной архитектуры, однотипности доступа к разнообразным базам данных, начиная от плоских таблиц формата dBase и Paradox и кончая серверными СУБД. Во многом именно наличие таких продуктов стимулировало достаточно безболезненный перенос в архитектуру клиент/сервер ряда информационных систем, модернизация которых иными средствами была бы сопряжена с большими трудовыми и материальными затратами.

Следует отметить, что современные тенденции развития инструментальных средств таковы, что актуальным становится не просто появление новых гибких и мощных средств разработки, а создание семейств таких продуктов с похожими средами и принципами создания приложений, что в целом повторяет появившуюся примерно 4 года назад идеологию формирования офисных пакетов (текстовый процессор + электронная таблица + настольная СУБД + презентационный пакет) вместо выпуска отдельных офисных приложений. Если рассматривать линию продуктов Inprise, то в данный момент на рынке средств разработки присутствуют Delphi и C++Builder, а также сходные по методам создания приложений и среде JBuilder, IntraBuilder, Visual dBase.

Сходство C++Builder и Delphi не является чисто внешним. C++Builder обладает компонентной архитектурой и создан на основе библиотеки визуальных компонентов Delphi ставшей за последние два года весьма популярной среди разработчиков. По этой причине этот продукт имеет общую с Delphi библиотеку классов, часть из которых написана на Obiect Pascal.

Сходство C++Builder и Delphi не является чисто внешним. C++Builder обладает компонентной архитектурой и создан на основе библиотеки визуальных компонентов Delphi, ставшей за последние два года весьма популярной среди разработчиков. По этой причине этот продукт имеет общую с Delphi библиотеку классов, часть из которых написана на Object Pascal.

Однако совместимость C++Builder и Delphi этим не исчерпывается. В проектах C++Builder можно использовать не только библиотеку компонентов Delphi, но и код, написанный на Object Pascal, а также формы и модули Delphi. Поддерживается визуальное наследование форм и модулей данных, в том числе и созданных в Delphi. Эти возможности появились благодаря включению в C++Builder обоих компиляторов C++ и Object Pascal.

Это означает, что можно создавать общие проекты, используя оба средства разработки — и C++BuiIder, и Delphi. Части одного приложения могут быть созданы с помощью двух средств, и теперь к работе над проектом можно привлекать разработчиков, использующих как Delphi, так и C++. Вовторых, и это очень важно, C++Builder может использовать компоненты, созданные для Delphi, а их за последние несколько лет создано огромное количество. Это богатство, накопленное разработчиками всего мира, сегодня способно удовлетворить самые причудливые запросы.

C++Builder предоставляет программисту широкие возможности повторного использования кода не только за счет наличия библиотеки компонентов, но и за счет поддержки стандарта ActiveX, что позволяет встраивать в приложения ActiveX-компоненты как сторонних производителей, так и созданные собственноручно с помощью самого C++Builder.

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

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

1.3 Анализ существующих решений

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

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

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

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

Вывод: провел выбор языка программирования, выбрал компилятор, проанализировал существующие решения.

2. РАЗРАБОТКА

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

Рассмотрим основные понятия, используемые в ходе курсового проектирования:

1. Поставщик OLE DB для Jet (Майкрософт) предоставляет интерфейс OLE DB для баз данных Microsoft Access и позволяет распределенным запросам в SQL Server 2005 и более поздних версиях обращаться к базам данных Access и электронным таблицам Excel. Загрузить драйверы Microsoft Office 2007 можно на странице системного драйвера Office 2007. Компоненты подключения к данным.

2. Реляционная база данных — база данных, основанная на реляционной модели данных. Слово «реляционный» происходит от англ. relation («отношение», «зависимость», «связь»). Для работы с реляционными БД применяют реляционные СУБД.

3. SQL (англ. structured query language — «язык структурированных запросов») — формальный непроцедурный язык программирования, применяемый для создания, модификации и управления данными в произвольной реляционной базе данных, управляемой соответствующей системой управления базами данных (СУБД).

4. Система управления базами данных (СУБД) — совокупность программных и лингвистических средств общего или специального назначения, обеспечивающих управление созданием и использованием баз данных.

На данный момент существует множество платных решений предоставляемых тем или иным интернет ресурсом. Но темой этого курсового проекта является создание бесплатного каркаса базы данных. Клиент базы данных написан на языке C++, в то время как сама база описана в Microsoft Access.

2.2 Диаграмма взаимодействия

Рассматривая проблему проектирования базы с различных сторон можно выделить основную сущность (Entity):

1. base;

Процесс проектирования базы данных в Microsoft Access, работающего на драйвере MyODBC v5.1x, связан с его относительной простотой (относительно других, например Erwin или IBExpert, где обычному обывателю и пользователю будет достаточно сложно разобраться), что даст возможность работать и вносить изменения в базу большему кругу клиентов.

Сущность будет обладать рядом своих атрибутов. Для сущности «base» будут характерны следующие параметры атрибутов:

· Номер — атрибут, который является автоинкрементным, уникальным полем;

· Исполнитель — содержит информацию о исполнителе трека;

· Альбом — позволяет сортировать треки по альбомам исполнителей;

· Трек — поле, содержащие имя трека;

· Длительность — содержит информацию о продолжительности музыкальной композиции;

· Стоимость — предоставляет информацию о стоимости трека для формирования затрат;

· Комментарии — поле, позволяющие оставлять личные заметки.

Произведем проектирование представленной сущности в режиме конструктора баз данных Microsoft Access.

2.3 Проектирование функциональности

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

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

Так как каждое поле таблицы имеет характерное только для него свойство поступающих данных (например, автоинкрементное поле имеет только свойство integer и может выражаться только целочисленными значениями, в то время, как поле с именем исполнителя может принимать любой текс), то необходимо ограничить у пользователя возможность ввода некорректных данных, что может привести к отключению клиента от БД.

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

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

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

2.4 Структура программы

Программа разработана с помощью компилятора C++ Builder и представляет из себя клиентское приложение.

Внешний вид интерфейса откомпилированного приложения на рис. 1.

Рисунок 1 — Внешний вид интерфейса взаимодействия с пользователем Как видно из рис. 1 весь интерфейс разделен в зависимости от функционала, который он выполняет. Выделим основные функциональные группы:

· Навигация — ориентирование по базе;

· Редактирование — удаление, добавление и изменение данных БД;

· Поиск — облегчает задачу нахождения того или иного параметра базы;

· Сортировка — позволяет отсортировать данные базы по заданным критериям.

Для формирования БД использовались стандартные компоненты из библиотеки C++ Builder:

· ADOConnection — служит для подключения клиента к БД;

· DataSource — позволяет выбирать из базы текущую таблицу, но в нашем случае имеется только одна таблица, служит для дальнейшего расширения функционала;

· ADOQuery — позволяет формировать SQL запросы и отправлять их на исполнение базой данных;

· DBGrid — служит для отображения данных, содержащихся в БД.

Остальные компоненты служат для визуализации функций БД и это: button, panel, groupbox, cheakbox, labeledit, memo, radiobutton.

2.5 Использованные алгоритмы

Алгоритм удаления: Служит для удаления лишних записей в БД. Реализация представлена на рис. 2.

Рисунок 2 — Алгоритм удаления записи в БД Алгоритм замены: служит для редактирования базы данных, представлен на рис. 3.

Рисунок 3 — реализация изменения в БД Алгоритм добавления: служит для добавления новых записей в БД, представлен на рис. 4

Рисунок 4 — Работа алгоритма добавления

2.6 Взаимодействие с пользователем

Главный файл Unit1. cpp (его листинг представлен в Приложении A). Это файл содержит функцию создания формы __fastcall TForm1: TForm1(TComponent* Owner): TForm (Owner), а так же функции для компонентов формы. После запуска программы производиться подключение через драйвер к базе данных с последующей полнофункциональной работой. В случае, если клиенту необходимо подключится к запороленной базе данных, то необходимо при компиляции проекта выставить в свойствах ADOConnection -> LoginPromt = true. Данный интерфейс взаимодействия (рис. 1) позволяет пользователю использовать навигацию по базе, редактирование (удалить, добавить, изменить) и поиск.

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

программа база данный фонотека

3. ТЕСТИРОВАНИЕ

3.1 Руководство пользователя

Системные требования:

· Операционная система Microsoft Windows (Vista, Seven, 8);

· Процессор с частотой не меньше 1 ГГц;

· Оперативная память 256МБ;

· Монитор.

Программа состоит из одного исполняемого файла Project1. exe и непосредственно базы данных, исполненной в виде Microsoft Access файла. Для работы приложения нет необходимости устанавливать дополнительные драйвера. Распространение возможно любыми доступными способами. Интерфейс — окно с визуальными компонентами. Язык интерфейса — русский.

При запуске программы появляется главное окно представленное на рис. 1.

Рисунок 2 — Режим добавления записи Протестируем функциональные клавиши программы:

1. Навигация по базе. При нажатии кнопки «Первая» вы перейдете к первой записи в БД. Аналогично действует кнопка «Последняя», перемещая указатель на последнюю запись. Кнопки «Следующая» и «Предыдущая» служат для изменения позиции указателя БД на один в ту или иную сторону.

2. Редактирование. При нажатии кнопки «Добавить» появится дополнительная панель для добавления записи в БД (рис. 2).

После нажатия на доп. Панели «Добавить» в БД появляется новая запись. И счетчик записей возрастает на 1. (рис. 3).

Рисунок 3 — Результат добавления записи в БД Если использовать кнопку «Удалить», то можно уничтожить запись в БД. Причем удаление происходит с непременным подтверждением действия пользователем. Это сделано, чтобы пользователь не мог по ошибке удалить запись.

Иллюстрация работы на рис. 4. Удаление ведет к уменьшению количества записей в БД.

Использование кнопки «Изменить» позволяет редактировать уже имеющиеся данные. При нажатии на кнопку появляется дополнительное меню. Попробуем отредактировать запись алла пугачева, сделав имя и фамилию с большой буквы. Результат на рис. 5. Рис. 6.

Рисунок 4 — Удаление записи из БД Рисунок 5 — Редактирование записи в БД Рисунок 6 — Результат изменения записи в БД

3. Панель «Сортировка» позволяет пользователю отсортировать данные в БД по определенным признакам. В качестве примера попробуем найти самый дорогой по стоимости трек. Для этого выберем параметр сортировки по стоимости и установим чек по убыванию (результат рис. 7)

Рисунок 7 — Сортировка в БД Из рис. 7. Видно, что самый дорогой трек принадлежит Пугачевой.

4. Панель «Поиск» позволяет найти в нужном поле слово по ключевым буквам. В качестве примера, давайте найдем треки, принадлежащие Николаю Баскову (см. рис. 8).

Рисунок 8 — Поиск по БД Вывод: программа протестирована, работоспособность подтверждена. При вводе корректных данных программа выдает желаемый результат. При попытке ввода некорректных данных программа их не вводит работоспособность программы не нарушается.

ЗАКЛЮЧЕНИЕ

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

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

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

2. Реализованные алгоритмы позволяют формировать запросы простым и эффективным способом;

3. Стоит отметить, что приложение является дорабатываемым, например, в приложение можно добавить операторы обработки события ошибки, например при некорректном вводе данных.

СПИСОК ЛИТЕРАТУРЫ

1. Дьюхерст С. C++. Священные знания / С. Дьюхерст. — СПб.: Символ-Плюс, 2012. — 240 с.

2. Уильямс Э. Паралельное програмирование на С++ в действии. Практика разработки многопоточных программ / Э. Уильямс. — М.: ДМК Пресс, 2012. — 672 с.

3. Прата С. Язык программирования C++. Лекции и упражнения, 6-е изд / П. Стивен. — М.: ООО «И.Д. Вильяме», 2012. — 1248 с.;

4. Страуструп Б. Язык программирования C++. Специальное издание / Б. Страуструп. — М.: Издательство Бином, 2011. — 1136 с.;

5. Страуструп Б. Программирование: принципы и практика использования C++ / Б. Страуструп. — М.: ООО «И.Д. Вильяме», 2011. — 1248 с.;

6. Дениэлс Д. Программирование баз данных [Электронный ресурс]

7. Дениэлс Д. С++ и приложения [Электронный ресурс] // инф.-справочный портал

8. Топоркова О. М. Программирование на C++ Builder [Электронный ресурс]

9. Толмачев А. Г. Базы данных на основе Microsoft Access [Электронный ресурс] // инф.-справочный портал

10. Лидовский В. В. Язык SQL. Формирование запросов [Электронный ресурс] // инф.-справочный портал.

ПРИЛОЖЕНИЯ А

//—————————————————————————————————————;

#include

#pragma hdrstop

#include «Unit1.h»

//—————————————————————————————————————;

#pragma package (smart_init)

#pragma resource «*.dfm»

TForm1 *Form1;

int i = 0;

//—————————————————————————————————————;

__fastcall TForm1: TForm1(TComponent* Owner)

: TForm (Owner)

{

Label1->Caption = «Кол — во записей: «+ AnsiString (DataSource1;

>DataSet->RecordCount);

}

//—————————————————————————————————————;

void __fastcall TForm1: Button1Click (TObject *Sender)

{

ADOQuery1->First ();

}

//—————————————————————————————————————;

void __fastcall TForm1: Button2Click (TObject *Sender)

{

ADOQuery1->Last ();

}

//—————————————————————————————————————;

void __fastcall TForm1: Button3Click (TObject *Sender)

{

ADOQuery1->Next ();

}

//—————————————————————————————————————;

void __fastcall TForm1: Button4Click (TObject *Sender)

{

ADOQuery1->Prior ();

}

//—————————————————————————————————————;

void __fastcall TForm1: Button5Click (TObject *Sender)

{

AnsiString sql;

GroupBox3->Visible = false;

sql += «DELETE FROM db WHERE «;

sql += «номер = «;

sql += ADOQuery1->Fields->FieldByName («номер»)->AsString;

int q = MessageBox (NULL," Вы хотите удалить запись?", «Удаление» ,

MB_YESNO|MB_ICONWARNING);

if (q == IDYES) {

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add (sql);

ADOQuery1->ExecSQL ();

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add («SELECT * FROM db»);

ADOQuery1->Active=true;

}

Label1->Caption = «Кол — во записей: «+ AnsiString (DataSource1;

>DataSet->RecordCount);

}

//—————————————————————————————————————;

void __fastcall TForm1: Button6Click (TObject *Sender)

{

i = 1;

Form1->Button8->Caption = «Добавить» ;

GroupBox3->Visible = true;

Button6->Enabled = false;

if (Button7->Enabled == false)

Button7->Enabled = true;

}

//—————————————————————————————————————;

void __fastcall TForm1: Button8Click (TObject *Sender)

{

AnsiString sql;

if (i == 1){

sql += «INSERT INTO db

(исполнитель, альбом, трек, длительность, стоимость, комментарии)

VALUES («;

sql += QuotedStr (a1->Text)+" ," ;

sql += QuotedStr (a2->Text)+" ," ;

sql += QuotedStr (a3->Text)+" ," ;

sql += QuotedStr (a4->Text)+" ," ;

sql += QuotedStr (a5->Text)+" ," ;

sql += QuotedStr (Memo1->Text)+")" ;

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add (sql);

ADOQuery1->ExecSQL ();

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add («SELECT *FROM db»);

ADOQuery1->Active = true;

Button6->Enabled = true;

GroupBox3->Visible = false;

Label1->Caption = «Кол — во записей: «+ AnsiString (DataSource1;

>DataSet->RecordCount);

}

if (i == 2){

sql += «UPDATE db SET «;

sql += «исполнитель = „+ QuotedStr (a1->Text)+“ ,» ;

sql += «альбом = „+ QuotedStr (a2->Text)+“ ,» ;

sql += «трек = „+ QuotedStr (a3->Text)+“ ,» ;

sql += «длительность = „+ QuotedStr (a4->Text)+“ ,» ;

sql += «стоимость = „+ QuotedStr (a5->Text)+“ ,» ;

sql += «комментарии = «+ QuotedStr (Memo1->Text)+» WHERE номер =

" ;

sql += Form1->ADOQuery1->Fields->FieldByName («Номер»)->AsString;

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add (sql);

ADOQuery1->ExecSQL ();

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add («SELECT * FROM db»);

ADOQuery1->Active=true;

Button7->Enabled = true;

GroupBox3->Visible = false;

a1->Text = «» ;

a2->Text = «» ;

a3->Text = «» ;

a4->Text = «» ;

a5->Text = «» ;

Memo1->Text = «» ;

}

}

//—————————————————————————————————————;

void __fastcall TForm1: Button7Click (TObject *Sender)

{

i = 2;

Button8->Caption = «Изменить» ;

GroupBox3->Visible = true;

Button7->Enabled = false;

if (Button6->Enabled == false)

Button6->Enabled = true;

a1->Text = ADOQuery1->Fields->Fields[1]->AsString;

a2->Text = ADOQuery1->Fields->Fields[2]->AsString;

a3->Text = ADOQuery1->Fields->Fields[3]->AsString;

a4->Text = ADOQuery1->Fields->Fields[4]->AsString;

a5->Text = ADOQuery1->Fields->Fields[5]->AsString;

Memo1->Text = ADOQuery1->Fields->Fields[6]->AsString;

}

//—————————————————————————————————————;

void __fastcall TForm1: ComboBox2Change (TObject *Sender)

{

AnsiString field = «», sql = «» ;

if (ComboBox2->ItemIndex > -1) {

switch (ComboBox2->ItemIndex) {

case 0: field = «исполнитель»; break;

case 1: field = «альбом»; break;

case 2: field = «трек»; break;

case 3: field = «длительность»; break;

case 4: field = «стоимость»; break;

}

sql += «SELECT * FROM db WHERE «;

sql += field;

sql += «LIKE '%» ;

sql += LabeledEdit1->Text;

sql += «%'» ;

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add (sql);

ADOQuery1->Active=true;

}

}

//—————————————————————————————————————;

void __fastcall TForm1: CheckBox1Click (TObject *Sender)

{

if (CheckBox1->Checked) {

ComboBox2->Enabled = true;

LabeledEdit1->Enabled = true;

LabeledEdit1Change (Sender); // обработчик события изменения строки

поиска

}

else {

ComboBox2->Enabled = false;

LabeledEdit1->Enabled = false;

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add («SELECT * FROM db»);

ADOQuery1->Active=true;

}

}

//—————————————————————————————————————;

void __fastcall TForm1: LabeledEdit1Change (TObject *Sender)

{

AnsiString field = «», sql = «» ;

if (ComboBox2->ItemIndex > -1) {

switch (ComboBox2->ItemIndex) {

case 0: field = «исполнитель»; break;

case 1: field = «альбом»; break;

case 2: field = «трек»; break;

case 3: field = «длительность»; break;

case 4: field = «стоимость»; break;

}

sql += «SELECT * FROM db WHERE «;

sql += field;

sql += «LIKE '%» ;

sql += LabeledEdit1->Text;

sql += «%'» ;

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add (sql);

ADOQuery1->Active=true;

}

}

//—————————————————————————————————————;

void __fastcall TForm1: ComboBox1Change (TObject *Sender)

{

AnsiString field = «», sql = «» ;

if (ComboBox1->ItemIndex > 0) {

RadioButton1->Enabled = true;

RadioButton2->Enabled = true;

switch (ComboBox1->ItemIndex) {

case 1: field = «исполнитель»; break;

case 2: field = «альбом»; break;

case 3: field = «трек»; break;

case 4: field = «длительность»; break;

case 5: field = «стоимость»; break;

}

sql += «SELECT * FROM db ORDER BY «;

sql += field;

if (RadioButton1->Checked) {

sql += «ASC»; // По возростанию

} else {

sql += «DESC»; // По убыванию

}

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add (sql);

ADOQuery1->Active=true;

} else {

RadioButton1->Enabled = false;

RadioButton2->Enabled = false;

}

}

//—————————————————————————————————————;

void __fastcall TForm1: RadioButton1Click (TObject *Sender)

{

AnsiString field = «», sql = «» ;

if (ComboBox1->ItemIndex > 0) {

RadioButton1->Enabled = true;

RadioButton2->Enabled = true;

switch (ComboBox1->ItemIndex) {

case 1: field = «исполнитель»; break;

case 2: field = «альбом»; break;

case 3: field = «трек»; break;

case 4: field = «длительность»; break;

case 5: field = «стоимость»; break;

}

sql += «SELECT * FROM db ORDER BY «;

sql += field;

if (RadioButton1->Checked) {

sql += «ASC»; // По возростанию

} else {

sql += «DESC»; // По убыванию

}

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add (sql);

ADOQuery1->Active=true;

} else {

RadioButton1->Enabled = false;

RadioButton2->Enabled = false;

}

}

//—————————————————————————————————————;

void __fastcall TForm1: RadioButton2Click (TObject *Sender)

{

AnsiString field = «», sql = «» ;

if (ComboBox1->ItemIndex > 0) {

RadioButton1->Enabled = true;

RadioButton2->Enabled = true;

switch (ComboBox1->ItemIndex) {

case 1: field = «исполнитель»; break;

case 2: field = «альбом»; break;

case 3: field = «трек»; break;

case 4: field = «длительность»; break;

case 5: field = «стоимость»; break;

}

sql += «SELECT * FROM db ORDER BY «;

sql += field;

if (RadioButton1->Checked) {

sql += «ASC»; // По возростанию

} else {

sql += «DESC»; // По убыванию

}

ADOQuery1->SQL->Clear ();

ADOQuery1->SQL->Add (sql);

ADOQuery1->Active=true;

} else {

RadioButton1->Enabled = false;

RadioButton2->Enabled = false;

}

}

//—————————————————————————————————————;

void __fastcall TForm1: Button9Click (TObject *Sender)

{

ShowMessage («ФИО автора»);

}

//—————————————————————————————————————;

void __fastcall TForm1: a4KeyPress (TObject *Sender, char &Key)

{

if ((Key >= '0') && (Key <= '9') || Key == VK_BACK) {} // цифры

//else if ((Key == '.') || (Key == ',')) // запятая

else

Key = 0; // не цифра

}

//—————————————————————————————————————;

void __fastcall TForm1: a5KeyPress (TObject *Sender, char &Key)

{

if ((Key >= '0') && (Key <= '9') || Key == VK_BACK) {} // цифры

//else if ((Key == '.') || (Key == ',')) // запятая

else

Key = 0; // не цифра

}

//—————————————————————————————————————;

void __fastcall TForm1: N3Click (TObject *Sender)

{

ShowMessage («АВТОР»);

}

void __fastcall TForm1: N2Click (TObject *Sender)

MB_ICONINFORMATION);

if (q == IDYES) Application->Terminate ();

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