메뉴 건너뛰기

AcroSoft

델파이 질문 및 답변

질문 델파이 질문입니다.

한정목 2003.06.16 09:35 조회 수 : 22679 추천:369

델파이는 이번에 배우고 있습니다. 과제를 해야하는데, 지식이 짧아서..
몇가지 질문이 있어서 이렇게 글을 남깁니다.

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.

위로