Практическое занятие № 9

ТЕМА: Создание программ по работе с файлами

ЦЕЛЬ РАБОТЫ: получить практические навыки по использованию файлов в программах на TURBO PASCAL

Ход работы

1. Объект книга описывается свойствами: шифр, автор, название, цена. Составить программу, выполняющую следующие функции:

        1.1. Выдать меню с режимами работы:

                    1 - создание файла

                    2 - добавление в файл

                    3 - книги с максимальной ценой

                    4 - книги указанного автора

                    5 - выход;

        1.2. При выборе первого пункта создается файл BIBLIO.DAT и записывается в него информация о N книг;

        1.3. При выборе второго пункта можно добавить в  файл еще N книг;

        1.4. При выборе пункта 3  программу, которая выводит на экран из файла названия книг с максимальной ценой;

        1.5. При выборе пункта 4 программа подсчитывает количество книг указанного автора (автора ввести с клавиатуры);

2. Привести тексты программы

 

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

uses crt;

 

{описываем запись "книга"}

type kniga=record

         avtor, nazv:string[15];

         shifr, price:real;

     end;

    {описываем тип: файл книг}    

    biblio=file of kniga;

 

var

    {вспомогательные переменные}

    k,i,n,kol,b:integer;

    {переменная для работы с файлом}   

    f1:biblio;

    {переменная для нахождения максимума}   

    max:real;

    {переменная для работы с записью "книга"}   

    a:kniga;

    {переменная для ввода автора для поиска}   

    av:string[15];

begin

     {связываем переменную с файлом на диске}    

     assign(f1, 'biblio.dat');

     {переменная b - признак выхода из меню}

     {если b=0, то цикл повторяется}

     b:=0;

     while b=0 do

     begin

         {Очищаем экран и выдаем меню программы}     

         clrscr;

         writeln('1 - создание файла');

         writeln('2 - добавление в файл');

         writeln('3 - книги с максимальной ценой');

         writeln('4 - книги указанного автора');

         writeln ('5 - выход');

         {предлагаем ввести номер пункта меню}    

         write('Сделайте выбор: '); readln (k);

        

         {обрабатываем ввод пользователя}   

         case k of

         {если выбран первый пункт меню (создание файла)}   

         1:

         begin

              {вводим количество книг}          

              clrscr;

              write('Введите количество книг: ');

              readln(n);

              {создаем файл на диске}          

              rewrite(f1);

              {в цикле вводим n книг}          

              for i:=1 to n do

              with a do

              begin

                   writeln(i,'-я книга ');

                   write('-автор: '); readln(avtor);

                   write('-название: '); readln(nazv);

                   write('-шифр: '); readln(shifr);

                   write('-цена: '); readln(price);

                   {записываем введенную книгу в файл}                  

                   write(f1,a)

              end;

              {закрываем созданный файл}          

              close(f1);

              {выдаем сообщение об успешном завершении операции}         

              writeln('Файл успешно создан');

              readln;

         end;

 

        {если выбран второй пункт меню (добавление в файл)}

        2:

        begin

            {вводим количество книг}         

            clrscr;

            write('Введите количество книг: ');

            readln(n);

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

            reset(f1);

            {ставим указатель в конец файла}          

            seek(f1,filesize(f1));

            {в цикле вводим n книг}          

            for i:=1 to n do

            with a do

            begin

                   writeln(i,'-я книга ');

                   write('-автор: '); readln(avtor);

                   write('-название: '); readln(nazv);

                   write('-шифр: '); readln(shifr);

                   write('-цена: '); readln(price);

                   {записываем очередную книгу в файл}                  

                   write(f1,a)

            end;

            {закрываем файл}         

            close(f1);

            {выдаем сообщение о завершении операции}         

            writeln ('Книги успешно добавлены');

            readln;

        end;

 

        {если выбран 3 пункт (книга с макс. ценой}   

        3:

        begin

            {открываем файл для чтения}          

            reset(f1);

            {найдем максимальную цену

                    в начале max равен 0}

            max:=0;

            {организуем цикл до конца файла}          

            for i:=1 to filesize(f1) do

            begin

                {считаем очередную книгу из файла}               

                read(f1,a);

                {проверяем ее на максимум}              

                if a.price>max then

                    {запоминаем максимальную цену}                               

                    max:=a.price;

            end;

            {выводим найденную максимальную цену}

            writeln('Максимальная цена книг= ',max:5:2);

            writeln('Книги с такой ценой:');

            {закрываем файл}         

            close(f1);

      

            {выведем список с максимальной ценой    

             открываем файл заново (ставим указатель опять на конец файла}

            reset(f1);

            {организуем цикл для чтения данных из файла}          

            for i:=1 to filesize(f1) do

            begin

                {считаем очередную книгу}              

                read(f1,a);

                {если цена книги равна максимальной}

                if a.price=max then

                    {печатаем название этой книги}

                     writeln(a.nazv);

            end;

            {закрываем файл}        

            close(f1);

            readln;

        end;

 

        {если выбран 4 пункт (поиск количества книг по автору)}   

        4:

        begin

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

            reset(f1);

            {вводим автора для поиска}

            write ('Введите автора: ');

            readln(av);

            {в начале количество равно 0}          

            kol:=0;

            {организуем цикл для чтения из файла}          

            for i:=1 to filesize(f1) do

            begin

                {считываем очередную книгу}               

                read(f1,a);

                {если автор книги равен введенному значению}              

                if a.avtor=av then

                    {увеличиваем количество книг на 1}                             

                    kol:=kol+1;

            end;

            {выводим количество найденных книг}         

            writeln('Кол книг= ',kol);

            {закрываем файл}         

            close(f1);

            readln;

        end;

 

        {если выбран 5 пункт (выход)

         переменная b не равна 0, значит цикл выдачи меню завершается}

        5: b:=1;

        end;

    end;

end.

 

Решить самостоятельно:

 

1. Объект «Принтер» имеет свойства: модель, вид (струйный, матричный), стоимость 1 заправки, стоимость принтера.

Составить программу, выполняющую следующие функции:

        1.1. Выдать меню с режимами работы:

                    1 - создание файла

                    2 – просмотр файла

                    3 - добавление в файл

                    4 – лазерные принтеры со стоимостью в диапазоне

                    5 – принтеры с минимальной стоимостью заправки

                    6 – количество принтеров определенной модели и их средняя стоимость

                    7 - выход;

        1.2. При выборе первого пункта создается файл PRINTER.DAT и записывается в него информация об N книг;

        1.3. При выборе второго пункта содержимое файла PRINTER.DAT выводится в табличном виде;

        1.4. При выборе третьего пункта можно добавить в файл еще N книг;

        1.5. При выборе пункта 4 – выводится информация о лазерных принтерах со стоимостью в заданном диапазоне [a, b] (a, b вводятся с клавиатуры)

        1.6. При выборе пункта 5 программа выводит модели принтеров и их стоимость с минимальной стоимостью заправки;

        1.7. При выборе пункта 6 программа по введенной с клавиатуры модели подсчитывает количество принтеров указанной модели и подсчитывает их среднюю стоимость;

        1.8. При выборе пункта 7 программа завершает свою работу.