Практическая обработка множества данных, представляющих собой массив указателей на записи

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

вания правого нижнего угла окна, в котором будет выводиться меню.

  • К - Количество пунктов меню.
  • Otv - переменная в которой находиться код нажатой клавиши.
  • Pred - Предыдущий для выбранного пункта меню
  • Max_dlin - Длина самой большой строки.
  • Процедура передает в главную программу переменную punkt.

     

    procedure My_Meny;x=1;

    y=1;

    k=7;i, pred,Max_dlin:integer;

    otv:char;

    x1,y1:byte;

     

    Сначала все строки сравниваются и находится самая длинная строка. После этого строки дополняются до этой длины путем добавления пробелов. Затем вычисляются координаты правого нижнего угла окна, которое затем и прорисовывается процедурой window из стандартного модуля Crt. После в созданное окно выводится массив пунктов меню и подсвечивается первая позиция. Далее в цикле происходит считывание кода нажатой клавиши и в соответствии с кодом происходит присвоение переменной punkt определенного значения, а затем подсветка выбранного пункта.

     

    begin

    {Инициализация переменных}

    {Определенние максимальной длины строки}

    {Дополнение всех строк до максимальной}

    {Расчет координат X1 и Y1}

    {Прорисовка меню}

    window (x,y,x1,y1);

    For I:=1 to k do

    begin

    GotoXY(x,i);

    Write(Mas[i]);

    end;

    {end for}

    punkt:=1;

    GotoXY(x,1);

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

    Write(Mas[1]);

    Repeat

    Otv:=Readkey;

    If Otv=#0 then Otv:=Readkey;

    {end If}

    {Реакция на нажатие клавиш}

    Case Otv of

    #27: {Нажатие клавиши esc}

    {Выход}

    #13: {Нажатие клавиши enter}

    {Прорисовка нормального окна и выход из процедуры}

    #80: {Нажатие клавиши вниз}

    {Если был выбран последний пункт меню, то происходит переход на первый пункт, иначе перемещается вниз}

    #72: {Нажатие клавиши ввверх}

    {Если был выбран не первый пункт, то поднимаемся вверх, иначе перемещаемся на последний пункт}

    end;

    {Прорисовка поля меню в исход-ный цвет}

    {Подсветка следующего выбранного поля меню} False

    {end Repeat}

    end;.

     

    1.3Модуль RabotaND.tpu

     

    Этот модуль содержит пять процедур для работы с набором данных.

    Заголовок и описательная часть данного модуля представлены ниже:

     

    unit RabotaND;menumod;

    {Спецификация файла}

    Tip=(cvet, gherno_bel, perenosn);

    Televizor=record

    nazvanie:string;

    razmer:integer;

    sr_stoimist:real;

    TipTelevizor:Tip;

    end;

     

    var

    File1, Filekl, Filenov: File of Televizor;

    FileName, Filenamekluch, filenamenov, FilenamenovND: string;

    TVzap:Televizor;

    n:integer;

    otv1, punkt, Otv, tek, numb:byte;

    otv2, k:string;

    answ:char;

     

    В модуле описана спецификация файла и следующие переменные:

    1. File1, Filekl, Filenov - Переменные файлового типа
    2. FileName, Filenamekluch, filenamenov, FilenamenovND - Переменные, содержащие имена файлов.
    3. TVzap - Переменная типа запись
    4. N - Переменная, которая используется для обозначения текущего элемента из НД.

    Процедуры, которые содержатся в модуле:

     

    {Процедура для вывода текущего элемента}Vivod_Tek (var Filename:string; n:integer);

    {Процедура создания нового набора данных}Sozdat_ND (var Filename:string; var n:integer);

    {Процедура добавление элемента в конец набора данных}Dobavit_ND (var Filename:string; var n:integer);

    {Процедура для просмотра содержимого набора данных}Prosmotr_ND (var Filename:string; var n:integer);

    {Процедура для поиска элемента по введеному номеру}Poisk_Elem_ND (var Filename:string; var n:integer);

     

    Процедура, которая создает новый набор данных:

    Sozdat_ND;i,kol:integer;

    {Ввод имени нового набора данных}

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

    {Открытие файла для записи}

    {Ввод количества записей(kol)}i:=1 to kol do

    {Ввод данных}

    {Запись одной записи в НД}(File1,TVzap);;

    {Закрытие файла}

    {Изменение имени файла};

    {end procedure Sozdat_ND}

     

    В процедуру из главной программы передается только имя старого набора данных. В главную программу из процедуры передается имя нового набора данных и номер текущего элемента.

    В процедуре создается и открывается для записи новый набор данных, затем в него вводится заданое количество записей. После создания НД он закрывается, а текущим элементом становится последний введенный элемент.

    Процедура добавление элемента в конец набора данных:

    Dobavit_ND;:=n+1;

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

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

    {Поиск конца файла}

    {Цикл для записи данных, который будет выполнятся пока пользователь не введет No}Otv2 <> No do

    {Ввод данных}

    {Запись одной записи в НД}(File1,TVzap);

    {Запрос на окончание заполнения} (Продолжить заполнение?(Yes\No));(Otv2);;

    {Присвоение номера текущего элемента}:=numb;

    {Закрытие файла} ;

    {end procedure Dobavit_ND}

     

    В процедуру из главной программы передается имя набора данных. В главную программу из процедуры передается номер текущего элемента.

    В процедуре происходит открытие набора данных, затем нахождение его конца стандартной процедурой seek, после чего происходит запись элементов в конец НД. После каждого записанного элемента выводится запрос на окончание записи.

    Процедура для просмотра содержимого набора данных:

    Prosmotr_ND;

    {Связывание файловой переменной с НД на диске}(File1, Filename);

    {Открытие файла для чтения}(File1);

    {Вывод имени текущего набора данных}

    {Вывод шапки таблицы}

    {Пока не закончится файл -- вывод элементов в таблицу}not eof(File1) do

    {чтение одной записи из файла} (File1,TVzap);

    {Выбор строки в зависимости от значения перечислимого типа}TVzap.tipTelevizor of:k:= Цветной;_bel:k:= Черно-белый;:k:= Переносной;;

    {Вывод содержимого записи}(¦, numb:5,¦);(TVzap.nazvanie:18,¦);(TVzap.razmer:8,¦);(TVzap.sr_stoimist:16:1,¦);(k,¦);

    {Вывод нижней границы таблицы}

    {Присвоениею текущему номер последнего показанног?/p>