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

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


Скачать 183.44 Kb.
НазваниеРазработка объектной программы для обработки данных о авторах издательства
АнкорРазработка объектной программы для обработки данных о авторах издательства»
Дата14.02.2023
Размер183.44 Kb.
Формат файлаdocx
Имя файла4 этап переделанный 2.docx
ТипКурсовая
#936489
страница4 из 5
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(); // перезагружаем таблицу авторы

end

else

ShowMessage('Нечего удалять');

UpdateBtnState();

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

var

aName: string;

author: TAuthor;

begin

// удялаем - выбранный в таблице элемент

aName := StringGridBooks.Cells[0, StringGridBooks.Row];

author := SelectedAuthor();

if ((author <> nil) and (not aName.IsEmpty)) then

begin

if not author.Delete(aName) then

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

LoadAuthors();

LoadBooks(author);

end;

UpdateBtnState();

end;
procedure TForm1.EditAuthorNameUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);

begin

case UTF8Key of

'A'..'Z', 'a'..'z', 'а'..'я', 'А'..'Я', #8, #32: ;

else

UTF8Key := #0;

end;

end;
procedure TForm1.EditCirculationKeyPress(Sender: TObject; var Key: char);

begin

if not CharInSet(Key, ['0' .. '9', #8]) then

Key := #0;

end;
procedure TForm1.EditBookNameUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);

begin

case UTF8Key of

'A'..'Z', 'a'..'z', 'а'..'я', 'А'..'Я','0'..'9', #8, #32: ;

else

UTF8Key := #0;

end;

end;
procedure TForm1.LoadAuthors();

var

item: TAuthor;

i: integer;

begin

ClearGrid(StringGridAuthors);
for i := 0 to aPublishing.GetAuthorCount - 1 do// проходим по всем авторам

begin

item := aPublishing.GetAuthor(i);

StringGridAuthors.Cells[0, i + 1] := item.GetAuthorName();

StringGridAuthors.Cells[1, i + 1] := item.GetBooksCount.ToString;

StringGridAuthors.Cells[2, i + 1] := item.SumCirculation.ToString;

end;
LoadBooks(SelectedAuthor); // загружаем связные данные
end;
procedure TForm1.StringGridAuthorsClick(Sender: TObject);

var

author: TAuthor;

begin

author := SelectedAuthor;

LoadBooks(author);

UpdateBtnState();

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

begin

UpdateBtnState();

end;
procedure TForm1.LoadBooks(aAuthor: TAuthor);

var

temp: TBook;

index: integer;

begin

ClearGrid(StringGridBooks);
if (aAuthor = nil) then

exit;

if StringGridBooks.RowCount - 1 < aAuthor.GetBooksCount then

begin

StringGridBooks.RowCount := StringGridBooks.FixedRows + aAuthor.GetBooksCount; //устанавливаем колиество строк

end;
index := 1;

temp := aAuthor.GetHead().GetNext;

while (temp <> nil) do

begin

StringGridBooks.Cells[0, index] := temp.GetBookName;

StringGridBooks.Cells[1, index] := temp.GetCirculation.ToString;

Inc(index);

temp := temp.GetNext;

end;

ObTirag.Text:=IntToStr(aPublishing.GetObTirag);

end;
function TForm1.SelectedAuthor: TAuthor;

begin

Result := nil;

if (StringGridAuthors.Row > 0) then

if (StringGridAuthors.Row <= aPublishing.GetAuthorCount) then

Result := aPublishing.GetAuthor(StringGridAuthors.Row - 1);

end;
procedure TForm1.UpdateBtnState();

var aAuthor : TAuthor; selectedBook:string;

begin

aAuthor:= SelectedAuthor;

selectedBook := StringGridBooks.Cells[0, StringGridBooks.Row];

ButtonDeleteAuthor.Enabled:= aPublishing.GetAuthorCount > 0;

ButtonAddFirstBook.Enabled := (aAuthor <> nil) and (aAuthor.GetBooksCount = 0);

ButtonAddBookAfter.Enabled := (aAuthor <> nil) and (not selectedBook.IsEmpty) and (aAuthor.GetBooksCount > 0);

ButtonAddBookBefore.Enabled := (aAuthor <> nil) and (not selectedBook.IsEmpty) and (aAuthor.GetBooksCount > 0);

ButtonDeleteBook.Enabled := (aAuthor <> nil) and (not selectedBook.IsEmpty) and (aAuthor.GetBooksCount > 0);
end;
procedure TForm1.ClearGrid(aStringGrid: TStringGrid);

var

i: integer;

j: integer;

begin

for i := 0 to aStringGrid.ColCount - 1 do

for j := 1 to aStringGrid.RowCount - 1 do

aStringGrid.Cells[i, j] := '';

end;
end.

unit unitPublishing;
interface
uses

Classes, unitAuthor, unitBook;
type
TPublishing = class // класс издетальство

private

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

AuthorList: array of TAuthor; // динамичесий массив

ObTirag:integer;

public

constructor Create(aSize: integer);

function GetAuthorCount(): integer; // чтение количества авторов

function GetObTirag:integer; // подсчёт общего тиража издательства

procedure AddAuthor(aAuthor: TAuthor);// добавление автора

function DeleteAuthor(): boolean; // удаление автора

function GetAuthor(index: integer): TAuthor; // получает автора по номеру в очереди

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

procedure Save(Filename: string); // сохранение структуры в файл

procedure Load(Filename: string); // загрузка структуры из файла

end;
implementation
constructor TPublishing.Create(aSize: integer);

begin

AuthorCount := 0;

SetLength(AuthorList, aSize); // устанавливаем изначальную размерность массива

end;
function TPublishing.GetAuthorCount(): integer;

begin

Result := AuthorCount;

end;
function TPublishing.GetObTirag:integer;

Var i:integer;

begin

ObTirag:=0;

if AuthorCount=0 then

result:=0

else

begin

for i:= 0 to AuthorCount-1 do

begin

ObTirag:=ObTirag+ AuthorList[i].SumCirculation;

end;

result:=ObTirag;

end;

end;
procedure TPublishing.AddAuthor(aAuthor: TAuthor);

begin

if (AuthorCount = Length(AuthorList)) then // если мест нет, увеличиваем размер массива

begin

SetLength(AuthorList, Length(AuthorList) * 2);

end;

AuthorList[AuthorCount] := aAuthor;// добавляем в конец массива новый элемент

Inc(AuthorCount); // увеличиваем счётчик числа элементов

end;
function TPublishing.DeleteAuthor(): boolean;

var

i: integer;

begin

Result := False;

if (AuthorCount > 0) then

begin

for i := 0 to AuthorCount - 2 do

AuthorList[i] := AuthorList[i + 1]; // перемещает ячейки на одну влево

Dec(AuthorCount); // уменьшаем счётчик числа элементов

Result := True;

end;

end;
function TPublishing.GetAuthor(index: integer): TAuthor;

begin

Result := AuthorList[index];

end;
function TPublishing.SumCirculation: integer;

var

i: integer;

begin

Result := 0;

for i := 0 to AuthorCount - 1 do

begin

Result := Result + AuthorList[i].SumCirculation;

end;

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

var

f: Textfile;

author: TAuthor;

book: TBook;

i: integer;

1   2   3   4   5


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