|
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:
Наида.
2.2 Машинная реализация
Для удобства работы и наглядности вводимых
данных создадим автоматизированную систему «Учета абонентов библиотеки»,
которая должна выполнять следующие функции:
v Операции:
- Документы;
- Фильтрация;
- Поиск;
- Просмотр;
v Цвет фона
- По умолчанию;
- Черный;
- Красный;
- Синий;
- Голубой;
- Зеленый;
- Желтый
v Выход
Запускаем
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
- “Список абонентов”). Далее в отчет перенесем компоненту QRSubDetail,
которая осуществляет циклический вывод записей на печать. Вставляем компоненты QRDText
и задаем им свойства DataSet
и DataField - Table1,
и имена соответствующих полей, с помощью QRLabel.
Далее создаем главную форму, с которой будет
вызываться модуль печати. Перенесем на форму две компоненты Button,
обозначим их как «Печать» и «Просмотр». Выполним команду Alt+F11,
выберем модуль формы нашего отчета и нажмем «ОК».
2.3 Описание работы программы
На диске D
находим папку «Наида» Щелкаем дважды на файле Project1.exe.
Откроется главное окно нашей программы:
· Для ввода нового абонента открываем
пункт меню Операции -> Документы. Перед нами откроется форма. Для того чтобы
ввести данные о новом абоненте нажимаем на кнопку «Вставить». Появится новая
строка. После ввода нажимаем кнопку «Записать». Подтверждаем изменения кнопкой
«Ок».
· Для того чтобы найти интересующего
нас абонента, мы выполняем команду Операции -> Поиск. Перед нами открывается
окно с таблицей данных и окошками для ввода кода абонента и фамилии. Для
осуществления поиска просто вводим нужный нам код абонента или фамилию абонента
в эти окошки.
Для того, чтобы профильтровать данные по дате
выдачи и по коду абонента, выбираем команду Операции -> Фильтрация.
· Для просмотра или печати нужного нам
документа выполняем команду Документы -> Просмотр и печать …. Кликаем на
документ и перед нами открывается окно. Для просмотра списка нажимаем на кнопку
«Просмотр», а для печати - «Печать».
· Для просмотра справки нажимаем на
пункт меню «Справка»
· Для выхода из программы нажимаем на
пункт меню «Выход»
Заключение
В данном курсовом проекте я ознакомилась с
возможностями С++ Вuilder, как системы управления базами данных разработанной
мною программы “Учет абонентов библиотеки ”.
Также здесь разрабатывается база данных, в
которой хранится и обрабатывается информация об учете абонентов.
Сначала строится инфологическая модель, в
которую входят БД, сущность, атрибуты. Далее строится даталогическая модель. В
ней описываются размеры, типы, назначения, наименования. Следующим этапом
является описание физической модели, в которой описывается физическое
устройство хранения информации. Обработку информации в БД осуществляют такие
методы как фильтрация, поиск и печать.
Программа выполняет следующие функции: позволяет
редактировать БД, внести сведения о новом абоненте, найти по заданному
пользователем ключу информацию, произвести фильтрацию и просмотреть документы.
Литература
1. Курс
лекций по дисциплине “Базы данных”
2.
Диго С..М. «Проектирование и использование БД». 1991 г.
3. Хеннер
Е.К., Могилев А.В., Пак Н.И. «Информатика». М.: «Учебное пособие для студентов
пед. вузов», 1999 г.
4. Основы
языка С++ Builder
2004 г.
5. Наумов
А.Н «Системы управления базами данных и знаний» 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;
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();
}
//---------------------------------------------------------------------------