’ закончить работу? (Y/N)');
readln (exit_ans);
if exit_ans = 'Y'
then F:=false;
end;
end; { case }
end; { While }
writeln ('Спасибо! До свидания!');
readln;
End.
PROGRAM Menu;
Var
exit_ans: string;
choice, code: integer;
F, Fl: boolean;
{Тело главной вызывающей программы}
Begin
{ clrscr; }
F:= true; { Флаг управления циклом меню }
while (F = true) do
Begin
Repeat
{ clrscr;}
writeln(' Заголовок меню');
writeln('1. Первый вариант действий');
writeln('2. Второй вариант действий ');
writeln('3. Третий вариант действий’);
writeln('4. Четвёртый вариант действий ');
writeln('5. Выход из программы');
writeln('Ваш выбор:');
readln (choice2);
val (choice2, choice, code);
if (code<>0)
then writeln ('Вы ввели не число!’,
’ Повторите ввод! ');
until code=0;
Case choice of
Begin
{ Реализация первого варианта действий }
{ операторы }
...
End;
Begin
{ Реализация второго варианта действий }
{ операторы }
...
End;
Begin
{ Реализация третьего варианта действий }
{ операторы }
...
End;
Begin
{Реализация четвёртого варианта действий }
{ операторы }
...
End;
Begin
Writeln ('Вы действительно хотите’,
’ закончить работу? (Y/N)');
readln (exit_ans);
if exit_ans = 'Y'
then F:=false;
end;
end; { case }
end; { While }
writeln ('Спасибо! До свидания!');
readln;
End.
Далее необходимо отладить программу с точки зрения правильности логики работы. Для этого подойдут пункты оператора CASE, в ветвях которого будут стоять только операторы вывода на монитор, которые только выводят отладочную информацию для своего пункта, например, для 1 пункта меню:
Begin
{Реализация первого варианта действий }
Writeln (‘Выбран и работает 1 пункт меню’);
End;
И т.д. по порядку.
...
Case choice of
Begin
{ Реализация первого варианта действий }
Writeln (‘Выбран и работает 1 пункт меню’);
Readln;
...
End;
Begin
{ Реализация второго варианта действий }
Writeln (‘Выбран и работает 2 пункт меню’);
Readln;
...
End;
Begin
{ Реализация третьего варианта действий }
Writeln (‘Выбран и работает 3 пункт меню’);
Readln;
...
End;
Begin
{Реализация четвёртого варианта действий }
Writeln (‘Выбран и работает 4 пункт меню’);
Readln;
...
End;
Begin
Writeln ('Вы действительно хотите’,
’ закончить работу? (Y/N)');
readln (exit_ans);
if exit_ans = 'Y'
then F:=false;
end;
Else writeln ('Incorrect menu point',choice);
end; { case }
end; { While }
После отладки можно приступать к «наполнению» составных операторов в ветвях оператора CASE, по очереди реализуя соответствующие варианты вычислений – ввод исходной информации, варианты обработки, выход из программы. Например, если в 1 пункте меню предусмотрен ввод одномерного массива, то вид этого пункта в CASE может быть таким.
Case choice of
Begin
{ Ввод одномерного массива }
Writeln (‘Введите фактическое количество’,
‘ элементов массива, <= 30’);
Readln (N);
For i:= 1 to N do
Begin
Writeln (‘ Введите элемент №: ‘,i);
Readln (A [i]);
End;
End;
И так далее, по пунктам.
Расположение меню на экране
Данное описанное меню имеет недостаток, оно расположено в левом верхнем углу экрана.
Чтобы переместить меню ближе к центру экрана, надо использовать самый простой способ – добавить в константах пробелы слева от текста, чем больше пробелов тем текст ближе по строке к середине.
Чтобы опустить текст по вертикали, надо добавлять перед операторами печати Writeln; - вывод пустой строки столько раз, сколько окажется нужным.
Repeat
Writeln;
Writeln;
Writeln;
Writeln;
writeln(' Заголовок меню');
writeln(' 1.Первый вариант действий');
writeln(' 2.Второй вариант действий ');
writeln(' 3.Третий вариант действий’);
writeln(' 4.Четвертый вариант действий’);
writeln(' 5. Выход из программы');
writeln(' Ваш выбор:');
...
Усовершенствованным способом управления расположением меню является следующий:
gotoxy(30,2); textcolor (13);
writeln('Заголовок меню ');
gotoxy(22,5);textcolor(11);
writeln('1. Первый пункт...... ');
gotoxy(22,7);
writeln('2. Второй пункт....');
gotoxy(22,9);
writeln('3. Третий пункт....');
gotoxy(22,11);
writeln('4. Четвёртый пункт......');
gotoxy(22,13);
writeln('5. Выход из программы........');
gotoxy(27,17); textcolor(3);
writeln('Ваш выбор: ');
Здесь используется процедура установки курсора в нужную позицию экрана GOTOXY (номер строки, номер символа в строке), за ней установка цвета шрифта, далее собственно печать текста. Этот способ требует подключения стандартной библиотеки (модуля) управления экраном CRT:
Program Labr1;
Uses CRT;
Далее как обычно.
Организовывать обращение к процедуре CLRSCR для очистки экрана необходимо на самом последнем этапе разработки, после полной отладки.
РЕКОМЕНДАЦИЯ. Все возможные усовершенствования вида и размещения меню выполняются только после того, как полностью отлажена вся программа!!! |