{*
고객별 정보 이용 요금 프로그램
고객번호,나이,정보종류코드,사용시간,정보포인트를 입력받아 프로그램 작성하시오.
*}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Grids;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Edit1 : TEdit;
Edit2 : TEdit;
Edit3 : TEdit;
Edit4 : TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//입력 자료 변수 선언
TOutData = Record
sNumber : Integer;
Age : Integer;
sCode : string;
Base : Integer;
Time : Integer;
Amount : Integer;
end;
TInfoTab = Record
sInfoCd : String;
SInfoNm : String;
Amount : Integer;
Count : Integer;
end;
var
Form1: TForm1;
DataBuf : Array[1..7] of TOutData;
InfoBuf : Array[1..5] of TInfoTab;
i, Cnt : integer;
implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
// 버퍼 초기화
for i := 1 to 7 do begin
DataBuf[i].sNumber := 0;
DataBuf[i].Age := 0;
DataBuf[i].sCode := '';
DataBuf[i].Base := 0;
DataBuf[i].Time := 0;
DataBuf[i].Amount := 0;
if i < 6 then InfoBuf[i].Count := 0;
end;
// 정보종류 초기화
InfoBuf[1].sInfoCd := 'AA';
InfoBuf[1].sInfoNm := '여행';
InfoBuf[1].Amount := 4000;
InfoBuf[2].sInfoCd := 'BB';
InfoBuf[2].sInfoNm := '서적';
InfoBuf[2].Amount := 2000;
InfoBuf[3].sInfoCd := 'CC';
InfoBuf[3].sInfoNm := '영화';
InfoBuf[3].Amount := 3000;
InfoBuf[4].sInfoCd := 'DD';
InfoBuf[4].sInfoNm := '주식';
InfoBuf[4].Amount := 4000;
InfoBuf[5].sInfoCd := 'EE';
InfoBuf[5].sInfoNm := '운세';
InfoBuf[5].Amount := 5000;
Cnt := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
{*******************************
입력폼 설계시 조건 체크 한다.
********************************}
// 최대 입력자료의 건수(7건) 체크
if Cnt > 7 then
begin
ShowMessage('최대 입력자료의 건수(7건) 확인하세요!!');
exit;
end;
// 고객번호 두자리 정수값 범위(10-99) 체크
if (StrToIntdef(Trim(Edit1.Text),-99) = -99) or
(StrToInt(Trim(Edit1.Text)) < 10) or
(StrToInt(Trim(Edit1.Text)) > 99) then
begin
ShowMessage('고객번호 두자리 정수값 범위(10-99) 확인하세요!!');
Edit1.SetFocus;
exit;
end;
// 나이 정수값 범위(1-99) 체크
if (StrToIntdef(Trim(Edit2.Text),-99) = -99) or
(StrToInt(Trim(Edit2.Text)) < 1) or
(StrToInt(Trim(Edit2.Text)) > 99) then
begin
ShowMessage('나이 정수값 범위(1-99) 확인하세요!!');
Edit2.SetFocus;
exit;
end;
// 정보종류코드 영문자 두자리 체크
if (Length (Trim(Edit3.Text)) <> 2) or
(Trim(Edit3.Text) <> 'AA') and
(Trim(Edit3.Text) <> 'BB') and
(Trim(Edit3.Text) <> 'CC') and
(Trim(Edit3.Text) <> 'DD') and
(Trim(Edit3.Text) <> 'EE') then
begin
ShowMessage('정보종류코드 영문자 두자리 확인하세요!!');
Edit3.SetFocus;
exit;
end;
// 사용시간 정수값 범위(1-99) 체크
if (StrToIntdef(Trim(Edit4.Text),-99) = -99) or
(StrToInt(Trim(Edit4.Text)) < 1) or
(StrToInt(Trim(Edit4.Text)) > 99) then
begin
ShowMessage('사용시간 정수값 범위(1-99) 확인하세요!!');
Edit4.SetFocus;
Exit;
end;
//고객별로 입력 Data를 1회로 제한
begin
for i:= 1 to Cnt do
begin
if Form2.stringGrid1.Cells[0,i] = Trim(Edit4.Text) then
begin
//고객이 이용할 수 있는 정보종류의 수는 1개로 제한한다.
if Form2.stringGrid1.Cells[2,i] = Trim(Form2.Edit1.Text) then
begin
showMessage('고객이 이용한 정보종류가 존재합니다.!!');
Edit4.SetFocus;
Exit;
end;
showMessage('고객의 입력 데이타가 존재합니다.!!');
Edit4.SetFocus;
Exit;
end;
end;
end;
{*******************************
입력 데이타를 배열에 저장한다.
********************************}
Inc(Cnt);
DataBuf[Cnt].sNumber := StrToInt(Trim(Edit1.Text));
DataBuf[Cnt].Age := StrToInt(Trim(Edit2.Text));
DataBuf[Cnt].Time := StrToInt(Trim(Edit3.Text));
if StrToInt(Trim(Edit2.Text)) < 16 then DataBuf[Cnt].Base := 1000
else if StrToInt(Trim(Edit2.Text)) < 30 then DataBuf[Cnt].Base := 1500
else DataBuf[Cnt].Base := 2000;
begin
if Trim(Edit4.Text) = InfoBuf[i].sInfoCd then
begin
DataBuf[Cnt].Amount := DataBuf[Cnt].Base + DataBuf[Cnt].Time * InfoBuf[i].Amount; //고객정보이용료
DataBuf[Cnt].sCode := InfoBuf[i].sInfoNm; //정보종류명
InfoBuf[i].Count := InfoBuf[i].Count + 1; //최고이용횟수 누적
end;
end;
Form2.FormCreate(nil);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Cnt < 1 then
begin
ShowMessage('데이타를 1건이상 입력하세요!!');
Exit;
end;
Form2.Caption := '200334-175841 김정미';
Form2.ShowModal;
Form2 := TForm2.Create(nil);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls, ExtCtrls;
type
TForm2 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
Panel7: TPanel;
Panel8: TPanel;
Panel9: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5 : TEdit;
StringGrid1 : TStringGrid;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.DFM}
procedure TForm2.FormCreate(Sender: TObject);
var
i,j,tmpAmount:integer;
begin
{*******************************
문제1번의 결과를 구한다.
********************************}
// 최대정보이용료 비교
tmpAmount := DataBuf[1].Amount;
j := 1;
for i := 2 to Cnt do
begin
if DataBuf[i].Amount > tmpAmount then
begin
tmpAmount := DataBuf[i].Amount;
j := i;
end;
end;
// 변수를 Form에 치환한다.
Edit1.Text := IntToStr(DataBuf[j].sNumber); //고객번호
Edit2.Text := IntToStr(DataBuf[j].Age); //고객나이
Edit3.Text := FormatFloat('###,###',DataBuf[j].Amount); //고객정보이용료
{*******************************
문제2번의 결과를 구한다.
********************************}
// 최고이용횟수 비교
tmpAmount := InfoBuf[1].Count;
for i := 1 to 5 do
begin
if tmpAmount <= InfoBuf[i].Count then
begin
tmpAmount := InfoBuf[i].Count;
j := i;
end;
end;
Edit4.Text := InfoBuf[j].sInfoNm; //정보종류명
Edit5.Text:= IntToStr(InfoBuf[j].Count) + '번'; //최고이용횟수
{*******************************
문제3번의 결과를 구한다.
********************************}
// 타이틀 치환한다.
StringGrid1.Cells[0,0] := '고객번호';
StringGrid1.Cells[1,0] := '나이';
StringGrid1.Cells[2,0] := '정보종류명';
StringGrid1.Cells[3,0] := '기본요금';
StringGrid1.Cells[4,0] := '사용시간';
StringGrid1.Cells[5,0] := '고객정보사용금액';
// 전체고객테이블을 치환한다.
for i := 1 to Cnt do
begin
StringGrid1.Cells[0, i] := IntToStr(DataBuf[i].sNumber);
StringGrid1.Cells[1, i] := IntToStr(DataBuf[i].Age);
StringGrid1.Cells[2, i] := DataBuf[i].sCode;
StringGrid1.Cells[3, i] := FormatFloat('###,###', DataBuf[i].Base)+'원';
StringGrid1.Cells[4, i] := IntToStr(DataBuf[i].Time);
StringGrid1.Cells[5, i] := FormatFloat('###,###', DataBuf[i].Amount)+'원';
end;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;
end.
입력버튼을 누르면 입력이 안되요..
교수님이 주신 참고자료하구 교과서를 봐도 잘 모르겟어여...
조언 부탁드릴께요
죄송합니다...