Работа с файлами в среде Паскаль

Автор работы: Пользователь скрыл имя, 20 Марта 2012 в 22:50, курсовая работа

Краткое описание

Введение файлового типа в язык ПАСКАЛЬ вызвано необходимостью обеспечить возможность работы с периферийными (внешними) устройствами ЭВМ, предназначенными для ввода, вывода и хранения данных.
Файл определяет упорядоченную совокупность произвольного числа однотипных компонент.

Содержание работы

I. Теоретическая часть 3
1.1. Основные процедуры для работы с файлами 3
1.2. Текстовые файлы 5
1.3. Типизированные файлы 8
II. Практическая часть 10

Содержимое работы - 1 файл

курсовик.doc

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

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

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

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

Reset, Rewrite, Read, Write, Close.

Для типизированных файлов обе процедуры Reset и ReWrite устанавливают режим «чтение/запись», т.е. независимо от выбора процедуры открытия, файл открывается и для чтения, и для записи. Если процедурой ReWrite открывается ранее существовавший файл, то он стирается.

Для ввода - вывода используются процедуры:

Read(f,X);

Write(f,X);

Где f - имя логического файла, Х - либо переменная, либо массив, либо строка, либо множество, либо запись с таким же описанием, какое имеет компонента файла.

Выполнение процедуры Read(f,X) состоит в чтении с внешнего устройства одной компоненты файла и запись ее в X. Повторное применение процедуры Read(f,X) обеспечит чтение следующей компоненты файла и запись ее в X.

Выполнение процедуры Write(f,X) состоит в записи X на внешнее устройство как одной компоненты. Повторное применение этой процедуры обеспечит запись X как следующей компоненты файла.

Для работы с компонентными файлами введена расширенная форма операторов ввода и вывода:

Read(f,X1,X2,...XN)

Write(f,X1,X2,...XN)

Здесь f - компонентный файл, а переменные Х1, Х2,...ХN должны иметь тот-же тип, что и объявленный тип компонент файла f.

 

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

 

FileSize

FileSize (var f): LongInt возвращает число записей компонентов в открытом файле f.

 

FilePos

FilePos (var f): LongInt  возвращает номер записи компонента в открытом файле f, предшествующий тому, который будет считан или записан последующей операцией ввода-вывода.

 

Seek

Seek (var f; N: LongInt) устанавливает текущим компонентом в открытом файле f компонент с номером N, отсчитанным от нулевого (доступ к первой записи Seek(f, 0)). Назначенный компонент будет считан или записан последующей операцией ввода-вывода.

 


                                         Практическая часть.

 

 

Описать структуру с именем WORKER, содержащую следующие поля:

      NAME – фамилия и инициалы работника;

      POST – название занимаемой должности;

      YEAR – год поступления на работу;

      ZARPL – массив ежемесячных зарплат за год

 

 

1. написать программу, выполняющую следующие действия:

      Ввод с клавиатуры данных в массив TABL, состоящих из 10 структур типа WORKER.

      Запись о сотруднике с максимальной среднемесячной зарплатой сдвинуть в конец массива

      Сортирует записи в порядке возрастания среднемесячной зарплаты

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

      Если таких работников нет, то вывести соответствующее сообщение

 

 

2. Создать типизированный файл TABL, состоящий из 10 структур типа WORKER.

      отсортировать записи в файле в порядке возрастания среднемесячных зарплат

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

      Если таких работников нет, вывести соответствующее сообщение.

      Запись о сотруднике с максимальной среднемесячной зарплатой сдвинуть в конец файла.

 

 

 

 

3.  Создать текстовый файл TABL, состоящий из 10 структур типа WORKER.

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

      Если таких работников нет, вывести соответствующее сообщение.

      Ввести в файл записи о поступивших на работу в конец файла ( любое количество).

 

 

 

 

 

 

1. написать программу, выполняющую следующие действия:

      Ввод с клавиатуры данных в массив TABL, состоящих из 10 структур типа WORKER.

      Запись о сотруднике с максимальной среднемесячной зарплатой сдвинуть в конец массива

      Сортирует записи в порядке возрастания среднемесячной зарплаты

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

      Если таких работников нет, то вывести соответствующее сообщение

 

program ex1;

uses crt;

const n=10; m=12;

type

worker=record

  name: string [10];

  post: string [15];

  year: integer;

  zrpl: array [1..m] of integer;

end;

var

z: worker;

w: array [1..n] of worker;

b: array [1..n] of integer;      {massiv srednemes zarpl}

i, j, y, Fa, max, nmax, F, x, q: integer;

function sr ( T:worker): integer;

var

s: integer;

ii:integer;

begin

s:= 0;

for ii:= 1 to m do

s:= s+ T.zrpl[ii];

sr:= s div m; {writeln ('sr=', sr:2);}   end;

begin

clrscr;   textcolor (white);

for i:= 1 to n do begin

writeln ('vvedite familii');

readln ( w[i].name);

writeln ('vvedite dolgnost');

readln (w[i].post);

writeln ('vvedite god postypleniya');

readln (w[i].year);

writeln ('vvedite v poslednee pole  ', m, ' zarplat');

for j:= 1 to m do

readln ( w[i].zrpl[j]);  {  b[i]:=0;}

                                 b[i]:=sr(w[i]);

                    writeln (' srednyaya', b[i]:2);

                                 readln;

end;

max:=b[1];

nmax:=1;

for i:=2 to n do

    if b[i]>max then begin

    max:=b[i];

    nmax:=i;

    end;

writeln ('max=', nmax);

q:=n-nmax;           {kol-vo sdvigov ravno}

for i := 1 to q do

begin

              x:=b[n];           

              z:=w[n];

                  for j:= n downto 2 do

begin

                  b[j]:=b[j-1];

                  w[j]:=w[j-1];

end;

   

 

    b[1]:= x;

    w[1]:=z;

end;

   for i:=1 to n do

   write (w[i].name,'   ', b[i]:2, '   ');

   writeln;

for i:= 1 to n do 

begin

for j:= 1 to n-1 do

begin

if b[j] > b[j+1] then

begin

y:= b[j];

b[j]:= b[j+1];

b[j+1]:=y;

z:= w[j];

w[j]:= w[j+1];

w[j+1]:= z;

end;

end;

end;

textcolor (blue);

writeln ( ' spisok sotrydnikov po vozr sr zarpl' );

for i:= 1 to n do

writeln ( w[i].name,'   ', b[i]);

Fa:=0;

for i:= 1 to n do begin

F:=0;

for j:= 1 to m-1 do

if w[i].zrpl[j] >= w[i].zrpl[j+1] then F:=1;

if F=0 then begin textcolor (red);

                   writeln ( 'zrpl rastet');

                   writeln (w[i].name); Fa:=1;

             end;

                 end;

                  if Fa=0 then

begin

                                textcolor (green);

              writeln ('net rabotnikov y kogo zarplata povishaeysya');

end;

readkey;

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Создать типизированный файл TABL, состоящий из 10 структур типа WORKER.

 

program ex2_0;

uses crt;

const n=10; m=12;

fout='f:\work.tip';

type

worker=record

  name: string [10];

  post: string [15];

  year: integer;

  zrpl: array [1..m] of integer;

end;

var

tabl: file of worker;

w: worker;

i, j: integer;

begin

clrscr;   textcolor (white);

assign (tabl, fout);

rewrite (tabl);

              for i:= 1 to n do

      begin

writeln ('vvedite familii');

readln ( w.name);

writeln ('vvedite dolgnost');

readln (w.post);

writeln ('vvedite god postypleniya');

readln (w.year);

writeln ('vvedite v poslednee pole  ', m, ' zarplat');

for j:= 1 to m do

readln ( w.zrpl[j]); 

write (tabl,w);

      end;

close (tabl);

end.

 

 

    

 

 

 

 

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

 

 

 

program ex2_1;

uses crt;

const n=10; m=12;

fout='f:\work.tip';

type

worker=record

  name: string [10];

  post: string [15];

  year: integer;

  zrpl: array [1..m] of integer;

end;

var

tabl: file of worker;

z: worker;

w: array [ 1..n] of worker;

i, j, b: integer;

function sr ( T:worker): integer;

var s: integer;

i:integer;

begin

     s:= 0;

     for i:= 1 to m do

     s:= s+ T.zrpl[i];

     sr:= s div m;

end;

begin

clrscr;   textcolor (white);

assign (tabl, fout);

reset (tabl);

i:=1;

while not eof (tabl) do  begin

read (tabl, w [i]);

i:= i+1;

end;

for j:= 1 to n-1 do

for i:= 1 to n-j do

if sr (w[i]) > sr (w[i+1]) then

begin

                z:= w[i];

                w[i]:= w[i+1];

                w[i+1]:= z;

end;

for i:= 1 to n do

begin

b:=sr(w[i]);

                  writeln (' srednyaya  ', b:2);   

end;

close (tabl);

rewrite (tabl);

for i:= 1 to n do

write (tabl, w[i]);

close (tabl);

readkey;

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Если таких работников нет, вывести соответствующее сообщение.

 

 

program ex2_2;

uses crt;

const n=10; m:=12;

  fin='f:\work.tip';

  fout='f:\over.tip';

type

worker=record

  name: string [10];

  post: string [15];

  year: integer;

  zrpl: array [1..m] of integer;

end;

var

tabl, ov: file of worker;

w:array [1..n] of worker;

i, j, Fa, F: integer;

begin

clrscr;

assign (tabl, fin);

assign (ov, fout);

reset (tabl);

rewrite (ov);

writeln ( ' spisok sotrydnikov po vozr sr zarpl' );

                  :=1;

while not eof (tabl) do 

begin

read (tabl, w[i] );

i:= i+1;

end;

Fa:=0;

for i:= 1 to n do

begin

F:=0;

for j:= 1 to m-1 do

if w[i].zrpl[j] >= w[i].zrpl[j+1] then F:=1;

if F=0 then

begin

textcolor (red);

                          writeln ( 'zrpl rastet');

                          writeln (w[i].name); Fa:=1;

                          write ( ov, w[i]);

             end;

      end;

if Fa=0 then

begin

textcolor (green);

writeln ('no');

              end;

              else

writeln ('new=  ', filesize(ov));

close (tabl);

close (ov);

readkey;

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.3 Запись о сотруднике с максимальной среднемесячной зарплатой сдвинуть в конец файла.

 

 

program ex2_3;

uses crt;

const n=10; m=12;

fout='f:\work.tip';

type

worker=record

  name: string [10];

  post: string [15];

  year: integer;

  zrpl: array [1..m] of integer;

end;

var

tabl: file of worker;

wк: array [1..n] of integer;

z, w, x: worker;

b: array [1..m] of integer;

i, j, max, nmax: integer;

function sr ( T:worker): integer;

var s: integer;

i:integer;

begin

s:= 0;

for i:= 1 to m do

s:= s+ T.zrpl[i];

sr:= s div m;   

end;

begin

clrscr;   textcolor (white);

assign (tabl, fout);

reset (tabl); 

i:=1;

while not eof (tabl)  do

begin

read (tabl, w);

                            b[i]:=sr(w);

                                writeln (' srednyaya  ', w.name:6,  b[i]:2);

i:=i+1;

end;

max:=b[1];

nmax:=1;

for i:=2 to n do

                  if b[i]>max then

begin

                                max:=b[i];

                                nmax:=i;

                  end;

writeln ('  nmax=', nmax);

                close (tabl);

              if nmax< n then

begin

reset (tabl);

for i := 1 to n-nmax do

begin

seek(tabl, n-1);

                                          read (tabl, w);

                                          x:= w;

                                             textcolor (red);

                                              for j:= n-1 downto 1 do

begin

                                                           seek (tabl, j-1); read ( tabl, z);

                                                           seek (tabl, j); write (tabl, z);

                  end;

                                             seek (tabl, 0); write ( tabl, x);

             end;

             close( tabl);

      end;

      reset (tabl);

      while not eof(tabl) do

begin

                               read ( tabl, w);

                               writeln (w.name);

                               writeln;

                 end;

                close (tabl);

readkey;

end.

 

 

 

 

 

 

 

 

 

 

3.  Создать текстовый файл TABL, состоящий из 10 структур типа WORKER.

 

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

   Если таких работников нет, вывести соответствующее сообщение.

 

program ex3_1;

uses crt;

const n=10; m=12;

fin='e:\k3_0y.dat'; 

{ fin='e:\k3_0n.dat';}

fout='e:\over.dat';

type

worker=record

  name: string [7];

  post: string [6];

  year: integer;

  zrpl: array [1..m] of integer;

end;

var

tabl, ov: text;

w: worker;

i, j, Fa, F: integer;

begin

clrscr;

assign (tabl, fin);

assign (ov, fout);

reset (tabl);

rewrite (ov);

writeln ( ' spisok sotrydnikov po vozr sr zarpl' );

                   Fa:=0;

while not eof (tabl) do 

begin

                        f:=0;

                    readln (tabl,w.name,w.post,w.year);

                      writeln (w.name,w.post,w.year);

            for j:= 1 to m do   

begin

                                      read (tabl, w.zrpl[j]);

                                      readln(tabl);

writeln (w.zrpl[j]);

end;

for j:= 1 to m-1 do

      if w.zrpl[j] >= w.zrpl[j+1] then F:=1;

      if F=0 then

begin

textcolor (red);

                           writeln ( 'zrpl rastet');

                           writeln (w.name);

Fa:=1;

                                      writeln ( ov, w.name:7, w.post:6, w.year:2);

                                      for j:= 1 to m do

                                     write ( tabl, w.zrpl[j]:2)

                                end;

        end;

        if Fa=0 then begin

        textcolor (green); writeln ('no');  end;

        close (tabl);

         close (ov);

   readkey;

end.

 

Исходные:

 

 

Фамилия

должность

год

                           зарплата

Сидоров

кассир

1996

4000

4000

4000

4500

4500

4300

4500

4600

5000

5000

5000

5000

Петров

продавец

2008

4500

4500

4700

4700

5000

5000

5500

5500

6000

6000

6500

6500

Иванов

продавец

2000

4500

4500

4700

4700

5000

4500

4500

5500

5000

5000

5500

5500

Каблуков

менеджер

1999

7000

7000

7500

7500

8000

8000

8500

8500

8500

8000

8000

8000

Смирнов

кассир

2006

4000

4000

4000

4500

4500

4300

4500

4600

6000

6000

6000

6500

Стрельцов

продавец

2000

4000

4000

4000

4500

4500

4300

4500

4600

5000

5000

5000

5000

Матвеев

менеджер

1997

7000

7500

7500

7500

8000

8000

8500

8500

8500

9000

9000

9000

Соколов

консультант

2005

3000

3500

3500

5000

4500

4500

5000

4000

5000

5500

5500

5000

Дубов

кассир

2002

5000

5500

5500

5500

6000

6000

6000

6500

6500

6000

7000

7000

Скворцов

консультант

1998

4000

4000

5000

5000

5500

5500

5500

5500

6000

6000

6000

6000

Информация о работе Работа с файлами в среде Паскаль