
Шустрый

Профиль
Группа: Участник
Сообщений: 65
Регистрация: 22.10.2006
Репутация: нет Всего: нет
|
Вот что получилось в итоге. Код рабочий. Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Grids;
// класс «книга» type TBook=class private Author : String; // автор Name : String; // название книги Year : Integer; // год Publishing : String; // издание public constructor Create(aAuthor:String; aName:String; aYear:Integer; aPublishing:String); destructor Destroy; end;
// класс «учебник» type TTextBook=class(TBook) private Subject : String; // предмет ClassNum : Integer; // класс public constructor Create(aAuthor:String; aName:String; aYear:Integer; aPublishing:String; aSubject:String; aClassNum:Integer); destructor Destroy; function Info:String; end;
// класс «художественная книга» type TArtBook=class(TBook) private Genre : String; // жанр public constructor Create(aAuthor:String; aName:String; aYear:Integer; aPublishing:String; aGenre:String); destructor Destroy; function Info:String; end;
// класс «читатель» type TReader=class private FirstName : String; // имя SecondName : String; // фамилия Year : Integer; // год рождения Address : String; // адрес проживания Name : String; // название взятой книги Date : TDateTime; // дата возвращения взятой книги public constructor Create(aFirstName:String; aSecondName:String; aYear:Integer; aAddress:String; aName:String; aDate:TDateTime); destructor Destroy; function Info:String; end;
// класс формы type TForm1 = class(TForm) GroupBox1: TGroupBox; BookComboBox: TComboBox; FirstNameLabel: TLabel; FirstNameEdit: TEdit; SecondNameLabel: TLabel; SecondNameEdit: TEdit; YearComboBox: TComboBox; YearLabel: TLabel; AddressEdit: TEdit; AddressLabel: TLabel; BookLabel: TLabel; DatePicker: TDateTimePicker; DateLabel: TLabel; AddReaderButton: TButton; TypeBookComboBox: TComboBox; TypeBookLabel: TLabel; ViewReaderButton: TButton; procedure FormShow(Sender: TObject); procedure TypeBookComboBoxSelect(Sender: TObject); procedure AddReaderButtonClick(Sender: TObject); procedure ViewReaderButtonClick(Sender: TObject); private procedure FormDefault(); procedure UpdateTypeBook(); public
end;
const size = 10; // размер списка
var Form1 : TForm1; TextBook : array[1..size] of TTextBook; ArtBook : array[1..size] of TArtBook; Reader : array[1..size] of TReader; n : Integer = 0;
implementation
{$R *.dfm}
// конструктор класса «книга» constructor TBook.Create(aAuthor:String; aName:String; aYear:Integer; aPublishing:String); begin Author := aAuthor; Name := aName; Year := aYear; Publishing := aPublishing; end;
// деструктор класса «книга» destructor TBook.Destroy; begin inherited; end;
// -------------------------- // // конструктор класса «учебник» constructor TTextBook.Create(aAuthor:String; aName:String; aYear:Integer; aPublishing:String; aSubject:String; aClassNum:Integer); begin inherited Create(aAuthor,aName,aYear,aPublishing); Subject := aSubject; ClassNum := aClassNum; end;
// деструктор класса «учебник» destructor TTextBook.Destroy; begin inherited; end;
// функция получения выбранного значения function TTextBook.Info:String; begin result := Name + ', автор: ' + Author + ' год: ' + IntToStr(Year) + ', издание: ' + Publishing + ', предмет: ' + Subject + ', класс: ' + IntToStr(ClassNum); end;
// -------------------------- // // конструктор класса «художественная книга» constructor TArtBook.Create(aAuthor:String; aName:String; aYear:Integer; aPublishing:String; aGenre:String); begin inherited Create(aAuthor,aName,aYear,aPublishing); Genre := aGenre; end;
// деструктор класса «художественная книга» destructor TArtBook.Destroy; begin inherited; end;
// функция получения выбранного значения function TArtBook.Info:String; begin result := Name + ', автор: ' + Author + ' год: ' + IntToStr(Year) + ', издание: ' + Publishing + ', жанр: ' + Genre; end;
// -------------------------- // // конструктор класса «читатель» constructor TReader.Create(aFirstName:String; aSecondName:String; aYear:Integer; aAddress:String; aName:String; aDate:TDateTime); begin FirstName := aFirstName; SecondName := aSecondName; Year := aYear; Address := aAddress; Name := aName; Date := aDate; end;
// деструктор класса «читатель» destructor TReader.Destroy; begin inherited; end;
// функция получения выбранного значения function TReader.Info:String; begin result := 'Читатель: ' + FirstName + ' ' + SecondName + ' (' + IntToStr(Year) + ')' + sLineBreak + 'Адрес: ' + Address + sLineBreak + 'Книга: ' + Name + sLineBreak + 'Дата возвращения книги: ' + DateToStr(Date); end;
// -------------------------------------------------------------------------- // // ПРОЦЕДУРА ПОКАЗА ФОРМЫ procedure TForm1.FormShow(Sender: TObject); var i: Integer; begin // добавляем в список года рождения читателя for i := 2000 downto 1950 do begin YearComboBox.Items.Add(IntToStr(i)); end; // добавляем в массив список учебников TextBook[1] := TTextBook.Create('Маранцман В.Г.','Литература',2005,' Просвещение','Литература',9); TextBook[2] := TTextBook.Create('Алексеев А.И.','География России: Хозяйство и географические районы.',2007,'Дрофа','География',9); TextBook[3] := TTextBook.Create('Каленчук М.Л.','Русский язык',2010,'Академкнига','Русский язык',4); TextBook[4] := TTextBook.Create('Чекин А.Л.','Математика',2010,'Академкнига','Математика',1); TextBook[5] := TTextBook.Create('Игнатов А.В.','История России. XIX век.',2010,'Дрофа','История',8); TextBook[6] := TTextBook.Create('Горячев А.В.','Информатика',2009,'Баласс','Информатика',2); // добавляем в массив список художественных книг ArtBook[1] := TArtBook.Create('Николай Гоголь','Мертвые души',2008,'Астрель','Роман'); ArtBook[2] := TArtBook.Create('Достоевский Ф.М.','Преступление и наказание',2009,'Сибирское университетское издательство','Роман'); ArtBook[3] := TArtBook.Create('Иван Тургенев','Отцы и дети',2007,'Олимп','Роман'); ArtBook[4] := TArtBook.Create('Мамин-Сибиряк Д.','Серая шейка',2008,'ТриМаг','Сказка'); ArtBook[5] := TArtBook.Create('Джек Лондон','Белый клык',2008,'Астрель','Повесть'); ArtBook[6] := TArtBook.Create('Джек Лондон','Сердца трех',2009,'Астрель','Роман'); ArtBook[7] := TArtBook.Create('Пришвин М.','Кладовая солнца',2007,'Детская литература','Сказка'); // устанавливаем значение элементов формы по умолчанию FormDefault(); end;
// КНОПКА: ДОБАВИТЬ ЧИТАТЕЛЯ procedure TForm1.AddReaderButtonClick(Sender: TObject); begin if n < size then begin n:=n+1; Reader[n]:=TReader.Create(FirstNameEdit.Text,SecondNameEdit.Text,StrToInt(YearComboBox.Text),AddressEdit.Text,BookComboBox.Text,DatePicker.Date); // устанавливаем значение элементов формы по умолчанию FormDefault(); end else begin MessageDlg('Список заполнен',mtInformation, [mbOK],0); end; end;
// КНОПКА: ПРОСМОТР СПИСКА ЧИТАТЕЛЕЙ procedure TForm1.ViewReaderButtonClick(Sender: TObject); var i : Integer; st : String; begin if n > 0 then begin for i:=1 to size do begin if Reader[i] <> nil then begin st:=st + Reader[i].Info + sLineBreak + sLineBreak; end; end; MessageDlg('Cпиcoк:' + sLineBreak + st,mtInformation, [mbOK],0); end else begin MessageDlg('Список пуст',mtInformation, [mbOK],0); end; end;
// ЭЛЕМЕНТ ВЫБОРА ТИПА КНИГИ procedure TForm1.TypeBookComboBoxSelect(Sender: TObject); begin UpdateTypeBook(); end;
// -------------------------------------------------------------------------- // // ПРОЦЕДУРА УСТАНОВКИ ЗНАЧЕНИЙ ЭЛЕМЕНТОВ ФОРМЫ ПО УМОЛЧАНИЮ procedure TForm1.FormDefault(); begin // устанавливаем значение элементов по умолчанию FirstNameEdit.Text := ''; SecondNameEdit.Text := ''; YearComboBox.ItemIndex := YearComboBox.Items.IndexOf('1987'); AddressEdit.Text := ''; TypeBookComboBox.ItemIndex := 0; BookComboBox.ItemIndex := -1; DatePicker.Date := Date(); // обновляем выбранный тип книги UpdateTypeBook; // устанавливаем курсор в поле по умолчанию FirstNameEdit.SetFocus; end;
// ПРОЦЕДУРА ВЫБОРА ТИПА КНИГИ procedure TForm1.UpdateTypeBook(); var i : Integer; begin // очищаем элемент выбора типа книги BookComboBox.Items.Clear; // в зависимости от указанного типа производим добавление соответствующих книг Case TypeBookComboBox.ItemIndex of 0 : begin for i:=1 to size do begin if TextBook[i] <> nil then begin BookComboBox.Items.Add(TextBook[i].Info); end; end; end; 1 : begin for i:=1 to size do begin if ArtBook[i] <> nil then begin BookComboBox.Items.Add(ArtBook[i].Info); end; end; end; end; end;
end.
|
Присоединённый файл ( Кол-во скачиваний: 5 )
1.zip 15,96 Kb
|