Файл: Разработка объектной программы для обработки данных о авторах издательства.docx

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 18.03.2024

Просмотров: 136

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

В теле цикла:

  1. адресуем указатель author в текущий элемент массива:

author := AuthorList[i];

Записываем все поля в файл

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

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

  1. Адресуем указатель book на первого автора:

book := author.GetHead.GetNext;

  1. Проходим по всем книгам

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

  1. В теле цикла записываем все поля в файл

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

writeln(f, book.GetCirculation); // запись тиража

  1. Переходим к след книге

book := book.GetNext; // переходим к след элементу

  1. Закрываем файл:

CloseFile(f);

В результате сохранения данных будет сформирован текстовый файл



Рис.9 Результат сохранения

Алгоритм загрузки файла:

  1. Соединяем файл с переменной: Assign(aFile, Filename);

  2. Открываем файл на чтение: reset(aFile);

  3. Организуем цикл до конца файла: while not EOF(aFile) do

  4. В теле цикла

Считываем все поля и создаем автора

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

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

  2. В дополнительном цикле считываем книги

for i := 1 to tauthorCount do

begin

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

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

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

  1. Добавляем книгу

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

  1. Добавляем автора в очередь:

AddAuthor(author);

  1. Закрываем файл: CloseFile(aFile);


В демонстрационном модуле реализованы следующие обработчики:

  • procedure ButtonAddAuthorClick(Sender: TObject); // Обработчик добавления автора

  • procedure ButtonAddBookAfterClick(Sender: TObject); // обработчик добавления книги после

  • procedure ButtonAddBookBeforeClick(Sender: TObject);// Обработчик добавление книги до

  • procedure TForm1.ButtonAddFirstBookClick(Sender: TObject); //добавление книги

  • procedure EditAuthorNameUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); // Обработчик фильтра вводимых символов в поле имя автора

  • procedure EditCirculationKeyPress(Sender: TObject; var Key: char); // Обработчик фильтра вводимых символов в поле тираж

  • procedure EditBookNameUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); // Обработчик фильтра вводимых символов в поле название книги

  • procedure FormCreate(Sender: TObject); // Обработчик создания формы

  • procedure MenuItemLoadClick(Sender: TObject); // Обработчик загрузки из фалйла

  • procedure MenuItemSaveClick(Sender: TObject); обработчик сохранения в файл

  • procedure GridAuthorsClick(Sender: TObject); // Обработчик клика по гриду с авторами

  • procedure LoadAuthors();//загружает данные об авторах

  • procedure LoadBooks(aAuthor: TAuthor);Grid(aOffice: TOffice); // загружает данные о книгах

  • procedure ClearGrid(aStringGrid: TStringGrid); // очищает указанный грид

  • function SelectedAuthor: TAuthor;// возвращает выбранного в таблице автора

  • procedure UpdateSumLabel(); // обновляет label с суммой всех окладов

  1. 1   2   3   4   5

Описание структуры проекта


Проект Lazarus-это несколько связанных между собой файлов.

Главный файл проекта, называется PROJECT1.LPR

В файлах расширением *.pas хранятся программные модули проекта.

Файлы форм с расширением *LFM используются для сохранения информации о внешнем виде формы (окна разрабатываемого приложения). При переименовании названия модуля автоматически меняет свое название.

Файл PROJECT1.RES изначально содержит иконку для проекта. Создается автоматически. Имеет одноименное название с названием проекта.

Исполняемый EXE файл, который создается в процессе компиляции проекта. Если сохранить проект под другим именем, то изменят название и файлы с расширением RES (.pas), который компонуется в окончательный исполняемый файл.



Рис.10 Файлы проекта

Список литературы


1.  Гаско Р. Объектно Ориентированное Программирование. Настольная книга программиста, — СПб.: Питер 2018 г.;

2. Гаст Х. Объектно-ориентированное проектирование: концепции и программный код, — СПб.: Питер 2019 г.

3. Кнут, Д.Э. Искусство программирования. Том 1. Основные алгоритмы — Вильямс, 2017

4. Козин А.Н., Якунина Е.А. – Учебно методическое пособие/- Казань: УВО «Университет управления «ТИСБИ», 2020.

5. Козин А.Н., Таренко Л.Б. Структуры и алгоритмы обработки данных. Часть 1. Базовые структуры: стеки, очереди, списки. Учебно-методическое пособие/-Казань: УВО «Университет управления "ТИСБИ", 2017.

6. Козин А.Н., Якунина Е.А. – Учебно методическое пособие/- Казань: УВО «Университет управления «ТИСБИ», 2020.

7. Структуры и алгоритмы обработки данных. Часть 3. Поиск и сортировка данных. Теория и методика обучения. Учебно-методическое пособие / А.Н. Козин. Л.Б. Таренко. – Казань: «Университет управления «ТИСБИ». 2020.

8. Структуры и алгоритмы обработки данных. Часть 2. Поиск и сортировка данных. Теория и методика обучения. Учебно-методическое пособие / А.Н. Козин. Л.Б. Таренко. – Казань: «Университет управления «ТИСБИ». 2018

9. Мясникова Н.А. Алгоритмы и структуры данных. Учебное пособие. – КноРус, 2018

10. Тюльпинова Н.В. Алгоритмизация и программирование: Вузовское образование, 2019. – 200 с


11. Хорев П.Б. Объектно-ориентированное программирование / П.Б. Хорев. - М.: Academia, 2017. - 448 c

Приложение


unit Unit1;
{$mode objfpc}{$H+}
interface
uses

Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,

StdCtrls, Grids, Menus, LCLProc, lazutf8, unitPublishing, unitAuthor,

unitBook, LCLType, Spin;
type
{ TForm1 }
TForm1 = class(TForm)

ButtonAddAuthor: TButton;

ButtonAddBookAfter: TButton;

ButtonAddBookBefore: TButton;

ButtonAddFirstBook: TButton;

ButtonDeleteAuthor: TButton;

ButtonDeleteBook: TButton;

ObTirag: TEdit;

EditAuthorName: TEdit;

EditBookName: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

MainMenu1: TMainMenu;

MenuItem1: TMenuItem;

MenuItemSave: TMenuItem;

MenuItemLoad: TMenuItem;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

SpinEditCirculation: TSpinEdit;

StringGridAuthors: TStringGrid;

StringGridBooks: TStringGrid;

procedure ButtonAddAuthorClick(Sender: TObject);// добавление автора

procedure ButtonAddBookAfterClick(Sender: TObject);

procedure ButtonAddBookBeforeClick(Sender: TObject);

procedure ButtonAddFirstBookClick(Sender: TObject);

// добавление первой книги

procedure ButtonDeleteAuthorClick(Sender: TObject);// удаление автора

procedure ButtonDeleteBookClick(Sender: TObject); // удаление книги

procedure EditAuthorNameUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);

procedure EditCirculationKeyPress(Sender: TObject; var Key: char);

procedure EditBookNameUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);

procedure FormCreate(Sender: TObject);// создание формы

procedure Label1Click(Sender: TObject);

procedure MenuItemLoadClick(Sender: TObject);// загрузка из фалйла

procedure MenuItemSaveClick(Sender: TObject);// сохранение в файл

procedure StringGridAuthorsClick(Sender: TObject);

procedure StringGridBooksClick(Sender: TObject);

// смена выбранной строки в авторах

private

procedure LoadAuthors(); //загружает данные об авторах

procedure LoadBooks(aAuthor: TAuthor);

// загружает данные о книгах

procedure ClearGrid(aStringGrid: TStringGrid);

// очищает указанный грид

function SelectedAuthor: TAuthor; // текущий автор в таблице

procedure UpdateBtnState();

public
end;
var

Form1: TForm1;

aPublishing: TPublishing;
implementation
{$R *.lfm}
procedure TForm1.FormCreate(Sender: TObject);

begin

aPublishing := TPublishing.Create(5);

UpdateBtnState();

end;
procedure TForm1.Label1Click(Sender: TObject);

begin
end;
procedure TForm1.MenuItemLoadClick(Sender: TObject);

begin

if OpenDialog1.Execute then

begin

aPublishing := TPublishing.Create(5);

aPublishing.Load(OpenDialog1.FileName);

LoadAuthors(); // загружает таблицы

end;

end;
procedure TForm1.MenuItemSaveClick(Sender: TObject);

begin

if SaveDialog1.Execute then

aPublishing.Save(SaveDialog1.FileName);

end;
procedure TForm1.ButtonAddAuthorClick(Sender: TObject);

var

author: TAuthor;

authorName: string;

begin

authorName := EditAuthorName.Text; // считываем фамилию автора

if (not authorName.IsEmpty) then // если edit заполнен

begin

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

aPublishing.AddAuthor(author); // добалвяем автора

LoadAuthors();// перезагружаем таблицу

end

else

ShowMessage('Заполните адрес');

UpdateBtnState();

end;

procedure TForm1.ButtonAddBookAfterClick(Sender: TObject);

var

author: TAuthor;

book: TBook;

aBookName, aCirculationString: string;

begin

author := SelectedAuthor;

if (author <> nil) then

begin

aBookName := EditBookName.Text; // считываем название книги

aCirculationString := SpinEditCirculation.Text; // считываем тираж

if ((not aBookName.IsEmpty) and (not aCirculationString.IsEmpty)) then // если edit заполнен

begin

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

aBookName := StringGridBooks.Cells[0, StringGridBooks.Row]; // сохраняем название предшествующей

if (not aBookName.IsEmpty) then // проверка на заполненность полей

author.AddAfter(book, aBookName) // добалвяем книгу

else

ShowMessage('Ошибка добавления');

LoadAuthors(); // перезагружаем таблицу авторы

LoadBooks(author); // перезагружаем таблицу книги

end

else

ShowMessage('Заполните адрес');

end;

UpdateBtnState();

end;
procedure TForm1.ButtonAddBookBeforeClick(Sender: TObject);

var

author: TAuthor;

book: TBook;

aBookName, aCirculationString: string;

begin

author := SelectedAuthor;

if (author <> nil) then

begin

aBookName := EditBookName.Text; // считываем название книги

aCirculationString := SpinEditCirculation.Text; // считываем тираж

if ((not aBookName.IsEmpty) and (not aCirculationString.IsEmpty)) then // если edit заполнен

begin

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

aBookName := StringGridBooks.Cells[0, StringGridBooks.Row]; // сохраняем название предшествующей

if (not aBookName.IsEmpty) then // проверка на заполненность полей

author.AddBefore(book, aBookName) // добалвяем книгу

else

ShowMessage('Ошибка добавления');

LoadAuthors(); // перезагружаем таблицу авторы

LoadBooks(author); // перезагружаем таблицу книги

end

else

ShowMessage('Заполните всё поля');

end;

UpdateBtnState();

end;
procedure TForm1.ButtonAddFirstBookClick(Sender: TObject);

var

author: TAuthor;

book: TBook;

aBookName, aCirculationString: string;

begin

author := SelectedAuthor;

if (author <> nil) then

begin

aBookName := EditBookName.Text; // считываем название книги

aCirculationString := SpinEditCirculation.Text; // считываем тираж

if ((not aBookName.IsEmpty) and (not aCirculationString.IsEmpty)) then // если edit заполнен

begin

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

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

LoadAuthors(); // перезагружаем таблицу авторы

LoadBooks(author); // перезагружаем таблицу книги

end

else

ShowMessage('Заполните адрес');

end;

UpdateBtnState();

end;
procedure TForm1.ButtonDeleteAuthorClick(Sender: TObject);

begin

if (aPublishing.GetAuthorCount > 0) then // если что удалять

begin

aPublishing.DeleteAuthor(); // удаляем

LoadAuthors(); // перезагружаем таблицу авторы