Файл: Разработка объектной программы для обработки данных о авторах издательства.docx
Добавлен: 18.03.2024
Просмотров: 150
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
В теле цикла:
-
адресуем указатель author в текущий элемент массива:
author := AuthorList[i];
Записываем все поля в файл
writeln(f, author.GetAuthorName); // запись фамилии автора
writeln(f, author.GetBooksCount); // запись количества книг
-
Адресуем указатель book на первого автора:
book := author.GetHead.GetNext;
-
Проходим по всем книгам
while (book <> nil) do// проходим по всем книгам
-
В теле цикла записываем все поля в файл
writeln(f, book.GetBookName); // запись названия книги
writeln(f, book.GetCirculation); // запись тиража
-
Переходим к след книге
book := book.GetNext; // переходим к след элементу
-
Закрываем файл:
CloseFile(f);
В результате сохранения данных будет сформирован текстовый файл
Рис.9 Результат сохранения
Алгоритм загрузки файла:
-
Соединяем файл с переменной: Assign(aFile, Filename); -
Открываем файл на чтение: reset(aFile); -
Организуем цикл до конца файла: while not EOF(aFile) do -
В теле цикла
Считываем все поля и создаем автора
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);// создаём книгу
-
Добавляем книгу
author.AddFirst(book) // добавляем первую книгу
-
Добавляем автора в очередь:
AddAuthor(author);
-
Закрываем файл: 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 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(); // перезагружаем таблицу авторы