Обработка данных с помощью ЯП Pascal

Автор работы: Пользователь скрыл имя, 28 Февраля 2016 в 17:41, курсовая работа

Описание работы

Составить программу, помогающую администратору гостиницы. В гостинице 8 этажей. На первом этаже – административные помещения и ресторан; на втором – восемь двухкомнатных номеров-люксов; на третьем-четвертом – по шестнадцать двухместных однокомнатных номеров на каждом этаже. О каждом номере известна следующая информация: номер свободен, номер забронирован, номер занят. В номере живет один человек (мужчина и женщина). В этом случае известно дополнительная информация : с правом подселения или нет (если номер двухместный). Прибыл в командировку, прибыл в частном порядке. По требованию администратора выдать информация о гостях, приехавших в командировку с указанием номеров, в которых они живут.

Файлы: 1 файл

kursovaya info.doc

— 199.50 Кб (Скачать файл)

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

 

«Белорусский национальный технический университет»

 

 

 

 

 

 

 

 

 

 

КУРСОВАЯ РАБОТА

 

«Обработка данных с помощью ЯП Pascal»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Студента 2 курса 104518 группы 
Хомич В.С.

 

Научный руководитель: 
доцент Иванов И.И.

 

 

 

Минск 2010

 

Задание

 

 Составить программу, помогающую администратору гостиницы. В гостинице 8 этажей. На первом этаже – административные помещения и ресторан; на втором – восемь двухкомнатных номеров-люксов; на третьем-четвертом – по шестнадцать двухместных однокомнатных номеров на каждом этаже. О каждом номере известна следующая информация: номер свободен, номер забронирован, номер занят. В номере живет один человек (мужчина и женщина). В этом случае известно дополнительная информация : с правом подселения или нет (если номер двухместный). Прибыл в командировку, прибыл в частном порядке. По требованию администратора выдать информация о гостях, приехавших в командировку с указанием номеров, в которых они живут.

Примечание: номера в гостинице имеют три цифры. Самая старшая (левая) цифра – номер этажа, оставшиеся две – порядковый номер на этаже.

 

 

 

 

Содержание

 

  1. Введение
  2. Алгоритм решения
  3. Теоретическая часть
  4. Описание основных процедур и функций
  5. Текст программы
  6. Пример работы программы
  7. Блок-схема программы
  8. Список используемой литературы

 

 

 

Введение

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

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

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

 

 

Алгоритм решения

 

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

 

  • Теоретическая часть

  •  

    Основные процедуры и функции для работы с файлами

     

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

    Assign(<файловая_переменная>, <имя_дискового_файла>)

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

    Пример процедуры Assign в Паскале

    Assign (chf, 'G:\Home\ Student\ Lang\ Pascal\ primer.dat');

    Если путь не указан, то программа будет искать файл в своем рабочем каталоге и по указанным путям в autoexec.bat.

    Вместо имени дискового файла можно указать имя логического устройства, каждое из которых имеет стандартное имя:

    CON – консоль, т.е. клавиатура-дисплей;

    PRN – принтер. Если к компьютеру  подключено несколько принтеров, доступ к ним осуществляется  по именам LPT1, LPT2, LPT3.

     

    Не разрешается связывать с одним физическим файлом более одной файловой переменной.

     

    2.После окончания работы с  файлами на Паскале, они должны  быть закрыты.

    Close(<список файловых  переменных>);

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

    Работа с файлами заключается, в основном, в записи элементов в файл и считывании их из файла. Для удобства описания этих процедур введем понятие указателя, который определяет позицию доступа, т.е. ту позицию файла, которая доступна для чтения (в режиме чтения), либо для записи (в режиме записи). Позиция файла, следующая за последней компонентой файла (или первая позиция пустого файла) помечается специальным маркером, который отличается от любых компонент файла. Благодаря этому маркеру определяется конец файла.

     

    3.Подготовка к записи в файл  Паскаля

    Rewrite(<имя_ф_переменной>);

    Процедура Rewrite(f) (где f – имя файловой переменной) устанавливает файл с именем f в начальное состояние режима записи, в результате чего указатель устанавливается на первую позицию файла. Если ранее в этот файл были записаны какие-либо элементы, то они становятся недоступными.

     

    4.Запись в файл Паскаля

    Write(<имя_ф_переменной>, <список  записи>);

     

    При выполнении процедуры write(f, x) в ту позицию, на которую показывает указатель, записывается очередная компонента, после чего указатель смещается на следующую позицию. Естественно, тип выражения х должен совпадать с типом компонент файла.

     

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

     

    5.Подготовка файла к чтению  Паскаля

    Reset(<имя_ф_переменной>);

    Эта процедура ищет на диске уже существующий файл и переводит его в режим чтения, устанавливая указатель на первую позицию файла.

     

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

     

    6.Чтение из файла в Паскале

    Read(<имя_ф_переменной>,<список  переменных>);

    Для типизированных файлов при выполнении процедуры read() последовательно считывается, начиная с текущей позиции указателя, число компонент файла, соответствующее числу переменных в списке, а указатель смещается на это число позиций.

     

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

     

    7.Функция определения достижения  конца файла в Паскале

    Eof(<имя_ф_переменной>);

    Название этой функции является сложносокращенным словом от end of file. Значение этой функции имеет значение true, если конец файла уже достигнут, т.е. указатель стоит на позиции, следующей за последней компонентой файла. В противном случае значение функции – false.

     

    8.Изменение имени файла в Паскале

    Rename(<имя_ф_переменной>, <новое_имя_файла>);

     

    Здесь новое_ имя_ файла – строковое выражение, содержащее новое имя файла, возможно с указанием пути доступа к нему.

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

     

    9.Уничтожение файла в Паскале

    Erase(<имя_ф_переменной>);

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

    10.Уничтожение части файла от  текущей позиции указателя до  конца в Паскале

    Truncate(<имя_ф_переменной>);

    11.Файл Паскаля может быть  открыт для добавления записей  в конец файла

    Append(<имя_ф_переменной>);

    Типизированные файлы Паскаля. Длина любого компонента типизированного файла строго постоянна, т.к. тип компонент определяется при описании, а, следовательно, определяется объем памяти, отводимый под каждую компоненту. Это дает возможность организовать прямой доступ к каждой компоненте (т.е. доступ по порядковому номеру).

     

    Перед первым обращением к процедурам ввода/вывода указатель файла стоит в его начале и указывает на его первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Переменные и выражения в списках ввода и вывода в процедурах read() и write() должны иметь тот же тип, что и компоненты файла Паскаля. Если этих переменных или выражений в списке несколько, то указатель будет смещаться после каждой операции обмена данными на соответствующее число позиций.

    Для облегчения перемещения указателя по файлу и доступа к компонентам типизированного файла существуют специальные процедуры и функции:

    fileSize(<имя_ф_переменной>) – функция Паскаля, определяющая число компонентов в файле;

     

    filePos(<имя_ф_переменной>) – функция Паскаля, значением которой является текущая позиция указателя;

     

    seek(<имя_ф_переменной>,n) – процедура Паскаля, смещающая указатель на компоненту файла с номером n. Так, процедура seek(<имя_ф_переменной>,0) установит указатель в начало файла, а процедура seek(<имя_ф_переменной>, FileSize(<имя_ф_переменной>)) установит указатель на признак конца файла.

     

     

     

     

     

     

     

    Описание основных процедур и функций

     

    function Menu:integer;

    // вывод основного меню программы с возможностью выбора пунктов. В зависимости от выбранного пункта возвращается значение численно равное номеру выбранного пункта

     

    procedure InitHotelRooms(outFile: string);

    //процедура создает исходный файл с квартирами соответствуя требованиям по структуре определенной гостиницы. При этом новый файл имеет имя outFile;

     

    procedure InputResidents(outFile: string);

    // основная процедура программы. Она выполняет и действия по вводу данных, и редактированию и просто просмотру информации определенного номера. Входным параметром является имя конечного файла OutFile.

     

    function Search(inFile: string):integer;

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

     

     

     

     

     

     

    ТЕКСТ ПРОГРАММЫ

     

    uses Crt;

     

    type man = record

                sex:string;{male, female}

                number:byte;

                make_another: boolean; {подселение}

                status: string;{free, mission}

               end;

     

        flat = record

                floor: byte;

                number: byte;

                rooms: byte;

                style: string; {luks, normal}

                status: string; {free, busy, reserved}

                resident: man;

               end;

     

     

    function Menu:integer;

    var i:integer;

         ch:char;

    begin

    clrscr;

    Writeln('┌─┬─────────МЕНЮ────────────┐');

    Writeln('│ │Создать новую базу       │');

     Writeln('│ │Загрузить базу           │');

     Writeln('│ │Работа с базой           │');

     Writeln('│ │Выполнить запрос на поиск│');

     Writeln('│ │Выход из программы       │');

       Write('└─┴─────────────────────────┘');

     

     i:=2;

     GoToXY(2,i);Write('*');

     repeat

    ch:=readkey;

    case ch of

          #80: begin

               GoToXY(2,i);Write(' ');

               if (i>=6) then i:=2 else inc(i);

               GoToXY(2,i);Write('*');

              end;

          #72: begin

               GoToXY(2,i);Write(' ');

               if (i<=2) then i:=6 else dec(i);

               GoToXY(2,i);Write('*');

               end;

    end;

    GotoXY(i,2);

    until ch=#13;

    Menu:=i;

    clrscr;

    end;

     

    procedure InitHotelRooms(outFile: string);

    var DB: file of flat;

          tmpFlat: flat;

          i,j: integer;

     

      begin

       assign(DB, outFile); rewrite(DB);

     

       {+инициализируем второй этаж}

       for i:=1 to 8 do

        begin

         with tmpFlat do

          begin

           floor:= 2;

           number:= i;

           rooms:= 2;

           style:= 'luks';

           status:= 'free';

          end;

          write(DB, tmpFlat);

        end;

       {-инициализируем  второй этаж}

     

       {+инициализируем  третий-четвертый этажи}

       for j:=3 to 4 do

        begin

         for i:=1 to 8 do

          begin

           with tmpFlat do

            begin

             floor:= j;

             number:= i;

             rooms:= 2;

             style:= 'normal';

             status:= 'free';

     

             with resident do

              begin

               sex:='';{male, female}

               number:=0;

               make_another:=true; {подселение}

               status:= '';

              end;

     

            end;

           write(DB, tmpFlat);

          end;

        end;

       {+инициализируем  третий-четвертый этажи}

     

       {+инициализируем 5-8 этажи}

       for j:=5 to 8 do

        begin

         for i:=1 to 16 do

          begin

           with tmpFlat do

            begin

             floor:= j;

             number:= i;

             rooms:= 1;

             style:= 'normal';

             status:= 'free';

     

             with resident do

              begin

               sex:='';{male, female}

               number:=0;

               make_another:=true; {подселение}

               status:= '';

              end;

     

            end;

    Информация о работе Обработка данных с помощью ЯП Pascal