Výpis programu pro PC (Turbo Pascal 7.0)

PROGRAM Seriova_linka;

USES
  Crt, ibmcom;		{ibmcom je ke stazeni na www.programmersheaven.com}

{Po spusteni program nacita znak ze serioveho portu COM1, po nacteni 12 znaku
ziskane cislo zkusi najit v textovem souboru seznam.txt v aktualnim adresari.
Pokud toto cislo najde, zjisti jmeno majitele TM a jeho pristupove pravo,
oboji zobrazi na obrazovce. Pokud ma dana osoba vyssi pristupove pravo (1),
program mu povoli dalsi operaci - v nasem pripade soucet dvou cisel. Pokud
ma dana osoba nizsi pristupove pravo (ruzne od 1),program mu dalsi operaci
nepovoli a zacne se testovat dalsi TM.}

PROCEDURE read_key (VAR ch1, ch2: Char);
BEGIN
  ch1 := ReadKey;
  IF ch1 = #0 THEN
    ch2 := ReadKey
  ELSE
    ch2 := #0;
END;

type clovek=record
            jmeno    : string[40];
            cislo    : string[12];
            prava    : string[1];
          end;

CONST
  port = 1;                     {zarizeni musi byt pripojeno na portu COM1}
  initial_speed = 19200;        {komunikacni rychlost 19200b/s}


VAR
  lidi     : array [1..1000] of Clovek;      {max.1000 lidi v seznamu}
  puvodni:string[40];
  result   : Word;
  exit_prog: Boolean;
  ch1, ch2 : Char;
  ch,ch3      : Char;
  volba    : integer;
  sercislo : string[12];
  pocetlidi: Integer;
  n:integer;

procedure Nacti;
var soubor   : text;
begin
  assign (soubor,'seznam.txt');
  reset (soubor);
  pocetlidi:=0;
  while not eof(soubor) do
  begin
    pocetlidi:=pocetlidi+1;
    readln (soubor,lidi[pocetlidi].jmeno);
    readln (soubor,lidi[pocetlidi].cislo);
    readln (soubor,lidi[pocetlidi].prava);
  end;
  close (soubor);
end;

procedure soucet;
var a,b:integer;
begin
  gotoxy (10,12);
  write ('Pristup povolen  ');
  gotoxy (10,15);
  write ('Zadej cislo a:');
  readln (a);
  gotoxy (10,16);
  write ('Zadej cislo b:');
  readln (b);
  gotoxy (10,17);
  write (a,'+',b,'=',a+b);
end;

procedure zobraz (cis:integer);
begin
  gotoxy (10,10);
  write ('                                                 ');
  gotoxy (10,9);
  write('Jmeno uzivatele');
  gotoxy(32,9);
  write('Pristupove pravo');
  gotoxy (10,10);
  write (lidi[cis].jmeno);
  gotoxy(32,10);
  write(lidi[cis].prava);
  if lidi[cis].jmeno<>puvodni then
  begin
    puvodni:=lidi[cis].jmeno;
    if lidi[cis].prava='1' then
    soucet
    else
    begin
    gotoxy (10,12);
    write ('Pristup nepovolen');
    gotoxy (10,15);
    write ('                ');
    gotoxy (10,16);
    write ('                ');
    gotoxy (10,17);
    write ('                ');
    end;
  end;
end;

procedure kontrola;
var n:integer;
begin
  n:=1;
  while (sercislo<>lidi[n].cislo) and (n<=pocetlidi) do
  n:=n+1;
  if n<=pocetlidi then
  zobraz(n)
  else
  begin
    gotoxy (10,9);
    write('Jmeno uzivatele');
    gotoxy(32,9);
    write('Pristupove pravo');
    gotoxy (10,10);
    write ('Nenalezeno v databazi                  ');
  end;
end;


BEGIN
clrscr;
Writeln('Zabezpeceni pristupu do programu');
Writeln('=============================================================================');
Writeln('Rezim prijimani');
write('Port: COM',port);
writeln('  Rychlost: ',initial_speed,'b/s');
writeln('Stiskem Alt-X ukoncite program');


  ComInstall (port, result);
  IF result <> 0 THEN
    BEGIN
    CASE result OF
      1: Writeln ('Chybne cislo portu: ', port);
      2: Writeln ('UART port nenalezen: ', port);
      3: Writeln ('Driver je uz jednou instalovan');
    ELSE
      Writeln ('Neocekavana chyba v ComInstall', result);
      END;
    Exit;
    END;
  ComRaiseDTR;                 {nastavi DTR}
  ComSetSpeed (initial_speed); {nastavi komunik.rychlost}
  ComSetParity (ComNone, 1);   {zadna parita,8 datovych bitu,1 stop bit}
  exit_prog := False;
  nacti;
  REPEAT
    IF KeyPressed THEN
    BEGIN
      read_key (ch1, ch2);
      CASE ch2 OF
          #45: {Alt-X}
          exit_prog := True;
      END;
    END;
    ch3 := ComRx;              {nacteni 1 znaku}
    IF ch3 <> #0 THEN
    begin
      sercislo:=sercislo+ch3;          {po 12 znacich kontrola cisla}
      if length(sercislo)=12 then
      begin
        kontrola;
        sercislo:='';
      end;
    end;

  UNTIL exit_prog;
END.

Zpět na předchozí stránku