Федеральное агентство по образованию
ГОУ ВПО «Ижевский государственный технический университет»
Кафедра «Программное обеспечение»
Отчет
по лабораторной работе №1
на тему: «Обработка одного типизированного файла»
по дисциплине: Программирование на ЯВУ
Выполнил
ст-т гр. 2-78-10 Т.С. Аднокулова
Принял И.В. Килин
Ижевск 2010
Обработка одного типизированного файла
Постановка задачи
Ознакомиться с операторами обработки файлов записей: открытия (RESET, REWRITE), закрытия (CLOSE), ввода данных (READ), вывода данных (WRITE), с функцией опреления конца файла (EOF). Изучить типичные процедуры обработки одного файла: создание, копирование, распечатка, корректировка, рассмотреть возможные ошибки и реакцию на них, спроектировать и отладить программу. Ознакомиться с вариантами программ, обрабатывающих многоуровневое меню.
Структура файла имеет следующие поля:
Район Уч.Заведение Кол-во неуспевающих
Кол-во учащихся
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.