Главная страница

Разработка объектной программы для обработки данных о авторах издательства». 4 этап переделанный 2. Разработка объектной программы для обработки данных о авторах издательства


Скачать 183.44 Kb.
НазваниеРазработка объектной программы для обработки данных о авторах издательства
АнкорРазработка объектной программы для обработки данных о авторах издательства»
Дата14.02.2023
Размер183.44 Kb.
Формат файлаdocx
Имя файла4 этап переделанный 2.docx
ТипКурсовая
#936489
страница5 из 5
1   2   3   4   5
begin

Assign(f, Filename); // соединяем файл с переменной

rewrite(f); // Открываем файл на запись

for i := 0 to AuthorCount - 1 do // проходим по всем авторам

begin

author := AuthorList[i];

writeln(f, author.GetAuthorName); // запись фамилии автора

writeln(f, author.GetBooksCount); // запись количества книг

book := author.GetHead.GetNext;

while (book <> nil) do// проходим по всем книгам

begin

writeln(f, book.GetBookName); // запись названия книги

writeln(f, book.GetCirculation); // запись тиража
book := book.GetNext; // переходим к след элементу

end;

end;

CloseFile(f);

end;
procedure TPublishing.Load(Filename: string);

var

aFile: Textfile;

author: TAuthor; // экземпляр автора

tauthorCount: integer; // количество авторов

aAuthorName: string; // фамилия автора

i: integer;

book: TBook; // экземпляр книги

aBookName: string; // название книги

aCirculation: integer; // тираж

lastBook: TBook; // закладка - ссылка на посл добавленную книгу

begin

AssignFile(aFile, Filename);

reset(aFile);

while not EOF(aFile) do

begin

lastBook := nil;

Readln(aFile, aAuthorName); // фамилия автора

author := TAuthor.Create(aAuthorName); // создаём автора

Readln(aFile, tauthorCount); // считываем количество авторов

for i := 1 to tauthorCount do

begin

Readln(aFile, aBookName); // считываем название книги

Readln(aFile, aCirculation); // считываем тираж

book := TBook.Create(aBookName, aCirculation);// создаём книгу

if author.GetBooksCount = 0 then

author.AddFirst(book) // добавляем первую книгу

else

author.AddAfter(book, lastBook.GetBookName); // добавляем в конец

lastBook := book; // сохраняем последнюю добавленную книгу

end;

AddAuthor(author); // добавляем автора в издательство

end;

CloseFile(aFile);

end;

unit unitAuthor;
interface
uses

Classes, uniTBook;
type

TAuthor = class // класс автор

private

AuthorName: string; // фамилия автора

BooksCount: integer; // количество книг

Head: TBook; // ссылка на заголовок

public

constructor Create(aAuthorName: string);

function GetAuthorName(): string;

function GetBooksCount(): integer;

function GetHead(): TBook;

procedure SetAuthorName(aAuthorName: string);

procedure AddFirst(aBook: TBook); // добавляет в начало

function AddAfter(aBook: TBook; aBookName: string): boolean; // добавление после заданного

function AddBefore(aBook: TBook; aBookName: string): boolean; // добавление перед заданным

function Delete(aBookName: string): boolean; // удаление

function Search(aLastName: string): TBook; overload; // поиск обычный

function Search(aLastName: string; var pPrev: TBook): TBook; overload; // поиск с возвратом предшетсвенника

function SumCirculation: integer; // суммарный тираж

end;
implementation
constructor TAuthor.Create(aAuthorName: string);

begin

AuthorName := aAuthorName;

Head := TBook.Create('', 0); // создаём заголовок

BooksCount := 0;

end;
function TAuthor.GetAuthorName(): string;

begin

Result := AuthorName;

end;
procedure TAuthor.SetAuthorName(aAuthorName: string);

begin

AuthorName := aAuthorName;

end;
function TAuthor.GetBooksCount(): integer;

begin

Result := BooksCount;

end;
function TAuthor.GetHead(): TBook;

begin

Result := Head;

end;
procedure TAuthor.AddFirst(aBook: TBook);

begin

begin

Head.SetNext(aBook); // Изменяеем ссылку на след у заголовка на новый

BooksCount := BooksCount + 1;

end;

end;
function TAuthor.AddAfter(aBook: TBook; aBookName: string): boolean;

var

temp: TBook;

begin

Result := False;

temp := Search(aBookName); // поиск книги

if (temp <> nil) then // при её нахождении

begin

aBook.SetNext(temp.GetNext);// настриваем ссылки

temp.SetNext(aBook);

BooksCount := BooksCount + 1; // увеличиваем счетчик

Result := True;

end;

end;
function TAuthor.AddBefore(aBook: TBook; aBookName: string): boolean;

var

temp, prev: TBook;

begin

Result := False;

temp := Search(aBookName, prev); // поиск книги и её предшественника

if (temp <> nil) then // при её нахождении

begin

aBook.SetNext(prev.GetNext); // настриваем ссылки

prev.SetNext(aBook);

BooksCount := BooksCount + 1; // увеличиваем счетчик

Result := True;

end;

end;
function TAuthor.Delete(aBookName: string): boolean;

var

temp, prev: TBook;

begin

Result := False;

temp := Search(aBookName, prev); // поиск книги и её предшественника

if (prev <> nil) then // при нахождении

begin

prev.SetNext(temp.GetNext);// настриваем ссылки

temp := nil;

BooksCount := BooksCount - 1;// увеличиваем счётчик

Result := True;

end;

end;
function TAuthor.Search(aLastName: string): TBook;

var

temp: TBook;

begin

Result := nil;

temp := Head.GetNext; // установка переменной в начало списка

while temp <> nil do // организация цикла до достижения заголовка

if temp.GetBookName = aLastName then// в случае нахождения прерывание

begin

Result := temp;

break;

end

else

temp := temp.GetNext;// переход к следующему

end;
function TAuthor.Search(aLastName: string; var pPrev: TBook): TBook;

var

temp: TBook;

begin

Result := nil;

pPrev := Head;

temp := Head.GetNext;// установка переменной в начало списка

while (temp <> nil) do // организация цикла до достижения заголовка

begin

if (aLastName = temp.GetBookName) then // в случае нахождения прерывание

begin

Result := temp;

break;

end

else

begin

pPrev := temp; // Запомнимаем предыдущего

temp := temp.GetNext;// переходим к следующему

end;

end;

end;
function TAuthor.SumCirculation: integer;

var

temp: TBook;

begin

Result := 0;

temp := Head.GetNext;

while (temp <> nil) do

begin

Result := Result + temp.GetCirculation;

temp := temp.GetNext;

end;

end;
end.

unit unitBook;
interface
uses

Classes;
type

TBook = class // класс книга

private

BookName: string; // название книги

Circulation: integer; // тираж

Next: TBook; // след книга

public

constructor Create(aBookName: string; aCirculation: integer);

function GetNext: TBook;

function GetBookName: string;

function GetCirculation: integer;

procedure SetNext(aNext: TBook);

procedure SetBookName(aBookName: string);

procedure SetCirculation(aCirculation: integer);

end;
implementation
constructor TBook.Create(aBookName: string; aCirculation: integer);

begin

BookName := aBookName;

Circulation := aCirculation;

end;
function TBook.GetNext: TBook;

begin

Result := Next;

end;
procedure TBook.SetNext(aNext: TBook);

begin

Next := aNext;

end;
function TBook.GetBookName: string;

begin

Result := BookName;

end;
procedure TBook.SetBookName(aBookName: string);

begin

BookName := aBookName;

end;
function TBook.GetCirculation: integer;

begin

Result := Circulation;

end;
procedure TBook.SetCirculation(aCirculation: integer);

begin

Circulation := aCirculation;

end;
end.

1   2   3   4   5


написать администратору сайта