Объектная реализация контейнера на основе комбинированной структуры «Упорядоченный массив динамических стеков»
Курсовая работа, 20 Ноября 2012, автор: пользователь скрыл имя
Описание работы
Цель работы: получение навыков разработки объектных программ, включая создание набора собственных взаимосвязанных классов для объектной реализации специализированного контейнера. Контейнер предназначен для хранения и обработки, данных некоторой информационной задачи. Контейнер представляет собой двухуровневую структуру данных, в которой уровни реализуются разными способами – один статически на базе массива (непрерывная реализация), другой – динамически с использованием адресных связей (связная реализация).
Выданная задача «Сеть библиотек»
* информационные объекты: книги (свойства – Название, Количество экземпляров)
* книги объединяются в рамках объекта Библиотека (свойство – Номер)
*библиотеки объединяются в рамках объекта-контейнера Библиотечная Сеть
Содержание
Постановка задачи 3
Описание основных понятий и механизмов ООП 4
Теоретическое описание используемых структур данных 10
Описание разработанных классов 10
Алгоритмы реализации основных операций 13
Описание демонстрационного модуля 16
Описание использованных стандартных компонентов 19
Описание структуры проекта 21
Листинги подпрограмм разработанной программы 22
Список использованной литературы 40
Работа содержит 1 файл
Объектно-ориентированное программирование.docx
— 246.56 Кб (Скачать)begin
Writeln(f, FSome[i].GetNum); // библиотеки
Element := FSome[i].GetFirst;
while Assigned(Element) do
begin
Writeln(f, Element.GetBook.GetName, '*', Element.GetBook.GetCopyi); // книги, * - разделитель
Element := Element.GetNext;
end;
Writeln(f);
end;
CloseFile(f);
end;
end.
Листинг файла Unit1.pas
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MeineClasse, ExtCtrls, Menus, XPMan, Buttons;
type
TForm1 = class(TForm)
Label1: TLabel;
Label3: TLabel;
Panel1: TPanel;
ListLibr: TListBox;
EditNum: TEdit;
Panel2: TPanel;
ListBook: TListBox;
EditBook: TEdit;
EditCopy: TEdit;
Label2: TLabel;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
XPManifest1: TXPManifest;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ListLibrClick(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
FSomeLibrary: TSomeLibrary;
procedure ShowLibrary;
procedure ShowLibraryBook(NBook: integer);
function BookToString(const Book: TBook): string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.BookToString(const Book: TBook): string;
begin
Result := 'Название - ' + Book.GetName + ', количество - ' + IntToStr(Book.GetCopyi);
end;
procedure TForm1.ShowLibraryBook(NBook: integer);
var
Shelf: TLibrary;
Entry: TElement;
begin
ListBook.Items.Clear;
Label5.Caption:= '';
Shelf := FSomeLibrary.LibraryNo(NBook);
if not Assigned(Shelf) then Exit;
Entry := Shelf.GetFirst;
while Assigned(Entry) do
begin
ListBook.Items.Add(
Entry := Entry.GetNext;
end;
if Shelf.GetFirst <> nil then
Label5.Caption:= BookToString(Shelf.GetFirst.
end;
procedure TForm1.ShowLibrary;
var
i: integer;
begin
ListLibr.ItemIndex := -1;
ListLibr.Items.Clear;
for i := 0 to FSomeLibrary.GetCount - 1 do
ListLibr.Items.Add(IntToStr(
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FSomeLibrary := TSomeLibrary.Create(4);
ShowLibrary;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FSomeLibrary.Free;
end;
procedure TForm1.ListLibrClick(Sender: TObject);
var
No: integer;
begin
if ListLibr.ItemIndex < 0 then No := 0
else No := StrToInt(ListLibr.Items[
ShowLibraryBook(No);
end;
procedure TForm1.N2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
FSomeLibrary.LoadFile(
ShowLibrary;
ListLibrClick(ListLibr);
end;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
if SaveDialog1.Execute then
FSomeLibrary.SaveFile(
end;
procedure TForm1.N8Click(Sender: TObject);
var
i: integer;
begin
if EditNum.Text = '' then
begin
MessageDlg('Поле ввода пустое', mtError, [mbOk], 0);
EditNum.SetFocus;
EditNum.Clear;
Exit;
end;
try
i := FSomeLibrary.AddSL(StrToInt(
except
MessageDlg('Поле ввода должно содержать числовое значение', mtError, [mbOk], 0);
EditNum.SetFocus;
EditNum.Clear;
Exit;
end;
if StrToInt(EditNum.Text) <= 0 then
begin
MessageDlg('Номер библиотеки не может быть отрицательным значением или ровняться 0', mtError, [mbOk], 0);
EditNum.SetFocus;
EditNum.Clear;
Exit;
end;
ShowLibrary;
ListLibr.ItemIndex := i;
ListLibrClick(ListLibr);
EditNum.Clear;
end;
procedure TForm1.N9Click(Sender: TObject);
var
i,No: integer;
begin
No:=0;
if EditNum.Text = '' then
begin
MessageDlg('Не введен номер библиотеки', mtError, [mbOk], 0);
EditNum.SetFocus;
Exit;
end;
for i:=0 to ListLibr.Items.Count-1 do
if ListLibr.Items.Strings[i]=
No:=StrToInt(ListLibr.Items.
if FSomeLibrary.DeleteSL(No) <> 0 then
begin
ShowLibrary;
ListLibrClick(ListLibr);
end else
MessageDlg('Удаляемая библиотека не найдена!', mtError, [mbOk], 0);
EditNum.Text := '';
end;
procedure TForm1.N10Click(Sender: TObject);
var
B: TBook;
No,Tip: integer;
Shelf: TLibrary;
begin
if ListLibr.ItemIndex < 0 then Exit;
No := StrToInt(ListLibr.Items[
if (EditBook.Text = '') or (EditCopy.Text = '') then
begin
MessageDlg('Не введены данные о книге', mtError, [mbOk], 0);
EditBook.SetFocus;
Exit;
end;
try
Tip := StrToInt(EditCopy.Text);
except
MessageDlg('Поле ввода должно содержать числовое значение', mtError, [mbOk], 0);
ShowLibraryBook(No);
EditCopy.Clear;
Exit;
end;
if StrToInt(EditCopy.Text) <= 0 then
begin
MessageDlg('Количество экземпляров не может быть отрицательным значением или ровняться 0', mtError, [mbOk], 0);
ShowLibraryBook(No);
EditCopy.Clear;
Exit;
end;
No := StrToInt(ListLibr.Items[
Shelf := FSomeLibrary.LibraryNo(no);
if not Assigned(Shelf) then Exit;
b := TBook.Create(EditBook.Text, StrToInt(EditCopy.Text));
Shelf.AddBook(B);
ShowLibraryBook(No);
EditBook.Clear;
EditCopy.Clear;
end;
procedure TForm1.N11Click(Sender: TObject);
var
No: integer;
Shelf: TLibrary;
begin
if ListLibr.ItemIndex < 0 then No := 0
else No := StrToInt(ListLibr.Items[
Shelf := FSomeLibrary.LibraryNo(No);
if not Assigned(Shelf) then Exit;
if Shelf.DelFirst <> nil then ListLibrClick(ListLibr) else
MessageDlg('Стек пуст!', mtError, [mbOk], 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
N8.Click;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
N10.Click;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
N9.Click;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
N11.Click;
end;
end.
Список использованной литературы
- Шпак Ю. А. Turbo Pascal 7.0 на примерах/Под ред. Ю. С. Ковтанюка — К.: Издательство Юниор, Год: 2003. Страниц: 496
- Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0 М.; Бином Универсал, К.: ЮНИОР, Год: 1997 - 496 с., ил.
- Мизрохи С.В. TURBO PASCAL и объектно-ориентированное программирование. М., Год: 1992. Страниц: 192
- Род Стивенс - Готовые алгоритмы. Издательство: Питер, ДМК пресс Год: 2004. Страниц: 381.
- Джулиан Бакнелл. Фундаментальные алгоритмы на Delphi. Издательство: ДиаСофтЮП. Год: 2003. Язык: Русский. Страниц: 560.
- Павловская Т.А., Щупак Ю.А. С++. Объектно-ориентированное программирование: Практикум. – СПб.: Питер, Год: 2004. Страниц: 239
- Грэхем И. Объектно-ориентированные методы. Принципы и практика. – М.: Вильямс, Год: 2004. Страниц: 880
- Г. С. Иванова, Т. Н. Ничушкина, Е. К. Пугачев Технология программирования : Объектно-ориентированное программирование, Издательство: МГТУ им. Н. Э. Баумана, Год: 2005. Страниц: 320.