program Biblioteka;
type
Bibl = record {описание типа }
Inv_nomer: integer;
Name_author: string[50];
Naim_knigi: string[20];
God_izd: string[20];
Mesto_izd: string[20];
Naim_izd: string[20];
end;
var
f: file of Bibl;
zn, filename: string;
t, k: integer;
s: string;
procedure Creatfile;{создание файла}
begin
Writeln('Задайте имя файла');
Readln(filename);
Assign(f, filename); {связь с внешним файлом}
Rewrite(f);{открытие нового файла для записи}
end;
procedure Addrecord;{добавление записи в файл}
var
rez: integer;
kn: char;
begin
while rez <> 0 do
begin
Writeln(' Задайте имя файла, куда добавить запись');
Readln(filename);
Assign(f, filename); {установка связи}
Reset(f);
if rez <> 1 then
begin
Writeln('Проверьте правильность имени файла! (Y/N)');
Readln(kn);
if (kn = 'n') or (kn = 'N') then halt(0);
end;
end;
end;
procedure Inputfile;{ввод данных в файл}
var
st: Bibl;
k: char;
begin
Writeln('Введите данные о новой книге:');
Write('Инвентарный номер книги:');
Readln(st.Inv_nomer);
Write('Имя автора:');
Readln(st.Name_author);
Write('Наименование книги:');
Readln(st.naim_knigi);
Write('Год издания:');
Readln(st.god_izd);
Write('Наименование издательства:');
Readln(st.Naim_izd);
Write('Место издания:');
Readln(st.Mesto_izd);
Write('Ввести данные о новой книге? (Y/N)');
Readln(k);
Writeln;
end;
procedure Redzap;{редактирование записи}
var
st: Bibl;
filename: string[20];
st2: integer;
Inv_nomer2: integer;
Name_author2: string[20];
Naim_knigi2: string[20];
God_izd2: string[20];
Naim_izd2: string[20];
Mesto_izd2: string[30];
x: integer;
begin
Writeln('Задайте имя файла');
Readln(filename);
Assign(f, filename);
Reset(f);
with st do
begin
Write('Введите инвентарный номер книги:');
Readln(st2);
x := 0;
while not eof(f) do
begin
Read(f, st);
if st.Inv_nomer = st2 then
begin
Writeln('Введите новые данные о книге:');
Write('Инвентарный номер книги:');
Readln(st.Inv_nomer);
Write('Имя автора:');
Readln(st.Name_author);
Write('Наименование книги:');
Readln(st.Naim_knigi);
Write('Год издания:');
Readln(st.God_izd);
Write('Наименование издательства:');
Readln(st.Naim_izd);
Write('Место издания:');
Readln(st.Mesto_izd);
seek(f, filepos(f) - 1);
Write(f, st);x := 1;
end;
end;
Close(f);
end;
if x = 0 then
begin
Writeln('Записи с таким номером нет!');
Readln
end;
end;
procedure Openfile;{процедура открытия файла}
var
rez: integer;
kn: char;
begin
while rez <> 0 do
begin
Write('Задайте имя файла:');
Readln(filename);
Assign(f, filename);
Reset(f);
end;
end;
procedure Outputfile;{вывод данных из файла}
var
st: Bibl;
begin
while not eof(f) do
begin
Read(f, st);
Writeln('Инвентарный номер книги:', st.Inv_nomer);
Writeln('Имя автора:', st.Name_author);
Writeln('Наименование книги:', st.Naim_knigi);
Writeln('Год издания:', st.God_izd);
Writeln('Наименование издательства:', st.Naim_izd);
Writeln('Место издания:', st.Mesto_izd);
Writeln('Для продолжения нажмите (Enter)');
Readln;
end;
Close(f);
end;
procedure Clearfile;{удаление записи из файла}
var
st: Bibl;
I_N: integer;
fo: file of Bibl;
begin
Writeln('Задайте имя файла, из которого удаляются элементы');
Readln(filename);
Assign(f, filename);
Reset(f);
Assign(fo, 'newfile.dat');
Rewrite(fo);
Writeln('Введите номер книги, запись о которой удаляется');
Readln(I_N);
while not eof(f) do
begin
read(f, st);
if st.Inv_nomer <> I_N then
Write(fo, st);
end;
Close(f);
Close(fo);
Erase(f);
Rename(fo, filename);
end;
{Основная часть программы}
procedure P_Nom;{поиск по номеру}
var
PNo: integer;
st: Bibl;
begin
write('Введите инвентарный номер книги: ');
readln(PNo);
begin
read(f, st);
if PNo = st.Inv_nomer then begin
Writeln('Инвентарный номер книги:', st.Inv_nomer);
Writeln('Имя автора:', st.Name_author);
Writeln('Наименование книги:', st.Naim_knigi);
Writeln('Год издания:', st.God_izd);
Writeln('Наименование издательства:', st.Naim_izd);
Writeln('Место издания:', st.Mesto_izd); end;
if PNo <> st.Inv_nomer then
Writeln('Книг с таким номером нет!');
Writeln('Нажмите <Enter> для выхода ');
readln; end;
close(f);
end;
procedure P_Name;{поиск по имени автора}
var
PN: string[15];
st: Bibl;
begin
writeln('Введите полное имя автора: ');
readln(PN);
if PN = st.Name_author then begin
Writeln('Инвентарный номер:', st.Inv_nomer);
Writeln('Имя автора:', st.Name_author);
Writeln('Наименование книги:', st.Naim_knigi);
Writeln('Год издания:', st.God_izd);
Writeln('Наименование издательства:', st.Naim_izd);
Writeln('Место издания:', st.Mesto_izd);
end;
if PN <> st.Name_author then
writeln('Авторов с таким именем нет!');
writeln('Нажмите <Enter> для выхода ');
readln;
end;
begin
Writeln(' Меню:');
Writeln('1:Создание файла');
Writeln('2:Добавление записи в файл');
Writeln('3:Редактирование записи в файле');
Writeln('4:Просмотр файла ');
Writeln('5:Удаление записи из файла');
Writeln('6:Поиск по инвентарному номеру книги');
Writeln('7:Поиск по имени автора');
Writeln('8:Выход из программы');
Readln(k);
case k of
1: begin Creatfile;Inputfile end;
2: begin Addrecord;Inputfile end;
3: redzap;
4: begin Openfile;Outputfile end;
5: Clearfile;
6: begin Openfile;P_Nom end;
7: begin Openfile;P_Name end;
{8:Exit}
end;
end.