Функция формирования и функция работы с меню в паскале

Автор: Пользователь скрыл имя, 01 Апреля 2013 в 11:06, курсовая работа

Описание работы

1 Постановка задачи. Написать функцию формирования и функцию работы с меню (в графическом режиме). Пункты меню должны храниться в файле MENU.DAT. Функция формирования читает пункты меню из файла и заносит их в массив. Необходимо запомнить количество пунктов меню. Вторая функция обеспечивает вывод на экран и перемещение по меню с помощью клавиш «­» и «¯».

Содержание

1 Постановка задачи 3
2 Описание алгоритма 3
3 Описание программы 3
4 Теоретическая часть 4
Приложение А Текст программы 12
Приложение Б Тестовый пример 14

Работа содержит 1 файл

курсовая работа.doc

— 172.00 Кб (Скачать)

 

Министерство  образования и науки Российской Федерации

Алтайский государственный  технический университет

им. И. И. Ползунова

 

Кафедра «Информационные  системы в экономике»

 

 

 

ОТЧЕТ

о курсовой работе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Барнаул 2009

 

Содержание

1 Постановка задачи                                                                                               3

2 Описание алгоритма                                                                                           3

3 Описание программы                                                                                          3

4 Теоретическая часть                                                                                            4

Приложение  А Текст программы                                                                       12

Приложение  Б Тестовый пример                                                                        14

 

1 Постановка задачи

Написать функцию формирования и функцию работы с меню (в графическом  режиме). Пункты меню должны храниться в файле MENU.DAT. Функция формирования читает пункты меню из файла и заносит их в массив. Необходимо запомнить количество пунктов меню. Вторая функция обеспечивает вывод на экран и перемещение по меню с помощью клавиш «­» и «¯». Нажатие клавиши ENTER завершает работу функции (но не программы, выход из программы выполняется только при нажатии ESC). При этом в главную функцию возвращается номер выбранного пункта. Написать программу, демонстрирующую применение данных функций.

2 Описание алгоритма

Структурная схема алгоритма представлена на рисунке 1. Текст программы представлен в приложении А. Тестовый пример представлен в приложении Б.

3 Описание программы

В программе используются следующие переменные:

s:string;

M:array[1..10] of string;

i:integer;

ch:char;

 

Теоретическая часть:

 

  1. Инициализация графики
  2. Обработка ошибок системы графики
  3. Вывод текста в графическом режиме
  4. Вывод основных графических примитивов

 

  1. Инициализация графики

Для работы в  графическом режиме программа должна выполнить его инициализацию. Инициализация графического режима выполняется с помощью вызова библиотечной процедуры

InitGraph(var GraphDriver, GraphMode : integer; PathToDriver : string),

которая отыскивает на диске указанный в вызове драйвер, загружает его в память и подготавливает экран к работе в графическом режиме.

Графическая библиотека содержит процедуру

DetectGraph(var GraphDriver, GraphMode : integer),

которая проверяет тип установленного видеоадаптера и определяет графический драйвер, соответствующий этому видеоадаптеру.

 Можно поручить процедуре  InitGraph автоматически выполнить поиск соответствующего графического драйвера, если в качестве значения целой переменной GraphDriver указать константу Detect.

 

  1. Обработка ошибок системы графики

При инициализации  графического режима возможно возникновение ошибочных ситуаций. Для идентификации таких случаев после вызова процедуры InitGraph следует использовать функцию GraphResult : integer, которая возвращает одно из следующих значений (перечислены наиболее важные коды возврата):

0(grOk) – инициализация выполнена успешно;

2 (grNotDetected) –  видеоконтроллер не поддерживает работу в графическом режиме;

3 (grFileNotFound) – не найден  файл графического драйвера;

4 (grInvalidDriver) – неверный  графический драйвер;

5 (grNoLoadMem) – для инициализации заданного графического режима

недостаточно памяти.

В скобках указаны  соответствующие символические константы, определенные в модуле Graph. Справочную информацию об ошибках инициализации графического режима можно получить, выбрав пункты Help{Index{CONSTANTS(GRAPHICS-MODE)}} соответствующих меню интерактивной среды разработки (ИСР) Турбо-Паскаль 6.0.

 

 

  1. Вывод текста в графическом режиме

Описываемые ниже стандартные процедуры подддерживают  вывод текстовых сообщений в  графическом режиме. Это не одно и то же, что использование процедур Write и Writeln. Дело в том6 что специально для графического режима разработаны процедуры, обеспечивающие вывод сообщений различными шрифтами в горизонтальном или вертикальном направлении, с изменением размеров и т.д.

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 –  устанавливает стиль текстового  вывода на графический экран.  Здесь переменная Font указывает на код (номер) шрифта, Direct – код направления, а Size – код размера шрифта.

Для указания кода шрифта можно  использовать следующие константы:

 Номер Описание

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 – горизонтальное выравнивание, а Vert – вертикальное выравнивание.

Выравнивание  определяет как будет размещаться  текст – левее или правее указанного места, выше, ниже или по центру.

Можно использовать следующие константы:

Для 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брасывает  заданные пользователем параметры  графического режима и устанавливает  исходные (определяемые по умолчанию  при запуске процедуры InitGraph).

 

  1. Вывод основных графических примитивов

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+10, M[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.

 

Приложение Б

Тестовый пример

 




Информация о работе Функция формирования и функция работы с меню в паскале