Автор работы: Пользователь скрыл имя, 09 Июня 2013 в 21:32, отчет по практике
При разработке приложения необходимо обеспечить реализацию требований, описанных в разделе «Общие требования». В дополнение к общим требованиям, реализовать следующие запросы на выбор данных:
1. Вывести сведения обо всех странах, в которых побывал турист «Х».
2. Определить, какие туристы посещали страну «Х».
3. Вывести сведения о наиболее дешевом и наиболее дорогом турах, в истории туриста «Х».
1. Задание………………………………………………………3
2. Определение структуры для считывания записей из файлов БД(фаил StructDef.h)………………………………………4
3. Описание структур для ОСНОВНОЙ работы с данными в памяти приложения……………………………………….5
4. Основное окно приложения……………………………...6
5. Список литературы……………………………………...32
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();
// Заполнение значений полей
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);
// Запись фотоизображения в
turist->Photo->LoadFromStream(
// Освобождение памяти, занимаемой указателем на поток байт
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();
// Заполнение значений полей
strana->Nazvanie = strana2.Nazvanie;
strana->Opisanie = strana2.Opisanie;
strana->Raiting = strana2.Raiting;
strana->NachaloSezona = strana2.NachaloSezona;
strana->OkonchanieSezona = strana2.OkonchanieSezona;
strana->NachaloSezona = strana->NachaloSezona.
strana->OkonchanieSezona = strana->OkonchanieSezona.
// Добавление строки в общий список строк таблицы
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();
// Заполнение значений полей
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(
{
CanClose = false;
int res = MessageBox(0,"
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();
// Заполнение
значений новой строки в
item->Caption = stranaturist->NazvanieStrana;
item->SubItems->Add(
item->SubItems->Add(
item->SubItems->Add(
item->SubItems->Add(
}
// Если количество строк в таблице на экране > 0, выбирается 0-ая строка
if (lvList->Items->Count > 0)
{
lvList->Items->Item[0]->
lvList->Items->Item[0]->
btAdd->Enabled = true;
btUpdate->Enabled = true;
btDelete->Enabled = true;
}
else
{
btUpdate->Enabled = false;
btDelete->Enabled = false;
}
void __fastcall TfmViewS_T::Button2Click(
{
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(
{
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(
TStrtur *STRTUR;
// Поиск в таблице строки с указанным значением
for (int i = 0; i<MainForm->Strans->Count; i++)
{
STRTUR = (TStrtur *)MainForm->Strturs->Items[i];
if (STRTUR->NazvanieStrana.
{
// Исключеие указателя из общего списка строк таблицы
MainForm->Strturs->Remove(
break ;
}
}
// Освобождение памяти, занимаемой строкой
deleteSTRTUR;
LoadData();
if (lastFocused == 2)
this->Button1Click(Sender);
lvList->Refresh();
}
void __fastcall TfmViewS_T::btUpdateClick(
{
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->
TfmStranaTurist *fmStranaTur =
new TfmStranaTurist(this,
// Отображение графического окна
if (fmStranaTur->ShowModal())// == mrOk)
{
LoadData();
if (lastFocused == 2)
this->Button1Click(Sender);
tempTable->ItemIndex = selItm;
}
// Удаление окна
delete fmStranaTur;
}
void __fastcall TfmViewS_T::btCloseClick(
{
this->Close();
}
void __fastcallTfmViewS_T::
{
// Делаем временный список
tempStransTur = new TList;
// заполняемего
for (int i=0; i<MainForm->Strturs->Count; i++)
tempStransTur->Add(MainForm->
// фильтрНазваниестраны
if (this->CheckBox1->Checked)
{
if (this->ComboBox1->ItemIndex == 0)
{// равно
int i=0;
while (i != (tempStransTur->Count))
{
if (((TStrtur*)tempStransTur->
tempStransTur->Delete(i);
else
i++;
}
}
else
{// неравно
int i=0;
while (i != (tempStransTur->Count))
{
if (((TStrtur*)tempStransTur->
tempStransTur->Delete(i);
else
i++;
}
}
}
// фильтрПаспорт
if (this->CheckBox2->Checked)
{
if (this->ComboBox2->ItemIndex == 0)
{// равно
int i=0;
while (i != (tempStransTur->Count))
{
if (((TStrtur*)tempStransTur->
tempStransTur->Delete(i);
else
i++;
}
}
else
{// неравно
int i=0;
while (i != (tempStransTur->Count))
{
if (((TStrtur*)tempStransTur->
tempStransTur->Delete(i);
else
i++;
}
}
}
// фильтрДатапутевки
if (this->CheckBox3->Checked)
{
if (this->ComboBox3->ItemIndex == 0)
{// равно
int i=0;
while (i != (tempStransTur->Count))
{
if (((TStrtur*)tempStransTur->
tempStransTur->Delete(i);
else
i++;
}
}
else
{// неравно
int i=0;
while (i != (tempStransTur->Count))
{
if (((TStrtur*)tempStransTur->
tempStransTur->Delete(i);
else
i++;
}
}
}
// фильтрСтоимостьтура
if (this->CheckBox4->Checked)
{
if (this->ComboBox4->ItemIndex == 0)
{// равно
int i=0;
while (i != (tempStransTur->Count))
{
if (((TStrtur*)tempStransTur->
tempStransTur->Delete(i);
else
i++;
}
}
else
{// неравно
int i=0;
while (i != (tempStransTur->Count))
{
if (((TStrtur*)tempStransTur->
tempStransTur->Delete(i);
else
i++;
}
}
}
// фильтрСкидка
if (this->CheckBox5->Checked)
{
if (this->ComboBox5->ItemIndex == 0)
{// равно
int i=0;
while (i != (tempStransTur->Count))
{
if (((TStrtur*)tempStransTur->
tempStransTur->Delete(i);
else
i++;
}
}
else
{// неравно
int i=0;
while (i != (tempStransTur->Count))
{
if (((TStrtur*)tempStransTur->
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(
item->SubItems->Add(
item->SubItems->Add(
item->SubItems->Add(
}
}
Прииспользованиифункцийvoid __fastcall TfmViewS_T::btAddClick(TObject *Sender),
void __fastcall TfmViewS_T::btUpdateClick(
Создается элемент класса TfmStranaTurist который созадет окно представленное на рисунке 6
Рисунок 5
Также класс содержит функции добавляющие или изменяющие новые элементы списка.
void __fastcall TfmStranaTurist::btnOKSTClick(
{
// Объявление указателя на строку в соответствии с типом текущей таблицы
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(
if (MessageBox(0,"Турдобавлен. Добавить другой тур?","Внимание",MB_YESNO) != IDYES)
this->Close();
}
else
{// еслиизменение