Автоматизированная система учета абонентов библиотеки
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ДАГЕСТАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ В ЭКОНОМИКЕ
Курсовая работа
по Базам Данных
на тему
«Автоматизированная система учета абонентов библиотеки»
Выполнила: ст-ка 3 курса
гр.И-713 ФИС
Шахпеленгова Н.В.
Проверил: ассистент
кафедры ИСЭ
Ярахмедова Н.Я.
Махачкала 2009г.
Введение
Развитие современного общества предполагает широкое использование компьютерных и информационных технологий, на основе которых создаются разнообразные информационные системы. Обычно получаемая в них информация анализируется человеком, который будет играть определяющую роль. Такие информационные системы являются автоматизированными, так как в их функционировании принимает участие человек.
В данной работе предлагается автоматизировать ведение учета абонентов библиотеки.
Для достижения поставленной цели необходимо решить ряд задач:
1. проанализировать состав программных средств, которые существуют на сегодняшний день;
2. провести анализ технических и программных средств;
3. проанализировать средства программирования и выбрать из них оптимальное;
4. выбрать СУБД;
5. разработать базу данных для учета абонентов;
6. разработать программное приложение, обеспечивающее ввод, отображение и вывод данных;
7. разработать методическое обеспечение пользователя.
В курсовой работе создана специализированная база данных для ведения учета абонентов библиотеки, а также рассмотрены основные понятия и принципы, лежащие в основе систем управления базами данных. Разработано объектно-ориентированное программное приложение. Произведена разработка алгоритмов, был выбран язык программирования Borland С++ Builder, как наиболее подходящий для данного проекта, реализующая разработанный алгоритм.
Теоретическая часть
Анализ предметной области
Предметной областью называется часть реального мира, представляющая интерес для данного исследования. В данной курсовой работе предметной областью является библиотека и ведение учета абонентов.
Библиотека - это информационное, культурное, образовательное учреждение, располагающее организованным фондом документов и представляющее их во временное пользование абонентам, а также осуществляющее другие библиотечные услуги.
Основные функции библиотеки — информационная, культурная, образовательная, досуговая.
Абонент библиотеки — это физическое или юридическое лицо, зарегистрированное библиотекой как ее постоянный пользователь.
Абонент – [нем. Abonnent, франц. Abonner – подписываться] – лицо, имеющее абонемент.
Абонемент – [франц. abonnement] – право пользования чем-либо на определенный срок.
Абонемент библиотеки осуществляет выдачу изданий читателям на дом на определенный срок. Срок пользования библиотечными изданиями определяется «Правилами пользования библиотекой».
Работа на абонементе строится на основе общего обслуживания. При общем абонементе читатели получают литературу на одной кафедре выдачи. Дифференциация осуществляется путем выделения групп читателей. Формуляры читателей выделенных групп ставят отдельно или помечают условными обозначениями (цветовые пометки, буквы).
Все издания, выдаваемые читателям на дом, записываются в формуляре, при этом указывается: дата выдачи, инвентарный номер, автор и заглавие. Читатели расписываются в получении изданий.
На дом выдаются читателю издания (в том числе книги, журналы, ноты, пластинки, диафильмы и др.) в соответствии с «Правилами пользования библиотекой». В Старорусской ЦБС взрослым читателям книги выдаются сроком на 1 месяц, читателям-детям — на 10 дней. Срок пользования изданиями по просьбе читателя (лично или по телефону) может быть продлен, если на издание нет спроса со стороны других читателей.
При возвращении издания библиотекарь обязан в присутствии читателя зачеркнуть его расписку в читательском формуляре.
Читатель библиотеки — лицо, пользующееся библиотекой на основании официальной записи в установленных документах.
При записи в библиотеку посетитель предъявляет паспорт или заменяющий его документ. Читатели, не достигшие 16 лет, записываются в библиотеку по письменной просьбе родителей. Запись и выдача изданий сотрудникам библиотеки производится на общих основаниях.
Лица, временно проживающие в данном населенном пункте, записываются в библиотеку, как правило, без права выдачи литературы на дом. В отдельных случаях библиотека может выдавать этим читателям книги на дом под залог, превышающий сумму стоимости книги не менее чем в 1,5 раза, и, взяв плату за запись.
На каждого читателя заполняется формуляр читателя. Формуляр содержит сведения о читателе и выданных изданиях и служит учетным документом выдачи литературы и анализа чтения.
На формуляре указывается порядковый номер читателя, который сохраняется за читателем до конца года.
В тех случаях, когда читатель берет книги для членов своей семьи, на каждого из них заполняется формуляр читателя, на обороте которого член семьи указывает: «Поручаю брать книги (такому-то). Дата. Подпись».
При записи читателя в библиотеку библиотекарь проводят с ним индивидуальную беседу, в ходе которой, помимо данных для заполнения читательского формуляра, выявляют его читательские интересы. Также библиотекарь должен провести экскурсию по библиотеке, в ходе которой он знакомит читателя с «Правилами пользования библиотекой».
Формуляр читателя рассчитан на использование в течение пяти лет. По мере заполнения вкладыш заменяется или дополняется новым, что позволяет наблюдать чтение отдельных категорий читателей в течение ряда лет. Использованные формуляры хранятся в библиотеке, не менее одного года.
Число читателей определяется по количеству читательских формуляров.
Этапы проектирования БД
В базах данных отражается информация об определенной предметной области. В предметной области в процессе обследования и анализа, выделяют классы объектов. Классом объектов называют совокупность объектов обладающих одинаковым набором свойств.
При отражении в информационной системе, каждый объект представляется идентификационным, который отличает один объект класса от другого, а каждый класс объекта представляется своим именем. Каждый объект класса обладает определенным набором свойств. Для объектов одного класса набор этих свойств одинаков, а их значение естественно может быть разным. При описании предметной области надо отобразить связи между объектом и характеризующим его свойством. Связь изображается в виде линии соединяющей его свойства и объект. Связь между объектом и его свойством может быть различной, если объект обладает единственным значением свойства, то связь называется единичной и изображается в виде стрелки . Если объект обладает множеством значений свойства, то связь называется множественной и изображается в следующем виде . Кроме того, некоторые свойства являются постоянными, если их значения не меняются со временем. Такое свойство называется статическим, а свойства, значение которых может изменяться со временем, называется динамическим, и эти свойства обозначаются: S – статическое, D – динамическое.
Проектирование баз данных представляет собой длительный, трудоемкий процесс, от которого зависит жизнеспособность и эффективность проектируемой базы данных, ее способность к развитию. Важную роль при проектировании базы данных играет методология построения концептуальных моделей предметной области, включающая методы и средства, позволяющие спроектировать базу данных, удовлетворяющую заданным целям и требованиям пользователей и прикладных программистов.
На этапе сбора данных проводятся наблюдения и измерения, собираются отчеты и различные документы, интервьюируются специалисты в данной предметной области, выявляется перечень задач организации и ее структурных подразделений. Сбор применения баз данных должен определяться независимо от прикладных задач и охватывать все функциональные подразделения организации. Для этого проводятся собеседования с руководством организации с целью выявления отделов данной организации и внешних организаций, связанных с информационным обеспечением текущих и планируемых прикладных задач, а также возможных в будущем изменений в деятельности организации. Далее проводятся дополнительные собеседования в подразделениях организации с целью выявления совместно используемых данных. На этом же этапе собранные данные реализуются на предмет устранения дублирования и противоречивости данных, неоднозначности их определений и описаний, выявляются и формулируются правила обработки информации и принятия решений.
База данных – это некоторая целевая модель предметной области, т. е. в БД находят отражения только те факты о ПО, которые необходимо для функционирования автоматизированных систем, в состав которой входит БД. При проектировании БД проектировщик должен выделить и описать эти ожидаемые факты, тем самым будет очерчена граница предметной области банка данных, затем необходимо выполнить интерпретацию описаний этих фактов с помощью допустимых конкретной СУБД структур данных.
Проектирование БД начинается с предварительной структуризации предметной области: объекты реального мира подвергаются классификации, фиксируется совокупность подлежащих отображению в БД типов объектов. Для каждого типа объектов фиксируется совокупность свойств, посредством которых будут описываться конкретные объекты этого типа в БД, виды отношений (взаимосвязей) между этими объектами. Затем решаются вопросы о том, какая информация об этих объектах должна быть представлена в БД, и как ее представить с помощью данных.
Инфологическая модель: Цель инфологического моделирования – обеспечение наиболее естественных для человека способов сбора и представления той информации, которую предполагается хранить в создаваемой базе данных. Поэтому инфологическую модель данных пытаются строить по аналогии с естественным языком (последний не может быть использован в чистом виде из-за сложности компьютерной обработки текстов и неоднозначности любого естественного языка). Основными конструктивными элементами инфологических моделей являются сущности, связи между ними и их свойства (атрибуты).
Сущность – любой различимый объект (объект, который мы можем отличить от другого), информацию о котором необходимо хранить в базе данных. Сущностями могут быть люди, места, самолеты, рейсы, вкус, цвет и т.д. Необходимо различать такие понятия, как тип сущности и экземпляр сущности. Понятие тип сущности относится к набору однородных личностей, предметов, событий или идей, выступающих как целое. Экземпляр сущности относится к конкретной вещи в наборе.
Атрибут – поименованная характеристика сущности. Его наименование должно быть уникальным для конкретного типа сущности, но может быть одинаковым для различного типа сущностей.
Абсолютное различие между типами сущностей и атрибутами отсутствует. Атрибут является таковым только в связи с типом сущности. В другом контексте атрибут может выступать как самостоятельная сущность.
Ключ – минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности. Минимальность означает, что исключение из набора любого атрибута не позволяет идентифицировать сущность по оставшимся.
Первичный ключ – атрибут (или группа атрибутов), позволяющий однозначным образом определить каждую строку в таблице.
Напротив, альтернативный ключ – атрибут (или группа атрибутов), не совпадающая с позволяющий первичным ключом и однозначным образом определяющий каждую строку в таблице.
Таблица – упорядоченная структура, состоящая из конечного набора однотипных записей.
Связь – ассоциирование двух или более сущностей. Если бы назначением базы данных было только хранение отдельных, не связанных между собой данных, то ее структура могла бы быть очень простой. Однако одно из основных требований к организации базы данных – это обеспечение возможности отыскания одних сущностей по значениям других, для чего необходимо установить между ними определенные связи. А так как в реальных базах данных нередко содержатся сотни или даже тысячи сущностей, то теоретически между ними может быть установлено более миллиона связей. Наличие такого множества связей и определяет сложность инфологических моделей.
Даталогическая и физическая модели: Модель данных логического уровня, поддерживаемую средствами СУБД, называют даталогической моделью. Эта модель представляет собой отображение логических связей между элементами данных безотносительно к их содержанию и среде хранения. Даталогическая модель строится с учетом ограничений конкретной СУБД.
При построении даталогической модели учитываются особенности отображаемой предметной области. БД предполагает интегрированное и взаимосвязанное хранение данных, поэтому для проектирования даталогической модели необходимо иметь соответствующее описание предметной области. Описание предметной области, выполненное без ориентации на используемые в дальнейшем программные и технические средства, называется инфологической моделью предметной области. Иногда к инфологической модели относят и описание характера информационных потребностей пользователей. Инфологическая модель предметной области является исходной по отношению к даталогической модели БД.
Для привязывания даталогической модели в среде хранения данных используется модель данных физического уровня. Эта модель определяет используемое запоминающее устройство, способ представления данных в среде хранения. Модель физического уровня строится также с учетом возможности предоставленных СУБД. С появлением персональных компьютеров на базе IBM этот этап фактически перестал существовать, так как операционная система, СУБД автоматически проектирует физическую среду хранения информации.
Выбор программных средств
СУБД – это совокупность языковых и программных средств, предназначенных для создания, ведения и совместного применения БД многими пользователями.
Основная особенность СУБД – это наличие процедур для ввода и хранения не только самих данных, но и описаний их структуры. Файлы, снабженные описанием хранимых в них данных и находящиеся под управлением СУБД, стали называть банки данных, а затем "Базы данных" (БД).
СУБД является пользовательской оболочкой, ориентированной на немедленное управление запросов пользователя. Однако для отечественного пользователя это представляет меньшую значимость вследствие трудности овладения англоязычным интерфейсом. Наличие в СУБД языка программирования позволяет создавать сложные системы обработки данных для конкретных задач. Группа реляционных СУБД представлена на рынке программных продуктов достаточно широко. Это, например, такие системы как Paradox, Clipper, Visual FoxPro, С++ Builder, Delphi и другие.
Для наглядного примера мы сравним два СУБД. Это поможет нам понять какую из них предпочтительнее выбрать.
Visual FoxPro 9.0 представляет собой СУБД реляционного типа с развитыми средствами создания БД, организации запросов к ним, построения приложений с использованием визуального, объектно-ориентированного программирования.
В Visual FoxPro реализованы все атрибуты реляционной СУБД. Так, в ней введено понятие базы данных как совокупности связанных таблиц, информация о которых хранится в словаре данных. В БД определяются условия ее целостности с помощью первичных и внешних ключей таблиц. Все события (изменения), происходящие в БД, могут обнаруживаться и централизованно обрабатываться в связи с появлением в Visual FoxPro таких средств, как триггеры и встроенные процедуры
Visual FoxPro совместима с более ранними версиями FoxPro. Поэтому приложения, разработанные в более ранних версиях FoxPro, могут быть адаптированы с ее помощью в среду Windows 95. Visual FoxPro обладает высокой скоростью в обслуживании БД.
Используя стандарт ODBC и SQL-запросы Visual FoxPro позволяет работать с данными в формате СУБД Access, Paradox, dBase и т. д., с серверами БД — Microsoft SQL Server, Oracle и др.
Приложение Visual FoxPro может одновременно работать как с собственными, так и сетевыми таблицами, расположенными на других компьютерах локальной сети.
Builder – это среда, в которой можно осуществлять так называемое визуальное программирование, т. е. создавать программы, которые во время исполнения взаимодействуют с пользователем благодаря многооконному графическому интерфейсу. Среда Builder позволяет работать как с простыми локальными удаленными БД, так и с многозвенными распределенными БД. В среде С++ Builder разработка программ ведется на основе современного метода – объектно-ориентированного программирования. На рынке программных продуктов есть много сред для автоматизации программирования. По мощности и удобству использования со средой Builder может соперничать Borland Delphi.
Перечислим некоторые существенные особенности С++Builder 6.0:
С++Builder 6.0 обеспечивает полный набор инструментов структурного программирования;
С++Builder 6.0 предлагает необычно большой набор операций. Многие операции встроенного языка С++Builder 6.0 соответствуют машинным командам и поэтому допускают прямую трансляцию в машинный код. Разнообразие операций позволяет выбирать их различные наборы для минимизации результирующего кода;
С++Builder 6.0 поддерживает ссылки на формы и таблицы в этих формах. Ссылка на форму программы соответствует машинному адресу этого объекта, посредством разумного использования связей можно создавать эффективно выполняемые программы, так как они позволяют ссылаться на объекты тем же самым путем, как это делает ЭВМ.
В моем случае для автоматизации системы ведения банковских счетов на основе чеков используется СУБД Borland С++Builder 6.0.
К выбору именно этого языка программирования меня подтолкнули следующие причины:
быстрота разработки объектно-ориентированных программ;
гибкость языка программирования;
быстрота работы программ;
минимальные размеры объемов программ при максимальных возможностях;
относительная не дорогая стоимость пакета программ разработки;
минимальные требования для запуска программ.
С++Builder 6.0 - это программа общего назначения, хорошо известная своей эффективностью, экономичностью, и переносимостью. Указанные преимущества С++Builder 6.0 обеспечивают хорошее качество разработки программ любого вида в любой отрасли.
Выбор технических средств
Что касается требований к вычислительной технике, для реализации моего проекта следует отметить, что компьютер должен иметь:
Процессор Intel Pentium IV;
Оперативная память 1 Гбайт. Это минимальные потребности программы для нормальной работы. При желании память можно увеличить, т.к. компьютер постоянно обрабатывает данные (записывает, считает итоги), для увеличения скорости обработки он максимально загружает память;
Материнская плата Asus-P4P800 + Видео 4МБ +Сетевая карта;
Жесткий диск (винчестер) 80 Гбайт;
Монитор LCD LG 172 (17”);
Операционная система Microsoft Windows 2000/XP;
Мышь;
Клавиатура;
Принтер HP LaserJet M1005
Проектная часть
Проектирование БД
Цель инфологического моделирования — создать точное и полное отображение реального мира, используемое в дальнейшем в качестве источника информации для построения БД.
Инфологическая модель
«Учет абонентов библиотеки»
Абонент
№ выдачи
Дата выдачи
Код абонента
Фамилия
Код абонентов
№ документа
Имя
Номер документа
Отчество
Дата возврата
Название
Флаг возврата
Дата рождения
Автор
Адрес
Штраф
Тип
Паспорт-е данные
Издательство
Год издания
Даталогическая модель
«Учет абонентов библиотеки»
Даталогическая модель «Абонент»
Fields Name |
Type |
Size |
|
1 |
N_vidachi |
A |
6 |
2 |
D_vidachi |
D |
|
3 |
Kod_abon |
A |
6 |
4 |
N_doc |
A |
6 |
5 |
D_vozvrata |
D |
|
6 |
Flag_vozvrata |
L |
|
7 |
Shtraf |
$ |
Даталогическая модель «Код абонента»
Fields Name |
Type |
Size |
|
1 |
Kod_abon |
A |
6 |
2 |
Fam |
A |
25 |
3 |
Im |
A |
25 |
4 |
Otch |
A |
25 |
5 |
D_R |
D |
|
6 |
Adres |
A |
25 |
7 |
Pasp_dan |
N |
Даталогическая модель «Номер документа»
Fields Name |
Type |
Size |
|
1 |
N_doc |
A |
6 |
2 |
Nazvanie |
A |
50 |
3 |
Avtor |
A |
30 |
4 |
Type |
A |
30 |
5 |
Izdatelstvo |
A |
25 |
6 |
God_izdaniya |
A |
10 |
Модель физического уровня
С помощью инструментов DataBase Desktop создаем файл таблиц БД. Задаем им имена – Abonent.db, Kod_abon.db и N_doc.db. Далее откроем таблицы в режиме структуризации и в окне Table Properties выберем Secondary Indexes. Нажимаем Define. Откроется окно, в котором слева расположены поля таблицы, а справа пустое окно, в которое заносятся поля, по которым создается индекс. Зададим следующие индексы – по № выдачи, зададим имя N_vidachi; по коду абонента, зададим имя Kod_abon и по номеру документа, зададим имя N_doc. После сохранения вторичных индексов, в окне высвечиваются их названия. Сохраним наши таблицы в папке «Наида» на диске D. Таким образом, путь к нашим таблицам будет D: Наида.
Машинная реализация
Для удобства работы и наглядности вводимых данных создадим автоматизированную систему «Учета абонентов библиотеки», которая должна выполнять следующие функции:
Операции:
Документы;
Фильтрация;
Поиск;
Просмотр;
Цвет фона
По умолчанию;
Черный;
Красный;
Синий;
Голубой;
Зеленый;
Желтый
Выход
Запускаем Borland C++ Builder. Создаем новое приложение File -> New -> Application. Далее появляется форма (Form1). Установим на нее компонент MainMenu из библиотеки Standart. Щелкаем на нее двойным щелчком, и появится окно для ввода меню. Введем в него наше выше перечисленное меню.
Рис. 2
Создаем новую форму (Form2) для ввода нового абонента, на которой будет осуществляться ввод нового абонента. Для этого устанавливаем на форму по 3 компоненты DataSourse, Table, DBGrid и DBNavigator. В компоненте Table устанавливаем свойства DataBaseName – Abonent, а TableName – abonent.db, kod_abon.db и n_doc.db; в компоненте DataSourse свойство DataSet – Table; в компоненте DBGrid свойство DataSourse – DataSourse1,2,3. Для управления перемещением используем компоненту DBNavigator, причем используем только кнопки перемещения, заблокировав остальные (VisibleButton).Для работы установим основное свойство DataSource - DataSource. Установим также две кнопки (TButton) для ввода и редактирования записей.
Для улучшения внешнего вида расставим метки (Label) отображающие названия полей нашей таблицы на приложении, а также настроим таблицу DBGrid. Для этого выполним двойной щелчок на компоненте Table, что приведет к открытию окна. Указав на поле окна, и нажав на правую кнопку мыши, выберем пункт «Добавить все поля». Используя свойства Alignment, DisplayLabel (заголовок столбца), DisplayWidth (ширина столбца), DisplayValues(отображаемые значения), ReadOnly (только для чтения), Visible (видимость поля), делаем настройку окна приложения.
Для фильтрации данных мы создаем новую форму File -> New -> Form3. Далее устанавливаем на форму компоненты DataSourse, Table, DBGrid, DBNavigator, RadioGroup, Label, 2 компоненты Edit,.
Устанавливаем следующие свойства:
В компоненте DataSourse1: DataSet – Table1;
В компоненте Table1: DatabaseName - Abonent; TableName – abonent.db;
В компоненте DBGrid: DataSourse - DataSourse1;
В компоненте DBNavigator: DataSourse – DataSourse1;
В компоненте Label: Caption – “ Фильтрация данных”;
Далее в компоненте Table1 делаем свойство Active равным True.
Для поиска данных мы создаем новую форму File -> New -> Form3. Далее устанавливаем на форму компоненты DataSourse, Table, DBGrid, DBNavigator, Label и Edit.
Устанавливаем следующие свойства:
В компоненте DataSourse1: DataSet – Table1
В компоненте Table1: DatabaseName - Abonent; TableName – kod_abon.db
В компоненте DBGrid: DataSourse - DataSourse1
В компоненте DBNavigator: DataSourse - DataSourse1
В компоненте Label: Caption – “Поиск данных”
Далее в компоненте Table1 делаем свойство Active равным True.
Для печати и просмотра списка абонентов создаем новую форму File -> New -> Form5. В окно формы установим следующие компоненты: Table (DatabaseName - Abonent; TableName – kod_abon.db); QuickRep (DataSet – Table1); DataSourse (DataSet – Table1).
На верхней строке отчета размещаем компоненту QRSysData. В свойстве Data устанавливаем qrsData. C помощью QRLabel делаем заголовок (Caption – “Список абонентов”). Далее в отчет перенесем компоненту QRsub>Detail, которая осуществляет циклический вывод записей на печать. Вставляем компоненты QRDText и задаем им свойства DataSet и DataField – Table1, и имена соответствующих полей, с помощью QRLabel.
Далее создаем главную форму, с которой будет вызываться модуль печати. Перенесем на форму две компоненты Button, обозначим их как «Печать» и «Просмотр». Выполним команду Alt+F11, выберем модуль формы нашего отчета и нажмем «ОК».
Описание работы программы
На диске D находим папку «Наида» Щелкаем дважды на файле Project1.exe. Откроется главное окно нашей программы:
Для ввода нового абонента открываем пункт меню Операции -> Документы. Перед нами откроется форма. Для того чтобы ввести данные о новом абоненте нажимаем на кнопку «Вставить». Появится новая строка. После ввода нажимаем кнопку «Записать». Подтверждаем изменения кнопкой «Ок».
Для того чтобы найти интересующего нас абонента, мы выполняем команду Операции -> Поиск. Перед нами открывается окно с таблицей данных и окошками для ввода кода абонента и фамилии. Для осуществления поиска просто вводим нужный нам код абонента или фамилию абонента в эти окошки.
Для того, чтобы профильтровать данные по дате выдачи и по коду абонента, выбираем команду Операции -> Фильтрация.
Для просмотра или печати нужного нам документа выполняем команду Документы -> Просмотр и печать …. Кликаем на документ и перед нами открывается окно. Для просмотра списка нажимаем на кнопку «Просмотр», а для печати – «Печать».
Для просмотра справки нажимаем на пункт меню «Справка»
Для выхода из программы нажимаем на пункт меню «Выход»
Заключение
В данном курсовом проекте я ознакомилась с возможностями С++ Вuilder, как системы управления базами данных разработанной мною программы “Учет абонентов библиотеки ”.
Также здесь разрабатывается база данных, в которой хранится и обрабатывается информация об учете абонентов.
Сначала строится инфологическая модель, в которую входят БД, сущность, атрибуты. Далее строится даталогическая модель. В ней описываются размеры, типы, назначения, наименования. Следующим этапом является описание физической модели, в которой описывается физическое устройство хранения информации. Обработку информации в БД осуществляют такие методы как фильтрация, поиск и печать.
Программа выполняет следующие функции: позволяет редактировать БД, внести сведения о новом абоненте, найти по заданному пользователем ключу информацию, произвести фильтрацию и просмотреть документы.
Литература
Курс лекций по дисциплине “Базы данных”
Диго С..М. «Проектирование и использование БД». 1991 г.
Хеннер Е.К., Могилев А.В., Пак Н.И. «Информатика». М.: «Учебное пособие для студентов пед. вузов», 1999 г.
Основы языка С++ Builder 2004 г.
Наумов А.Н «Системы управления базами данных и знаний» 1991 г.
Программа
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit11.h"
#include "Unit1.h"
#include "Unit10.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#include "Unit6.h"
#include "Unit7.h"
#include "Unit8.h"
#include "Unit9.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender)
{
Form1->Hide();
Form2->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N5Click(TObject *Sender)
{
Form1->Hide();
Form3->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N6Click(TObject *Sender)
{
Form1->Hide();
Form4->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N7Click(TObject *Sender)
{
Form1->Hide();
Form5->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N8Click(TObject *Sender)
{
Form1->Color=clBtnFace;
N8->Checked=true;
N9->Checked=false;
N10->Checked=false;
N11->Checked=false;
N12->Checked=false;
N13->Checked=false;
N14->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N9Click(TObject *Sender)
{
Form1->Color=clBlack;
N8->Checked=false;
N9->Checked=true;
N10->Checked=false;
N11->Checked=false;
N12->Checked=false;
N13->Checked=false;
N14->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N10Click(TObject *Sender)
{
Form1->Color=clRed;
N8->Checked=false;
N9->Checked=false;
N10->Checked=true;
N11->Checked=false;
N12->Checked=false;
N13->Checked=false;
N14->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N11Click(TObject *Sender)
{
Form1->Color=clBlue;
N8->Checked=false;
N9->Checked=false;
N10->Checked=false;
N11->Checked=true;
N12->Checked=false;
N13->Checked=false;
N14->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N12Click(TObject *Sender)
{
Form1->Color=clSkyBlue;
N8->Checked=false;
N9->Checked=false;
N10->Checked=false;
N11->Checked=false;
N12->Checked=true;
N13->Checked=false;
N14->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N13Click(TObject *Sender)
{
Form1->Color=clGreen;
N8->Checked=false;
N9->Checked=false;
N10->Checked=false;
N11->Checked=false;
N12->Checked=false;
N13->Checked=true;
N14->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N14Click(TObject *Sender)
{
Form1->Color=clYellow;
N8->Checked=false;
N9->Checked=false;
N10->Checked=false;
N11->Checked=false;
N12->Checked=false;
N13->Checked=false;
N14->Checked=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N15Click(TObject *Sender)
{
Form1->Hide();
Form11->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
Form1->Hide();
Form5->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
Edit1->Text = Table1D_vidachi->AsString;
Edit2->Text = Table1N_doc->AsString;
Edit3->Text = Table1D_vozvrata->AsString;
Edit4->Text = Table1Flag_vozvrata->AsString;
Edit5->Text = Table1Shtraf->AsString;
Edit7->Text = Table2Kod_abon->AsString;
Edit8->Text = Table2Fam->AsString;
Edit9->Text = Table2Im->AsString;
Edit10->Text = Table2Otch->AsString;
Edit11->Text = Table2D_R->AsString;
Edit12->Text = Table2Adres->AsString;
Edit15->Text = Table3N_doc->AsString;
Edit16->Text = Table3Nazvanie->AsString;
Edit17->Text = Table3Avtor->AsString;
Edit18->Text = Table3Izdatelstvo->AsString;
Edit19->Text = Table3God_izdaniya->AsString;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::ArialBlack1Click(TObject *Sender)
{
Form2->Font->Name="Arial Black";
ArialBlack1->Checked=true;
TimesNewRoman1->Checked=false;
Cambria1->Checked=false;
Colibri1->Checked=false;
Monotypecorsiva1->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::TimesNewRoman1Click(TObject *Sender)
{
Form2->Font->Name="Times New Roman";
TimesNewRoman1->Checked=true;
ArialBlack1->Checked=false;
Cambria1->Checked=false;
Colibri1->Checked=false;
Monotypecorsiva1->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Monotypecorsiva1Click(TObject *Sender)
{
Form2->Font->Name="Monotype Corsiva";
TimesNewRoman1->Checked=false;
ArialBlack1->Checked=false;
Cambria1->Checked=false;
Colibri1->Checked=false;
Monotypecorsiva1->Checked=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Colibri1Click(TObject *Sender)
{
Form2->Font->Name="Colibri";
TimesNewRoman1->Checked=false;
ArialBlack1->Checked=false;
Cambria1->Checked=false;
Colibri1->Checked=true;
Monotypecorsiva1->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Cambria1Click(TObject *Sender)
{
Form2->Font->Name="Cambria";
TimesNewRoman1->Checked=false;
ArialBlack1->Checked=false;
Cambria1->Checked=true;
Colibri1->Checked=false;
Monotypecorsiva1->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Table1AfterScroll(TDataSet *DataSet)
{
Edit1->Text = Table1D_vidachi->AsString;
Edit2->Text = Table1N_doc->AsString;
Edit3->Text = Table1D_vozvrata->AsString;
Edit4->Text = Table1Flag_vozvrata->AsString;
Edit5->Text = Table1Shtraf->AsString;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
AnsiString s;
const AnsiString s1=", ";
s="";
if (Table1D_vidachi->AsString!= Edit1->Text)
{
if (s !="") s+=s1;
s+= "Дата выдачи";
}
if(Table1N_doc->AsString!=Edit2->Text)
{
if (s !="") s+=s1;
s+="Номер документа";
}
if(Table1D_vozvrata->AsString!=Edit3->Text)
{
if (s !="") s+=s1;
s+="Дата возврата";
}
if(Table1Flag_vozvrata->AsString!=Edit4->Text)
{
if (s !="") s+=s1;
s+="Флаг возврата";
}
if(Table1Shtraf->AsString!=Edit5->Text)
{
if (s !="") s+=s1;
s+="Штраф";
}
if (s !="")
{
if ( Application->MessageBox(
("Действительно хотите ввести новые данные?"+s+"?").c_str(),
"Подтвердите изменение",
MB_YESNO+MB_ICONQUESTION)==IDYES)
{
Table1->Edit();
Edit1->Text = Table1D_vidachi->AsString;
Edit2->Text = Table1N_doc->AsString;
Edit3->Text = Table1D_vozvrata->AsString;
Edit4->Text = Table1Flag_vozvrata->AsString;
Edit5->Text = Table1Shtraf->AsString;
Table1->Post(); //запись данных
}}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Table1->Insert();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button3Click(TObject *Sender)
{
if ( Application->MessageBox(
"Действительно хотите удалить запись?",
"Подтвердите решение",
MB_YESNO+MB_ICONEXCLAMATION)==IDYES)
Table1->Delete(); // удаление данных
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N16Click(TObject *Sender)
{
Form2->Hide();
Form5->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::DBNavigator1Click(TObject *Sender,
TNavigateBtn Button)
{
Edit1->Text = Table1D_vidachi->AsString;
Edit2->Text = Table1N_doc->AsString;
Edit3->Text = Table1D_vozvrata->AsString;
Edit4->Text = Table1Flag_vozvrata->AsString;
Edit5->Text = Table1Shtraf->AsString;
}
//---------------------------------------------------------------------------
void __fastcall TForm3::RadioGroup1Click(TObject *Sender)
{
if (RadioGroup1->ItemIndex==0)
Table1->Filtered = false;
else
{
if (RadioGroup1->ItemIndex==1)
Table1->Filter="D_vidachi='"+ComboBox1->Text+"'";
else
{
if (RadioGroup1->ItemIndex==2)
Table1->Filter="D_vozvrata='"+ComboBox2->Text+"'";
Table1->Filtered = true;
}
} // фильтрация данных
}
//---------------------------------------------------------------------------
void __fastcall TForm3::ComboBox1Change(TObject *Sender)
{
if (RadioGroup1->ItemIndex==1)
Table1->Filtered = false;
else
{
if (RadioGroup1->ItemIndex==1)
Table1->Filter="D_vidachi='"+ComboBox1->Text+"'";
else
{
if (RadioGroup1->ItemIndex==2)
Table1->Filter="D_vozvrata='"+ComboBox2->Text+"'";}
{
Table1->Filtered = false;
Table1->Filter="(D_vidachi='"+ComboBox1->Text+"')";
Table1->Filtered = true;
Edit1->Text = Table1D_vidachi->AsString;
Edit2->Text = Table1N_doc->AsString;
Edit3->Text = Table1D_vozvrata->AsString;
Edit4->Text = Table1Flag_vozvrata->AsString;
Edit5->Text = Table1Shtraf->AsString;
}}
}
//---------------------------------------------------------------------------
void __fastcall TForm3::ComboBox2Change(TObject *Sender)
{
if (RadioGroup1->ItemIndex==2)
Table1->Filtered = false;
else
{
if (RadioGroup1->ItemIndex==1)
Table1->Filter="D_vidachi='"+ComboBox1->Text+"'";
else
{
if (RadioGroup1->ItemIndex==2)
Table1->Filter="D_vozvrata='"+ComboBox2->Text+"'";
{
Table1->Filtered = false;
Table1->Filter="(D_vozvrata='"+ComboBox2->Text+"')";
Table1->Filtered = true;
Edit1->Text = Table1D_vidachi->AsString;
Edit2->Text = Table1N_doc->AsString;
Edit3->Text = Table1D_vozvrata->AsString;
Edit4->Text = Table1Flag_vozvrata->AsString;
Edit5->Text = Table1Shtraf->AsString; }
}}
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Table1AfterScroll(TDataSet *DataSet)
{
Edit1->Text = Table1D_vidachi->AsString;
Edit2->Text = Table1N_doc->AsString;
Edit3->Text = Table1D_vozvrata->AsString;
Edit4->Text = Table1Flag_vozvrata->AsString;
Edit5->Text = Table1Shtraf->AsString;
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Button2Click(TObject *Sender)
{
TLocateOptions SearchOptions;
Table1->Locate("Fam",Edit2->Text,SearchOptions
<<loPartialKey<<loCaseInsensitive);
}
//---------------------------------------------------------------------------
void __fastcall TForm4::Button1Click(TObject *Sender)
{
TLocateOptions SearchOptions;
Table1->Locate("Kod_abon",Edit3->Text,SearchOptions
<<loPartialKey<<loCaseInsensitive);
}
//---------------------------------------------------------------------------
void __fastcall TForm4::FormCreate(TObject *Sender)
{
Edit7->Text = Table1Kod_abon->AsString;
Edit8->Text = Table1Fam->AsString;
Edit9->Text = Table1Im->AsString;
Edit10->Text = Table1Otch->AsString;
Edit11->Text = Table1D_R->AsString;
Edit12->Text = Table1Adres->AsString;
}
//---------------------------------------------------------------------------
void __fastcall TForm5::Button1Click(TObject *Sender)
{
if ( Application->MessageBox(
"Вы действительно хотите вывести на пeчать этот список?",
"Потвердите решение",
MB_YESNO+MB_ICONEXCLAMATION)==IDYES)
{Form6->QuickRep1->Print(); }
}
//---------------------------------------------------------------------------
void __fastcall TForm5::Button2Click(TObject *Sender)
{
Form6->QuickRep1->Preview();
}
//---------------------------------------------------------------------------