검색결과 리스트
글
Q를 실습해 봤습니다.
실습 내용은 은행의 창구와 대기표를 구현했습니다.
공부는 류종택님의 동영상 강의를 보면서 했습니다. 유용한 강의라 좋습니다.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,TicketQueue ;
.
.
.
private
{ Private declarations }
FTicketQueue : TTicketQueue;
procedure m_Display;
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.btnaddClick(Sender: TObject);
begin
FTicketQueue.AddWaittingList;
m_Display;
end;
procedure TfrmMain.btnTurn1Click(Sender: TObject);
var
CurrNo : Integer;
begin
if FTicketQueue.Empty then
begin
showMessage('대기하고 있는 손님이 없습니다.');
exit;
end;
CurrNo := FTicketQueue.pop;
memoDisplay.Lines.Values['[1번 창구]'] :=Format(' %d번 손님 창구로 오세요.',[CurrNo]);
lblOne.Caption := IntToStr(CurrNo);
m_Display;
end;
procedure TfrmMain.btnTurn2Click(Sender: TObject);
var
CurrNo : Integer;
begin
if FTicketQueue.Empty then
begin
showMessage('대기하고 있는 손님이 없습니다.');
exit;
end;
CurrNo := FTicketQueue.pop;
memoDisplay.Lines.Values['[2번 창구]'] :=Format(' %d번 손님 창구로 오세요.',[CurrNo]);
lblTwo.Caption := IntToStr(CurrNo);
m_Display;
end;
procedure TfrmMain.btnTurn3Click(Sender: TObject);
var
CurrNo : Integer;
begin
if FTicketQueue.Empty then
begin
showMessage('대기하고 있는 손님이 없습니다.');
exit;
end;
CurrNo := FTicketQueue.pop;
memoDisplay.Lines.Values['[3번 창구]'] :=Format(' %d번 손님 창구로 오세요.',[CurrNo]);
lblThr.Caption := IntToStr(CurrNo);
m_Display
end;
procedure TfrmMain.Button1Click(Sender: TObject);
begin
FTicketQueue.Clear;
memoDisplay.Lines.Clear;
lblOne.Caption := '00';
lblTwo.Caption := '00';
lblThr.Caption := '00';
m_Display;
end;
procedure TfrmMain.m_Display;
begin
memoDisplay.Lines.Values['전체 대기자']:=IntToStr(FTicketQueue.Count);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
FTicketQueue := TTicketQueue.create;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
FTicketQueue.free;
end;
end.
interface
uses
Classes, SysUtils;
type
TTicketQueueNode = class
private
public
Next : TTicketQueueNode;
No : Integer;
end;
TTicketQueue = class
private
FHead, FTail : TTicketQueueNode;
FCurrentNo : Integer;
FCount : Integer;
function GetEmpty : boolean;
public
procedure Clear;
procedure AddWaittingList;
function pop:integer;
published
property Empty : Boolean read GetEmpty;
property Count : Integer read FCount;
end;
implementation
procedure TTicketQueue.AddWaittingList;
var
Item : TTicketQueueNode;
begin
FCurrentNo := FCurrentNo +1;
FCount := FCount + 1;
Item := TTicketQueueNode.Create;
Item.No := FCurrentNo;
if FHead = nil then FHead := Item;
if FTail <> nil then FTail.Next:= Item;
FTail := Item;
FTail.Next := nil;
end;
procedure TTicketQueue.Clear;
begin
while Empty = False do pop;
FCurrentNo := 0;
FCount := 0;
end;
function TTicketQueue.GetEmpty:Boolean;
begin
Result := FHead = nil;
end;
function TTicketQueue.pop: integer;
var
item : TTicketQueueNode;
begin
if Empty then raise Exception.Create('TicketQueue가 비어있습니다.');
FCount := FCount -1;
item := FHead;
FHead := FHead.Next;
Result := item.No;
FreeAndNil(item);
end;
end.
'Delphi' 카테고리의 다른 글
[Delphi] 델파이 단축키 (0) | 2012.06.04 |
---|---|
[Delphi]ExtractStrings을 이용한 문자열 구분 (0) | 2012.05.30 |
[Delphi] 이미지 위에서의 마우스 좌표 구하기 & 윈도우창에서의 마우스 좌표 구하기. (0) | 2012.05.22 |
[Delphi]TStringGrid OnSelectCell 이벤트 특정 컬럼 수정 막기 (0) | 2012.05.22 |
[Delphi]델파이 VCL 레퍼런스 (0) | 2012.05.21 |
RECENT COMMENT