델파이는 이번에 배우고 있습니다. 과제를 해야하는데, 지식이 짧아서..
몇가지 질문이 있어서 이렇게 글을 남깁니다.
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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
» | 델파이 질문입니다. | 한정목 | 2003.06.16 | 22671 |
14 | 관리자님 답변부탁합니다. | 장기중 | 2003.05.08 | 16028 |
13 | 델파이 초보자의 의문점입니다 [1] | 신성용 | 2003.04.20 | 15258 |
12 | *.bgab파일이 깨지네요 [1] | 배다래 | 2003.04.05 | 14487 |
11 | 다음은 어찌해야 하나요....? | 권명준 | 2003.03.04 | 15461 |
10 | XP사용자는 도스가없는데..그럼UXP를 사용 할수 없습니까?? [2] | 이혜련 | 2003.02.07 | 15073 |
9 | FTP로 열기할때.. | senk | 2002.12.09 | 15071 |
8 | 다시하기가 안되는 이유.. | 나그네 | 2002.12.06 | 14626 |
7 | 환경설정-인쇄 설정이 저장 안됨 | 강동인 | 2002.12.03 | 16181 |
6 | Enter를 누르면 들여쓰기가 자동으로 되는 이유는 ??? | 송진성 | 2002.12.02 | 11081 |