Преобразования и хранения последовательных файлов и файлов произвольного доступа на Турбо Паскале
Преобразования и хранения последовательных файлов и файлов произвольного доступа на Турбо Паскале
Цель работы: Изучение принципов создания, преобразования и хранения последовательных файлов и файлов произвольного доступа. Задание: Сформировать два файла. В один из них поместить фамилии пяти ваших знакомых, а в другой номера их телефонов. Составить программу, которая по фамилии вашего знакомого определяет номер его телефона. 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 Для продолжения нажмите любую клавишу...
|