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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2014, 18:18   #1
koudelka
Пользователь
 
Аватар для koudelka
 
Регистрация: 22.11.2013
Сообщений: 17
Вопрос Delphi. Изменение введённой фамилии при выборе пола.

Всем привет, встала задача организовать изменение введённой фамилии при выборе пола в моей БД:
Сначала пишем Фамилию в поле Edit1 , далее в зависимости от того куда мы ставим галочку в DBCheckBox1 (что означает выбор мужского пола) или DBCheckBox2 (женский пол) окончание фамилии, введенной нами в edit1 должно меняться.
К примеру, мы ввели в edit1 фамилию Иванов , а галочку поставили на DBCheckBox2 (женский пол), значит текст в Edit1 меняется на Иванова ну и наоборот.
---
p.s. я понимаю вариантов фамилий много, но мне достаточно хотя бы такого примера.
---
Код:
procedure TForm1.DBCheckBox1Click(Sender: TObject);
begin
if DBCheckBox1.Checked=true then    
BEGIN
DBCheckBox2.Checked:=false;       //если выбрано М, тогда выкл.галочка с Ж
????????????????                  // тут сам код...подскажите
end;
end;
p.s.2 Фамилия должна меняться если найдено окончание "в" или "а"("ва"), а если окончание совсем другое - то ничего меняться не должно. То есть должна по сути быть определенная проверка, чтобы данный метод работал только на узкий список фамилий с "в" или "ва" на конце.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Всем спасибо! ребятки. Всех благодарю! Как всегда выкладываю правильный ответ, который в итоге получился. Особая благодарность long399.
---------------------------ОТВЕТ НАЙДЕН-------------------------
Код:
procedure TForm1.CheckBox_manClick(Sender: TObject); //галочка MAN
var i:integer;
s:string;
begin
s:=edit1.Text;
if CheckBox_man.Checked=true then begin
CheckBox_woman.Checked:=false;
if edit1.Text<>'' then begin
for i := length(edit1.Text) downto length(edit1.Text)-2 do
if copy(s,i,2)='ва' then begin
  delete(s,i,2);
  insert('в',s,i);
  edit1.Clear;
  edit1.Text:=s;
end; end; end;
end;

procedure TForm1.CheckBox_womanClick(Sender: TObject);   //галочка WOMAN
var i:integer;
s:string;
begin
s:=edit1.Text;
if CheckBox_woman.Checked=true then begin
CheckBox_man.Checked:=false;
if edit1.Text<>'' then begin
for i := length(edit1.Text) downto length(edit1.Text)-2 do
if copy(s,i,2)='в' then begin
  delete(s,i,2);
  insert('ва',s,i);
  edit1.Clear;
  edit1.Text:=s;
end; end; end;
end;

Последний раз редактировалось koudelka; 21.04.2014 в 19:54.
koudelka вне форума Ответить с цитированием
Старый 21.04.2014, 18:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А если фамилия скажем "Черных"?
Оно то конечно если брать самое простое то:
Код:
if DBCheckBox2.Checked then edit1.Text:=edit1.Text+'а' else 
if edit1.Text[Length(edit1.Text)]='а' then edit1.Text:=copy(edit1.Text,1,Length(edit1.Text));
но! Это не очень удачный прием.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.04.2014, 18:29   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,595
По умолчанию

Задача нетривиальная, лучше искать готовые модули. Я как-то писал библиотеку, которая склоняла Ф.И.О. по падежам, но функции смена рода там не было.
Arigato вне форума Ответить с цитированием
Старый 21.04.2014, 18:33   #4
koudelka
Пользователь
 
Аватар для koudelka
 
Регистрация: 22.11.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А если фамилия скажем "Черных"?
Оно то конечно если брать самое простое то:
Код:
if DBCheckBox2.Checked then edit1.Text:=edit1.Text+'а' else 
if edit1.Text[Length(edit1.Text)]='а' then edit1.Text:=copy(edit1.Text,1,Length(edit1.Text));
но! Это не очень удачный прием.
Я вас поняла,спасибо, но задача немного другая - фамилия должна меняться если окончание "в" или "а"("ва"), а если окончание совсем другое - то ничего меняться не должно. То есть должна по сути быть определенная проверка, чтобы данный метод работал на узкий список фамилий с "в" или "ва" на конце.
koudelka вне форума Ответить с цитированием
Старый 21.04.2014, 19:07   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
s:=(copy(edit1.Text,1,Length(edit1.Text));
if (s='a')or (s='в') then и так далее
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.04.2014, 19:30   #6
koudelka
Пользователь
 
Аватар для koudelka
 
Регистрация: 22.11.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
s:=(copy(edit1.Text,1,Length(edit1.Text));
if (s='a')or (s='в') then и так далее
меня смущает строка в вашем примере, что тут , что ранее
s:=(copy(edit2.Text,1,Length(edit2. Text)));

Что она означает? я составила такой код:

Код:
procedure TForm1.CheckBox_womanClick(Sender: TObject);
Var
s:string;
begin
if CheckBox_woman.Checked=true then
BEGIN
CheckBox_man.Checked:=false;
s:=(copy(edit1.Text,1,Length(edit1.Text)));
if (s='в') then
edit1.Text:=edit1.Text+'а'  end;
end;
Однако ничего не происходит при вводе фамилии Иванов - "в" в конце не видит и соответственно ничего не происходит.
Зато с этим все нормально:
Код:
if edit1.Text[Length(edit1.Text)]='а'  then
edit1.Text:=edit1.Text+'а'  end;

Последний раз редактировалось koudelka; 21.04.2014 в 19:33.
koudelka вне форума Ответить с цитированием
Старый 21.04.2014, 19:51   #7
koudelka
Пользователь
 
Аватар для koudelka
 
Регистрация: 22.11.2013
Сообщений: 17
По умолчанию

Всем спасибо! ребятки. Всех благодарю! Как всегда выкладываю правильный ответ, который в итоге получился. Особая благодарность long399.
---------------------------ОТВЕТ НАЙДЕН-------------------------
Код:
procedure TForm1.CheckBox_manClick(Sender: TObject); //галочка MAN
var i:integer;
s:string;
begin
s:=edit1.Text;
if CheckBox_man.Checked=true then begin
CheckBox_woman.Checked:=false;
if edit1.Text<>'' then begin
for i := length(edit1.Text) downto length(edit1.Text)-2 do
if copy(s,i,2)='ва' then begin
  delete(s,i,2);
  insert('в',s,i);
  edit1.Clear;
  edit1.Text:=s;
end; end; end;
end;

procedure TForm1.CheckBox_womanClick(Sender: TObject);   //галочка WOMAN
var i:integer;
s:string;
begin
s:=edit1.Text;
if CheckBox_woman.Checked=true then begin
CheckBox_man.Checked:=false;
if edit1.Text<>'' then begin
for i := length(edit1.Text) downto length(edit1.Text)-2 do
if copy(s,i,2)='в' then begin
  delete(s,i,2);
  insert('ва',s,i);
  edit1.Clear;
  edit1.Text:=s;
end; end; end;
end;

Последний раз редактировалось koudelka; 21.04.2014 в 19:53.
koudelka вне форума Ответить с цитированием
Старый 21.04.2014, 20:38   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,595
По умолчанию

Да что же там правильного? Навальный - Навальная, Путин - Путина, Жириновский - Жириновская, Ющенко - Ющенко и т.д.
Arigato вне форума Ответить с цитированием
Старый 21.04.2014, 21:17   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да шож такое!! И тут про политику!!!
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.04.2014, 21:47   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,595
По умолчанию

Какая политика? Это всего лишь примеры фамилий, с которыми прога работать не сможет
Arigato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При выборе другой фамилии на форме данные в другой столбец and150382 Microsoft Office Access 4 19.08.2013 21:07
Submit при выборе Select'а KWN, lnc HTML и CSS 10 02.04.2012 22:13
вывести фамилии,имена и отчества всех студентов мужского пола Degster Паскаль, Turbo Pascal, PascalABC.NET 0 15.05.2011 18:32
Распечатать фамилии учеников,фамилии которых начинаются на букву В с указанием даты рождения. greenO_o Помощь студентам 0 26.05.2010 22:49
ошибки при выборе radiobutton _alis_ Компоненты Delphi 4 29.04.2010 08:04