Автор: Пользователь скрыл имя, 01 Апреля 2013 в 11:06, курсовая работа
1 Постановка задачи. Написать функцию формирования и функцию работы с меню (в графическом режиме). Пункты меню должны храниться в файле MENU.DAT. Функция формирования читает пункты меню из файла и заносит их в массив. Необходимо запомнить количество пунктов меню. Вторая функция обеспечивает вывод на экран и перемещение по меню с помощью клавиш «» и «¯».
1 Постановка задачи 3
2 Описание алгоритма 3
3 Описание программы 3
4 Теоретическая часть 4
Приложение А Текст программы 12
Приложение Б Тестовый пример 14
Министерство образования и науки Российской Федерации
Алтайский государственный технический университет
им. И. И. Ползунова
Кафедра «Информационные системы в экономике»
ОТЧЕТ
о курсовой работе
Барнаул 2009
Содержание
1 Постановка задачи
2 Описание алгоритма
3 Описание программы
4 Теоретическая часть
Приложение
А Текст программы
Приложение Б Тестовый пример 14
1 Постановка задачи
Написать функцию формирования и функцию работы с меню (в графическом режиме). Пункты меню должны храниться в файле MENU.DAT. Функция формирования читает пункты меню из файла и заносит их в массив. Необходимо запомнить количество пунктов меню. Вторая функция обеспечивает вывод на экран и перемещение по меню с помощью клавиш «» и «¯». Нажатие клавиши ENTER завершает работу функции (но не программы, выход из программы выполняется только при нажатии ESC). При этом в главную функцию возвращается номер выбранного пункта. Написать программу, демонстрирующую применение данных функций.
2 Описание алгоритма
Структурная схема алгоритма представлена на рисунке 1. Текст программы представлен в приложении А. Тестовый пример представлен в приложении Б.
3 Описание программы
В программе используются следующие переменные:
s:string;
M:array[1..10] of string;
i:integer;
ch:char;
Теоретическая часть:
Для работы в графическом режиме программа должна выполнить его инициализацию. Инициализация графического режима выполняется с помощью вызова библиотечной процедуры
InitGraph(var GraphDriver, GraphMode : integer; PathToDriver : string),
которая отыскивает на диске указанный в вызове драйвер, загружает его в память и подготавливает экран к работе в графическом режиме.
Графическая библиотека содержит процедуру
DetectGraph(var GraphDriver, GraphMode : integer),
которая проверяет тип установленного видеоадаптера и определяет графический драйвер, соответствующий этому видеоадаптеру.
Можно поручить процедуре InitGraph автоматически выполнить поиск соответствующего графического драйвера, если в качестве значения целой переменной GraphDriver указать константу Detect.
При инициализации графического режима возможно возникновение ошибочных ситуаций. Для идентификации таких случаев после вызова процедуры InitGraph следует использовать функцию GraphResult : integer, которая возвращает одно из следующих значений (перечислены наиболее важные коды возврата):
0(grOk) – инициализация выполнена успешно;
2 (grNotDetected) – видеоконтроллер не поддерживает работу в графическом режиме;
3 (grFileNotFound) – не найден файл графического драйвера;
4 (grInvalidDriver) – неверный графический драйвер;
5 (grNoLoadMem) – для инициализации заданного графического режима
недостаточно памяти.
В скобках указаны
соответствующие символические константы, определенные
в модуле Graph. Справочную информацию об
ошибках инициализации графического режима
можно получить, выбрав пункты Help{Index{CONSTANTS(GRAPHICS-
Описываемые ниже
стандартные процедуры
OutText('текст'), где
переменная 'текст' типа String – выводит
текстовую строку, начиная с текущего
положения указателя. При
Примечание. Если текст выходит за границы экрана, то при использовании штриховых шрифтов он отсекается, а в случае стандартного шрифта не выводится.
OutTextXY(X, Y, 'текст'), где переменные X, Y типа Integer , а 'текст' типа String – выводит строку 'текст', начиная с точки с координатами X, Y. Указатель не меняет своего положения.
Например, после применения процедуры OutTextXY(100, 50, 'Grafika in Turbo Pascal') на экране будет высвечена строка Grafika in Turbo Pascal, начиная с точки с координатами (100,50).
SetTextStyle(Font; Direct; Size), где переменные
Font и Direct типа word, а Size типа Integer –
устанавливает стиль
Для указания кода шрифта можно использовать следующие константы:
Номер Описание
0 точечный шрифт 8х8
1 утроенный шрифт
2 уменьшенный шрифт
3 прямой шрифт
4 готический шрифт
5 “рукописный” шрифт
6 одноштриховый шрифт типа Courier
7 красивый наклонный шрифт типа Times Italic
8 шрифт типа Times Roman
9 шрифт типа Courier увеличенного размера
10 крупный двухштриховый шрифт
Cреди этих
шрифтов только DefaultFont (код 0) является
матричным шрифтом, т.е. его
символы создаются из матриц 8х8
пикселей. Все остальные шрифты
– векторные, их элементы
Примечание. Русскоязычные сообщения можно выводить в графическом режиме с помощью шрифта DefaultFont.
Для задания направления выдачи текста используют следующие константы:
0 – слева направо
1 – снизу вверх
Размер выводимых символов задается параметром Size, который имеет диапазон от 1 до 10 (матричный шрифт от 1 до 32).
SetTextJustify (Horiz,Vert),
где переменные Horiz и Vert типа word –
задает выравнивание текста по
отношению к текущему
Выравнивание определяет как будет размещаться текст – левее или правее указанного места, выше, ниже или по центру.
Можно использовать следующие константы:
Для Horiz:
LeftText = 0 (указатель слева от текста);
CenterText = 1 (симметрично слева и справа);
RightText = 2 (указатель справа от текста);
Для Vert:
BottonText = 0 (указатель снизу от текста);
CenterText = 1 (симметрично снизу и сверху);
TopText = 2 (указатель сверху от текста);
SetUserCharSize (X1, X2, Y1, Y2), где переменные X1, X2, Y1, Y2 типа word – изменяет размер выводимых символов в соответствии с заданными пропорциями. Пропорции задают масштабный коэффициент, показывающий во сколько раз увеличится ширина и высота выводимых символов по отношению к стандартно заданным значениям. Коэффициент по горизонтали находится как отношение X1 к X2, по вертикали Y1, Y2. Например, чтобы удвоить ширину символов, необходимо задать Х1=2 и Х2=1. Стандартный размер символов устанавливается процедурой SetTextStyle, которая отменяет предшествующее ей обращение к SetUserCharSize.
GraphDefaults – cбрасывает
заданные пользователем
Rectangle(x1,y1,x2,y2:integer)
Строит контур прямоугольника из линий текущего цвета.
Circle(x,y:integer; r:word);
Для рисования окружностей используется процедура Circle с тремя целочисленными параметрами:
x,y – координаты центра окружности; r – радиус.
Arc(x,y:iteger; StA.EndA,Radius:word);
Нарисует дугу окружности текущим цветом
x,y – координаты центра окружности данной дугиж
Sta – начальный угол; (в градусах)
EndA – конечный угол; (в градусах)
Radius – радиус дуги.
Ellipse(x,y:integer; stA,endA:word; xr,yr:word);
Рисует дугу эллипса текущим цветом.
x,y – координаты центра эллипса;
stA – начальный угол;
endA – конечный угол;
xr,yr – горизонтальная и вертикальная полуоси эллипса.
SetLineStyle(Ln,P,T)
Рисование линий, окружностей и их элементов, контуров прямоугольников осуществляется линиями. Процедура SetLineStyle позволяет изменять параметры этих линий. Параметры этой процедуры - целые числа.
Ln – стиль линии:
0=сплошная;
1=пунктирная;
2=штрихпунктрная;
3=штриховая;
4=Заданная пользователем;
T – толщина линии:
1=нормальная;
2=толстая;
P – шаблон:
0 – во всех случаях для Ln от 0 до 3;
Для Ln=4 устанавливается шаблон линии в виде двухбайтового числа, каждый бит которого равен 1, если его надо высветит и 0 – в противном случае. Например линия в виде 1111111100000000в шестнадцатиричной форме следует записать $AA00.
Рисунок 1 – Структурная схема процедуры Proc1
Рисунок 2 – Структурная схема процедуры Proc2
Рисунок 3 – Структурная схема алгоритма
Приложение А
Текст программы
program kurs;
uses crt, graph;
var
s:string;
M:array[1..10] of string;
i:integer;
ch:char;
procedure Proc1(var M:array of string; var i:integer);
var
s,pr:string;
ff:text;
begin
writeln('Введите путь к файлу MENU.DAT');
readln(s);
assign(ff,s);
reset(ff);
i:=1;
while not eof(ff) do
begin
readln(ff,pr);
M[i]:=pr;
i:=i+1;
end;
i:=i-1;
writeln('Всего пунктов меню ',i);
close(ff);
end;
procedure Proc2(M:array of string; i:integer);
var
n,x,y,j,gd,gm:integer;
a:real;
s:string;
begin
gd:=detect;
initgraph(gd,gm,'');
if graphresult <>grok then
halt(1);
cleardevice;
setbkcolor(7);
repeat
n:=0;
repeat
clearviewport;
settextstyle(1,3,3);
setcolor(1);
outtextxy(200,20,'EXIT-ESC');
for j:=1 to i do
begin
setcolor(14);
setlinestyle(1,0,3);
rectangle(getmaxx-200,0+50*j, getmaxx,200+50*(j-3));
settextstyle(4,4,3);
setcolor(1);
if length(M[j]) > 11 then M[j]:=copy(M[j],1,11);
outtextxy(getmaxx-200,0+50*j+
end;
setcolor(9);
setlinestyle(1,0,3);
circle(1020,75+n,10);
circle(1020,75+n,3);
ch:=readkey;
if ch=#72 then n:=n-50;
if ch=#80 then n:=n+50;
if n=i*50 then n:=0;
if n=-50 then n:=(i-1)*50;
until ch=#13;
a:=n/50+1;
a:=int(a);
str(a,s);
setcolor(9);
outtextxy(150,300, 'Funktsia nomer');
outtextxy(540,300,s[2]);
ch:=readkey;
until ch=#27;
closegraph;
end;
begin
clrscr;
Proc1(M,i);
Proc2(M,i);
end.
Приложение Б
Тестовый пример
Информация о работе Функция формирования и функция работы с меню в паскале