|
Вопрос # 3 584/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Я сделал задачу, но делал я её в консольном, а надо в оконном. Как сделать, чтобы было правильно?
Код ниже:
Приложение: Переключить в обычный режим- program Records;
-
- {$APPTYPE CONSOLE}
-
- uses
- SysUtils;
-
- type
- Cathedra = record
- Name : String;
- Number : Integer;
- Head : record
- FIO : String;
- Phone : String;
- end;
- CathedraPhone : String;
- Staff : Integer;
- end;
-
- var
- DB : Array[0 .. 2] of Cathedra=(
- (Name:'Cathedra 1';Number:1;Head:(FIO:'Kosmachev
M.I.';Phone:'111-222-333');CathedraPhone:'222-333-444';Staff:10),
- (Name:'Cathedra 2';Number:2;Head:(FIO:'Kazakov
N.P.';Phone:'111-333-111');CathedraPhone:'442-777-444';Staff:30),
- (Name:'Cathedra 3';Number:3;Head:(FIO:'Prosyannikov
M.S.';Phone:'222-232-333');CathedraPhone:'333-323-444';Staff:20));
-
- procedure SearchAndPrint(DB : Array of Cathedra; N : Integer; Number : Integer);
- var
- I : Integer;
- begin
-
- for I := 0 to N - 1 do
- if DB[I].Number = Number then
- begin
- WriteLn(' found:');
- WriteLn(' Name: ', DB[I].Name);
- WriteLn(' Number: ', DB[I].Number);
- WriteLn(' Head: ', DB[I].Head.FIO, ', ', DB[I].Head.Phone);
- WriteLn(' Phone: ', DB[I].CathedraPhone);
- WriteLn(' Staff: ', DB[I].Staff);
- Exit;
- end;
- WriteLn(' not found.');
- end;
-
- var
- Number : Integer;
-
- begin
- Write('Enter cathedra number to search: ');
- ReadLn(Number);
- SearchAndPrint(DB, 3, Number);
- WriteLn('Press ENTER to exit...');
- ReadLn;
- end.
|
Вопрос задал: ljtop (статус: Посетитель)
Вопрос отправлен: 25 декабря 2009, 21:37
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Егор
Здравствуйте, ljtop!
Как вариант: можно воспользоваться компонентом Edit для ввода информации (вместо Readln) и Memo для вывода (вместо Writeln).
Введённое в Edit число надо преобразовать из текста в число. Это делается с помощью функции StrToInt.
Перед записью хорошо бы очистить Memo методом Clear - Memo1.Lines.Clear. Для записи в Memo используется метод Add - Memo1.Lines.Add('добавляемая строчка'). Если нужно вывести в Memo число, то последнее нужно преобразовать в строку - IntToStr(Number).
В общем, последовательность действий:
1) Запускаете дельфи - у вас автоматически будет создан проект с оконным интерфейсом.
2) Ставите на форму текстовое поле (Edit). В свойство Text компонента Edit прописываете, например, единичку.
3) Перед Edit ставите метку (Label), в свойство Caption прописываете "Введите номер кафедры"
4) Справа от Edit ставите кнопку (Button), в свойство Caption прописываете "Поиск"
6) Ниже ставите компонент Memo.
Расположение компонентов может быть и иным - на ваш вкус.
7) Делаете двойной щелчок по кнопке - попадаете в редактор кода, в обработчик нажатия на кнопку. Там прописываете следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
Number : integer;
begin
Number := StrToInt(Edit1.Text); // тут мы берём из Edit текст и преобразуем в число
SearchAndPrint(DB, 3, Number); // вызываем функцию поиска
end;
8) Затем добавляете процедуру SearchAndPrint - для этого поднимаетесь по коду выше, в раздел public. Там прописываете:
public
procedure SearchAndPrint(DB: array of Cathedra; N, Number: Integer);
Затем ниже, в разделе implementation прописываете код самой процедуры:
implementation
{$R *.dfm}
procedure TForm1.SearchAndPrint(DB: array of Cathedra; N, Number: Integer);
var
I : Integer;
begin
Memo1.Lines.Clear;
for I := 0 to N - 1 do
if DB[I].Number = Number then
begin
Memo1.Lines.Add(' found:');
Memo1.Lines.Add(' Name: ' + DB[I].Name);
Memo1.Lines.Add(' Number: ' + IntToStr(DB[I].Number));
Memo1.Lines.Add(' Head: ' + DB[I].Head.FIO + ', ' + DB[I].Head.Phone);
Memo1.Lines.Add(' Phone: ' + DB[I].CathedraPhone);
Memo1.Lines.Add(' Staff: ' + IntToStr(DB[I].Staff));
Exit;
end;
Memo1.Lines.Add(' not found.');
end;
9) В разделе объявлений типов type прописываете тип Cathedra:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Cathedra = record
Name : String;
Number : Integer;
Head : record
FIO : String;
Phone : String;
end;
CathedraPhone : String;
Staff : Integer;
end;
TForm1 = class(TForm)...
10) Прописываете глобальную переменную DB, в которой и хранится информация по кафедрам. Использование глобальных переменных, это не есть гуд, конечно, но в нашем случае вопрос стоит в другом.
Код для глобальной переменной вставляете перед процедурой поиска:
implementation
{$R *.dfm}
var
DB : Array[0 .. 2] of Cathedra=(
(Name:'Cathedra 1';Number:1;Head:(FIO:'Kosmachev M.I.';Phone:'111-222-333');CathedraPhone:'222-333-444';Staff:10),
(Name:'Cathedra 2';Number:2;Head:(FIO:'Kazakov N.P.';Phone:'111-333-111');CathedraPhone:'442-777-444';Staff:30),
(Name:'Cathedra 3';Number:3;Head:(FIO:'Prosyannikov
M.S.';Phone:'222-232-333');CathedraPhone:'333-323-444';Staff:20));
procedure TForm1.SearchAndPrint(DB: array of Cathedra; N, Number: Integer);
var
...
Полный код приведён ниже.
P.S. Можете поступить проще - после установки всех компонентов на форму просто сделайте двойной щелчок по кнопке, а затем удалите весь имеющийся код и вставьте мой.
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- Cathedra = record
- Name : String;
- Number : Integer;
- Head : record
- FIO : String;
- Phone : String;
- end;
- CathedraPhone : String;
- Staff : Integer;
- end;
-
- TForm1 = class(TForm)
- Edit1: TEdit;
- Label1: TLabel;
- Memo1: TMemo;
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- procedure SearchAndPrint(DB: array of Cathedra; N, Number: Integer);
- published
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
- var
- DB : Array[0 .. 2] of Cathedra=(
- (Name:'Cathedra 1';Number:1;Head:(FIO:'Kosmachev
M.I.';Phone:'111-222-333');CathedraPhone:'222-333-444';Staff:10),
- (Name:'Cathedra 2';Number:2;Head:(FIO:'Kazakov
N.P.';Phone:'111-333-111');CathedraPhone:'442-777-444';Staff:30),
- (Name:'Cathedra 3';Number:3;Head:(FIO:'Prosyannikov
M.S.';Phone:'222-232-333');CathedraPhone:'333-323-444';Staff:20));
-
- procedure TForm1.SearchAndPrint(DB: array of Cathedra; N, Number: Integer);
- var
- I : Integer;
- begin
- Memo1.Lines.Clear;
- for I := 0 to N - 1 do
- if DB[I].Number = Number then
- begin
- Memo1.Lines.Add(' found:');
- Memo1.Lines.Add(' Name: ' + DB[I].Name);
- Memo1.Lines.Add(' Number: ' + IntToStr(DB[I].Number));
- Memo1.Lines.Add(' Head: ' + DB[I].Head.FIO + ', ' + DB[I].Head.Phone);
- Memo1.Lines.Add(' Phone: ' + DB[I].CathedraPhone);
- Memo1.Lines.Add(' Staff: ' + IntToStr(DB[I].Staff));
- Exit;
- end;
- Memo1.Lines.Add(' not found.');
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- var
- Number : integer;
- begin
- Number := StrToInt(Edit1.Text);
- SearchAndPrint(DB, 3, Number);
- end;
-
- end.
|
Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 26 декабря 2009, 15:30
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 28 декабря 2009, 09:31; участников в обсуждении: 4.
|
Егор (статус: 10-ый класс), 25 декабря 2009, 23:57 [#1]:
"как правильно" - неправильный вопрос уж прошу прощения за каламбур
задачу можно решить миллионом способов
оконный интерфейс - он оконный. нужно просто понять, как должна выглядеть программа - какие текстовые поля, флажки, переключатели, кнопки и т.п. должны быть.
ну а потом уже "навешивать" на эти элементы заданные функции
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
ljtop (статус: Посетитель), 26 декабря 2009, 00:19 [#2]:
для меня главное - вывод этой части:
var
Number : Integer;
begin
Write('Enter cathedra number to search: ');
ReadLn(Number);
SearchAndPrint(DB, 3, Number);
WriteLn('Press ENTER to exit...');
ReadLn;
end.
как это сделать для оконного? Звучит, как: "написать процедуру поиска/распечатки записи по номеру кафедры.
|
|
Жикльор (статус: 5-ый класс), 26 декабря 2009, 22:45 [#3]:
Ну Егор ты закачал!!! )) Такой поэзии я еще со времен Ленина не видел! Держи +! )
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
ljtop (статус: Посетитель), 26 декабря 2009, 23:47 [#4]:
всё с вами ясно )
поглумиться любой может, а вот без сарказма ответить на вопрос... эх вы.
|
|
Жикльор (статус: 5-ый класс), 27 декабря 2009, 00:49 [#5]:
Цитата (ljtop):
всё с вами ясно )
поглумиться любой может, а вот без сарказма ответить на вопрос... эх вы.
А ты за что поставил мне -???!!!! За то что я похвалил ответ?? Ну и народ пошел!!! Убивал бы таких!!!!
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
ljtop (статус: Посетитель), 27 декабря 2009, 01:11 [#6]:
за оффтоп) хвалить можно в другой теме. А тут бы я хотел что-то услышать конкретно по вопросу. Убивай. Адрес могу подсказать. С удовольствием встречу.
|
|
webkent (статус: 2-ой класс), 28 декабря 2009, 09:31 [#7]:
Признался бы что не правильно понял первый пост Жикльора
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|