Программирование турникета метро

Автор работы: Пользователь скрыл имя, 16 Мая 2012 в 20:29, курсовая работа

Краткое описание

Описание.
Задачи пассажира: 1. Вставить карту. 2. Ввести PIN код. 3. Пройти через турникет.
Задачи блока управления: 1. Считать и проверить карту. 2. Проверить введенный пассажи-ром PIN код. 3. Снять деньги с карты. 4. Сохранить время получения средств в специальный файл. 5. Отправить сигнал на турникет о разрешении проезда.

Содержание работы

1. Задание
2. Описание диаграмм
2.1. Диаграмма использования
2.2. Диаграмма последовательности
2.3. Диаграмма активности
2.4. Диаграмма классов
3. Описание классов
3.1. Класс TCard
3.2. Tprocessor
3.3. Tform
4. Руководство пользователя

Содержимое работы - 1 файл

Пояснительная записка (Восстановлен).docx

— 210.56 Кб (Скачать файл)

end;

procedure EnterNumber(Number:String);

var Str:String;

begin

  Str := MainForm.LabelNextAction.Caption;

  if Length(Str) = 4 then

    exit;

  if (Str = 'Введите PIN код')

  or (Str = 'Неверный PIN!') then

    Str := '';

  MainForm.LabelNextAction.Caption := Str + Number;

end;

procedure TMainForm.Button0Click(Sender: TObject);

begin

  EnterNumber('0');

end;

procedure TMainForm.Button1Click(Sender: TObject);

begin

  EnterNumber('1');

end;

procedure TMainForm.Button2Click(Sender: TObject);

begin

  EnterNumber('2');

end;

procedure TMainForm.Button3Click(Sender: TObject);

begin

  EnterNumber('3');

end;

procedure TMainForm.Button4Click(Sender: TObject);

begin

  EnterNumber('4');

end;

procedure TMainForm.Button5Click(Sender: TObject);

begin

  EnterNumber('5');

end;

procedure TMainForm.Button6Click(Sender: TObject);

begin

  EnterNumber('6');

end;

procedure TMainForm.Button7Click(Sender: TObject);

begin

  EnterNumber('7');

end; 

procedure TMainForm.Button8Click(Sender: TObject);

begin

  EnterNumber('8');

end;

procedure TMainForm.Button9Click(Sender: TObject);

begin

  EnterNumber('9');

end;

procedure TMainForm.ButtonBackSpaceClick(Sender: TObject);

var Str:String;

begin

  Str := LabelNextAction.Caption;

  if Str = 'Введите PIN код'then

    exit;

  Delete(Str,Length(Str),1);

  if Str = '' then

    Str := 'Введите PIN код';

  LabelNextAction.Caption := Str;

end;

procedure TMainForm.ButtonEnterClick(Sender: TObject);

var

  FileHandle:integer;

  Pbool:boolean;

  tf:TextFile;

begin

  if (LabelNextAction.Caption = 'Введите PIN код')

  or (LabelNextAction.Caption = 'Неверный PIN!') then

    exit;

  if NOT Proc.CheckPIN(StrToInt(LabelNextAction.Caption)) then

  begin

    LabelNextAction.Caption := 'Неверный PIN!';

    if Proc.BlockCard() then

      ChangeKeybordEnabled(False);

    exit;

  end;

  if NOT Proc.GetMoney() then

  begin

    LabelMessage.Caption := 'На карте недостаточно средств!';

    ChangeKeybordEnabled(False);

    exit;

  end;

  LabelStop.Font.Color := clInactiveBorder;

  LabelGo.Font.Color   := clGreen;

  LabelTimer.Caption := '15';

  ShapeBlock.Visible := false;

  try

    AssignFile(tf,'C:\ProgramLog.txt');

    if FileExists('C:\ProgramLog.txt') = False then

       Rewrite(tf)

    else

     begin

       Append(tf);

     end;

    WriteLn(tf,TimeToStr(Time()));

  finally

    CloseFile(tf);

  end;

 

end;

procedure TMainForm.ButtonLoadCardClick(Sender: TObject);

var

  FileHandle:integer;

  fMessage:String;

begin

  if ButtonLoadCard.Caption = 'Достать карту' then

    begin

      ChangeKeybordEnabled(False);

      exit;

    end;

  if OpenDialog1.Execute then

  try

    FileHandle := FileOpen(OpenDialog1.FileName,fmOpenRead);

    Proc := TProcessor.Create;

    fMessage := Proc.LoadAndCheckCard(FileHandle,OpenDialog1.FileName);

    if fMessage ='OK' then

      ChangeKeybordEnabled(True)

    else

      LabelMessage.Caption := fMessage;

  finally

    FileClose(FileHandle);

  end; 

end;

procedure TMainForm.ButtonMoveClick(Sender: TObject);

begin

  TimerMove.Enabled := true;

end;

end.

 

unit Unit2; 

interface 

uses

  SysUtils, Dialogs; 

type

TCard = class(TObject)

  fTypeOfCard:integer;

  fPIN:integer;

  fSumma:integer;

  fBlocked:boolean;

  fDateLimit:TDateTime;

 

//published

end; 

type

TProcessor = class(TObject)

  fTryCount:integer;

  fCard:TCard;

  fFileName:String;

  function CheckPIN(PIN:integer):Boolean;

  function LoadAndCheckCard(fFile:integer;FileName:string): String;

  function GetMoney():Boolean;

  function BlockCard():Boolean;

  //procedure EnableTrip();

end; 

implementation 

function TProcessor.CheckPIN(PIN:integer):Boolean;

begin

  if PIN <> fCard.fPIN then

    Result := FALSE

  else

    Result := TRUE;

end; 

function TProcessor.LoadAndCheckCard(fFile:integer;FileName:string):String;

var

  FileHandle:integer;

  TypeOfCard:integer;

  d:TDateTime;

  Pbool:Boolean;

  PIN, Summa:integer;

begin

  fTryCount := 0;

  fFileName := FileName;

    FileHandle := fFile;

    FileRead(FileHandle,TypeOfCard,SizeOf(integer));

    fCard := TCard.Create;

    if TypeOfCard <> 3 then

    begin

      fCard.Free;

      Result := 'Неверный тип карты!';

      exit;

    end;

    fCard.fTypeOfCard := TypeOfCard;

    FileRead(FileHandle,d,SizeOf(TdateTime));

    if d < Date() then

    begin

      fCard.Free;

      Result := 'Карта просрочена!';

      exit;

    end;

    fCard.fDateLimit := d;

    FileRead(FileHandle,Pbool,SizeOf(boolean));

    if Pbool then

    begin

      fCard.Free;

      Result := 'Карта заблокирована!';

      exit;

    end;

    fCard.fBlocked := Pbool;

    FileRead(FileHandle,PIN,SizeOf(integer));

    fCard.fPIN := PIN;

    FileRead(FileHandle,Summa,SizeOf(integer));

    fCard.fSumma := Summa;

    Result := 'OK';

end; 

function TProcessor.GetMoney():Boolean;

var FileHandle,Summa:integer;

begin

  if fCard.fSumma < 50 then

    Result := FALSE

  else

  begin

    FileHandle := FileOpen(fFileName,fmOpenReadWrite);

    FileSeek(FileHandle,SizeOf(integer)+SizeOf(TDateTime)

    +SizeOf(boolean)+SizeOf(integer),0);

    Summa := fCard.fSumma - 50;

    FileWrite(FileHandle,Summa,SizeOf(integer));

    FileClose(FileHandle);

    Result := True;

  end;

end; 

function TProcessor.BlockCard():Boolean;

var FileHandle:integer;

PBool:Boolean;

begin

  if fTryCount >= 2 then

    begin

      FileHandle := FileOpen(fFileName,fmOpenReadWrite);

      FileSeek(FileHandle,SizeOf(integer)+SizeOf(TDateTime),0);

      Pbool := True;

      FileWrite(FileHandle,Pbool,SizeOf(boolean));

      FileClose(FileHandle);

      Result := true

    end

  else

  begin

    fTryCount := fTryCount+1;

    Result := false;

  end;

end;

end.

 

unit Unit3; 

interface 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ComCtrls, ExtCtrls; 

type

  TFormEditCard = class(TForm)

    LabeledEditTypeOfCard: TLabeledEdit;

    LabeledEditPIN: TLabeledEdit;

    LabeledEditSumma: TLabeledEdit;

    CheckBoxBlocked: TCheckBox;

    DateTimePickerDateLimit: TDateTimePicker;

    ButtonOpen: TButton;

    ButtonSave: TButton;

    OpenDialog1: TOpenDialog;

    SaveDialog1: TSaveDialog;

    procedure ButtonSaveClick(Sender: TObject);

    procedure ButtonOpenClick(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end; 

var

  FormEditCard: TFormEditCard; 

implementation 

Uses Unit2;

{$R *.dfm} 

procedure TFormEditCard.ButtonOpenClick(Sender: TObject);

var FileHandle:integer;

TypeOfCard,PIN,Summa:integer;

Pbool:boolean;

Pdate:TDateTime;

Card:TCard;

begin

if OpenDialog1.Execute then

begin

  try

    FileHandle := FileOpen(OpenDialog1.FileName,fmOpenRead);

    Card := Tcard.Create;

    FileRead(FileHandle,TypeOfCard,SizeOf(integer));

    Card.fTypeOfCard := TypeOfCard;

    FileRead(FileHandle,Pdate,SizeOf(TdateTime));

    Card.fDateLimit := Pdate;

    FileRead(FileHandle,Pbool,SizeOf(boolean));

    Card.fBlocked := Pbool;

    FileRead(FileHandle,PIN,SizeOf(integer));

    Card.fPIN := PIN;

    FileRead(FileHandle,Summa,SizeOf(integer));

    Card.fSumma := Summa;

    FileClose(FileHandle);

  except

    ShowMessage('Не  удалось открыть файл!');

    exit;

  end;

  LabeledEditTypeOfCard.Text       := IntToStr(Card.fTypeOfCard);

  LabeledEditPIN.Text              := IntToStr(Card.fPIN);

  LabeledEditSumma.Text            := IntToStr(Card.fSumma);

  CheckBoxBlocked.Checked          := Card.fBlocked;

  DateTimePickerDateLimit.DateTime := Card.fDateLimit;

end;

end; 

procedure TFormEditCard.ButtonSaveClick(Sender: TObject);

var FileHandle:integer;

Card:TCard;

begin

if SaveDialog1.Execute then

begin

  Card := TCard.Create;

  Card.fTypeOfCard := StrToInt(LabeledEditTypeOfCard.Text);

  Card.fPIN       := StrToInt(LabeledEditPIN.Text);

  Card.fSumma     := StrToInt(LabeledEditSumma.Text);

  Card.fBlocked   := CheckBoxBlocked.Checked;

  Card.fDateLimit := DateTimePickerDateLimit.DateTime;

  FileHandle := FileCreate(SaveDialog1.FileName);

  FileWrite(FileHandle,Card.fTypeOfCard,SizeOf(integer));

  FileWrite(FileHandle,Card.fDateLimit,SizeOf(TDateTime));

  FileWrite(FileHandle,Card.fBlocked,SizeOf(boolean));

  FileWrite(FileHandle,Card.fPIN,SizeOf(integer));

  FileWrite(FileHandle,Card.fSumma,SizeOf(integer));

  FileClose(FileHandle);

end;

end;

end.

  1. Задание.

    Вариант 16. Турникет метро  


Информация о работе Программирование турникета метро