Cтраница 2
Предположим, что имеется наряд на работу, который может быть выполнен сотрудником из файла сотрудников. Задача состоит в следующем. Заказ считывается из файла AVAILABLE-JOB-FILE. [16]
Для построения сетевого окружения библиотеки используются два сервера. Основные сервисы, обеспечивающие работу библиотеки в ETUNET, предоставляются сервером № 1, работающим под управлением Novell Netware 5.0. Во-первых, данный сервер является файл-сервером и содержит файлы сотрудников библиотеки. Более подробно об организации системы управления приложениями в сетевом окружении библиотеки СПбГЭТУ ЛЭТИ будет сказано далее. [17]
Предположим, что рассматривается пример программы обработки наряда ( заказа) на работу, которая может быть выполнена одним из сотрудников, перечисленных в файле сотрудников, сформированном в предыдущих примерах. Первоначально предполагается, что среди данных о сотруднике имеется восьмизначный номер специальности ( OLD-JOB-SKILL), по которому могут быть выбраны сотрудники, способные выполнить заданную работу. Просмотрим файл сотрудников и отыщем всех тех из них, которые имеют соответствующий номер специальности. [18]
Каждая программа написана самостоятельно. Но все пять программ связаны между собой, и одна из. Связующим звеном этих программ является гипотетический файл сотрудников, составленный из сокращенных записей, содержащих информацию о служащих. Оператор DISPLAY ( ВЫДАТЬ) весьма полезен при отладке программ и дает возможность проверить правильность промежуточных результатов. Для единственного другого оператора вывода, оператора WRITE, требуется использозание статьи-описания-файла, в которой указывается спецификация формата записи и обозначение физического устройства. Оператор DISPLAY не требует описаний такого рода и намного проще в использовании. Кроме того, после отладки программы, операторы DISPLAY могут быть удалены из раздела процедур. После этого исходная программа может быть откомпилирована с целью получения окончательной рабочей программы. [19]
Этот пример программы дает возможность продемонстрировать возможности арифметических операторов и показывает, как можно повторно просматривать файл. Это значение является точкой отсчета при выборе сотрудника, который не был повышен в должности за последние шесть месяцев. Затем внутри основного цикла считываются записи файла сотрудников. [20]
В примере программы, приводимой в данном разделе, файл изменений из предыдущего раздела считывается и используется в качестве исходной информации для изменения файла. Расплачиваясь за ограничения, свойственные последовательным файлам и описанные в гл. Такой подход приводит к копированию всего файла сотрудников. Даже в том случае, когда требуется изменить только одну запись, файл сотрудников должен быть целиком считан и скопирован на новый файл. По этой причине целесообразно накапливать достаточное количество записей в файле изменений, чтобы работа вычислительной машины была оправдана. [21]
В этом примере порядок следования записей в файле сотрудников может быть произвольно изменен по сравнению с предыдущими разделами. В целях упрощения рассматриваемой программы записи в файле сотрудников расположим по возрастанию номеров специальностей. Таким образом, поиск сотрудника с соответствующей специальностью заключается в последовательном просмотре файла до тех пор, пока либо не будет обнаружена соответствующая запись, либо номер специальности в файле сотрудников не станет превышать номер специальности, требуемой для выполнения работы. [22]
Файл изменений и файл сотрудников упорядочены по одному и тому же параметру - идентификационному номеру сотрудника. Это делает возможным создание новой копии и выполнение процесса внесения изменений. ID-номер используется либо для установления соответствия записей из двух файлов, либо для идентификации новой записи, порождаемой по очередной записи из файла изменений, аналога которой не оказалось в файле сотрудников. [23]
Файл сотрудников ( OLD-PERSONNEL-FILE) представляет собой набор записей, формат которых был описан в предыдущем разделе. Каждая запись содержит сведения об отдельном сотруднике. В этих записях описывается лишь небольшая доля той информации, которую можно было бы в них хранить. Файл сотрудников должен корректироваться при появлении новых сотрудников или при уходе старых, или при изменении значений каких-то данных. В результате корректировки могут меняться отдельные поля, а иногда и целые записи. [24]
Затем эта же запись может быть записана в файл - В ( FILE-BRAVO), если годовой оклад сотрудника ( OLD-ANNUAL-SALARY) меньше 5500 долларов. В конечном итоге в файле - А и файле - В оказываются различные подмножества, состоящие из записей файла-сотрудников. Обработка очередной записи заканчивается рядом операций, с помощью которых увеличивается счетчик числа считываемых записей ( TOTAL-EMPLOYEES) и к текущим сумме возраста ( TOTAL-AGE) и сумме окладов ( TOTAL-SALARY) прибавляются соответственно возраст ( OLD-AGE) и оклад ( OLD-ANNUAL-SALARY) из очередной записи. Перед началом цикла чтения файла сотрудников в эти переменные были установлены в качестве начальных нулевые значения. [25]
Первой записи из файла изменений не соответствует ни одна запись в файле сотрудников. В этом случае происходит добавление новой записи, соответствующей новому сотруднику. ID-номера следующих двух записей файла изменений имеются в обоих файлах. В этом случае могут быть либо удаления, либо изменения записей файла сотрудников. Последняя запись в файле изменений с ID-номером, равным 0000395995, порождает еще одну новую запись в файле сотрудников. [26]
В примере программы, приводимой в данном разделе, файл изменений из предыдущего раздела считывается и используется в качестве исходной информации для изменения файла. Расплачиваясь за ограничения, свойственные последовательным файлам и описанные в гл. Такой подход приводит к копированию всего файла сотрудников. Даже в том случае, когда требуется изменить только одну запись, файл сотрудников должен быть целиком считан и скопирован на новый файл. По этой причине целесообразно накапливать достаточное количество записей в файле изменений, чтобы работа вычислительной машины была оправдана. [27]
Первой записи из файла изменений не соответствует ни одна запись в файле сотрудников. В этом случае происходит добавление новой записи, соответствующей новому сотруднику. ID-номера следующих двух записей файла изменений имеются в обоих файлах. В этом случае могут быть либо удаления, либо изменения записей файла сотрудников. Последняя запись в файле изменений с ID-номером, равным 0000395995, порождает еще одну новую запись в файле сотрудников. [28]
Заметим, что в задаче требуется точное совпадение с заданными значениями, а не выполнение неравенств, например в возрасте от 20 до 45 лет и не более чем с пятью иждивенцами. Программист должен четко представлять специфику задачи и скрупулезно учитывать ее при написании программы. Нельзя решать некорректно поставленную задачу, даже если ее правильно запрограммировать. Основные этапы решения рассматриваемой задачи изображены на блок-схеме, представленной на рис. 5.5. На первом шаге обработки считывается карта с запросом на поиск из файла PATTERN-FILE. В данной программе этот файл содержит только одну карту, и только на один запрос дается ответ. Однако требуется внести лишь незначительные изменения по организации цикла с возвратом к параграфу READ-PATTERN-FILE, чтобы программа могла обрабатывать несколько запросов. Формат считываемой записи в точности соответствует формату записей, хранящихся в файле сотрудников. Метод решения заключается в проверке на сравнение полей записи-образца с соответствующими полями последовательно выбираемых записей из файла сотрудников. Если поле данных в записи-запросе заполнено пробелами, то проверка не делается. Если же в нем есть какая-либо информация, то оно проверяется на равенство с соответствующим данным записи-сотрудника. Если будет хотя бы одно несовпадение, то считывается следующая запись-сотрудника. Все непустые данные записи-запроса должны совпасть с соответствующими данными записи-сотрудника перед тем, как последняя будет распечатана. Процедура, реализованная в приведенной программе, не относится к числу наиболее эффективных методов просмотра файла или выполнения операций поиска информации. [29]
Заметим, что в задаче требуется точное совпадение с заданными значениями, а не выполнение неравенств, например в возрасте от 20 до 45 лет и не более чем с пятью иждивенцами. Программист должен четко представлять специфику задачи и скрупулезно учитывать ее при написании программы. Нельзя решать некорректно поставленную задачу, даже если ее правильно запрограммировать. Основные этапы решения рассматриваемой задачи изображены на блок-схеме, представленной на рис. 5.5. На первом шаге обработки считывается карта с запросом на поиск из файла PATTERN-FILE. В данной программе этот файл содержит только одну карту, и только на один запрос дается ответ. Однако требуется внести лишь незначительные изменения по организации цикла с возвратом к параграфу READ-PATTERN-FILE, чтобы программа могла обрабатывать несколько запросов. Формат считываемой записи в точности соответствует формату записей, хранящихся в файле сотрудников. Метод решения заключается в проверке на сравнение полей записи-образца с соответствующими полями последовательно выбираемых записей из файла сотрудников. Если поле данных в записи-запросе заполнено пробелами, то проверка не делается. Если же в нем есть какая-либо информация, то оно проверяется на равенство с соответствующим данным записи-сотрудника. Если будет хотя бы одно несовпадение, то считывается следующая запись-сотрудника. Все непустые данные записи-запроса должны совпасть с соответствующими данными записи-сотрудника перед тем, как последняя будет распечатана. Процедура, реализованная в приведенной программе, не относится к числу наиболее эффективных методов просмотра файла или выполнения операций поиска информации. [30]