Создание оконного приложения
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Компоненты OpenDialog и SaveDialog

Компоненты OpenDialog и SaveDialog находятся на странице Dialogs. Все компоненты этой страницы невизуальны, т.е. не видны при работе программы, поэтому их размещают в любом месте формы. Обе компоненты имеют идентичные свойства.

После вызова компоненты появляется стандартное диалоговое окно, с помощью которого выбирается имя программы и путь к ней. В случае успешного завершения диалога имя выбранного файла и его размещение содержaтся в FileName. Для выбора файлов, отображаемых в окне просмотра, используется свойство Filter, а для изменения заголовка окна – используется свойство Title.

 

8.3. Пример выполнения задания

         

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

Создание оконного приложения

 Настройка компонент OpenDialog и SaveDialog

     На странице Dialogs выбрать пиктограммы  ,  для установки компонент OpenDialog и SaveDialog соответственно.

Для выбора нужных файлов установить фильтры следующим образом: выбрав компоненту, дважды щелкнуть кнопкой мыши по правой части свойства Filter инспектора объектов, и в появившемся окне Filter Editor, в левой части записать текст, характеризующий выбор, в правой части – маску. Для OpenDialo g1 установить значения маски, как показано на рис. 8.1. Формат *.dat означает, что будут видны все файлы с расширением dat, а формат *.* – будут видны все файлы (с любыми именами и расширениями).

Рис. 8.1

 

     Для того чтобы файл автоматически записывался с расширением dat, в свойстве DefaultExt записать требуемое расширение – .dat.

     Аналогичным образом настраивается SaveDialog1 для текстового файла, который будет иметь расширение .txt.

         

Работа с программой

     Форма может иметь вид, представленный на рис. 8.2.

Кнопку «Создать» нажимаем только при первом запуске программы или, если захотим заменить прежнюю информацию на новую, в окне Memo1 отображается путь и имя созданного файла.

Заполнив оба поля информацией, нажимаем кнопку «Добавить», после чего введенная информация отображается в окне Memo1.

Для работы с уже созданным файлом нажимаем кнопку «Открыть» – в Memo1 выводится содержимое всего файла, после чего можно добавлять новые данные в конец этого файла, не уничтожая предыдущие.

При нажатии кнопки «Сортировать» в Memo1 выводятся записи, сортированные по возрастанию рейтинга.

При нажатии кнопки «Сохранить результаты» создается текстовый файл, в котором сохранится информация, выведенная в Memo1. Этот файл можно просмотреть в любом текстовым редакторе (блокноте, Word).

В текст программы включена пользовательская функция void Out(TZap, TMemo*); – для вывода в Memo1 одной записи.

Для создания результирующего текстового файла используется функция, SaveToFile(FileNameRez); позволяющая записать все содержимое Memo1 в файл с указанным именем.

Рис. 8.2

 

Текст программы может иметь следующий вид:

              . . .

#include <stdio.h>

#include <io.h>

              . . .

//---------------------------------------------------------------------------

struct TZap{

                   char FIO[30];

                   double s_b;

} Zap;

int size = sizeof(TZap);

FILE *Fz;

AnsiString File_Zap;

void Out(TZap, TMemo*);

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

         Edit1->Text="";   Edit2->Text="";

Memo1->Clear();

}

//------------------ Создать-----------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

   OpenDialog1->Title="Создать новый файл";

   if (OpenDialog1->Execute()){

           File_Zap = OpenDialog1->FileName;

           if ((Fz=fopen(File_Zap.c_str(),"wb"))==NULL) {

                   ShowMessage("Ошибка создания ФАЙЛА!");

                   return;

           }

   }

   Memo1->Lines->Add("Создали новый файл: "+AnsiString(File_Zap));

   fclose(Fz);

}

//----------------- Добавить-----------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

   Fz = fopen(File_Zap.c_str(),"ab");

   strcpy(Zap.FIO, Edit1 -> Text.c_str());

   Zap.s_b = StrToFloat(Edit2->Text);

   Out(Zap, Memo1);

   fwrite(&Zap, size, 1, Fz);

   Edit1->Text=""; Edit2->Text="";      

   fclose(Fz);

}

//--------------------- Сортировать --------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

   TZap st, *mas_Z;

   Fz = fopen(File_Zap.c_str(),"rb");

   int D_f = fileno(Fz);                                // Находим дескриптор файла

   int len = filelength(D_f);                // Находим размер файла

   int i, j, kol;

   kol = len/size;                                          //Количество записей в файле

   mas_Z = new TZap[kol];

// Считываем записи из файла в динамический массив

   for (i=0; i < kol; i++)   

                        fread((mas_Z+i), size, 1, Fz);

   fclose(Fz);

                 Memo1->Lines->Add("Сортированные сведения");

   for (i=0; i < kol-1; i++)

           for (j=i+1; j < kol; j++)

                   if (mas_Z[i].s_b > mas_Z[j].s_b) {

                            st = mas_Z[i];

                                      mas_Z[i] = mas_Z[j];

                                      mas_Z[j] = st;

                   }

   for (i=0; i<kol; i++) 

                        Out(mas_Z[i], Memo1);

   delete []mas_Z;

}

//------------------- Сохранить --------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{

   SaveDialog1->Title="Сохранить файл результатов";

   if (SaveDialog1->Execute()) {

            AnsiString FileNameRez = SaveDialog1->FileName;

            Memo1->Lines->SaveToFile(FileNameRez);

   }

}

//-------------------- Открыть ----------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

OpenDialog1->Title="Открыть файл";

if (OpenDialog1->Execute()) {

           File_Zap = OpenDialog1->FileName;

           if ((Fz=fopen(File_Zap.c_str(),"rb"))==NULL) {

                   ShowMessage("Ошибка открытия ФАЙЛА!");

                   return;

           }

}

Memo1->Lines->Add("--------- Все сведения ---------");

while(1){

  if(!fread(&Zap,size,1,Fz)) break;

   Out(Zap, Memo1);

}

fclose(Fz);

}

//----------------- Очистка Memo -------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)

{

   Memo1->Clear();       

}

//----------------- Функция вывода одной записи -----------------------

void Out(TZap z, TMemo *Memo1)

{

Memo1->Lines->Add(AnsiString(z.FIO)+ " "+FloatToStrF(z.s_b, ffFixed,6,3));

}

Дата: 2018-11-18, просмотров: 312.