Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 02:13   #11
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

как я знаю ООП'исты(как звучит то)) все додвязывают на 3 свои концепции,поэтому наверное лучше использовать наследование при проектировании.

Класс Персона
от него наследуются классы Преподы и Студенты с полями Зарплата и Стипендия.

ну и дальше, я не знаю чем преподы различаются, "для меня они все на одно лицо"))


Код:

type
  TPersons = class(TObject)
   public
    name: string;
  end;

  TPrepod = class(TPersons)
   public
    Zarplata: integer;
    Staj:integer;
    Dolgnost:string;
  end;

  TStud = class(TPersons)
   public
    Stipend: integer;
    Kurs:integer;
    Status:string;//))
  end;
ну типа такой реализация должна быть, можно и дальше наследовать. а что там уже требуется по проге сделать,я не дочитал))

похоже нужно сделать массив всех этих выдающихся людей типа TPerson, а потом с помощью is и as производить различные операции обработки и вывода этого массива
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 10.06.2010, 13:07   #12
-ushёl-
Форумчанин
 
Аватар для -ushёl-
 
Регистрация: 04.02.2009
Сообщений: 141
Вопрос

Код:

type
  TPersons = class(TObject)
   public
    name: string;
  end;

  TPrepod = class(TPersons)
   public
    Zarplata: integer;
    Staj:integer;
    Dolgnost:string;
  end;

  TStud = class(TPersons)
   public
    Stipend: integer;
    Kurs:integer;
    Status:string;//))
  end;
А как мне далее привязать этот(и) классы к графическому фэйсу?
Просто я пытаюсь сделать простое решение,но видимо и себя запутал и остальных.
Ок! Создаю переменные от этих классов:
var
Form1: TForm1;
FPr: TPrepod;
FSt: TStud;
PREP: array[1..50] of TPrepod;
STUD: array[1..50] of TStud;
Т.е. получается у меня есть 2 переменные класса TPrepod и TStud и два массива на 50 персон каждый тех же классов;Вопрос,
к примеру,через какой компонент и как мне вносить данные по персонам в программе?Ведь когда я размещаю на форме определённый компонент(edit для ввода имён и т.д.) он ведь автоматически привязывается к собственному классу Дельфи,а не к новому классу TPersons?

Последний раз редактировалось -ushёl-; 10.06.2010 в 13:10.
-ushёl- вне форума Ответить с цитированием
Старый 10.06.2010, 13:24   #13
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ты можешь привязать своих студентов к форме, в момент ее создания. Напишешь в там
Код:
FPr:=TPrepod.Create;
ну и все остальные переменные также.
Теперь у тебя и Edit и FPr принадлежат форме и ты сможешь написать что-то типа
Код:
FPr.Dolgnost:=Edit1.Text;
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 12.06.2010, 14:18   #14
-ushёl-
Форумчанин
 
Аватар для -ushёl-
 
Регистрация: 04.02.2009
Сообщений: 141
Печаль

Цитата:
Сообщение от Utkin Посмотреть сообщение
Ты можешь привязать своих студентов к форме, в момент ее создания. Напишешь в там
Код:
FPr:=TPrepod.Create;
ну и все остальные переменные также.
Теперь у тебя и Edit и FPr принадлежат форме и ты сможешь написать что-то типа
Код:
FPr.Dolgnost:=Edit1.Text;
Я попытался сделать примерно тледующее:При запуске программы появляется вопрос перед пользователем(кто ты?),когда пользователь указывает кто он(через CheckBox) и нажимает кнопку BitBtn1 то выполняется процедура Base(я её поместил в pablic в обоих классах),
в Base происходит запись через компонент Edit1 и вывод в Memo1
Если возможно что то исправить или сделать по другому,помогите плз, лабораторная горит очень =(

p.s.Не получается запустить,в чём может быть проблема?=(

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;

type
TForm1 = class(TForm)
Label1: TLabel;
BitBtn1: TBitBtn;
Edit1: TEdit;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
Label2: TLabel;
Memo1: TMemo;
procedure BitBtn1Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Const
N: integer;
type
TPersons = class(TObject)
public
name: string;
end;

TPrepod = class(TPersons)
private
Zarplata: array[1..N] of integer;
Staj: array[1..N] of integer;
Dolgnost: array[1..N] of string;
public
procedure Base;
end;

TStud = class(TPersons)
private
Stipend: array[1..N] of integer;
Kurs: array[1..N] of integer;
Status:array[1..N] of string;
public
procedure Base;
end;
var
Form1: TForm1;
FPr: TPrepod;
FSt: TStud;
implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
FPr:=TPrepod.Create;
procedure Base;
FreeAndNil(FPr);
FSt:=TStud.Create;
procedure Base;
FreeAndNil(FSt);
end;

procedure Base
var
i:integer;
begin
Form1.Label2.Caption:='Kto Vi?';
if checkBox1.Checked then //prepodavately
for i:=1 to N do
begin
Label1.Caption:='vvedite vashu dolgnost';
FPr.Dolgnost[i]:=Edit1.Text;
Memo1.Lines:=FPr.Dolgnost[i];
Edit.Text:='';
Label1.Caption:='vvedite vash staj';
FPr.Staj[i]:=Edit1.Text;
Memo1.Lines:=FPr.Staj[i];
Edit.Text:='';
Label1.Caption:='vasha zarplata';
FPr.Zarplata[i]:=Edit1.Text;
Memo1.Lines:=FPr.Zarplata[i];
Edit.Text:='';
end
else //studenty
for i:=1 to N do
begin
Label1.Caption:='vvedite vash status';
FSt.Status[i]:=Edit1.Text;
Memo1.Lines:=FSt.Status[i];
Edit.Text:='';
Label1.Caption:='vvedite vash kurs';
FSt.Kurs[i]:=Edit1.Text;
Memo1.Lines:=FSt.Kurs[i];
Edit.Text:='';
Label1.Caption:='vasha stipendia';
FSt.Stipend[i]:=Edit1.Text;
Memo1.Lines:=FSt.Stipend[i];
Edit.Text:='';
end;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
FPr.Base;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
FSt.Base;
end;

end.

Последний раз редактировалось -ushёl-; 12.06.2010 в 14:21.
-ushёl- вне форума Ответить с цитированием
Старый 12.06.2010, 16:59   #15
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

Накидал тебе ООП'шный вариант:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    RadioGroup1: TRadioGroup;
    Panel1: TPanel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    ListBox1: TListBox;
    GroupBox1: TGroupBox;
    Memo1: TMemo;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


TPersons = class(TObject)
public
name: string;
end;

TPrepod = class(TPersons)
public
Zarplata: integer;
Staj: integer;
Dolgnost: string;
end;

TStud = class(TPersons)
public
Stipend: integer;
Kurs: integer;
Status: string;
end;

var
  Form1: TForm1;
  mas:array [1..50] of TPersons;//массив всех персон
  i:byte=0;//текущее количество элементов в массиве

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); //добавление персоны
begin
inc(i);
case RadioGroup1.ItemIndex of
0:
begin
mas[i]:=TPrepod.Create;
mas[i].name:=Edit1.Text;
(mas[i] as TPrepod).Zarplata:=strtoint(Edit2.Text);
(mas[i] as TPrepod).Staj:=strtoint(Edit3.Text);
(mas[i] as TPrepod).Dolgnost:=edit4.Text;
end;
1:
begin
mas[i]:= TStud.Create;
mas[i].name:=Edit1.Text;
(mas[i] as TStud).Stipend:=strtoint(Edit2.Text);
(mas[i] as TStud).Kurs:=strtoint(Edit3.Text);
(mas[i] as TStud).Status:=edit4.Text;
end;
end;

ListBox1.Items.Add(mas[i].name);
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);//выбор типа персоны
begin
case RadioGroup1.ItemIndex of
0:
begin
Label2.Caption:='Зарплата';
Label3.Caption:='Стаж';
Label4.Caption:='Должность';
end;
1:
begin
Label2.Caption:='Стипендия';
Label3.Caption:='Курс';
Label4.Caption:='Статус';
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);//вывод информации о персоне
var
count:byte;
begin
memo1.Clear;
count:=ListBox1.ItemIndex+1;
if (mas[count] is TPrepod) then
begin
Memo1.Lines.Add('Преподаватель:');
Memo1.Lines.Add('Имя:');
Memo1.Lines.Add(mas[count].name);
Memo1.Lines.Add('Зарплата:');
Memo1.Lines.Add(inttostr((mas[count] as TPrepod).Zarplata));
Memo1.Lines.Add('Стаж:');
Memo1.Lines.Add(inttostr((mas[count] as TPrepod).Staj));
Memo1.Lines.Add('Должность:');
Memo1.Lines.Add((mas[count] as TPrepod).Dolgnost);
end;

if mas[count] is TStud then
begin
Memo1.Lines.Add('Студент:');
Memo1.Lines.Add('Имя:');
Memo1.Lines.Add(mas[count].name);
Memo1.Lines.Add('Стипендия:');
Memo1.Lines.Add(inttostr((mas[count] as TStud).Stipend));
Memo1.Lines.Add('Курс:');
Memo1.Lines.Add(inttostr((mas[count] as TStud).Kurs));
Memo1.Lines.Add('Статус:');
Memo1.Lines.Add((mas[count] as TStud).Status);
end;

end;

end.

Проект
ООП для форума.zip

Принцип: создаешь массив объектов типа "Персона" потом добавляешь и обрабатываешь элементы через наследуемые классы. Полистай код. Остальной функционал думаю прикрутишь.
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 13.06.2010, 01:02   #16
-ushёl-
Форумчанин
 
Аватар для -ushёl-
 
Регистрация: 04.02.2009
Сообщений: 141
По умолчанию

Просто the best!! Благодарю!
-ushёl- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi7.Как создать 3 рабочих компонента CheckBox? -ushёl- Общие вопросы Delphi 2 21.03.2010 16:43
как создать класс для ввода времени kireev Помощь студентам 0 18.01.2010 17:14
Как создать собственный формат blackstersl Общие вопросы Delphi 7 22.06.2009 15:14
Собственный класс диалогового окна на чистом WinApi в Delphi Iber Win Api 19 01.12.2008 15:40
Рисование многоугольника (собственный класс) MaTBeu Общие вопросы C/C++ 1 08.12.2007 14:53