Главная страница
Навигация по странице:

  • Добавить

  • Сортировать

  • методичка. метода по ООП для практики. Лабораторная работа 1. Линейный вычислительный процесс 2 Общие теоретические сведения 2 Создание оконного приложения 6


    Скачать 1.1 Mb.
    НазваниеЛабораторная работа 1. Линейный вычислительный процесс 2 Общие теоретические сведения 2 Создание оконного приложения 6
    Анкорметодичка
    Дата11.01.2022
    Размер1.1 Mb.
    Формат файлаdoc
    Имя файламетода по ООП для практики.doc
    ТипЛабораторная работа
    #328342
    страница16 из 19
    1   ...   11   12   13   14   15   16   17   18   19

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

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


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

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

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




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

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

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


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

    Для выбора нужных файлов установить фильтры следующим образом: выбрав компоненту, дважды щелкнуть кнопкой мыши по правой части свойства Filter инспектора объектов, и в появившемся окне Filter Editor, в левой части записать текст, характеризующий выбор, в правой части – маску. Для OpenDialog1 установить значения маски, как показано на рис. 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

    #include

    . . .

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

    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
    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));

    }

    8.3.2. Создание консольного приложения


    Для создания текстового файла в консольном приложении используем функцию fprintf(). Текст программы может иметь следующий вид:

    . . .

    #include

    #include

    . . .

    struct TZap{

    char FIO[30];

    double s_b;

    } Zap;

    int size = sizeof(TZap);

    FILE *Fz, *Ft;

    char File_Zap[] = "zapisi.dat";

    char File_Rez[] = "rezult.txt";

    void Out(TZap);
    void main()

    {

    int kod, D_f, i=0, j, kol;

    long len;

    TZap st, *mas_Z;

    Ft = fopen(File_Rez, "w");

    while(true) {

    puts("\n Create – 1\n Add – 2\n View – 3\n Sort – 4\n EXIT – 0");

    scanf("%d", &kod);

    switch(kod) {

    case 1:

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

    puts("\n Create ERROR!");

    return;

    }

    fclose(Fz);

    printf("\n Create New File %s !\n",File_Zap);

    break;

    case 2:

    Fz = fopen(File_Zap,"ab");

    printf("\n F.I.O. – ");

    fflush(stdin);

    gets(Zap.FIO);

    printf(" Ball – ");

    scanf("%lf", &Zap.s_b);

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

    fclose(Fz);

    break;

    case 3:

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

    puts("\n Open ERROR!");

    return;

    }

    // Вывод на экран

    printf("\n\t--------- Informations ---------");

    // Запись такой же информации в текстовый файл Ft

    fprintf(Ft,"\n\t--------- Informations ---------");

    while(1) {

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

    Out(Zap);

    }

    fclose(Fz);

    break;

    case 4:

    Fz = fopen(File_Zap,"rb");

    D_f = fileno(Fz);

    len = filelength(D_f);

    kol = len/size;

    mas_Z = new TZap[kol];

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

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

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

    fclose(Fz);

    printf("\n\t----- S O R T -----\n");

    fprintf(Ft,"\n\t----- S O R T -----\n");

    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
    Out(mas_Z[i]);

    delete []mas_Z;

    break;

    case 0:

    fclose(Ft);

    return;

    }

    }

    }

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

    void Out(TZap z)

    {

    printf("\n %20s , %6.3lf .", z.FIO,z.s_b);

    fprintf(Ft, "\n %20s , %6.3lf .", z.FIO, z.s_b);

    }
    Первоначально выбав пункт «1», создаем файл с именем zapisi.dat, который будет располагаться в текущем каталоге (созданной папке). Затем, выбирая пункт «2», последовательно вводим 4 записи. Выбрав пункт «3», просматриваем содержимое файла, а сортированные записи выведем на экран (запишем в файл), выбрав пункт «4». Результаты выполнения программы могут иметь вид:


    1   ...   11   12   13   14   15   16   17   18   19


    написать администратору сайта