안녕하세요.. 문제를 풀어달라는 부탁에 델파이로 코딩하는데
이상한 현상이 일어나더군요..
조건문을 너무 많이 사용한 탓인지 .. 암튼 잘 모르겠습니다.
아마 이 에러 잡는 분 머리 참 좋을 겁니다..쩝~
아래 그 문제의 처리 조건과 계산방법을 적었고 소스는 그다음에
올렸습니다. 그럼, 보시고 머리좀 고생해 보시기 바랍니다..
에러 잡아주시는 분 .. 미리 감사드리겠습니다...(뜨아, 머리아프다.)
-계산방법
사용금액이 10만원에서 20만원 사이이면 1점을 부여하고,
20만원을 초과하면 2점을 부과한다.
10만원 미만의 사용금액에는 점수가 부여되지 않는다.
계산한 점수와 회원테이블의 누계점수의 합계가 100점이
넘으면 매번 0.5점을 가산한다.
입력데이터 건수는 10건을 넘지 않는 것으로 본다.
사용금액: 금액을 10자리 이내로 입력받는다.
한명의 회원이 중복되어 들어 올 수 있다.
- 회원 테이블
-------------------------------------------
회원번호 회원이름 누계점수
1 회원1 0
2 회원2 50
3 회원3 100
- 입력자료 예시
-------------------------------------------
회원번호 사용일자 사용금액
1 1998.08.25 110,000
2 1998.08.27 70,000
3 1998.09.01 400,000
알아두어야할 객체 용도입니다..
edit1 회원번호 입력받음
edit2 점수 디스플레이
edit3 점수누계 디스플레이
edit4 사용금액 입력받음
소스입니다..
----------------------------------------------------------------
implementation
var
i,y : Integer; //배열첨자
{$R *.DFM}
procedure 빠샤빠샤폼.Button1Click(Sender: TObject);
var
aCode : Array [1..10] of Integer;
aName : Array [1..10] Of String[6];
aPoint : Array [1..10] Of Real;
aPoint2 : Array [1..10] Of Real;
aMoney : Array [1..10] of Integer;
arrow : Integer; // 점수를 누적시키기 위해 기존 데이터 검색 위한 표시자.
begin
aCode[i] := StrToInt(Edit1.Text);
aMoney[i] := StrToInt(Edit4.Text);
If i <> 1 Then begin
If aCode[i] = 1 Then
begin
aName[i] := '회원1';
For y := 1 To i Do
If aName[y] = '회원1' Then arrow := y;
If aMoney[i] < 100000 Then aPoint[i] := 0;
If (aMoney[i] >= 100000) And (aMoney[i] <= 200000) Then aPoint[i] := 1;
If aMOney[i] > 200000 Then aPoint[i] := 2;
If aPoint2[arrow] < 100 Then aPoint2[i] := aPoint2[arrow] + aPoint[i];
Edit2.Text := FloatToStr(aPoint[i]);
Edit3.Text := FloatToStr(aPoint2[i]);
end
Else
Begin
aPoint2[i] := aPoint2[arrow] + aPoint[i] + 0.5;
aMoney[i] := StrToInt(Edit4.Text);
Edit2.Text := FloatToStr(aPoint[i]);
Edit3.Text := FloatToStr(aPoint2[i]);
End;
if aCode[i] = 2 Then
Begin
aName[i] := '회원2';
For y := 1 To i Do
If aName[y] = '회원1' Then arrow := y;
If aMoney[i] < 100000 Then aPoint[i] := 0;
If (aMoney[i] >= 100000) And (aMoney[i] <= 200000) Then aPoint[i] := 1;
If aMOney[i] > 200000 Then aPoint[i] := 2;
If aPoint2[i-1] < 100 Then aPoint2[i] := aPoint2[i - 1] + aPoint[i];
Edit2.Text := FloatToStr(aPoint[i]);
Edit3.Text := FloatToStr(aPoint2[i]);
end
Else
Begin
aPoint2[i] := aPoint2[i - 1] + aPoint[i] + 0.5;
aMoney[i] := StrToInt(Edit4.Text);
Edit2.Text := FloatToStr(aPoint[i]);
Edit3.Text := FloatToStr(aPoint2[i]);
End;
if aCode[i] = 3 Then
Begin
aName[i] := '회원3';
For y := 1 To i Do
If aName[y] = '회원1' Then arrow := y;
If aMoney[i] < 100000 Then aPoint[i] := 0;
If (aMoney[i] >= 100000) And (aMoney[i] <= 200000) Then aPoint[i] := 1;
If aMOney[i] > 200000 Then aPoint[i] := 2;
If aPoint2[i-1] < 100 Then aPoint2[i] := aPoint2[i - 1] + aPoint[i];
Edit2.Text := FloatToStr(aPoint[i]);
Edit3.Text := FloatToStr(aPoint2[i]);
end
Else
Begin
aPoint2[i] := aPoint2[i - 1] + aPoint[i] + 0.5;
aMoney[i] := StrToInt(Edit4.Text);
Edit2.Text := FloatToStr(aPoint[i]);
Edit3.Text := FloatToStr(aPoint2[i]);
End;
end // end of If i <> 1 begin
else // i =1 인 경우
begin
if aCode[i] = 1 Then
begin
aName[i] := '회원1';
aPoint2[i] := 0;
If aMoney[i] < 100000 Then aPoint[i] := 0;
If (aMoney[i] >= 100000) And (aMoney[i] <= 200000) Then aPoint[i] := 1;
If aMOney[i] > 200000 Then aPoint[i] := 2;
aPoint2[i] := aPoint2[i] + aPoint[i];
Edit2.Text := FloatToStr(aPoint[i]);
Edit3.Text := FloatToStr(aPoint2[i]);
end;
if aCode[i] = 2 Then
begin
aName[i] := '회원2';
aPoint2[i] := 0;
If aMoney[i] < 100000 Then aPoint[i] := 0;
If (aMoney[i] >= 100000) And (aMoney[i] <= 200000) Then aPoint[i] := 1;
If aMOney[i] > 200000 Then aPoint[i] := 2;
aPoint2[i] := aPoint2[i] + aPoint[i];
Edit2.Text := FloatToStr(aPoint[i]);
Edit3.Text := FloatToStr(aPoint2[i]);
end;
if aCode[i] = 3 Then
begin
aName[i] := '회원2';
aPoint2[i] := 0;
If aMoney[i] < 100000 Then aPoint[i] := 0;
If (aMoney[i] >= 100000) And (aMoney[i] <= 200000) Then aPoint[i] := 1;
If aMOney[i] > 200000 Then aPoint[i] := 2;
aPoint2[i] := aPoint2[i] + aPoint[i];
Edit2.Text := FloatToStr(aPoint[i]);
Edit3.Text := FloatToStr(aPoint2[i]);
end;
end; //else end i=1인 경우
inc(i);
Label5.Caption := '현재의 레코드번호는 : ' + IntToStr(i);
end;
procedure 빠샤빠샤폼.FormCreate(Sender: TObject);
begin
i:= 1;
Label5.Caption := '현재의 레코드번호는 : ' + IntToStr(i);
end;
|