Объектная реализация контейнера на основе комбинированной структуры «Упорядоченный массив динамических стеков»

Автор: Пользователь скрыл имя, 20 Ноября 2012 в 13:07, курсовая работа

Описание работы

Цель работы: получение навыков разработки объектных программ, включая создание набора собственных взаимосвязанных классов для объектной реализации специализированного контейнера. Контейнер предназначен для хранения и обработки, данных некоторой информационной задачи. Контейнер представляет собой двухуровневую структуру данных, в которой уровни реализуются разными способами – один статически на базе массива (непрерывная реализация), другой – динамически с использованием адресных связей (связная реализация).
Выданная задача «Сеть библиотек»
* информационные объекты: книги (свойства – Название, Количество экземпляров)
* книги объединяются в рамках объекта Библиотека (свойство – Номер)
*библиотеки объединяются в рамках объекта-контейнера Библиотечная Сеть

Содержание

Постановка задачи 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(BookToString(Entry.GetBook));

    Entry := Entry.GetNext;

  end;

  if Shelf.GetFirst <> nil then

    Label5.Caption:= BookToString(Shelf.GetFirst.GetBook);

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(FSomeLibrary.GetLibrary(i).GetNum));

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[ListLibr.ItemIndex]);

  ShowLibraryBook(No);

end;

 

procedure TForm1.N2Click(Sender: TObject);

begin

  if OpenDialog1.Execute then

  begin

    FSomeLibrary.LoadFile(OpenDialog1.FileName);

    ShowLibrary;

    ListLibrClick(ListLibr);

  end;

end;

 

procedure TForm1.N3Click(Sender: TObject);

begin

  if SaveDialog1.Execute then

    FSomeLibrary.SaveFile(SaveDialog1.FileName);

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(EditNum.Text));

  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]=EditNum.Text then

    No:=StrToInt(ListLibr.Items.Strings[i]);

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[ListLibr.ItemIndex]);

  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[ListLibr.ItemIndex]);

  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[ListLibr.ItemIndex]);

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.

 

 

 

 

 

Список  использованной литературы

  1. Шпак Ю. А. Turbo Pascal 7.0 на примерах/Под ред. Ю. С. Ковтанюка — К.: Издательство Юниор, Год: 2003. Страниц: 496
  2. Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0 М.; Бином Универсал, К.: ЮНИОР, Год: 1997 - 496 с., ил.
  3. Мизрохи С.В. TURBO PASCAL и объектно-ориентированное программирование. М., Год: 1992. Страниц: 192
  4. Род Стивенс - Готовые алгоритмы. Издательство: Питер, ДМК пресс Год: 2004. Страниц: 381.
  5. Джулиан Бакнелл. Фундаментальные алгоритмы на Delphi. Издательство: ДиаСофтЮП. Год: 2003. Язык: Русский. Страниц: 560.
  6. Павловская Т.А., Щупак Ю.А. С++. Объектно-ориентированное программирование: Практикум. – СПб.: Питер, Год: 2004. Страниц: 239
  7. Грэхем И. Объектно-ориентированные методы. Принципы и практика. – М.: Вильямс, Год: 2004. Страниц: 880
  8. Г. С. Иванова, Т. Н. Ничушкина, Е. К. Пугачев Технология программирования : Объектно-ориентированное программирование, Издательство: МГТУ им. Н. Э. Баумана, Год: 2005. Страниц: 320.

Информация о работе Объектная реализация контейнера на основе комбинированной структуры «Упорядоченный массив динамических стеков»