Автор работы: Пользователь скрыл имя, 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.	Руководство пользователя
end;
procedure EnterNumber(Number:String);
var Str:String;
begin
  Str := MainForm.LabelNextAction.
if Length(Str) = 4 then
exit;
if (Str = 'Введите PIN код')
or (Str = 'Неверный PIN!') then
Str := '';
  MainForm.LabelNextAction.
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.
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(
var
FileHandle:integer;
Pbool:boolean;
tf:TextFile;
begin
if (LabelNextAction.Caption = 'Введите PIN код')
or (LabelNextAction.Caption = 'Неверный PIN!') then
exit;
  if NOT Proc.CheckPIN(StrToInt(
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.
    if FileExists('C:\ProgramLog.txt'
Rewrite(tf)
else
begin
Append(tf);
end;
WriteLn(tf,TimeToStr(Time()));
finally
CloseFile(tf);
end;
end;
procedure 
TMainForm.ButtonLoadCardClick(
var
FileHandle:integer;
fMessage:String;
begin
if ButtonLoadCard.Caption = 'Достать карту' then
begin
ChangeKeybordEnabled(False);
exit;
end;
if OpenDialog1.Execute then
try
    FileHandle := FileOpen(OpenDialog1.FileName,
Proc := TProcessor.Create;
    fMessage := Proc.LoadAndCheckCard(
if fMessage ='OK' then
ChangeKeybordEnabled(True)
else
LabelMessage.Caption := fMessage;
finally
FileClose(FileHandle);
  end; 
end;
procedure 
TMainForm.ButtonMoveClick(
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:
function GetMoney():Boolean;
function BlockCard():Boolean;
//procedure EnableTrip();
end; 
implementation 
function TProcessor.CheckPIN(PIN:
begin
if PIN <> fCard.fPIN then
Result := FALSE
else
Result := TRUE;
end; 
function TProcessor.LoadAndCheckCard(
var
FileHandle:integer;
TypeOfCard:integer;
d:TDateTime;
Pbool:Boolean;
PIN, Summa:integer;
begin
fTryCount := 0;
fFileName := FileName;
FileHandle := fFile;
    FileRead(FileHandle,
fCard := TCard.Create;
if TypeOfCard <> 3 then
begin
fCard.Free;
Result := 'Неверный тип карты!';
exit;
end;
fCard.fTypeOfCard := TypeOfCard;
    FileRead(FileHandle,d,SizeOf(
if d < Date() then
begin
fCard.Free;
Result := 'Карта просрочена!';
exit;
end;
fCard.fDateLimit := d;
    FileRead(FileHandle,Pbool,
if Pbool then
begin
fCard.Free;
Result := 'Карта заблокирована!';
exit;
end;
fCard.fBlocked := Pbool;
    FileRead(FileHandle,PIN,
fCard.fPIN := PIN;
    FileRead(FileHandle,Summa,
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,
    FileSeek(FileHandle,SizeOf(
    +SizeOf(boolean)+SizeOf(
Summa := fCard.fSumma - 50;
    FileWrite(FileHandle,Summa,
FileClose(FileHandle);
Result := True;
end;
end; 
function TProcessor.BlockCard():
var FileHandle:integer;
PBool:Boolean;
begin
if fTryCount >= 2 then
begin
      FileHandle 
:= FileOpen(fFileName,
      FileSeek(FileHandle,SizeOf(
Pbool := True;
      FileWrite(FileHandle,Pbool,
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(
var FileHandle:integer;
TypeOfCard,PIN,Summa:integer;
Pbool:boolean;
Pdate:TDateTime;
Card:TCard;
begin
if OpenDialog1.Execute then
begin
try
    FileHandle := FileOpen(OpenDialog1.FileName,
Card := Tcard.Create;
    FileRead(FileHandle,
Card.fTypeOfCard := TypeOfCard;
    FileRead(FileHandle,Pdate,
Card.fDateLimit := Pdate;
    FileRead(FileHandle,Pbool,
Card.fBlocked := Pbool;
    FileRead(FileHandle,PIN,
Card.fPIN := PIN;
    FileRead(FileHandle,Summa,
Card.fSumma := Summa;
FileClose(FileHandle);
except
ShowMessage('Не удалось открыть файл!');
exit;
end;
  LabeledEditTypeOfCard.Text    
  LabeledEditPIN.Text           
  LabeledEditSumma.Text         
  CheckBoxBlocked.Checked       
  DateTimePickerDateLimit.
end;
end; 
procedure 
TFormEditCard.ButtonSaveClick(
var FileHandle:integer;
Card:TCard;
begin
if SaveDialog1.Execute then
begin
Card := TCard.Create;
  Card.fTypeOfCard := StrToInt(
Card.fPIN := StrToInt(LabeledEditPIN.Text);
  Card.fSumma     
:= StrToInt(LabeledEditSumma.
Card.fBlocked := CheckBoxBlocked.Checked;
  Card.fDateLimit := DateTimePickerDateLimit.
  FileHandle := FileCreate(SaveDialog1.
  FileWrite(FileHandle,Card.
  FileWrite(FileHandle,Card.
  FileWrite(FileHandle,Card.
  FileWrite(FileHandle,Card.
  FileWrite(FileHandle,Card.
FileClose(FileHandle);
end;
end;
end.
Вариант 16. Турникет метро