Популярные услуги

Все письменные КМ под ключ за 3 суток! (КМ-6 + КМ-7 + КМ-8 + КМ-9 + КМ-10)
КМ-6. Динамические массивы. Семинар - выполню любой вариант!
КМ-2. Разработка простейших консольных программ с использованием ООП + КМ-4. Более сложные элементы ООП - под ключ!
Любая задача на C/C++
Одно любое задание в mYsql
Сделаю ваше задание: Лабораторная работа на Pascal / Lazarus
Любой тест по базам данных максимально быстро на хорошую оценку - или верну деньги!
Любой реферат по объектно-ориентированному программированию (ООП)
Повышение уникальности твоей работе
Оба семинара по программированию под ключ! КМ-2. Разработка циклических алгоритмов + КМ-3. Функции и многофайловые программы в Си

ЛР3 - Меню

2021-03-09СтудИзба

Лабораторная работа №3

Меню

Цель работы – овладение практическими навыками разработки пользовательских меню одно и многоуровневого типов.

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

                Современные программы взаимодействуют с пользователем через специальный интерфейс типа «меню», в котором пользователю предлагается выбрать один из пунктов.

                Для реализации меню необходимо обрабатывать коды нажатия клавиш управления курсором (←,↑,→,↓), по которым обычно осуществляется переход на следующий пункт. Активизация пункта обычно выполняется нажатием клавиши Enter. После выполнения нужного пункта программа должна вновь выводить меню и продолжать работу с ним. Выход из программы осуществляется по выбору специального пункта «выход» или по нажатию клавиши Esc.

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

                Окно – часть экрана прямоугольной формы. В момент получения программой управления весь экран считается окном 25х80 знакомест. Программист может определять на экране новые окна и управлять их цветом символов и фона окна, так и размещение информации в окне.

Рекомендуемые материалы

Вывод информации в текстовом режиме осуществляется стандартными процедурами Write и WriteLn текущими цветом символа и цветом фона. При выводе четыре символа интерпретируются особым образом:

                #7 –звуковой сигнал,

#8 – перемещение курсора влево на один символ,

#10 – перемещение курсора на строку вниз,

#13 – перемещение курсора в начало текущей строки.

Для организации окон в ТР используется процедура Window(Х1,Y1,X2,Y2);

где: Х1,Y1 – координаты левого верхнего угла, X2,Y2 – координаты правого нижнего угла окна.

Пример 3.1.

Window(1,1,80,25)                                                          {окно – полный экран},

Window(19,7,59,16)                                                        {окно в центре экрана}.

После активизации процедуры Window модуль Crt формирует две специальные переменные WindMin и WindMax, в которых фиксируются размеры текущего окна. Значения этих переменных можно использовать в программе для формирования оконных систем. Например, для получения координат Х и У верхнего угла текущего окна можно использовать выражения:

X: = Lo(WindMin),  Y:= Hi(WindMax).

Аналогичным  образом можно получить координаты правого нижнего угла текущего окна. Особенности архитектуры модуля Crt требуют при работе с WindMin и WindMax использовать отсчет координат не с (1,1) , а с (0,0), что необходимо учитывать при организации оконных интерфейсов в программе.

На экране могут находиться несколько окон, но в каждый отдельный момент времени активным может быть только одно окно. Процедуры и функции Writeln, Write, Readln, Read, Window, GotoXY, ClrScr, InsLine, DelLine, WhereX, WhereY выполняют соответствующее их назначению действия относительно текущего окна. Работу с текстовыми окнами продемонстрируем на следующем примере:

Program DemoRandomWindow;

Uses Crt;

Var X,Y,I: byte;

Begin

               NormVideo;

ClrScr;

for I:=1 to 40 do

                               begin

                               X:= Succ(Random(80));

                               Y:= Succ(Random(25));

Window (X, Y, X+Random(20), Y+Random(8));

TextBackGround(Random(8));

ClrScr;

Write(‘Вывод в окно’, ^G,I:);    { ^G - подает звуковой сигнал}

Delay(300);

end

                End.

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

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

Type WinRecord – record

                               XUpLeft;

YUpLeft;

XLowRight;

YLowRight: byte;

end;

                const                      MaxWin = 10;

Var                        WinMas: array[1..MaxWin] of WinRecord;

При включении данного фрагмента в пользовательскую программу можно сохранять координаты и устанавливать до 10 различных окон вывода.

Окна часто используются в программах для скроллинга (прокрутки) текстовой информации. Этот процесс проще всего реализовать с помощью процедур InsLine и DelLine.

Пример 3.2.

Program DemoInsLine;

Uses Crt;

Var I: byte;

Begin

               Window (20,6,60,15);

               ClrScr;

               for I:=1 to 10 write (‘Вывод в окно’);

               for I:=1 to 5 do

                               begin

                               GotoXY(1,1);

InsLine;

write(‘Вставка строки’);

Delay(500);

end

                End.

2. Демонстрационные примеры

                Пример 3.3. Разработать вертикальное меню из четырех пунктов:

New, open, save, exit. Окно меню синего цвета, названия пунктов должны быть выведены желтым цветом. Выделение пункта выполнить фиолетовым цветом фона. Реализовать выход по выбору пункта «exit ».

                При разработке алгоритма программы выделим 2 подпрограммы:

· подпрограмму рисования пункта меню как окна с текстом внутри;

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

                В процессе работы основная программа вводит коды клавиш и организует работу меню. После завершения работы такая программа должна восстановить стандартное окно 25х80 и стандартные цвета символа и фона MS DOS.

                Program ex;

                  Uses crt;

                  Var   npos,i: integer;

                               ch1,ch2: char;

                  Type

                               win = record                                                       {описываем тип окон пунктов меню}

                               x1,y1,x2,y2: word;                                           {координаты окна}

                               text: string [8];                                   {название пункта меню}

                               end;

{описываем массив окон пунктов меню}

                const menu: array [1..4] of win =

                                               ((x1:5; y1:4; x2:15; y2:4; text: ‘new’),

                                               (x1:5;  y1:5; x2:15; y2:5; text: ‘open’),

                                               (x1:5;  y1:6; x2:15; y2:6; text: ‘save’),

                                               (x1:5;  y1:7; x2:15; y2:7; text: ‘new’));

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

                Procedure DrawWin (w: win;  attr: byte);

                  Begin

                  With w do

                               Begin

                               TextAttr:= attr;                                 {устанавливаем атрибут окна пункта}

                               Windows (x1,y1,x2,y2);                   {устанавливаем окно пункта}

Clrscr;                                                 {высвечиваем окно пункта}

GotoXY(2,1);                                                    {устанавливаем курсор}

Write(text);                                                        {выводим название пункта меню}

End;

                End;

{процедура рисования меню с выделением пунктов npos}

                procedure DrawMenu ( npos: integer);

                  begin

                  clrscr;

                  for  i:=1 to 4  do

                               if  i = npos then  DrawWin (menu[i],94)      {выводим выделенный пункт}

                               else DrawWin (menu [i],30);                          {выводим невыделенный пункт}

                end;

{основная программа}

                begin

  npos:= 1;                                                           {выделенный пункт меню}

  DrawMenu (npos);                                                         {выводим меню}

  Repeat

    Ch1:= ReadKey;                           if ch1=#0 then ch1:=ReadKey;

    Case  ch1 of

#0: case ch2 of

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

                               if  npos > 1 then                  {если не верхний пункт}

                               begin

                               DrawWin(menu[npos], 30); {убираем выделение текущего пункта меню}

Npos:=Npos - 1;                                                 {переходим к предыдущему пункту}

DrawWin(menu[Npos],90);           {выделяем новый пункт}

                               End;

                         End;

#80: begin

if Npos <4 then                                                  {если не нижний пункт}

               begin

                DrawWin(menu[npos],30);                            {убираем выделение текущего пункта}

                Npos:=npos+1;                                  {переходим к следующему пункту}

                DrawWin (menu[npos],94);           {выделяем новый пункт}

               End;

        End;

End;                                                                                     {case интерпретации расширенного кода}

#13: begin

               Window(1,1,80,25);

               TextAttr:=7;

ClrScr;                                                {очищаем экран}

Case npos of

1: begin

               Write (‘выполнен пункт ’, menu[npos].text);

               Readln;

   End;

2: begin

               Write (‘выполнен пункт ’, menu[npos].text);

               Readln;

   End;

3: begin

               Write (‘выполнен пункт ’, menu[npos].text);

               Readln;

   End;

End;   {case}

DrawMenu (npos);                                           {выводим меню}

End;

                        End;  {case}

Until (ch1=#27) or (ch1=#13) and (npos=4));{код 27 соответствует клавише Esc}

                Window(1,1,80,25);                                                         {код 13 соответствует клавише Enter}

TextAttr:=7;

ClrScr;                                                                                {очищает экран}

End.

3.Задачи, для самостоятельного решения

Задача 1. Разработать программу исследования элементарных функций (y=sin x, y=cos x, e = tg x, e = ln x, e = eх), задаваемых пользователем. Обеспечить для каждой функции вывод таблицы значений на заданном интервале с заданным шагом, поиск корней и определение максимума и минимума. Взаимодействие пользователя и программы организуйте с использованием меню.

Задача 2. Разработать программу тестирования студентов обучающихся по теме «системы исчисления ». Тестируемому предлагаться 6 вопросов по данной теме, включая обычные вопросы с выбором ответа из нескольких и задачи на выполнение арифметических операций, когда необходимо ввести результат указанной операции.  Вопросы должны случайным образом выбираться из списка, хранящегося в файле, и не повторяться. Для ответа на каждый вопрос дается две попытки. Предусмотреть, чтобы тестирующийся мог по желанию отказаться отвечать на данный вопрос и получить правильный вопрос. Оценку проводить по соотношению правильных и неправильных ответов.

Задача 3. Разработать вертикальное меню из четырех пунктов:  new, open, save, exit. Окно меню синего цвета, названия пунктов должны быть выведены желтым цветом. Выделение пункта выполнить фиолетовым цветом фона. Реализовать выход по выбору пункта «exit ».

Задача 4. Разработать вертикальное меню из четырех пунктов: new, open, save, exit. Окно меню желтого цвета, названия пунктов должны быть выведены красным цветом. Выделение пункта выполнить фиолетовым цветом фона. Реализовать выход по выбору пункта «exit ».

Задача 5. Разработать программу, анализирующую файл, в котором размещены данные о пассажирах. Запись о пассажирах содержит следующие поля: Фамилия, количество вещей (мест), общий вес багажа. Программа позволяет сортировать пассажиров с максимальным весом багажа и максимальным количеством вещей. Создать меню со следующими пунктами: F1 =ввод данных, F2 – просмотр данных, F3  - выход.

Задача 6.  Разработать вертикальное меню из 4-х пунктов: создать, открыть, сохранить, выход. Окна меню синего цвета, названия пунктов должны быть выделены желтым цветом фона. Реализовать выход по выбору пункта «Выход » или по нажатию клавиши «Esc ».

                При разработке алгоритмов программы выделить 2 подпрограммы:

1. рисования пункта меню как окна с текстом внутри,

Рекомендация для Вас - 13 Нечёткие ассоциативные матричные правила.

2. рисования меню с выделенным пунктом.

В процессе работы основная программа вводит коды клавиш и организует работу с меню. После завершения работы такая программа должна восстановить стандартное окно 25х80 и стандартные цвета символа и фона MS DOS.

Задача 7. Разработать программу по выводу в выделенном окне нажатие специальных клавиш (Home, End, Delete, Insert, PageUp, PageDown, CapsLock, NumLock, ScrollLock, Esc, Break, F1,F2,F3..F12) , используя меню. Обеспечить наглядность решаемых задач с помощью пользовательского интерфейса, оконный интерфейс (опции меню, окна ответов, значение нажатых клавиш).

Задача 8. Разработать программу исследования элементарных функций: sin x, cos x, tg x, ln x, eх, arcsin x, ctg x, задаваемых пользователем. Обеспечить для каждой функции вывод таблицы значений на заданном интервале [0..1] с заданным шагом, поиск корней и определение максимума и минимума. Взаимодействие пользователя и программы организуйте с использованием 2-хуровнего меню (исследование функций, список операций).

Задача 9. Создать базу данных об учениках старших классов школы. Записи должны содержать следующие поля: класс, фамилия, имя, отечество, 4 предмета обучения, средний балл, оценка за поведение.  Создать меню со следующими пунктами: F1 – ввод данных, F2 - просмотр, F3 - поиск, F4 – выход. База данных позволяет вывод данных в табличной форме (оконной форме). Пункты меню расположены горизонтально, на одной линии в верхней части экрана. При выводе, вводе, поиске, меню присутствует.

Задача 10. Разработать программу проигрывания 3-х простейших мелодий с помощью управления встроенным динамиком, используя меню выбора мелодий и их прерывания клавишей «Esc ».

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее