Поиск

Упражнение: создание отчета

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

Для выполнения этого упражнения нам понадобится набор записей о гипотетиче-ских сотрудниках некой компании, в который входит: фамилия и имя сотрудника, его табельный номер, количество отработанных им часов и почасовая тарифная ставка. Программа должна на основе этих данных составить отчет по зарплате.

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

Итак, запустите свой любимый текстовый редактор, наберите в нем программу, приведенную в листинге 9.1, и сохраните ее на диске в файле с именем Employee. Номера строк вводить не нужно. После сохранения программы сделайте файл выполняемым, как было описано на 1-м занятии, "Начало работы с Perl".

После выполнения подготовительных операций запустите программу, набрав в командной строке

perl Employee

Результаты работы программы приведены в листинге 9.2.

Проведем анализ программы.

  • Строка 1. В этой строке указывается путь к интерпретатору (измените его в соответствии с конфигурацией вашей системы) и ключ -w. Всегда включайте режим вывода предупреждений!
  • Строка 3. Директива use strict указывает, что все переменные должны быть явно объявлены в программе с помошью оператора и строки должны быть заключены в кавычки.
  • Строки 5-11. Список сотрудников вместе с исходными данными присваивается массиву @employees. Каждый элемент массива имеет формат: фамилия и имя сотрудника, его табельный номер, величина часовой тарифной ставки и количество отработанных часов в неделю.
  • Строки 23—30. Элементы массива @employees сортируются сначала по фамилии сотрудника, а затем по имени.
  • Строка 24. Первый сортируемый элемент ($а) разбивается на части по полям. При этом фамилия присваивается переменной $L1, а имя— $F1. Обе эти переменные описаны в блоке как приватные с помощью оператора mу.
  • Строка 25. Те же действия выполняются над вторым сортируемым элементом ($Ь). При этом фамилия присваивается переменной $L2, а имя — $F2.
  • Строки 26~29. Имена сравниваются в алфавитном порядке. Синтаксис оператора sort был рассмотрен на 4-м занятии, "Укладка строительных блоков: списки и массивы".
  • Строки 32—34. В цикле выполняется перебор элементов отсортированного массива @employees. Каждый элемент передается функции print_emp().
  • Строки 13—21. Функция print_emp() выполняет форматирование и печать одной строки отчета.
  • Строки 14—15. Переданная функции print_emp() строка находится в переменной $_[0]. Она разбивается на отдельные поля, и полученные значения для удобства обращения присваиваются переменным $last, $first и т.д., которые являются приватными для функции print emp().
  • Строка 17. Фамилия и имя сотрудника объединяются в одну строку с помощью функции sprintf. В результате полученную строку можно будет легко поместить в поле фиксированной ширины и выровнять по левому краю.
  • Строки 18-20. Строка отчета форматируется и выводится на печать. Для получения величины зарплаты количество отработанных часов (переменная $tiroe) нужно умножить на почасовую тарифную ставку (переменная $hourly). Для выполнения правильного округления к двум значащим цифрам к произведению прибавляется значение .005.