Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Stoneshard |#7| Oblivion
Stoneshard |#6| Rotten Willow Tavern
Stoneshard |#5| Mannshire
Stoneshard |#4| Plot and Death

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Стивенс Ал. Весь текст 495.21 Kb

Техника программирования на турбо-С

Предыдущая страница Следующая страница
1 ... 17 18 19 20 21 22 23  24 25 26 27 28 29 30 ... 43
help-функции, то осуществляется обращение к этой функции. В связи
с  тем,  что в процессе  обработки полей  реализована возможность
заменять   буферизованные   данные   полей   полностью,   функция
data_value снова вызывается для повторного отображения поля после
его обработки.

     Завершающей клавишей в процессе ввода данных могут быть либо
клавиши движения вперед (стрелка вниз,  ВВОД,  Таб), либо клавиши
движения назад (стрелка вверх, стрелка влево). Следующее поле для
обработки выбирается из связного списка FIELD, специфицированного
параметром WINDOW,  в зависимости от значений этих клавиш (вперед
или назад).  При этом выбирается следующее или предыдущее поле, и
ввод данных продолжается.

     Если  последней  была  нажата  одна  из  тех клавиш, которые
анализируются функцией  endstroke и  не  являются  аналогом ранее
встречающихся  и анализируемых  функцией  последовательностей, то
ввод данных  в оконный шаблон  завершается,  и функция data_entry
возвращает управление в точку вызова.



             Пример: Ввод данных в определенном порядке
-----------------------------------------------------------------

     Исходные файлы,  представленные на листингах 8.2, 8.3 и 8.4,
суть примеры использования  шаблона ввода данных  в окне. Листинг
8.2,  order.c,  представляет собой текст  главной функции (main),
которая    осуществляет    обращение    к    функции    ordent.c,
непосредственно  реализующей  пример.  Функция  ordent.c  будет в
дальнейшем присутствовать при рассмотрении  примера меню  в Главе
10  и резидентной утилиты в Главе  12.  Листинг  8.4 представляет
собой make-файл order.prj,  используемый  утилитой  make Турбо Си
для построения программы примера.

     Для выполнения программы примера введите команду

C>order

     Окно,  представленное на рисунке 8.2,  является по сути дела
"всплывающим",  то есть  появляющимся  в позиции  курсора. Однако
обратитесь к листингу 8.3, ordent.c, предварительно ознакомившись
с описанием  программы,  приведенным  ниже.  После  того,  как вы
ознакомились с листингом, выполните программу.

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦                                                               ¦
¦  C>                                                           ¦
¦                                                               ¦
¦         ЪДДДДДДДДДДДДOrder EntryДДДДДДДДДДДДД¬                ¦
¦         ¦                                    ¦                ¦
¦         ¦   Name:                            ¦                ¦
¦         ¦   Address:                         ¦                ¦
¦         ¦   City:                            ¦                ¦
¦         ¦   State:        Zip:               ¦                ¦
¦         ¦                                    ¦                ¦
¦         ¦   Amount:       .                  ¦                ¦
¦         ¦   Date:         / /                ¦                ¦
¦         ¦                                    ¦                ¦
¦         ¦   Phone:      (  )     -           ¦                ¦
¦         ¦                                    ¦                ¦
¦         АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ                ¦
¦                                                               ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

         Рис.8.2. Образец ввода шаблона ввода данных


     Пример программы начинается с установки  окна и передачи ему
значения заголовка и цвета.  Окно отображается на экране дисплея,
и  в  шаблоне  появляется  приглашение  к  вводу   данных.  После
обращения  к функции  init_template  осуществляется идентификация
help-информации  для каждого поля  (help-информация размещается в
пределах окна),  которая поясняет  назначение  вводимых  в каждое
поле  данных.  Установка  оконной  help-информации осуществляется
путем   обращения   к   функции    field_window.    Каждое   поле
непосредственно  устанавливается  в  шаблоне  путем  обращения  к
функции  establish_field.  Последнее поле  устанавливается в этом
примере как не использующее оконную  help-информацию. Поэтому для
данного  поля  с  помощью  функции   field_help  идентифицируется
специальная  help-функция.   Обратите  внимание,  что  одно  поле
шаблона -  "state"  -  описано  как  имеющее  специальную функцию
контроля   данных,   вводимых  в  него,   на  достоверность.  Эта
специальная функция контроля данных специфицирована в обращении к
функции   field_validate.

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

     Во время  выполнения  программы  обратите  внимание,   каким
образом вводимые символы помещаются в позиции определенных полей,
а также на управление  курсором.  Режим  Вставки/Замены  символов
управляется с    помощью    клавиши        и    индуцируется
соответствующей формой  курсора.  Если  курсор  отображается  как
мерцающий  символ  подчеркивания  в  обычном  своем виде,  то это
означает, что данные вводятся в  режиме  замены  символов.  После
того, как   вы   нажмете   клавишу  ,  курсор  примет  форму
мерцающего прямоугольника, и вы будете продолжать работу в режиме
вставки символов.

     Нажмите клавишу   для получения справочной информации по
каждому из  полей шаблона.  На  рисунке  8.3  изображен  шаблон с
некоторыми  значениями  полей   в   момент   выдачи   по  запросу
пользователя оконной help-информации.  Нажмите  клавишу   для
поля  "State"   и  получите  оконную  help-информацию  для  него.
Обратите  внимание,  что  в  качестве  help-информации  выступает
перечень допустимых значений поля "State". Выберите одно из них и
введите  в  качестве  значения  поля.   На  примере   этого  поля
внимательно  изучите,  как работает  специальная функция контроля
данных,  как  она  использует  функцию  error_message  для выдачи
сообщений  о  вводе  недопустимых  данных.  Рисунок  8.4 наглядно
демонстрирует именно  случай  неправильного ввода  данных  в поле
"State".   Специальная   help-функция  для   поля  даты  ("Date")
демонстрирует,  как можно получить  значение  даты  извне функции
data_entry. В данном примере для чтения текущей даты используется
функция Турбо Си getdate,  после чего текущая дата записывается в
соответствующий буфер поля "Date".

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ C>                          ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬    ¦
¦                             ¦ Enter the address of the   ¦    ¦
¦                             ¦ person who is placing the  ¦    ¦
¦    ЪДДДДДДДДДДДД Order entry¦ order.                     ¦    ¦
¦    ¦                        ¦ [Help] to return           ¦    ¦
¦    ¦                        АДДДДДДДДДДДДДДДДДДДДДВДДДДДДЩ    ¦
¦    ¦     Name:      Clifford Brown                ¦           ¦
¦    ¦     Address:   123 Main Street               ¦           ¦
¦    ¦     City:      Springfield                   ¦           ¦
¦    ¦     State:     VA Zip: 21333                 ¦           ¦
¦    ¦                                              ¦           ¦
¦    ¦     Amount:     23.40                        ¦           ¦
¦    ¦     Date:      26/07/87                      ¦           ¦
¦    ¦                                              ¦           ¦
¦    ¦     Phone:     (202) 321-3211                ¦           ¦
¦    ¦                                              ¦           ¦
¦    АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ           ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рис. 8.3. Образец ввода шаблона ввода данных с данными
          и help-информацией

ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ C>                                                            ¦
¦    ЪДДДДДДДДДДДДДOrder EntryДДДДДДДДДДДДДДДДД¬                ¦
¦    ¦                                         ¦                ¦
¦    ¦     Name:      Clifford Brown           ¦                ¦
¦    ¦     Address:   123 Main Street          ¦                ¦
¦    ¦     City:      Springfield              ¦                ¦
¦    ¦     State:     TX Zip: 21333            ¦                ¦
¦    ¦                                         ¦                ¦
¦    ¦     Amount:     23.40                   ¦                ¦
¦    ¦     Date:      26/07/87                 ¦                ¦
¦    ¦                                         ¦                ¦
¦    ¦     Phone:     (202) 321-3211           ¦                ¦
¦    ¦                                         ¦                ¦
¦    АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ                ¦
¦                                                               ¦
¦                                        ЪДДДДДERROR!ДДДДД¬     ¦
¦                                        ¦                ¦     ¦
¦                                        ¦ Invalid State  ¦     ¦
¦                                        АДДДДДДДДДДДДДДДДЩ     ¦
¦                                                               ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

        Рис. 8.4. Проверка корректности ввода данных

Листинг 8.2: order.c

/*-----------order.c---------*/

#include "twindow.h"
void ordent(void);

main()
{
   load_help("tcprogs.hlp");
   ordent();
}


Листинг 8.3: ordent.c

/*-----------------ordent.c----------------*/

#include 
#include 
#include 
#include "twindow.h"

struct {
    char name [26];
    char addr [26];
    char city [26];
    char state [3];
    char zip [6];
    char amt [6];
    char dt [7];
    char phone [11];
} rcd;

char msk25 []      = "__________________________";
char mskamt []   = "____.____";
char mskdate []  = "___/___/___/";
char mskphone [] = "(___) ____-____";
#define mskst msk25+23
#define mskzip msk25+20

int validate_state(char *, int);
void help_date(char *);

void ordent()
{
   WINDOW *wnd;
   FIELD *fld;

   wnd = establish_window(10, 5, 15, 50);
   set_title(wnd, " Order Entry ");
   set_colors(wnd, ALL, BLUE, AQUA, BRIGHT);
   set_colors(wnd, ACCENT, WHITE, BLACK, DIM);
   display_window(wnd);
   wprompt(wnd, 5, 2, "Name:");
   wprompt(wnd, 5, 3, "Address:");
   wprompt(wnd, 5, 4, "City:");
   wprompt(wnd, 5, 5, "State:");
   wprompt(wnd, 18, 5, "Zip:");
   wprompt(wnd, 5, 10, "Phone:");
   wprompt(wnd, 5, 7, "Amount:");
   wprompt(wnd, 5, 8, "Date:");

   init_template(wnd);
   fld = establish_field(wnd, 15, 2, msk25, rcd.name, 'a');
   field_window(fld,"name    ", 40, 1);
   fld = establish_field(wnd, 15, 3, msk25, rcd.addr, 'a');
   field_window(fld,"address ", 40, 2);
   fld = establish_field(wnd, 15, 4, msk25, rcd.city, 'a');
   field_window(fld, "address ", 40, 3);
   fld = establish_field(wnd, 15, 5, mskst, rcd.state, 'A');
   field_validate(fld, validate_state);
   field_window(fld,"state   ", 40, 4);
   fld = establish_field(wnd, 23, 5, mskzip, rcd.zip, 'Z');
   field_window(fld,"address ", 40, 4);
   fld = establish_field(wnd,15,10,mskphone,rcd.phone, 'N');
   field_window(fld,"phone   ", 40, 9);
   fld = establish_field(wnd, 15, 7, mskamt, rcd.amt, 'C');
   field_window(fld,"amount  ", 40, 8);
   fld = establish_field(wnd, 15, 8, mskdate, rcd.dt, 'D');
   field_help(fld, help_date);
   clear_template(wnd);
   data_entry(wnd);
   delete_window(wnd);
}
/*--------проверка состояния нажатой клавиши----------*/
int validate_state(bf, key)
char *bf;
{
   static char *states [] =
Предыдущая страница Следующая страница
1 ... 17 18 19 20 21 22 23  24 25 26 27 28 29 30 ... 43
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама