아래 내용은 입력처리 조건을 처리하는 부분입니다.
문제는 조건4.우수고객등급은 영문 1자리 A~Z까지 입력이라는 조건인데
if 문을 쓰면 너무 복잡할것 같아서
상수와 for문을 사용했는데 적정한 데이타를 입력시켜도 에러메시지가 나옵니다.
어디가 잘못된 것인지 이해가 가질 않습니다
설명을 좀 부탁드립니다.
덧붙여 기사시험을 준비하면서 델파이를 강의하는 학원이 없어 이곳에서 많은 도움을 얻었는데
지금까지 제 질문에 답변해 주신 분들께도 고맙다는 인사를 드립니다.
행복하세요..
procedure TForm1.Button1Click(Sender: TObject);
var i, j: integer;
const
temp : array[1..26] of string = ('A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'S', 'Y', 'Z');
begin
count := count +1;
if count > 7 then
begin
showmessage('최대입력건수를 초과했습니다');
count := count -1;
exit;
end;
if (edit1.text = '') or (edit2.text = '') or
(edit3.text = '') or (edit4.text = '') then
begin
showmessage('필수입력항목입니다');
count := count -1;
exit;
end;
//조건1. 고객번호는 정수3자리, 중복입력불가
case strtoint(edit1.text) of
1..999 :
else
begin
showmessage('고객번호는 정수 3자리입니다');
count := count -1;
edit1.setfocus;
exit;
end;
end;
for i:= 1 to count-1 do
begin
if edit1.text = in_data[i].in1 then
begin
showmessage('이미 등록된 고객번호가 존재합니다');
count := count -1;
edit1.setfocus;
exit;
end;
end;
//조건2. 상품코드는 영문1자리, 정수1자리(코드화)
if (uppercase(edit2.text) <> 'Q1') and
(uppercase(edit2.text) <> 'Q2') and
(uppercase(edit2.text) <> 'Q3') and
(uppercase(edit2.text) <> 'Q4') and
(uppercase(edit2.text) <> 'Q5') and
(uppercase(edit2.text) <> 'Q6') then
begin
showmessage('잘못된 상품코드입니다');
count := count -1;
edit2.setfocus;
exit;
end;
//조건3. 판매수량은 정수 1-99
case strtoint(edit3.text) of
1..99 :
else
begin
showmessage('판매수량은 정수 2자리입니다');
count := count -1;
edit3.setfocus;
exit;
end;
end;
//조건4. 우수고객등급은 영문1자리 A~Z까지 입력 ---> 에러발생
for j := 1 to 26 do
if uppercase(edit4.text) <> temp[j] then
begin
showmessage('우수고객등급은 A~Z까지입니다');
count := count -1;
edit4.setfocus;
exit;
end;
with in_Data[count] do
begin
in1 := edit1.text;
in2 := edit2.text;
in3 := edit3.text;
in4 := edit4.text;
end;
edit1.text := '';
edit2.text := '';
edit3.text := '';
edit4.text := '';
edit1.setfocus;
end;
> 아래 내용은 입력처리 조건을 처리하는 부분입니다.
>
> 문제는 조건4.우수고객등급은 영문 1자리 A~Z까지 입력이라는 조건인데
> if 문을 쓰면 너무 복잡할것 같아서
> 상수와 for문을 사용했는데 적정한 데이타를 입력시켜도 에러메시지가 나옵니다.
>
> 어디가 잘못된 것인지 이해가 가질 않습니다
> 설명을 좀 부탁드립니다.
>
> 덧붙여 기사시험을 준비하면서 델파이를 강의하는 학원이 없어 이곳에서 많은 도움을 얻었는데
> 지금까지 제 질문에 답변해 주신 분들께도 고맙다는 인사를 드립니다.
> 행복하세요..
>
>
> procedure TForm1.Button1Click(Sender: TObject);
> var i, j: integer;
> const
> temp : array[1..26] of string = ('A', 'B', 'C', 'D', 'E', 'F', 'G',
> 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
> 'U', 'V', 'W', 'S', 'Y', 'Z');
> begin
> count := count +1;
>
> if count > 7 then
> begin
> showmessage('최대입력건수를 초과했습니다');
> count := count -1;
> exit;
> end;
>
> if (edit1.text = '') or (edit2.text = '') or
> (edit3.text = '') or (edit4.text = '') then
> begin
> showmessage('필수입력항목입니다');
> count := count -1;
> exit;
> end;
>
> //조건1. 고객번호는 정수3자리, 중복입력불가
> case strtoint(edit1.text) of
> 1..999 :
> else
> begin
> showmessage('고객번호는 정수 3자리입니다');
> count := count -1;
> edit1.setfocus;
> exit;
> end;
> end;
>
> for i:= 1 to count-1 do
> begin
> if edit1.text = in_data[i].in1 then
> begin
> showmessage('이미 등록된 고객번호가 존재합니다');
> count := count -1;
> edit1.setfocus;
> exit;
> end;
> end;
>
> //조건2. 상품코드는 영문1자리, 정수1자리(코드화)
> if (uppercase(edit2.text) <> 'Q1') and
> (uppercase(edit2.text) <> 'Q2') and
> (uppercase(edit2.text) <> 'Q3') and
> (uppercase(edit2.text) <> 'Q4') and
> (uppercase(edit2.text) <> 'Q5') and
> (uppercase(edit2.text) <> 'Q6') then
> begin
> showmessage('잘못된 상품코드입니다');
> count := count -1;
> edit2.setfocus;
> exit;
> end;
>
> //조건3. 판매수량은 정수 1-99
> case strtoint(edit3.text) of
> 1..99 :
> else
> begin
> showmessage('판매수량은 정수 2자리입니다');
> count := count -1;
> edit3.setfocus;
> exit;
> end;
> end;
>
> //조건4. 우수고객등급은 영문1자리 A~Z까지 입력 ---> 에러발생
> for j := 1 to 26 do
> if uppercase(edit4.text) <> temp[j] then
> begin
> showmessage('우수고객등급은 A~Z까지입니다');
> count := count -1;
> edit4.setfocus;
> exit;
> end;
>
> with in_Data[count] do
> begin
> in1 := edit1.text;
> in2 := edit2.text;
> in3 := edit3.text;
> in4 := edit4.text;
> end;
>
> edit1.text := '';
> edit2.text := '';
> edit3.text := '';
> edit4.text := '';
>
> edit1.setfocus;
> end;
>
안녕하세요.
FOR는 루프인데 결과가 같아도 계속 반복되니 메시지 출력은 당연합니다.
BREAK 하나 추가하시면 됩니다.
그럼 20000
> //조건4. 우수고객등급은 영문1자리 A~Z까지 입력 ---> 에러발생
> for j := 1 to 26 do
> if uppercase(edit4.text) <> temp[j] then
> begin
> showmessage('우수고객등급은 A~Z까지입니다');
> count := count -1;
> edit4.setfocus;
> exit;
end //이부분을 이렇게
end else begin
ShowMessage( '당신은 우수고객이시네요^^*' );
Break;
end;