Структура программы и интерфейс модулей
Текст программы состоит из: основной части, в которой представлено меню работы с программой, модуля 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!