Структура программы и интерфейс модулей



 

Текст программы состоит из: основной части, в которой представлено меню работы с программой, модуля dan, где представлены структуры исходных данных; модуля proc, в котором представлены процедуры работы со списками фоторепортеров и фирм; модуля ris, в котором представлены графические заставки и окна для работы с программой.

 

Иерархия модулей

 

 

unit proc;

{Модуль обработки действий над списком фоторепортеров и списком фирм}

interface

uses crt,graph,ris,dan;

 

procedure pam(x1,y1,x2,y2:integer; var uk:pointer);

{сохранение рисунка( части экрана) в динамической памяти,

входные данные:x1,y1, x2,y2- координаты сохраняемой части экрана,

выходные данные: uk-адрес памяти (где будет храниться рис)}

procedure vstav(x1,y1:integer; uk:pointer);

{вставка рисунка из динамической памяти,

входные данные:x1,y1 - координаты места вставки рисунка,

uk-адрес памяти( откуда будет взят рисунок)}

procedure vvodint (var d:longint;x1,y1:integer);

{защищенный ввод числовой информации,

входные данные: х,у-координаты на экране,

выходные данные: d-целое положительное число }

procedure izmenobs;

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

{процедура без параметров}

procedure popolnenie;

{Изменение(создание) списка фирм, упорядоченного по алфавиту}

{процедура без параметров}

procedure udal1;

{Процедура удаления фирм из списка}

{процедура без параметров}

Procedure prosmotr1;

{Процедура просмотра состояния списка фирм}

{процедура без параметров}

procedure prosmotr2(i:byte);

{Просмотр списка репортеров на экране}

{Входные данные i - параметр вывода на экран

(если 1, то вывод осуществляется поэлементно)}

procedure izm2;

{Создание очереди фоторепортеров}

{процедура без параметров}

procedure pr;

{Просмотр очереди фоторепортеров в табличке

(включает процедуру Viv вывода порции информации)}

{процедура без параметров}

 

procedure okno;

{Недоступны данные из файла}

procedure pros;

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

{процедура без параметров}

procedure pros1;

{Просмотр списка репортеров в обратном направлении на экране}

{процедура без параметров}

procedure udalenie1;

{Удаление элемента(не первого) из списка фоторепортеров}

{процедура без параметров}

procedure udalenie;

{Удаление первого элемента из списка фоторепортеров}

{процедура без параметров}

procedure obrabotka1;

{ обслуживание очереди(выбор фоторепортера из очереди, удаление элемента

списка, изменение данных о состояния запасов фотоматериалов)}

{Содержит процедуру obk-обслуживание обычных фоторепортеров}

procedure fail;

{ввод данных из файла}

{процедура без параметров}

procedure fail1;

{вывод данных из файла}

{процедура без параметров}

 

unit ris;

{Модуль графических изображений}

Interface

uses crt,graph,dan;

procedure zast;

{ Заставка- сведения о курсовой работе}

{процедура без параметров}

procedure dom;

{рисует домик-фотоателье}

{процедура без параметров}

procedure men(x,y:integer;rep,k:integer;firma:string );

{рисунок репортера,

входные данные:

х,у-координаты на экране, rep-номер в очереди,

k-требуемое число фотографий, firma-фирма }

procedure fon;

{рисунок основного фона}

{процедура без параметров}

 

unit dan;

{Модуль описаний переменных}

Interface

uses crt;

type

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

zap=record

   rep1,{Число обслуженных фоторепортеров}

   ft, {Число изготовленных фотографий}

   rep,{Число фоторепортеров в очереди}

   ft1,{Необходимое число фотографий}

   bum, {Общее количество запасов бумаги}

   rk:integer; {Общее количество запасов реактивов}

  end;

link=^tnode; {Указатель на список фоторепортеров}

tnode= record {Узел списка фоторепортеров}

      org:string[5]; {Организация репортера}

      num:integer;{Порядковый номер в очереди}

      info:integer; {Количество заказов}

      obs:integer;{Указывает на неполное обслуживание (1)}

      next,prev:link; {Указатель на следующие и предыдущие элементы списка фоторепортеров}

     end;

treplist=record {тип - элемент "голова списка"}

        head,cur,posl:link;

        {Указатели на начальный, текущий и предыдущий

        элементы списка фоторепортеров}

       end;

tl1list=^treplist;{тип - указатель на голову списка фоторепортеров}

 

tlink1=^tnode1; {Указатель на список фирм}

tnode1=record {Список фирм}

      name:string[5]; {Название фирмы}

      par1:integer; {Запасы бумаги}

      par2:integer; {Запасы реактивов}

      next:tlink1; {Указатель на следующий элемент списка фирм}

     end;

treplist1=record {тип - элемент "голова списка"}

         head,cur,predcur:tlink1;

         {Указатели на начальный, текущий и предыдущий

        элементы списка фирм}

        end;

tl1list1=^treplist1;{тип - указатель на голову списка фирм}

var

sim:char; {Выбор пункта меню}

golova:tl1list1; {Адрес головы списка фирм}

golova2:tl1list; {Адрес головы списка фоторепортеров}

x,y,a,b:integer;

{x,y - Параметры смещения координат при создании рисунков}

{a,b - Параметры процедуры инициализации модуля graph}

f:char;{служебная(выбор пункта меню,задержка информации на экране и т.д.)}

n:byte;{Номер репортера в очереди}

ukaz,ukaz1:pointer;{Адрес для хранения изображения фрагмента экрана}

razmer:word; {Необходимый размер памяти для изображения}

z:zap;{Сводная табличка параметров состояния очередей}

cursor1:link;

flag1,flag2:boolean;{Определение первого в очереди для обратного направления}

 

ТЕКСТ ПРОГРАММЫ

 

Программа реализована на алгоритмическом языке Turbo Pascal 7.0

program Kurs;

{Курсовая работа по теме:"Моделирование фотоателье"

Выполнил:студент группы 8376 Иванов И.И.}

uses crt,graph,ris,proc,dan;

BEGIN

golova:=nil; {инициализация исходных данных }

golova2:=nil;

cursor1:=nil;

y:=150; { координата для домика-ателье}

n:=0; { номер в очереди }

flag2:=true; {разрешен ввод из файла}

zast;{ заставка}

fon; { фон }

pam(0, getmaxy-256,getmaxx,getmaxy-132, ukaz);

               { часть рисунка экрана(очередь) в память}

repeat

   fon; {фон}

   vstav(0, getmaxy-256,ukaz); {вставка изображения из памяти}

   setcolor(9);

   f:=readkey; {выбор пункта меню}

  if ord(f)=0 then f:=readkey;

case ord(f) of

  72: {стрелка вверх}

  begin

    flag2:=false;

    izm2;{Пополнение очереди репортеров}

    pam(0, getmaxy-256,getmaxx,getmaxy-132, ukaz);

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

  end;

  80: {стрелка вниз}

  begin

    obrabotka1;{Обслуживание репортеров в очереди}

    pam(0, getmaxy-256,getmaxx,getmaxy-132, ukaz);

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

  end;

  59: {f1 - изменение сведений о фирмах и фотоматериалах}

  begin

    flag2:=false;

    popolnenie;

    pam(0, getmaxy-256,getmaxx,getmaxy-132, ukaz);

  end;

  60:{f2 - просмотр состояния фирм и фотоматериалов}

  begin

    prosmotr1;

    pam(0, getmaxy-256,getmaxx,getmaxy-132, ukaz);

  end;

  61: {f3 -Удаление из списка фирм}

  begin

    udal1;

    pam(0, getmaxy-256,getmaxx,getmaxy-132, ukaz);

  end;

  62: {f4 -просмотр очереди в окне}

  begin

    pr;

    pam(0, getmaxy-256,getmaxx,getmaxy-132, ukaz);

  end;

  63: {Из файла}

  begin

     fail;

     pam(0, getmaxy-256,getmaxx,getmaxy-132, ukaz);

  end;

  75: {Стрелка влево - просмотр очереди в прямом направлении}

 

  begin

    pros;

    pam(0, getmaxy-256,getmaxx,getmaxy-132, ukaz);

  end;

  77:{Стрелка вправо-

      просмотр очереди в обратном направлении}

  begin

    pros1;

    pam(0, getmaxy-256,getmaxx,getmaxy-132, ukaz);

  end

  else pam(0, getmaxy-256,getmaxx,getmaxy-132, ukaz);

end;

until ord(f)=27; {клавиша<ESC>}

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

closegraph;

END.

 

unit dan;{Молуль исходных данных}

Interface

uses crt;

type

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

zap=record

   rep1,{Число обслуженных фоторепортеров}

   ft, {Число изготовленных фотографий}

   rep,{Число фоторепортеров в очереди}

   ft1,{Необходимое число фотографий}

   bum, {Общее количество запасов бумаги}

   rk:integer; {Общее количество запасов реактивов}

  end;

link=^tnode; {Указатель на список фоторепортеров}

tnode= record {Узел списка фоторепортеров}

      org:string[5]; {Организация репортера}

      num:integer;{Порядковый номер в очереди}

      info:integer; {Количество заказов}

      obs:integer;{Указывает на неполное обслуживание (1)}

         next,prev:link; {Указатель на следующие и предыдущие

                       элементы списка фоторепортеров}

     end;

treplist=record {тип - элемент "голова списка"}

        head,cur,posl:link;

        {Указатели на начальный, текущий и предыдущий

        элементы списка фоторепортеров}

       end;

tl1list=^treplist;{тип - указатель на голову списка фоторепортеров}

 

tlink1=^tnode1; {Указатель на список фирм}

tnode1=record {Список фирм}

      name:string[5]; {Название фирмы}

      par1:integer; {Запасы бумаги}

      par2:integer; {Запасы реактивов}

      next:tlink1; {Указатель на следующий элемент списка фирм}

     end;

treplist1=record {тип - элемент "голова списка"}

         head,cur,predcur:tlink1;

         {Указатели на начальный, текущий и предыдущий

        элементы списка фирм}

        end;

tl1list1=^treplist1;{тип - указатель на голову списка фирм}

var

sim:char; {Выбор пункта меню}

golova:tl1list1; {Адрес головы списка фирм}

golova2:tl1list; {Адрес головы списка фоторепортеров}

x,y,a,b:integer;

{x,y - Параметры смещения координат при создании рисунков}

{a,b - Параметры процедуры инициализации модуля graph}

f:char;{служебная(выбор пункта меню,задержка информации на экране

                                                       и т.д.)}

n:byte;{Номер репортера в очереди}

ukaz,ukaz1:pointer;{Адрес для хранения изображения фрагмента

                                                   экрана}

razmer:word; {Необходимый размер памяти для изображения}

z:zap;{Сводная табличка параметров состояния очередей}

cursor1:link;

flag1,flag2:boolean;{Определение первого в очереди для обратного

                                                 направления}

implementation

begin

end.

 

unit proc; {Модуль обработки действий над списком фоторепортеров и списком фирм}

interface

uses crt,graph,ris,dan;

procedure pam(x1,y1,x2,y2:integer; var uk:pointer);

procedure vstav(x1,y1:integer; uk:pointer);

procedure vvodint (var d:longint;x1,y1:integer);

procedure izmenobs;

procedure popolnenie ;

procedure udal1 ;

Procedure prosmotr1;

procedure prosmotr2(i:byte);

procedure okno;

procedure izm2;

procedure pr;

procedure pros;

procedure pros1;

procedure udalenie1;

procedure udalenie;

procedure obrabotka1;

procedure fail;

procedure fail1;

implementation

procedure pam(x1,y1,x2,y2:integer; var uk:pointer);

{сохранение рисунка( части экрана) в динамической памяти,


Дата добавления: 2018-06-27; просмотров: 421; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!