5.2 Консольный интерфейс
Консольный интерфейс достаточно просто реализуется с помощью стандартных функций ввода-вывода: printf, scanf, puts, getch. Перед выводом можно очистить экран, чтобы предыдущие сеансы работы с программой не отвлекали пользователя. Для некоторых видов программ, особенно для системных утилит, очистка экрана является нежелательной, т.к. информация о предыдущих запусках может потребоваться пользователю. Впрочем, к учебным программам это отношения не имеет, и экран лучше все-таки очистить.
Перед каждым запросом данных необходимо вывести пользователю приглашение для ввода этих данных, например: «Введите коэффициент a». Если ввод производится по сравнительно сложным правилам, их необходимо также вкратце описать перед вводом (например, при вводе массива нужно сначала спросить число элементов N, а потом указать, что элементы вводятся N раз).
Поскольку после завершения программы на экране появляется оболочка Borland C++ и закрывает результаты расчетов, желательно приостанавливать выполнение программы до нажатия клавиши после вывода результатов. При этом пользователю нужно вывести соответствующее сообщение.
Кроме того, ввод данных можно осуществлять не стандартными функциями, а рассмотренными ниже функциями ввода с редактированием. Это позволит сделать интерфейс более дружественным пользователю, особенно в случае, когда расчеты можно повторить (во второй и последующих итерациях можно предлагать пользователю по умолчанию предыдущие значения параметров).
В соответствии с принципами разделения интерфейса и вычислительного ядра ввод, вывод и вычисления следует размещать в разных функциях. Общую логику работы «ввод – вычисления – вывод» можно также вынести в отдельную функцию:
void run()
{
input_data();
calculate();
show_results();
}
Разумеется, прототипы функций ввода input_data(), вычислений calculate() и вывода show_results() могут быть (и будут) другими, зависящими от конкретной программы и способов передачи данных в ядро. Такой подход позволяет легко организовать циклическое выполнение расчетов. Для этого функцию run() нужно вызывать в do…while-цикле, выход из которого осуществляется при отрицательном ответе на вопрос «продолжить?».
В остальном программирование консольного интерфейса, как правило, не вызывает затруднений.
5.3 Простое меню
Простое меню отличается от консольного интерфейса в первую очередь последовательностью выполнения операций. Программа обязательно зацикливается, условие выхода из цикла – выбор пункта меню «Выход». Внутри цикла размещается запрос номера меню и его обработка. Запрос может производиться функциями scanf, getch и т.п. Обработка обычно реализуется оператором switch, в котором для каждого пункта меню предусмотрена отдельная ветка case, а все остальные значения «тихо» игнорируются. Уведомлять пользователя о выборе неправильного пункта меню необязательно, это может его раздражать (например, при случайном промахе в процессе нажатия клавиши).
Основная интерфейсная функция может выглядеть так:
void run()
{
//... вывод меню на экран
int cont_menu_loop=1;
do
{
int sel_menu;
//... ввод sel_menu любым удобным способом
switch (sel_menu)
{
case 0: //ввод значения a
a=input_float();
break;
case 1: //ввод значения b
b=input_float();
break;
//...
case 4: //вычисления и вывод результатов
calculate();
show_results();
break;
case 5: //выход
cont_menu_loop=0;
break;
}
} while (cont_menu_loop);
}
Если меню используется как часть более сложного пользовательского интерфейса, то вывод меню и выбор пункта можно вынести в отдельную функцию. Этой функции можно передавать массив строк с названиями отдельных пунктов, а возвращаемое значение (номер выбранного пункта) анализировать в операторе switch. Такой подход в дальнейшем позволяет легко перейти от меню одного типа к меню другого типа, например, от простого (см. рис. 5, а) к меню с перемещением курсора (см. рис. 5, б).
5.4 Меню с перемещением курсора
Основное отличие этого варианта меню от простого заключается в способе ввода переменной sel_menu. Если в простом меню она вводится непосредственно пользователем, то в данном варианте ввод осуществляется косвенно с помощью клавиш управления курсором. Выбор пункта можно организовать следующим образом:
void highlight_menu(int item,int highlight);
void run()
{
//...
int selected=0;
int sel_menu=0;
do
{
highlight_menu(sel_menu,1); //подсвечиваем пункт меню
int key=getch();
highlight_menu(sel_menu,0); //временно гасим пункт меню
switch (key)
{
case 0:
key=getch();
switch (key)
{
case UP:
sel_menu=(sel_menu-1+max_menu)%max_menu;
break;
case DOWN:
sel_menu=(sel_menu+1)%max_menu;
break;
}
break;
case ENTER:
selected=1;
break;
}
} while (!selected);
//...
}
В приведенном фрагменте кода функция highlight_menu выводит элемент меню с заданным номером с включенной (highlight != 0) или выключенной (highlight = = 0) подсветкой. Данную функцию можно реализовать различными способами. Как правило, подсветка производится с помощью установки соответствующих атрибутов текста или вызовом функций highvideo и lowvideo. В зависимости от реализации в highlight_menu может потребоваться передача дополнительных параметров, описывающих меню (например, массив строк с названиями пунктов, размеры меню на экране и т.п.).
... типами устройств. Согласованность составных систем является балансом между согласованностью физической, синтаксической, семантической и стремлением получить преимущества оптимальных возможностей системы. ПРЕИМУЩЕСТВА СОГЛАСОВАННОГО ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ Согласованный интерфейс приносит пользователям и разработчикам экономию времени и средств. Пользователи выигрывают от того, если им понадобится ...
... недостаточно). Возможно включение комплекса в план учебного процесса, для обучения студентов. 2. Специальная часть разработка программного обеспечения для организации интерфейса программно-методического комплекса 2.1 Разработка технического задания на реализацию специальной части дипломного проекта Наименование программного изделия - "Интерфейс программно - методического комплекса для ...
... (магнитные диски и ленты, электронно-лучевые трубки и т.д.), реализация которых возможна лишь специальными контроллерами. Сложность внешнего интерфейса определяется как сложностью периферийных устройств, так и степенью совместимости их с ЭВМ. Под совместимостью будем понимать возможность объединения отдельных компонентов системы в единую операционную сеть посредством программных и аппаратных ...
... неудобной системой, особенно если рядом нет удобной системы с аналогичными возможностями. С пользователем-любителем все наоборот. Пока в уголовном кодексе не предусмотрено наказание типа "заключения в пользовательский интерфейс", он имеет право выбора (не между одной программой и другой, а между компьютером и телевизором или даже книгой). Он хочет за компьютером развлекаться, и тратить время и ...
0 комментариев