델파이는 이번에 배우고 있습니다. 과제를 해야하는데, 지식이 짧아서..
몇가지 질문이 있어서 이렇게 글을 남깁니다.
1. if ~ else 문을 이용한것을 간단히 case 문으로 만들려고 하는데요 아래와 같이 하면 error 가 발생합니다. 이유가 무엇인지?
// if ~ else 문 이용//
{ //목적지 코드//
if (Edit2.text='A') or (Edit2.text='a') then
begin
care[count].place_code:=3;
care[count].place_name:='서울';
end
else if (edit2.text='B') or (Edit2.text='b') then
begin
care[count].place_code:=7;
care[count].place_name:='부산';
end
else if (Edit2.text='C') or (Edit2.text='c') then
begin
care[count].place_code:=5;
care[count].place_name:='속초';
end
else if (Edit2.text='D') or (edit2.text='d') then
begin
care[count].place_code:=5;
care[count].place_name:='광주';
end
else if (Edit2.text='E') or (edit2.text='e') then
begin
care[count].place_code:=6;
care[count].place_name:='연천';
end
else if (Edit2.text='F') or (edit2.text='f') then
begin
care[count].place_code:=3;
care[count].place_name:='제주';
end
else
begin
ShowMessage('없는 목적지코드입니다(한문자)');
Edit2.setfocus();
exit;
end;
}
// case 문 이용//
temp:=StrToInt(Edit2.text);
case temp of
byte('A'),byte('a') :
begin
care[count].place_code:=3;
care[count].place_name:='서울';
end;
byte('B'),byte('b') :
begin
care[count].place_code:=7;
care[count].place_name:='부산';
end;
byte('C'),byte('c') :
begin
care[count].place_code:=5;
care[count].place_name:='속초';
end;
byte('D'),byte('d') :
begin
care[count].place_code:=5;
care[count].place_name:='광주';
end;
byte('E'),byte('e') :
begin
care[count].place_code:=6;
care[count].place_name:='연천';
end;
byte('F'),byte('f') :
begin
care[count].place_code:=3;
care[count].place_name:='제주';
end;
else
begin
ShowMessage('없는 목적지코드입니다(한문자)');
Edit2.setfocus();
exit;
end;
end;
같은거 같은데 문자를 집어넣으면 에러가 발생하는군요. Case 문이 정수형 밖에 받지 않는다고 해서 byte 를 사용하란 이야기를 듣고 사용은 했습니다만 뭐를 잘못했는지.
2. form1 에서 입력 받은 값을(record 형에 배열을 이용하였습니다.), form2의 stringird1 에 출력하려고 합니다. 어떻게 출력하면되는지요?
( form1 의 출력버튼을 눌렀을때 form2 가 생성되면서 stringrid1 에 출력되는것입니다.)
// 출력 부분//
with form2.StringGrid1 do
begin
care[count].score:=care[count].take*(care[count].place_code+care[count].seat_code)-care[count].cancel;
cells[0,count+1]:=inttostr(care[count].number);
cells[1,count+1]:=care[count].place_name;
cells[2,count+1]:=care[count].seat_name;
cells[3,count+1]:=inttostr(care[count].score);
이렇게 form1 에다 넣어서 사용했었는데요, form1 의 출력버튼을 누르면 바로 Form2 를 보여주기만 했는데. 출력 버튼을 누르면 Form2 에 데이터를 출력하고, form2 를 보여주는 것을..
3. 10개의 점수를 입력받아서 순위를 메겨야 하는데, 이것은 어떻게 해야 하는지요?
4. 10개의 데이터를 순서대로(작은수에서 큰수로) 정렬해야 하는데 이것은 어떻게?
5. 마지막으로 위의 제가 만든 소스를 올립니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
customer = record
number : integer; //고객번호
place_code : integer; // 목적지 점수
place_name : string; // 목적지 이름
seat_code : integer; // 좌석점수
seat_name : string; // 좌석 이름
take : integer; // 승차횟수
cancel : integer; // 예약 취소 횟수
score : integer; // 고객 점수
end;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Panel1: TPanel;
procedure EditClear;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
care : array[0..9] of customer;
end;
var
Form1: TForm1;
count: integer; // 카운터 설정//
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.EditClear;
begin
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit5.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Close; //폼 실행 종료//
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,temp : integer; // 임시 변수 설정
begin
begin
// 빈상태로 입력했을때 에러 발생 //
if Edit1.text='' then
begin
ShowMessage('고객번호를 입력하세요');
Edit1.Setfocus();
exit;
end;
if Edit2.text='' then
begin
ShowMessage('목적지코드를 입력하세요');
Edit2.setFocus();
exit;
end;
if Edit3.text='' then
begin
ShowMessage('좌석코드를 입력하세요');
Edit3.setFocus();
exit;
end;
if Edit4.text='' then
begin
ShowMessage('승차횟수를 입력하세요');
Edit4.setFocus();
exit;
end;
if Edit5.text='' then
begin
ShowMessage('예약취소횟수를 입력하세요');
Edit5.setFocus();
exit;
end;
// 최대 입력자료 설정 : 10건//
if count=10 then
begin
ShowMessage('경고! 10건 이상 처리불가능');
Editclear;
exit;
end;
// 고객 번호//
temp:=StrToInt(Edit1.Text);
if (temp<0) or (temp>9) then
begin
ShowMessage('고객번호를 다시 입력하세요.[정수한자리]');
Edit1.SetFocus();
exit;
end;
// 고객 번호 중복 체크//
if count>0 then
begin
for i:=0 to count do
if temp=care[i].number then
begin
ShowMessage('고객번호가 중복되었습니다.');
Edit1.Setfocus();
exit;
end;
end;
end;
{ //목적지 코드//
if (Edit2.text='A') or (Edit2.text='a') then
begin
care[count].place_code:=3;
care[count].place_name:='서울';
end
else if (edit2.text='B') or (Edit2.text='b') then
begin
care[count].place_code:=7;
care[count].place_name:='부산';
end
else if (Edit2.text='C') or (Edit2.text='c') then
begin
care[count].place_code:=5;
care[count].place_name:='속초';
end
else if (Edit2.text='D') or (edit2.text='d') then
begin
care[count].place_code:=5;
care[count].place_name:='광주';
end
else if (Edit2.text='E') or (edit2.text='e') then
begin
care[count].place_code:=6;
care[count].place_name:='연천';
end
else if (Edit2.text='F') or (edit2.text='f') then
begin
care[count].place_code:=3;
care[count].place_name:='제주';
end
else
begin
ShowMessage('없는 목적지코드입니다(한문자)');
Edit2.setfocus();
exit;
end;
} temp:=StrToInt(Edit2.text);
case temp of
byte('A'),byte('a') :
begin
care[count].place_code:=3;
care[count].place_name:='서울';
end;
byte('B'),byte('b') :
begin
care[count].place_code:=7;
care[count].place_name:='부산';
end;
byte('C'),byte('c') :
begin
care[count].place_code:=5;
care[count].place_name:='속초';
end;
byte('D'),byte('d') :
begin
care[count].place_code:=5;
care[count].place_name:='광주';
end;
byte('E'),byte('e') :
begin
care[count].place_code:=6;
care[count].place_name:='연천';
end;
byte('F'),byte('f') :
begin
care[count].place_code:=3;
care[count].place_name:='제주';
end;
else
begin
ShowMessage('없는 목적지코드입니다(한문자)');
Edit2.setfocus();
exit;
end;
end;
//좌석 코드//
//좌석 코드 체크//
if (Edit3.text='A') or (Edit3.text='a') then
begin
care[count].seat_code:=1;
care[count].seat_name:='일반석';
end
else if (edit3.text='B') or (Edit3.text='b') then
begin
care[count].seat_code:=2;
care[count].seat_name:='일등석';
end
else if (Edit3.text='C') or (Edit3.text='c') then
begin
care[count].seat_code:=3;
care[count].seat_name:='로얄석';
end
else
begin
ShowMessage('없는 좌석코드입니다.(한문자)');
Edit3.setfocus();
exit;
end;
//승차횟수//
// 승차횟수 체크 (정수 두자리)//
care[count].take:=StrToInt(Edit4.Text);
if(care[count].take<0) or (care[count].take>99) then
begin
ShowMessage('승차횟수를 다시 입력하세요.[정수두자리]');
Edit4.SetFocus();
exit;
end;
//예약 취소 횟수//
//예약 취소 횟수 체크(정수 두자리)//
care[count].cancel:=StrToInt(Edit5.Text);
if(care[count].cancel<0) or (care[count].cancel>99) then
begin
ShowMessage('예약취소횟수를 다시 입력하세요.[정수두자리]');
Edit5.SetFocus();
exit;
end;
care[count].number:=temp;
// 출력 부분//
with form2.StringGrid1 do
begin
care[count].score:=care[count].take*(care[count].place_code+care[count].seat_code)-care[count].cancel;
cells[0,count+1]:=inttostr(care[count].number);
cells[1,count+1]:=care[count].place_name;
cells[2,count+1]:=care[count].seat_name;
cells[3,count+1]:=inttostr(care[count].score);
end;
editclear;
count:=count+1;
edit1.SetFocus;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
count:=0;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form2.Showmodal;
end;
end.
몇가지 질문이 있어서 이렇게 글을 남깁니다.
1. if ~ else 문을 이용한것을 간단히 case 문으로 만들려고 하는데요 아래와 같이 하면 error 가 발생합니다. 이유가 무엇인지?
// if ~ else 문 이용//
{ //목적지 코드//
if (Edit2.text='A') or (Edit2.text='a') then
begin
care[count].place_code:=3;
care[count].place_name:='서울';
end
else if (edit2.text='B') or (Edit2.text='b') then
begin
care[count].place_code:=7;
care[count].place_name:='부산';
end
else if (Edit2.text='C') or (Edit2.text='c') then
begin
care[count].place_code:=5;
care[count].place_name:='속초';
end
else if (Edit2.text='D') or (edit2.text='d') then
begin
care[count].place_code:=5;
care[count].place_name:='광주';
end
else if (Edit2.text='E') or (edit2.text='e') then
begin
care[count].place_code:=6;
care[count].place_name:='연천';
end
else if (Edit2.text='F') or (edit2.text='f') then
begin
care[count].place_code:=3;
care[count].place_name:='제주';
end
else
begin
ShowMessage('없는 목적지코드입니다(한문자)');
Edit2.setfocus();
exit;
end;
}
// case 문 이용//
temp:=StrToInt(Edit2.text);
case temp of
byte('A'),byte('a') :
begin
care[count].place_code:=3;
care[count].place_name:='서울';
end;
byte('B'),byte('b') :
begin
care[count].place_code:=7;
care[count].place_name:='부산';
end;
byte('C'),byte('c') :
begin
care[count].place_code:=5;
care[count].place_name:='속초';
end;
byte('D'),byte('d') :
begin
care[count].place_code:=5;
care[count].place_name:='광주';
end;
byte('E'),byte('e') :
begin
care[count].place_code:=6;
care[count].place_name:='연천';
end;
byte('F'),byte('f') :
begin
care[count].place_code:=3;
care[count].place_name:='제주';
end;
else
begin
ShowMessage('없는 목적지코드입니다(한문자)');
Edit2.setfocus();
exit;
end;
end;
같은거 같은데 문자를 집어넣으면 에러가 발생하는군요. Case 문이 정수형 밖에 받지 않는다고 해서 byte 를 사용하란 이야기를 듣고 사용은 했습니다만 뭐를 잘못했는지.
2. form1 에서 입력 받은 값을(record 형에 배열을 이용하였습니다.), form2의 stringird1 에 출력하려고 합니다. 어떻게 출력하면되는지요?
( form1 의 출력버튼을 눌렀을때 form2 가 생성되면서 stringrid1 에 출력되는것입니다.)
// 출력 부분//
with form2.StringGrid1 do
begin
care[count].score:=care[count].take*(care[count].place_code+care[count].seat_code)-care[count].cancel;
cells[0,count+1]:=inttostr(care[count].number);
cells[1,count+1]:=care[count].place_name;
cells[2,count+1]:=care[count].seat_name;
cells[3,count+1]:=inttostr(care[count].score);
이렇게 form1 에다 넣어서 사용했었는데요, form1 의 출력버튼을 누르면 바로 Form2 를 보여주기만 했는데. 출력 버튼을 누르면 Form2 에 데이터를 출력하고, form2 를 보여주는 것을..
3. 10개의 점수를 입력받아서 순위를 메겨야 하는데, 이것은 어떻게 해야 하는지요?
4. 10개의 데이터를 순서대로(작은수에서 큰수로) 정렬해야 하는데 이것은 어떻게?
5. 마지막으로 위의 제가 만든 소스를 올립니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
customer = record
number : integer; //고객번호
place_code : integer; // 목적지 점수
place_name : string; // 목적지 이름
seat_code : integer; // 좌석점수
seat_name : string; // 좌석 이름
take : integer; // 승차횟수
cancel : integer; // 예약 취소 횟수
score : integer; // 고객 점수
end;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Panel1: TPanel;
procedure EditClear;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
care : array[0..9] of customer;
end;
var
Form1: TForm1;
count: integer; // 카운터 설정//
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.EditClear;
begin
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit5.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Close; //폼 실행 종료//
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,temp : integer; // 임시 변수 설정
begin
begin
// 빈상태로 입력했을때 에러 발생 //
if Edit1.text='' then
begin
ShowMessage('고객번호를 입력하세요');
Edit1.Setfocus();
exit;
end;
if Edit2.text='' then
begin
ShowMessage('목적지코드를 입력하세요');
Edit2.setFocus();
exit;
end;
if Edit3.text='' then
begin
ShowMessage('좌석코드를 입력하세요');
Edit3.setFocus();
exit;
end;
if Edit4.text='' then
begin
ShowMessage('승차횟수를 입력하세요');
Edit4.setFocus();
exit;
end;
if Edit5.text='' then
begin
ShowMessage('예약취소횟수를 입력하세요');
Edit5.setFocus();
exit;
end;
// 최대 입력자료 설정 : 10건//
if count=10 then
begin
ShowMessage('경고! 10건 이상 처리불가능');
Editclear;
exit;
end;
// 고객 번호//
temp:=StrToInt(Edit1.Text);
if (temp<0) or (temp>9) then
begin
ShowMessage('고객번호를 다시 입력하세요.[정수한자리]');
Edit1.SetFocus();
exit;
end;
// 고객 번호 중복 체크//
if count>0 then
begin
for i:=0 to count do
if temp=care[i].number then
begin
ShowMessage('고객번호가 중복되었습니다.');
Edit1.Setfocus();
exit;
end;
end;
end;
{ //목적지 코드//
if (Edit2.text='A') or (Edit2.text='a') then
begin
care[count].place_code:=3;
care[count].place_name:='서울';
end
else if (edit2.text='B') or (Edit2.text='b') then
begin
care[count].place_code:=7;
care[count].place_name:='부산';
end
else if (Edit2.text='C') or (Edit2.text='c') then
begin
care[count].place_code:=5;
care[count].place_name:='속초';
end
else if (Edit2.text='D') or (edit2.text='d') then
begin
care[count].place_code:=5;
care[count].place_name:='광주';
end
else if (Edit2.text='E') or (edit2.text='e') then
begin
care[count].place_code:=6;
care[count].place_name:='연천';
end
else if (Edit2.text='F') or (edit2.text='f') then
begin
care[count].place_code:=3;
care[count].place_name:='제주';
end
else
begin
ShowMessage('없는 목적지코드입니다(한문자)');
Edit2.setfocus();
exit;
end;
} temp:=StrToInt(Edit2.text);
case temp of
byte('A'),byte('a') :
begin
care[count].place_code:=3;
care[count].place_name:='서울';
end;
byte('B'),byte('b') :
begin
care[count].place_code:=7;
care[count].place_name:='부산';
end;
byte('C'),byte('c') :
begin
care[count].place_code:=5;
care[count].place_name:='속초';
end;
byte('D'),byte('d') :
begin
care[count].place_code:=5;
care[count].place_name:='광주';
end;
byte('E'),byte('e') :
begin
care[count].place_code:=6;
care[count].place_name:='연천';
end;
byte('F'),byte('f') :
begin
care[count].place_code:=3;
care[count].place_name:='제주';
end;
else
begin
ShowMessage('없는 목적지코드입니다(한문자)');
Edit2.setfocus();
exit;
end;
end;
//좌석 코드//
//좌석 코드 체크//
if (Edit3.text='A') or (Edit3.text='a') then
begin
care[count].seat_code:=1;
care[count].seat_name:='일반석';
end
else if (edit3.text='B') or (Edit3.text='b') then
begin
care[count].seat_code:=2;
care[count].seat_name:='일등석';
end
else if (Edit3.text='C') or (Edit3.text='c') then
begin
care[count].seat_code:=3;
care[count].seat_name:='로얄석';
end
else
begin
ShowMessage('없는 좌석코드입니다.(한문자)');
Edit3.setfocus();
exit;
end;
//승차횟수//
// 승차횟수 체크 (정수 두자리)//
care[count].take:=StrToInt(Edit4.Text);
if(care[count].take<0) or (care[count].take>99) then
begin
ShowMessage('승차횟수를 다시 입력하세요.[정수두자리]');
Edit4.SetFocus();
exit;
end;
//예약 취소 횟수//
//예약 취소 횟수 체크(정수 두자리)//
care[count].cancel:=StrToInt(Edit5.Text);
if(care[count].cancel<0) or (care[count].cancel>99) then
begin
ShowMessage('예약취소횟수를 다시 입력하세요.[정수두자리]');
Edit5.SetFocus();
exit;
end;
care[count].number:=temp;
// 출력 부분//
with form2.StringGrid1 do
begin
care[count].score:=care[count].take*(care[count].place_code+care[count].seat_code)-care[count].cancel;
cells[0,count+1]:=inttostr(care[count].number);
cells[1,count+1]:=care[count].place_name;
cells[2,count+1]:=care[count].seat_name;
cells[3,count+1]:=inttostr(care[count].score);
end;
editclear;
count:=count+1;
edit1.SetFocus;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
count:=0;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form2.Showmodal;
end;
end.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
274 | [re] 폰트 변경 관련 질문입니다. | 관리자 | 2007.07.03 | 23995 |
273 | 심파일 사용자 평가 내용중에서 질문입니다. [1] | 하얀_고양이 | 2006.08.31 | 23947 |
272 | 프린터인쇄를 PDF파일인쇄로 [2] | 진 | 2002.11.19 | 23764 |
271 | Socket Error # 10053 Software caused connection abort.없애는방법좀 알려 주세요! | young sik choi | 2005.04.14 | 23760 |
270 | [re] 이런기능 어떨까요? [1] | 관리자 | 2007.07.18 | 23162 |
269 | [re] 도움말 질문입니다. | 관리자 | 2007.07.03 | 22772 |
268 | 도움말 질문입니다. | 김성준 | 2007.05.29 | 22686 |
» | 델파이 질문입니다. | 한정목 | 2003.06.16 | 22679 |
266 | 이런기능 어떨까요? | 이성용 | 2007.07.14 | 22582 |
265 | [re] 심파일 사용자 평가 내용중에서 질문입니다. [1] | 관리자 | 2006.09.06 | 21940 |