База данных

Автор работы: Пользователь скрыл имя, 09 Июня 2013 в 21:32, отчет по практике

Краткое описание

При разработке приложения необходимо обеспечить реализацию требований, описанных в разделе «Общие требования». В дополнение к общим требованиям, реализовать следующие запросы на выбор данных:
1. Вывести сведения обо всех странах, в которых побывал турист «Х».
2. Определить, какие туристы посещали страну «Х».
3. Вывести сведения о наиболее дешевом и наиболее дорогом турах, в истории туриста «Х».

Содержание

1. Задание………………………………………………………3
2. Определение структуры для считывания записей из файлов БД(фаил StructDef.h)………………………………………4
3. Описание структур для ОСНОВНОЙ работы с данными в памяти приложения……………………………………….5
4. Основное окно приложения……………………………...6
5. Список литературы……………………………………...32

Прикрепленные файлы: 1 файл

ПЗ1.docx

— 1.05 Мб (Скачать документ)

        ExeDirectory = GetCurrentDir();

        // Открытие  файла для чтения таблицы "Туристов"

fs = new TFileStream(ExeDirectory + "\\Turist.tbl", fmOpenRead);

 

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

        TTurist *turist;

        // Чтение  из файла, пока текущая позиция  курсора в файле не станет  равна общей длине файла

while (fs->Position != fs->Size)

{

            // Объявление структуры для записи  в файл

stTurist turist2;

            // Чтение из файла строки таблицы

fs->Read(&turist2, sizeof(stTurist));

 

            // Выделение памяти для одной строки таблицы

turist = new TTurist();

            // Заполнение значений полей объекта  TTurist значениями из считанной  строки

turist->Passport = turist2.Passport;

turist->Fio = turist2.Fio;

turist->Nacionalnost = turist2.Nacionalnost;

turist->Birthday = TDateTime(turist2.Birthday);

 

if (turist2.PhotoLen > 0)

            {

                // Объявление указателя на поток  байт в памяти для чтения  с диска массива байт фотоизображения

                TMemoryStream *ms = new TMemoryStream();

ms->CopyFrom(fs, turist2.PhotoLen);

ms->Seek(0, soFromBeginning);

                // Запись фотоизображения в объект TTurist

turist->Photo->LoadFromStream(ms);

                // Освобождение памяти, занимаемой  указателем на поток байт

delete ms;

            }

 

            // Добавление строки в общий  список строк таблицы

            Turists->Add(turist);

        }

        // Освобождение  памяти, занимаемой указателем на  поток для работы с файлом

delete fs;

    }

catch (EFOpenError &e)

{

    }

 

    // Чтениетаблицыстран

try

    {

        AnsiString ExeDirectory;

ExeDirectory = GetCurrentDir();

        // Открытие файла для чтения таблицы "Страны"

fs = new TFileStream(ExeDirectory + "\\Strani.tbl", fmOpenRead);

 

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

        TStrana *strana;

        // Чтение  из файла, пока текущая позиция  курсора в файле не станет  равна общей длине файла

while (fs->Position != fs->Size)

{

            // Объявление структуры для записи  в файл

stStrana strana2;

            // Чтение из файла строки таблицы

fs->Read(&strana2, sizeof(stStrana));

            // Выделение памяти для одной строки таблицы

strana = new TStrana();

            // Заполнение значений полей объекта  TStrana значениями из считанной  строки

strana->Nazvanie = strana2.Nazvanie;

strana->Opisanie = strana2.Opisanie;

strana->Raiting = strana2.Raiting;

strana->NachaloSezona = strana2.NachaloSezona;

strana->OkonchanieSezona = strana2.OkonchanieSezona;

strana->NachaloSezona = strana->NachaloSezona.SubString(1,10);

strana->OkonchanieSezona = strana->OkonchanieSezona.SubString(1,10);

// Добавление строки в  общий список строк таблицы

            Strans->Add(strana);

        }

        // Освобождение  памяти, занимаемой указателем на  поток для работы с файлом

delete fs;

    }

catch (EFOpenError &e)

{

    }

 

    // Чтение таблицы  Страна_Турист

try

    {

        AnsiString ExeDirectory;

        ExeDirectory = GetCurrentDir();

        // Открытие  файла для чтения таблицы "Страна_Турист"

fs = new TFileStream(ExeDirectory + "\\strana_turist.tbl", fmOpenRead);

 

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

        TStrtur *strtur;

        // Чтение  из файла, пока текущая позиция  курсора в файле не станет  равна общей длине файла

while (fs->Position != fs->Size)

{

            // Объявление структуры для записи  в файл

stStrtur strtur2;

            // Чтение из файла строки таблицы

fs->Read(&strtur2, sizeof(stStrtur));

// Выделение памяти для  одной строки таблицы

strtur = new TStrtur();

            // Заполнение значений полей объекта  TStrana значениями из считанной  строки

strtur->NazvanieStrana = strtur2.NazvanieStrana;

strtur->PassportTurist = strtur2.PassportTurist;

strtur->DataPutovki = TDateTime(strtur2.DataPutovki);

strtur->StoimostTura = strtur2.StoimostTura;

strtur->Skidka = strtur2.Skidka;

 

// Добавление строки в  общий список строк таблицы

            Strturs->Add(strtur);

        }

        // Освобождение  памяти, занимаемой указателем на  поток для работы с файлом

delete fs;

    }

catch (EFOpenError &e)

{

    }

 

}

 

Также функция закрытия приложения.

 

void __fastcall TMainForm::FormCloseQuery(TObject *Sender, bool &CanClose)

{

    CanClose = false;

int res = MessageBox(0,"Сохранитьизменениявбазеданных?","Внимание",MB_ICONWARNING|MB_YESNOCANCEL);

 

if (res == ID_YES)

    {

this->SaveDatabase("");

      CanClose = true;

    }

if (res == ID_NO)

CanClose = true;

}

 

Функции члены класса  TfmViewS_T

 

Описание класса создающего окно таблицы «С_Т (Страна_Турист)» находится в  заголовочном файле "fmViewS_TUnit.h""

 

Внешний вид окна представлен  на рисунке 5

 

Рисунок5

Вфайле  "fmViewS_TUnit.cpp” представлен листинг функций этого класса, такие как:

 

void TfmViewS_T::LoadData() функция заполняющая  таблицу Страна турист на экране.

 

{

    // Очистка списка  строк таблицы на экране

lvList->Clear();

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

    TStrtur *stranaturist;

    // Объявление указателя  на элемент объекта TListView

    TListItem *item;

    // Сканирование  полного списка текущей таблицы

for (int i=0; i<MainForm->Strturs->Count; i++)

{

        // Получение  i-ой строки таблицы текущей  таблицы

stranaturist = (TStrtur *)MainForm->Strturs->Items[i];

// Добавление строки в  таблицу на экране

item = lvList->Items->Add();

        // Заполнение  значений новой строки в таблице  на экране значениями из i-ой  строки текущей таблицы

item->Caption = stranaturist->NazvanieStrana;

item->SubItems->Add(stranaturist->PassportTurist);

item->SubItems->Add(stranaturist->DataPutovki.FormatString("dd.mm.yyyy"));

item->SubItems->Add(stranaturist->StoimostTura);

item->SubItems->Add(stranaturist->Skidka);

}

    // Если количество  строк в таблице на экране > 0, выбирается 0-ая строка

if (lvList->Items->Count > 0)

    {

lvList->Items->Item[0]->Selected = true;

lvList->Items->Item[0]->Focused = true;

btAdd->Enabled = true;

btUpdate->Enabled = true;

btDelete->Enabled = true;

    }

else

    {

btUpdate->Enabled = false;

btDelete->Enabled = false;

    }

 

void __fastcall TfmViewS_T::Button2Click(TObject *Sender) функцияпоказывающая\скрывающаяЭлементыинтерфейса «Фильтр»

 

{

if (this->GroupBox1->Visible)

    {

this->GroupBox1->Visible = false;

this->ListView1->Visible = false;

    }

else

    {

this->GroupBox1->Visible = true;

this->ListView1->Visible = true;

 

this->WindowState = wsMaximized;

    }

}

 

void __fastcall TfmViewS_T::btAddClick(TObject *Sender) функцияпозволяющаядобавитьЭлементвсписок

 

{

    // Создание и  выделение памяти для графического  окна

TfmStranaTurist *fmStranaTur = new TfmStranaTurist(this);

// Отображение графического  окна

if (fmStranaTur->ShowModal())

{

LoadData();

lvList->ItemIndex = MainForm->Strturs->Count-1;

    }

    // Удаление окна

delete fmStranaTur;

}

 

void __fastcall TfmViewS_T::btDeleteClick(TObject *Sender) функция удаляющая элемент из списка

 

{

if (Application->MessageBox("Вы действительно хотите удалить выбранную строку?", "Внимание", MB_OKCANCEL) == IDCANCEL)

return ;

 

    TListView *tempTable;

 

if (lastFocused == 1) // если выбор был из главной таблицы

tempTable = this->lvList;

else

tempTable = this->ListView1;

 

if (tempTable->Selected == NULL)

return ;

 

    //MainForm->Strturs->Delete(lvList->Selected->Index);

    TStrtur *STRTUR;

    // Поиск в таблице  строки с указанным значением

for (int i = 0; i<MainForm->Strans->Count; i++)

    {

        STRTUR = (TStrtur *)MainForm->Strturs->Items[i];

if (STRTUR->NazvanieStrana.AnsiCompareIC(tempTable->Selected->Caption) == 0 && STRTUR->PassportTurist.AnsiCompareIC(tempTable->Selected->SubItems->Strings[0]) == 0 && STRTUR->DataPutovki.FormatString("dd.mm.yyyy") == tempTable->Selected->SubItems->Strings[1])

{

            // Исключеие указателя из общего  списка строк таблицы

MainForm->Strturs->Remove(STRTUR);

break ;

}

    }

 

    // Освобождение  памяти, занимаемой строкой

deleteSTRTUR;

 

 

LoadData();

if (lastFocused == 2)

this->Button1Click(Sender);

lvList->Refresh();

}

 

void __fastcall TfmViewS_T::btUpdateClick(TObject *Sender) функция позволяющая изменить элемент списка

 

{

TListView *tempTable;

 

if (lastFocused == 1) // если выбор был из главной таблицы

tempTable = this->lvList;

else

tempTable = this->ListView1;

 

if (tempTable->Selected == NULL)

return ;

int selItm = tempTable->Selected->Index;

// Создание и выделение  памяти для графического окна

 

//TfmStranaTurist *fmStranaTur = new TfmStranaTurist(this, ((TStrtur*)MainForm->Strturs->Items[selItm])->NazvanieStrana,((TStrtur*)MainForm->Strturs->Items[selItm])->PassportTurist,((TStrtur*)MainForm->Strturs->Items[selItm])->DataPutovki);

    TfmStranaTurist *fmStranaTur = new TfmStranaTurist(this,tempTable->Selected->Caption,tempTable->Selected->SubItems->Strings[0],TDateTime(tempTable->Selected->SubItems->Strings[1]).FormatString("dd.mm.yyyy"));

// Отображение графического окна

if (fmStranaTur->ShowModal())// == mrOk)

{

LoadData();

if (lastFocused == 2)

this->Button1Click(Sender);

tempTable->ItemIndex = selItm;

    }

    // Удаление окна

delete fmStranaTur;

}

 

void __fastcall TfmViewS_T::btCloseClick(TObject *Sender) функция закрывающая окно

 

{

this->Close();       

}

 

void __fastcallTfmViewS_T::Button1Click(TObject *Sender) функция применяющая выбранный фильтр

 

{

   // Делаем временный  список

tempStransTur = new TList;

// заполняемего

for (int i=0; i<MainForm->Strturs->Count; i++)

tempStransTur->Add(MainForm->Strturs->Items[i]);

 

    // фильтрНазваниестраны

if (this->CheckBox1->Checked)

    {

if (this->ComboBox1->ItemIndex == 0)

      {// равно

int i=0;

while (i != (tempStransTur->Count))

        {

if (((TStrtur*)tempStransTur->Items[i])->NazvanieStrana.LowerCase() != this->Edit1->Text.LowerCase())

tempStransTur->Delete(i);

else

i++;

        }

      }

else

      {// неравно

int i=0;

while (i != (tempStransTur->Count))

        {

if (((TStrtur*)tempStransTur->Items[i])->NazvanieStrana.LowerCase() == this->Edit1->Text.LowerCase())

tempStransTur->Delete(i);

else

i++;

        }

      }

    }

    // фильтрПаспорт

if (this->CheckBox2->Checked)

    {

if (this->ComboBox2->ItemIndex == 0)

      {// равно

int i=0;

while (i != (tempStransTur->Count))

        {

if (((TStrtur*)tempStransTur->Items[i])->PassportTurist != this->Edit2->Text)

tempStransTur->Delete(i);

else

i++;

        }

      }

else

      {// неравно

int i=0;

while (i != (tempStransTur->Count))

        {

if (((TStrtur*)tempStransTur->Items[i])->NazvanieStrana == this->Edit2->Text)

tempStransTur->Delete(i);

else

i++;

        }

      }

    }

    // фильтрДатапутевки

if (this->CheckBox3->Checked)

    {

if (this->ComboBox3->ItemIndex == 0)

      {// равно

int i=0;

while (i != (tempStransTur->Count))

        {

if (((TStrtur*)tempStransTur->Items[i])->DataPutovki.FormatString("dd.mm.yyyy") != this->DateTimePicker1->Date.FormatString("dd.mm.yyyy"))

tempStransTur->Delete(i);

else

i++;

        }

      }

else

      {// неравно

int i=0;

while (i != (tempStransTur->Count))

        {

if (((TStrtur*)tempStransTur->Items[i])->DataPutovki.FormatString("dd.mm.yyyy") == this->DateTimePicker1->Date.FormatString("dd.mm.yyyy"))

tempStransTur->Delete(i);

else

i++;

        }

      }

    }

    // фильтрСтоимостьтура

if (this->CheckBox4->Checked)

    {

if (this->ComboBox4->ItemIndex == 0)

      {// равно

int i=0;

while (i != (tempStransTur->Count))

        {

if (((TStrtur*)tempStransTur->Items[i])->StoimostTura != this->Edit3->Text.ToDouble())

tempStransTur->Delete(i);

else

i++;

        }

      }

else

      {// неравно

int i=0;

while (i != (tempStransTur->Count))

        {

if (((TStrtur*)tempStransTur->Items[i])->StoimostTura == this->Edit3->Text.ToDouble())

tempStransTur->Delete(i);

else

i++;

        }

      }

    }

    // фильтрСкидка

if (this->CheckBox5->Checked)

    {

if (this->ComboBox5->ItemIndex == 0)

      {// равно

int i=0;

while (i != (tempStransTur->Count))

        {

if (((TStrtur*)tempStransTur->Items[i])->Skidka != this->Edit4->Text.ToInt())

tempStransTur->Delete(i);

else

i++;

        }

      }

else

      {// неравно

int i=0;

while (i != (tempStransTur->Count))

        {

if (((TStrtur*)tempStransTur->Items[i])->Skidka == this->Edit4->Text.ToInt())

tempStransTur->Delete(i);

else

i++;

}

      }

    }

 

    // Очистка списка  строк таблицы на экране

this->ListView1->Clear();

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

    TStrtur *stranaturist;

    // Объявление указателя  на элемент объекта TListView

    TListItem *item;

    // Сканирование  полного списка текущей таблицы

for (int i=0; i<tempStransTur->Count; i++)

{

        // Получение  i-ой строки таблицы текущей  таблицы

stranaturist = (TStrtur *)tempStransTur->Items[i];

// Добавление строки в  таблицу на экране

item = this->ListView1->Items->Add();

// Заполнение значений  новой строки в таблице на  экране значениями из i-ой строки  текущей таблицы

item->Caption = stranaturist->NazvanieStrana;

item->SubItems->Add(stranaturist->PassportTurist);

item->SubItems->Add(stranaturist->DataPutovki.FormatString("dd.mm.yyyy"));

item->SubItems->Add(stranaturist->StoimostTura);

item->SubItems->Add(stranaturist->Skidka);

}

}

 

Прииспользованиифункцийvoid __fastcall TfmViewS_T::btAddClick(TObject *Sender),

void __fastcall TfmViewS_T::btUpdateClick(TObject *Sender

 

Создается элемент класса TfmStranaTurist который созадет окно представленное на рисунке 6

 

 

Рисунок 5

 

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

 

void __fastcall TfmStranaTurist::btnOKSTClick(TObject *Sender)

{

 

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

TStrtur *stranaturist;

if (AddAction == true)

{// если добавление

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

stranaturist = new TStrtur();

 

        // Заполнение  значений новой строки значениями  из элементов графического окна

stranaturist->NazvanieStrana  = edNazvanieST->Text;

stranaturist->PassportTurist = edPassportST->Text;

stranaturist->DataPutovki = edDataPutevki->DateTime;

stranaturist->StoimostTura = edStoimostTura->Text.ToDouble();

stranaturist->Skidka = edSkidka->Text.ToInt();

 

// Добавление новой строки  в общий список строк таблицы

MainForm->Strturs->Add(stranaturist);

 

if (MessageBox(0,"Турдобавлен. Добавить другой тур?","Внимание",MB_YESNO) != IDYES)

this->Close();

    }

else

    {// еслиизменение

Информация о работе База данных