- 4 - 1. ЛАБОРАТОРНАЯ РАБОТА "ОБРАБОТКА ОДНОГО ФАЙЛА" 1.1. Цель работы Ознакомиться с операторами обработки файлов записей: отк- рытия (RESET, REWRITE), закрытия (CLOSE), ввода данных (READ), вывода данных (WRITE), с функцией опреления конца файла (EOF). Изучить типичные процедуры обработки одного файла: создание, копирование, распечатка, корректировка, рассмотреть возможные ошибки и реакцию на них, спроектировать и отладить программу. Ознакомиться с вариантами программ, обрабатывающих многоуров- невое меню. 1.2. Методические указания к лабораторной работе 1.2.1. Структура программ обработки меню Использование меню в программировании делает программное обеспечение более удобным и приятным в работе, требует меньшей квалификации от пользователей, позволяет сравнительно просто объединять отдельные модули в пакеты программ. Большинство современных программных пакетов имеет развитые средства обра- ботки меню. Типичная программа обработки меню выполняет следующие действия: выдача меню на экран дисплея; ввод выбранного режима меню; выполнение программных действий, предусмотренных для данного режима (пункта) меню; возврат на выдачу меню или за- вершение программы. Меню состоит из отдельных пунктов, режимов, которые имеют соответствующие наименования или сообщения. Пункты меню могут быть пронумерованы и располагаться как по горизонтали, так и по вертикали. Выбор пункта меню может осуществляться путем ввода номера пункта или путем выделения пункта меню курсором или цветом. При выборе определенного пункта выполняется, как правило, соответствующая процедура. Если меню содержит несколько вло- женных уровней, то процедура обработки меню низшего уровня (подменю) строится по той же структуре, что и главная програм- ма. После выполнения процедуры обычно вновь выдается меню это- го же уровня и обработка повторяется. Для выхода из меню дан- ного уровня и перехода в меню высшего уровня или завершения программы предусматривается ввод номера пункта 0 или нажатие клавиши ESC. При попытке ввести номер пункта, отсутствующий в меню, выдается сообщение об ошибке. При выборе пункта меню клавишами управления курсором может быть организовано цикли- ческое движение по меню: при прямом движении по меню за последним пунктом следует первый, а при обратном движении за первым пунктом следует последний. 1.2.2. Обработка одного последовательного файла Последовательные файлы позволяют хранить и обрабатывать большие объемы информации, ограниченные только объемом машин- - 5 - ного носителя данных. В процессе создания файла, записи инфор- мации из оперативной памяти на внешний носитель соответствую- щий файл является выходным для программы. Предварительно соз- данный файл, записи которого вводятся, читаются с внешнего носителя в оперативную память, является для программы входным. Если файл создается только на время работы программы, то он называется внутренним и стирается после выполнения программы. В противном случае файл называется внешним и может существо- вать вне данной программы. В Паскале предусмотрены операторы для открытия файлов, доступа к отдельным записям файлов и закрытия файлов. Входные файлы открываются для чтения (устанавливаются на начало) с по- мощью оператора (процедуры) RESET (установить в исходное состояние). Если на носителе отсутствует входной файл, связан- ный с соответствующей файловой переменной в программе, то при открытии такого файла как входного выдается сообщение об ошиб- ке и, как правило, программа заканчивается аварийно. Для су- ществующего файла оператор RESET устанавливает указатель на первую запись файла. Чтение (ввод очередной записи в оператив- ную память) производится с помощью оператора READ (читать). Если прочитана последняя запись файла, то возникает ситуация End Of File (конец файла), которая может быть обнаружена с по- мощью логической функции EOF. После того, как функция EOF для какого-либо файла приняла значение "истинно", читать данный файл (выполнять оператор READ) нельзя. Закрытие файла осущест- вляется с помощью оператора CLOSE (закрыть), в процедуре зак- рытия освобождается оперативная память, связанная с данным файлом. Выходные файлы открываются с помощью оператора REWRITE (перезаписать). Если на носителе существовал файл с именем, связанный с открываемой в программе файловой переменной, то он стирается, иначе создается новый файл. В любом случае выходной файл записывается только с самого начала. В выходной файл за- писи из оперативной памяти выводятся с помощью оператора WRITE (писать). Закрытие файла осуществляется с помощью оператора CLOSE (закрыть), в процедуре закрытия записывается метка конца файла на машинный носитель и освобождается оперативная память, связанная с данным файлом. Наиболее типичные процедуры обработки одного последова- тельного файла следующие: создание, сортировка, копирование, просмотр (распечатка). В большинстве случаев для обеспечения циклической обработки записей целесообразно использовать опе- ратор цикла с предусловием WHILE. Процедура создания обычно предусматривает, пока не конец данных, выполнять их ввод с клавиатуры и запись в создаваемый (выходной файл). Сортировка предусматривает упорядочение записей входного файла по возрастанию или убыванию некоторых полей записи, на- зываемых ключевыми и запись их в выходной отсортированный файл. Для сортировки файла требуются внутренние рабочие файлы. Обычно в операционных системах предусматриваются системные программы сортировки. Копирование файла заключается в переписи всех записей - 6 - входного файла (пока не конец файла) в выходной файл без изме- нения структуры записей. Выборочное копирование предусматрива- ет перепись только тех записей, которые удовлетворяют некото- рому условию (фильтру). В частном случае выходной файл может быть пустым, если не нашлось ни одной требуемой записи. Просмотр (распечатка) файла выполняется аналогично проце- дуре копирования, только в качестве выходного устройства используется либо экран дисплея, либо печатающее устройство, а выводимые записи обычно форматируются для удобства пользовате- ля. Выводимые записи могут снабжаться заголовком, выдаваться по листам, сопровождаться итогами, т.е. в этом случае це- лесообразно использовать все требования к программам печати машинограмм. При получении итогов даже по одному ключу одного оператора цикла недостаточно, поэтому рекомендуется использо- вать при печати машинограмм процедуру (подпрограмму) чтения, рассматриваемую в совместной обработке двух файлов. Корректировка файла заключается в изменении содержимого файла: количества записей или содержимого полей данных. Обычно предусматриваются следующие варианты корректировки: аннулиро- вание существующей записи, ввод новой записи, если не сущест- вовало записи с таким же значением ключа, изменение отдельных полей существующей записи. Часто все изменения записываются в отдельный файл изменений и корректировка выполняется програм- мой совместной обработки двух файлов. В данной лабораторной работе предусматривается корректировка одной отдельной записи, вводимой с клавиатуры, т.е. выполняется обработка одного вход- ного файла и получение выходного откорректированного файла. Рекомендуется использовать для временного хранения данных ра- бочий файл, но перепись не выполнять, если корректировка не может быть выполнена из-за ошибки. 1.3. Порядок выполнения работы 1.3.1. Ознакомиться с программами обработки меню и типич- ными процедурами обработки одного файла. 1.3.2. Написать, отладить программу и получить контроль- ный пример, проверяющий все варианты обработки. 1.3.3. В отчет по лабораторной работе включается: постановка задачи с описанием структуры записей файла; иерархическая схема программы со спецификацией; схема программы по ГОСТ 19.701-90 или структурограмма; текст программы; контрольный пример. 1.4. Задания 1.4.1. Разработать программу, обрабатывающее главное меню со следующими режимами: 1. Создание 2. Корректировка 3. Просмотр 0. Выход - 7 - 1.4.2. В режиме "Создание" предусмотреть проверку отсор- тированности входных записей по двум первым ключевым полям, в лучае нарушения сортировки выдается сообщение об ошибке и за- пись отвергается. Такую запись теперь можно будет ввести вновь в режиме "Корректировка". Цикл создания файла заканчивать по признаку конца. 1.4.3. В режиме "Корректировка" выдается меню второго уровня: 1. Удаление 2. Ввод вновь 3. Изменение 0. Выход Вводимые вновь записи не должны нарушать отсортирован- ности файла, . При невозможности выполнить корректировку выпол- нить соответствующее сообщение "* не найдено *" или "* уже есть *". 1.4.4. В режиме "Просмотр" выдается меню второго уровня: 1. Полный просмотр 2. Просмотр по выбору 0. Выход При выборочном просмотре указывается, какие поля исполь- зовать для выбора и требуемые интервалы значений (минимальное и максимальное значения). 1.4.5. Название файла и структура записей: 1). Остаток денег по вкладам: банк, номер вклада, вклад- чик, остаток денег на вкладе. Итоги: количество вкладов и сум- ма денежных средств. 2). Квартплата: адрес, месяц оплаты, оплачено, пени. Ито- ги: оплачено и пени. 3). Наличие вагонов: пункт прибытия, номер поезда, коли- чество вагонов. Итоги: количество поездов и вагонов. 4). Участники соревнований: страна, фамилия спортсмена, номер, возраст в годах. Итоги: количество человек и средний возраст. 5). Члены сборной команды: специализация, фамилия, дата рождения, масса. Итоги: количество человек и средняя масса. 6). Капитал фирмы: название фирмы, код акционера, адрес акционера, сумма акций. Итоги: количество акционеров и стои- мость акций. 7). Наличие товаров в магазинах: наименование магазина, наименование товара, цена, количество. Итоги: стоимость товара. 8). Количество жителей: страна, национальность, количест- во жителей. Итоги: количество национальностей и жителей. 9). Вырабатываемая электроэнергия: регион, название электростанции, тип электростанции, мощность. Итоги: количест- во электростанций и общая мощность. 10). Количество проданных билетов: пункт прибытия, номер поезда, тип вагона, количество билетов. - 8 - 11). Наличие детей: группа, фамилия, средний балл, коли- чество детей. Итоги: количество студентов и детей. 12). Количество сданных экзаменов: факультет, фамилия, средний балл, количество сданных предметов. Итоги: средний балл и среднее количество сданных экзаменов. 13). Состояние строительства: район, наименование объек- та, процент готовности, количество работающих. Итоги: коли- чество объектов и работающих. 14). Состояние успеваемости: район, учебное заведение, количество неуспевающих, общее количество учащихся. Итоги: ко- личество неуспевающих и количество учащихся. 15). Наличие вагонов в депо: наименование депо, путь, грузоподъемность, количество вагонов. Итоги: количество ваго- нов и общая грузоподъемность. 1.5. Контрольные вопросы 1. Программы обработки меню. 2. Использование процедур при обработке меню. 3. Многоуровневые меню. 4. Типичные процедуры обработки одного последовательного файла. 5. Сортировка файлов. 6. Корректировка файлов, возможные ошибки. 7. Обработка группы записей с одинаковым значением ключа. 8. Виды фильтров при выборочной обработке.