Преобразования и хранения последовательных файлов и файлов произвольного доступа на Турбо Паскале
Цель работы:
Изучение принципов создания, преобразования и хранения последовательных файлов и файлов произвольного доступа.
Задание:
Сформировать два файла. В один из них поместить фамилии пяти ваших знакомых, а в другой номера их телефонов.
Составить программу, которая по фамилии вашего знакомого определяет номер его телефона.
procedure print_head;
procedure print_menu;
procedure print_book(n : integer; a : men ; b : tels);
procedure ins_man(var n : integer;var a : men ;var b : tels);
procedure change_man(n : integer;var a: men ;var b: tels);
procedure read_file(var f : fman;var ft : ftel;var n : integer;var a : men; var b : tels);
procedure write_file(var f : fman;var ft : ftel;n : integer; a : men; b : tels);
procedure show_matrix(n,m : integer;a : matrix);
Программа:
{*****************************************}
{Программа:lab22 }
{Цель:создание таблицы данных }
{Описание параметров и переменных: }
{ menbook,telbook - массив записей }
{ menfile,telfile - файлы записей }
{ n - кол-во элементов в базе данных }
{ i - вспомогательная переменная }
{ key - переменная-ключ }
{Подпрограммы:нет }
{Программист: Кондрахин А.В.,гр.343 }
{Проверил: Москвитина О.А.,каф. ВПМ }
{Дата написания: 12 марта 2004 г. }
{*****************************************}
program lab22;
uses crt;
const
verh ='-----------T---------------T---------------T----------T----------T-----------¬';
inc1 ='¦ Имя ¦ Фамилия ¦ Отчество ¦ дом.тел. ¦ раб.тел. ¦ сот.тел. ¦';
cent1='+----------+---------------+---------------+----------+----------+-----------+';
niz ='L----------+---------------+---------------+----------+----------+------------';
Num=10;
type
man=record
name:string[10];
fam :string[15];
otc :string[15];
end;
tel=record
hometel: string[6];
worktel: string[6];
sottel : string[11];
end;
men=array[1..Num] of man;
tels=array[1..Num] of tel;
fman=file of man;
ftel=file of tel;
var
n,i :integer;
menbook :men;
telbook :tels;
menfile :fman;
telfile :ftel;
key :char;
procedure print_head;
begin
Clrscr;
Writeln('---------------------- Программа "Записная книжка" ----------------------');
Writeln;
end;
procedure print_menu;
begin
print_head;
Writeln('Выберете одно из следующих действий:');{Вывод меню}
Writeln('1. Просмотреть записную книжку.');
Writeln('2. Добавить новую запись.');
Writeln('3. Редактировать запись.');
Writeln;
Writeln('0. Выход');
Writeln;
Writeln('Введите ключ команды:');
end;
procedure print_book(n : integer; a : men ; b : tels);
var
i:integer;
begin
print_head;
Writeln(verh);Writeln(inc1);Writeln(cent1);
for i:=1 to n do {Вывод записей}
Writeln('¦',a[i].name:10,'¦',a[i].fam:15,'¦',a[i].otc:15,'¦',b[i].hometel:10,'¦',b[i].worktel:10,'¦',b[i].sottel:11,'¦');
Writeln(niz);
Writeln('Для продолжения нажмите любую клавишу...');Readkey;
end;
procedure ins_man(var n : integer;var a : men ;var b : tels);
var
fam : string[15];
begin
print_head;
if n=Num
then Writeln('База данных переполнена!') {Переполнение базы}
else begin
inc(n); {Занесение записи}
Write('Введите имя (10 знаков):');Readln(a[n].name);
Write('Введите фамилию (15 знаков):');Readln(a[n].fam);
Write('Введите отчество (15 знаков):');Readln(a[n].otc);
Write('Введите домашний телефон:');Readln(b[n].hometel);
Write('Введите рабочий телефон:');Readln(b[n].worktel);
Write('Введите сотовый телефон:');Readln(b[n].sottel);
end;
Writeln('Для продолжения нажмите любую клавишу...');Readkey;
end;
procedure change_man(n : integer;var a: men ;var b: tels);
var
fam : string[15];
i :integer;
begin
print_head;
Writeln('Введите фамилию:');Read(fam);
i:=1;
while (a[i].fam<>fam) and (i<=n) do {Поиск фамилии}
inc(i);
if (i>n) and (a[i].fam<>fam)
then Writeln('Такой фамилии не найдено!')
else
begin
Writeln(verh);Writeln(inc1);Writeln(cent1);
Writeln('¦',a[i].name:10,'¦',a[i].fam:15,'¦',a[i].otc:15,'¦',b[i].hometel:10,'¦',b[i].worktel:10,'¦',b[i].sottel:11,'¦');
Writeln(niz);Writeln;Readln;
Write('Введите имя (10 знаков):');Readln(a[i].name); {Изменение записи}
Write('Введите фамилию (15 знаков):');Readln(a[i].fam);
Write('Введите отчество (15 знаков):');Readln(a[i].otc);
Write('Введите домашний телефон:');Readln(b[i].hometel);
Write('Введите рабочий телефон:');Readln(b[i].worktel);
Write('Введите сотовый телефон:');Readln(b[i].sottel);
Writeln('Для продолжения нажмите любую клавишу...');Readkey;
end;
end;
procedure read_file(var f : fman;var ft : ftel;var n : integer;var a : men; var b : tels);
begin
n:=0;
assign(f,'man.db'); {Инициализация файловых}
assign(ft,'tel.db'); {переменных}
{$I-}
reset(f);
reset(ft);
{$I+}
if IOResult<>0
then Writeln('Файл базы данных не найден!')
else begin
while not(EOF(f)) and (n<=10) do
begin
inc(n);
read(f,a[n]); {Чтение записей}
read(ft,b[n]);
end;
Writeln('Файл базы данных успешно прочитан!');
end;
end;
procedure write_file(var f : fman;var ft : ftel;n : integer; a : men; b : tels);
var
i: integer;
begin
rewrite(f);
rewrite(ft);
for i:=1 to n do
begin {Запись записей}
Write(f,a[i]);
Write(ft,b[i]);
end;
Writeln('Файл базы данных успешно сохранен!');
end;
begin
read_file(menfile,telfile,n,menbook,telbook); {Чтение файлов}
print_head;
key:='Y';
while (UpCase(key)='Y') do {Проверка ключа}
begin
print_menu;
key:=Readkey;
case key of {Выплнение соотв.}
'1': begin print_book(n,menbook,telbook);key:='Y';end;
'2': begin ins_man(n,menbook,telbook);key:='Y';end;
'3': begin change_man(n,menbook,telbook);key:='Y';end;
else begin Writeln('Вы ввели неправильный код!');key:='N';end
end;
Writeln;
end;
write_file(menfile,telfile,n,menbook,telbook); {Запись файлов}
end.
Просчет контрольного варианта на ЭВМ:
Выберете одно из следующих действий:
1. Просмотреть записную книжку.
2. Добавить новую запись.
3. Редактировать запись.
0. Выход
Введите ключ команды: 1
|
Имя | Фамилия | Отчество | дом.тел. | раб.тел. | сот.тел. | |
Andrey Sergey Alex Serega | Kondrahin Sazonov Uoronov Kurpach | Uyacheslauouich Otc Uiktorouich Uiktorouich | 322286 322155 455932 32456 | 322286 322155 455932 435645 | 324567678 3456789 3245667788 3245475685 | |
|
Для продолжения нажмите любую клавишу...
Выберете одно из следующих действий:
1. Просмотреть записную книжку.
2. Добавить новую запись.
3. Редактировать запись.
0. Выход
Введите ключ команды: 2
Введите имя (10 знаков):Ivanov
Введите Фамилию (15 знаков):Uladislav
Введите отчество (15 знаков):01egovich
Введите домашний телефон:226057
Введите рабочий телефон:226057
Введите сотовый телефон:123Ч56789
Для продолжения нажмите любую клавишу...
Выберете одно из следующих действий:
1. Просмотреть записную книжку.
2. Добавить новую запись.
3. Редактировать запись.
0. Выход
Введите ключ команды: 3
Введите Фамилию: Sazonov
|
Имя | Фамилия | Отчество | дом.тел. | раб.тел. | сот.тел. | |
Sergey | Sazonov | Otc | 322155 | 322155 | 3456789 | |
|
Введите имя (10 знаков):Sergey
Введите Фамилию (15 знаков):Sazonov
Введите отчество (15 знаков):Nikolaevich
Введите домашний телефон:322155
Введите рабочий телефон:322155
Введите сотовый тепеФон:987654321
Для продолжения нажмите любую клавишу...