Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр1.doc
Скачиваний:
3
Добавлен:
19.08.2019
Размер:
192.51 Кб
Скачать

Федеральное агентство по образованию

ГОУ ВПО «Ижевский государственный технический университет»

Кафедра «Программное обеспечение»

Отчет

по лабораторной работе №1

на тему: «Обработка одного типизированного файла»

по дисциплине: Программирование на ЯВУ

Выполнил

ст-т гр. 2-78-10 Т.С. Аднокулова

Принял И.В. Килин

Ижевск 2010

  1. Обработка одного типизированного файла

    1. Постановка задачи

Ознакомиться с операторами обработки файлов записей: открытия (RESET, REWRITE), закрытия (CLOSE), ввода данных (READ), вывода данных (WRITE), с функцией опреления конца файла (EOF). Изучить типичные процедуры обработки одного файла: создание, копирование, распечатка, корректировка, рассмотреть возможные ошибки и реакцию на них, спроектировать и отладить программу. Ознакомиться с вариантами программ, обрабатывающих многоуровневое меню.

Структура файла имеет следующие поля:

Район Уч.Заведение Кол-во неуспевающих

Кол-во учащихся

    1. 1.2 Иерархическая схема

Fullview – подпрограмма полного просмотра содержимого файла f1.

Delete – подпрограмма удаления какой либо записи из файла f1 по ключу.

Partview – подпрограмма выборочного просмотра файла f1 по ключу.

Edit – подпрограмма изменения записи из f1 по ключу.

CreateFile – подпрограмма создания отсортированного файла.

Addnew – подпрограмма добавления в файл дополнительной записи, не нарушающей отсортированности.

Head – подпрограмма, которая выводит на экран шапку таблицы.

Filework – главная программа, в которой реализовано меню следующего вида:

Меню:

1)Создание

2)Корректировка

2.1)Удаление

2.2)Ввод вновь

2.3)Изменение

2.0)Выход

3)Просмотр

3.1)Полный просмотр

3.2)Выборочный просмотр

0)Выход

1.3 Описание программы

В программе использовано 6 процедур, которые вызываются из меню главной программы. Меню и подменю выполнены при помощи оператора case. Подпрограмма CreateFile создает файл UchData.dat, отсортированный по двум полям (Группа и фамилия). Добавление новой записи при помощи подпрограмма Addnew не нарушает отсортированности файла. В процессе работы, программа использует рабочий файл Test.dat. Подпрограмма Head выводит на экран шапку.

1.4Схема программы

1.5 Текст программы

Program Filework;

{Аднокулова Т.С.,

группа 2-78-10, 30.05.2010}

type tstud=record

rayon:integer;

nazv:string[25];

neysp:integer;

stud:integer;

end;

var f1,f2:file of tstud;

z,k:tstud;

vybor,vybor2,vybor3:integer;

Procedure Head;

begin

writeln('----------------------------------------------------------------------');

writeln(' Район Уч.Заведение Кол-во неуспевающих Кол-во учащихся');

writeln('----------------------------------------------------------------------');

end;

procedure Fullview; {Полный просмотр}

begin

assign(f1,'UchData.dat');

reset(f1);

while not eof(f1) do

begin

read(f1,z);

writeln(z.rayon:4,'':(20-length(z.nazv)),z.nazv,' ',z.neysp:7,' ',z.neysp:16);

end;

close(f1);

end;

Procedure Delete; {Удаление записи}

begin

assign(f1,'UchData.dat');

assign(f2,'Test.dat');

reset(f1);

rewrite(f2);

writeln('Введите уч. заведение которое необходимо удалить: ');

read(z.nazv);

while not eof(f1) do

begin

read(f1,k);

if k.nazv<>z.nazv then

begin

write(f2,k);

end;

end;

reset(f2);

rewrite(f1);

while not eof(f2) do

begin

read(f2,k);

write(f1,k);

end;

close(f1);

close(f2);

end;

Procedure PartView; {Выборочный просмотр}

var c,min,max:integer;

minC,maxC:string[25];

begin

assign(f1,'UchData.dat');

reset(f1);

writeln('По какому ключу будем смотреть:');

writeln('1)По району');

writeln('2)По уч.заведению');

writeln('3)По количеству неуспевающих');

writeln('Ваш выбор: ');

read(c);

case c of

1: begin

writeln('Введите min номер района: ');

read(min);

writeln('Введите max номер района: ');

read(max);

head;

while not eof(f1) do

begin

read(f1,k);

if (k.rayon>=min) and (k.rayon<=max) then

begin

writeln(z.rayon:4,' ':(20-length(z.nazv)),z.nazv,' ',z.neysp:7,' ',z.neysp:16);

end;

end;

end;

2: begin

writeln('Введите диапазон:');

writeln('Введите начало (первая буква): ');

read(minC);

writeln('Введите конец (последняя буква): ');

read(maxC);

head;

while not eof(f1) do

begin

read(f1,k);

if (k.nazv>=minC) and (k.nazv<=maxC) then

begin

writeln(z.rayon:4,' ':(20-length(z.nazv)),z.nazv,' ',z.neysp:7,' ',z.neysp:16);

end;

end;

end;

3: begin

writeln('Введите min количество неуспевающих: ');

read(min);

writeln('Введите max количество неуспевающих: ');

read(max);

head;

while not eof(f1) do

begin

read(f1,k);

if (k.neysp>=min) and (k.neysp<=max) then

begin

writeln(z.rayon:4,' ':(20-length(z.nazv)),z.nazv,' ',z.neysp:7,' ',z.neysp:16);

end;

end;

end;

end;

close(f1);

end;

Procedure Edit; {Изменения поля}

var nazv:string[25];

begin

assign(f1,'UchData.dat');

assign(f2,'Test.dat');

reset(f1);

rewrite(f2);

writeln('Введите уч.заведение, для которого необходимо изменить данные: ');

read(nazv);

while not eof(f1) do

begin

read(f1,k);

if (nazv=k.nazv) then

begin

writeln('Введите новые значения');

writeln('Район: ');

read(k.rayon);

writeln('Кол-во неуспевающих: ');

read(k.neysp);

writeln('Количество учащихся: ');

read(k.neysp);

end;

write(f2,k);

end;

reset(f2);

rewrite(f1);

while not eof(f2) do

begin

read(f2,k);

write(f1,k);

end;

close(f1);

close(f2);

end;

Procedure CreateFile; {Создание файла}

begin

assign(f1,'UchData.dat');

rewrite(f1);

writeln('Введите уч.заведение, конец ввода - 0: ');

read(k.nazv);

writeln('Введите номер района:');

read(k.rayon);

writeln('Введите количество неуспевающих: ');

read(k.neysp);

writeln('Введите количество учащихся: ');

read(k.neysp);

write(f1,k);

z.nazv:='Chernov';

repeat

begin

writeln('Введите уч.заведение: ');

read(z.nazv);

writeln('Введите номер района: ');

read(z.rayon);

writeln('Введите количество неуспевающих: ');

read(z.neysp);

writeln('Введите количество учащихся: ');

read(z.neysp);

if (z.rayon=k.rayon) then

begin

if (z.nazv>=k.nazv) then

begin

write(f1,z);

k.rayon:=z.rayon;

k.nazv:=z.nazv;

end;

if (z.nazv<k.nazv) then

begin

writeln('Не удовлетворяет условию сортировки');

end;

end;

if (z.rayon>k.rayon) then

begin

write(f1,z);

k.rayon:=z.rayon;

k.nazv:=z.nazv;

end;

if (z.rayon<k.rayon) then

begin

writeln('Не удовлетворяет условию сортировки');

end;

end;

until (z.nazv='0');

close(f1);

end;

Procedure Addnew; {Добавление новой записи}

var a:array[1..200] of tstud;

i,j,h:integer;

begin

assign(f1,'UchData.dat');

assign(f2,'Test.dat');

reset(f1);

rewrite(f2);

writeln('Введите уч.заведение: ');

read(k.nazv);

writeln('Введите номер района: ');

read(k.rayon);

writeln('Введите количество неуспевающих: ');

read(k.neysp);

writeln('Введите количество учащихся: ');

read(k.neysp);

while not eof(f1) do

begin

read(f1,z);

if (z.nazv=k.nazv) then writeln('Такое уч.зоведение уже есть в списке')

else write(f2,k);

end;

reset(f2);

while not eof(f2) do

begin

read(f2,z);

end;

reset(f1);

rewrite(f2);

i:=1;

while not eof(f1) do

begin

read(f1,a[i]);

inc(i);

inc(j);

end;

for i:=1 to j do

begin

if (z.rayon>a[i].rayon) then

begin

write(f2,a[i]);

end;

if (z.rayon<a[i].rayon) then

begin

write(f2,z);

break;

end;

if (z.rayon=a[i].rayon) then

begin

if (z.nazv>a[i].nazv) then

begin

write(f2,a[i]);

end;

if (z.nazv<a[i].nazv) then

begin

write(f2,z);

break;

end;

end;

if i=j then

begin

write(f2,z);

end;

end;

for h:=i to j do

begin

if i<>j then

begin

write(f2,a[h]);

end;

end;

reset(f2);

rewrite(f1);

while not eof(f2) do

begin

read(f2,k);

write(f1,k);

end;

close(f1);

close(f2);

end;

begin {Основная программа}

writeln('Меню:');

writeln('1)Создание');

writeln('2)Корректировка');

writeln('3)Просмотр');

writeln('0)Выход');

writeln;

writeln('Ваш выбор: ');

read(vybor);

while (vybor<>0) do

begin

case vybor of

1: begin

createfile;

end;

2: begin

writeln('Корректировка:');

writeln('1)Удаление');

writeln('2)Ввод вновь');

writeln('3)Изменение');

writeln('0)Выход');

writeln;

writeln('Ваш выбор: ');

read(vybor2);

while (vybor2<>0) do

begin

case vybor2 of

1: begin

delete;

end;

2: begin

addnew;

end;

3: begin

edit;

end;

end;

writeln('Корректировка:');

writeln('1)Удаление');

writeln('2)Ввод вновь');

writeln('3)Изменение');

writeln('0)Выход');

writeln;

writeln('Ваш выбор: ');

end;

end;

3: begin

writeln('Просмотр:');

writeln('1)Полный просмотр');

writeln('2)Выборочный просмотр');

writeln('0)Выход');

writeln;

writeln('Ваш выбор: ');

read(vybor3);

while (vybor3<>0) do

begin

case vybor3 of

1: begin

head;

fullview;

end;

2: begin

partview;

end;

end;

writeln('Просмотр:');

writeln('1)Полный просмотр');

writeln('2)Выборочный просмотр');

writeln('0)Выход');

writeln;

writeln('Ваш выбор: ');

read(vybor3);

end;

end;

end;

writeln('Меню:');

writeln('1)Создание');

writeln('2)Корректировка');

writeln('3)Просмотр');

writeln('0)Выход');

writeln;

writeln('Ваш выбор: ');

read(vybor);

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]