Advertisement
Guest User

Untitled

a guest
May 2nd, 2017
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 15.38 KB | None | 0 0
  1.  
  2. program EmployeesControl;
  3.  
  4. uses
  5.   SysUtils,
  6.   crt;
  7.  
  8. type
  9.   emp=^account;
  10.   rep=^report;
  11.  
  12.   account=record
  13.     login:string[15];
  14.     password:string[30];
  15.     names:string[30];
  16.     surname:string[45];
  17.     idCardNo:string[10];
  18.     admin:boolean;
  19.     empNext,empPrev:emp;
  20.     empRep:rep;
  21.   end;
  22.  
  23.   report=record
  24.     startHour,startMinute,endHour,endMinute:byte;
  25.     startDay,startMonth,endDay,endMonth:byte;
  26.     startYear,endYear:integer;
  27.     activities:string;
  28.     repNext,repPrev:rep;
  29.   end;
  30.  
  31.   dataBaseFile=record
  32.     login:string[15];
  33.     password:string[30];
  34.     names:string[30];
  35.     surname:string[45];
  36.     idCardNo:string[40];
  37.     admin:boolean;
  38.     startHour,startMinute,endHour,endMinute:byte;
  39.     startDay,startMonth,endDay,endMonth:byte;
  40.     startYear,endYear:integer;
  41.     activities:string;
  42.   end;
  43.  
  44. const FILENAME='DataBase.dat';
  45.  
  46. var
  47.   empHead,empFound:emp;
  48.   repHead:rep;
  49.   m:char;
  50.  
  51.  
  52. //zapisywanie bazy do pliku
  53. procedure saveAll(var empHead:emp);
  54. var
  55.     curEmp:emp;
  56.     curRep:rep;
  57.     fileDB:file of dataBaseFile;
  58.     DB:dataBaseFile;
  59.  
  60. begin
  61.     write('poczatek saveall');readln;
  62.     if (empHead=NIL) then
  63.     writeln('Nie ma czego zapisac')
  64.   else
  65.     begin
  66.     assign(fileDB,FILENAME);
  67.     write('przypisano plik');readln;
  68.     rewrite(fileDB);
  69.     write('otwarto plik');readln;
  70.         while (curEmp<>NIL) do
  71.             begin
  72.                 write('pierwszy while');readln;
  73.                 curRep:=curEmp^.empRep;
  74.                 DB.login:=curEmp^.login;
  75.                 DB.password:=curEmp^.password;
  76.                 DB.names:=curEmp^.names;
  77.                 DB.surname:=curEmp^.surname;
  78.                 DB.idCardNo:=curEmp^.idCardNo;
  79.                 DB.admin:=curEmp^.admin;
  80.                 write('Przypisano zmienne');readln;
  81.               //  write(fileDB,DB);
  82.               //  write('teoretycznie zapisano zmienne do pliku');readln;
  83.               if curRep=NIL then
  84.                 write(fileDB,DB);
  85.  
  86.             while (curRep<>NIL) do
  87.                 begin
  88.                     write('drugi while');readln;
  89.                     DB.startHour:=curRep^.startHour;
  90.                     DB.startMinute:=curRep^.startMinute;
  91.                     DB.endHour:=curRep^.endHour;
  92.                     DB.endMinute:=curRep^.endMinute;
  93.                     DB.startDay:=curRep^.startDay;
  94.                     DB.startMonth:=curRep^.startMonth;
  95.                     DB.endDay:=curRep^.endDay;
  96.                     DB.endMonth:=curRep^.endMonth;
  97.                     DB.startYear:=curRep^.startYear;
  98.                     DB.endYear:=curRep^.endYear;
  99.                     DB.activities:=curRep^.activities;
  100.                     write(fileDB,DB);
  101.                     writeln('Baza zostala zapisana');
  102.                     curRep:=curRep^.repNext;
  103.             end;
  104.         curEmp:=curEmp^.empNext;
  105.     end;
  106.     close(fileDB);
  107.  
  108.     end;
  109.     readln;
  110.  
  111. end;
  112.  
  113. //wczytywanie bazy z pliku
  114. procedure loadAll;
  115. var
  116.     fileDB:file of dataBaseFile;
  117.     DB:dataBaseFile;
  118.  
  119. begin;
  120.     assign(fileDB,FILENAME);
  121.     reset(fileDB);
  122.  
  123.  
  124.     close(fileDB);
  125. end;
  126.  
  127. {function hidePassword:string;
  128. var pass:char;
  129. begin
  130. pass:=readkey;
  131. while pass<>#13 do
  132. hidePassword:=hidePassword+pass;
  133. pass:=readkey;
  134. end;
  135.  }
  136.  
  137. // Tworzenie nowego uzytkownika!
  138. procedure newUser(var empHead:emp);
  139. var
  140.   newEmp,curEmp,prevEmp:emp;
  141.   exist,check,adm:boolean;
  142.   lg,idn,nm,snm,pwd:string;
  143.   a:char;
  144. begin
  145. clrscr;
  146.   writeln(' ===== Tworzenie nowego konta ===== ');
  147.   write('Imie: ');
  148.   readln(nm);
  149.   write('Nazwisko: ');
  150.   readln(snm);
  151.   write('Login: ');
  152.   readln(lg);
  153.   write('Haslo: ');
  154.   readln(pwd);
  155.   //pwd:=hidePassword;
  156.  
  157.  
  158.   if (empHead = NIL) then //jezeli strutkura jeszcze "nie istnieje"
  159.   begin
  160.     new(newEmp);
  161.     newEmp^.names:=nm;
  162.     newEmp^.surname:=snm;
  163.     newEmp^.login:=lg;
  164.     newEmp^.password:=pwd;
  165.     newEmp^.admin:=true;
  166.     write('Numer dowodu: ');
  167.     readln(idn);
  168.     newEmp^.idCardNo:=idn;
  169.  
  170.     newEmp^.empNext:=NIL;
  171.     newEmp^.empPrev:=NIL;
  172.     newEmp^.empRep:=NIL;
  173.     empHead:=newEmp;
  174.  
  175.     writeln('Jest to pierwsze konto. Domyslnie zostaly mu przypisane ustawienia administracyjne.');
  176.     readln;
  177.   end else
  178.  
  179.   begin
  180.     curEmp:=empHead;
  181.     exist:=false;
  182.     while (not exist) do  //petla ktora dziala wtedy i tylko wtedy jesli nie podano jeszcze unikatowego loginu
  183.     begin
  184.       while ((curEmp^.empNext <> NIL) and (curEmp^.login <> lg)) do  //petla ktora "chodzi" po kazdym kolejnym elemencie listy jezeli aktualnie przetwarzany element listy ma login rozny o podanego loginu
  185.         curEmp:=curEmp^.empNext;      //to przeskocz na kolejny element - z petli wyjdziemy kiedy si&#281; ona "skonczy", albo kiedy elementy beda zdublowane
  186.  
  187.       while (curEmp^.login = lg) do  //jezeli "wyszlismy" z petli z powodu curEmp^.login = lg
  188.       begin
  189.         writeln('Login "',lg,'" jest juz zajety');
  190.         write('Podaj inny login: ');
  191.         readln(lg); //czytaj od usera kolejny login
  192.       end; //jezeli wyszlismy bo petla sie juz skonczyla
  193.         exist:=true;
  194.     end;
  195.  
  196.     curEmp:=empHead;
  197.     exist:=true;
  198.     while (exist) do  //petla ktora dziala wtedy i tylko wtedy jesli nie podano jeszcze unikatowego numeru dowodu
  199.     begin
  200.       write('Podaj numer dowodu: ');
  201.       readln(idn); //czytaj od usera kolejny numeru dowodu
  202.       while ((curEmp^.empNext <> NIL) and (curEmp^.idCardNo <> idn)) do  //petla ktora "chodzi" po kazdym kolejnym elemencie listy jezeli aktualnie przetwarzany element listy ma idn rozny od podanego numeru dowodu
  203.         curEmp:=curEmp^.empNext;      //to przeskocz na kolejny element - z petli wyjdziemy kiedy si&#281; ona "skonczy", albo kiedy elementy beda zdublowane
  204.  
  205.       if (curEmp^.idCardNo = idn) then  //jezeli "wyszlismy" z petli z powodu curEmp^.idCardNo = idn
  206.         writeln('Numer dowodu jest juz zajety')
  207.       else  //jezeli wyszlismy bo petla sie juz skonczyla
  208.         exist:=false;
  209.     end;
  210.  
  211.     //ok w tym momencie mamy juz unikatowy login i idn - mozemy wstawiac
  212.     curEmp:=empHead;
  213.     prevEmp:=empHead;
  214.  
  215.  
  216.     repeat
  217.       check:=FALSE;
  218.       if curEmp<>NIL then
  219.       begin
  220.         if curEmp^.surname<snm then
  221.         begin
  222.           check:=TRUE;
  223.           prevEmp:=curEmp;
  224.           curEmp:=curEmp^.empNext;
  225.         end;
  226.       end;
  227.     until not check;
  228.  
  229.  
  230.     //tworzymy nowy element (zdublowane to jest z tym co bylo na poczatku - mozna to zapisac bardziej elegancko wszystko, ale na razie robimy "dzialajaca" wersje
  231.     new(newEmp);
  232.     newEmp^.names:=nm;
  233.     newEmp^.surname:=snm;
  234.     newEmp^.login:=lg;
  235.     newEmp^.password:=pwd;
  236.     writeln('Czy nadac uzytkownikowi status administratora? (T/N)');
  237.     a:=readkey;
  238.     while ((a<>'T') AND (a<>'t') AND (a<>'N') AND (a<>'n')) do
  239.     begin
  240.       writeln('Nie rozpoznano wyboru. Wybierz "T" albo "N".');
  241.       a:=readkey;
  242.     end;
  243.  
  244.     if ((a='T') OR (a='t')) then
  245.       adm:=true
  246.     else
  247.       adm:= false;
  248.  
  249.     newEmp^.admin:=adm;
  250.     newEmp^.idCardNo:=idn;
  251.     newEmp^.empRep:=NIL;
  252.  
  253.     if (curEmp = NIL) then  //jakzesmy na koniec listy zalezli, czyli "mniejszych" nazwisk w liscie brak, i na koniec listy dopisywac bedziemy
  254.     begin
  255.       prevEmp^.empNext:=newEmp;
  256.       newEmp^.empNext:=NIL;
  257.       newEmp^.empPrev:=prevEmp;
  258.     end else  //czylismy znalezli nazwisko wieksze niz nasze i wpisywac miedzy one musim
  259.     begin
  260.       newEmp^.empNext:=prevEmp^.empNext;
  261.       newEmp^.empPrev:=prevEmp;
  262.       prevEmp^.empNext:=newEmp;
  263.       curEmp^.empPrev:=newEmp;
  264.     end;
  265.  
  266.   end;
  267.   readln;
  268. end;  //koniec procedury
  269.  
  270. // Wyszukiwanie uzytkownika!
  271. procedure findUser(var empHead:emp);
  272. var
  273.   curEmp,prevEmp:emp;
  274.   user:boolean;
  275.   idn,nm,snm:string;
  276.   n:integer;
  277.  
  278.     begin
  279.   clrscr;
  280.         if empHead=nil then //jesli nie istnieja pracownicy, to informacja o tym
  281.             writeln('Brak u&#380;ytkownikow.')
  282.         else //w przeciwnym razie okreslic, kto jest szukany
  283.     begin
  284.         writeln('Aby wyszukac pracownika, wprowadz jego dane.');
  285.         write('Imie: ');
  286.         readln(nm);
  287.         write('Nazwisko: ');
  288.         readln(snm);
  289.     end;
  290.  
  291.             curEmp:=empHead;
  292.       n:=0;
  293.       writeln('Pracownicy pasujacy do wyszukania: ');
  294.       user:=false; //wartosc, czy pracownik istnieje - inicjalizacja
  295.  
  296.         while (curEmp <> NIL) do //dopoki lista sie nie skonczyla
  297.         begin
  298.             if ((curEmp^.names=nm) AND (curEmp^.surname=snm)) then //jesli znaleziono imie i nazwisko
  299.             begin
  300.                 user:=true;
  301.                 inc(n); //zwieksz liczbe porzadkowa
  302.                 writeln(n,'. ',curEmp^.names,' ',curEmp^.surname,', Nr dowodu: ',curEmp^.idCardNo); //wypisz dane pracownika
  303.                 prevEmp:=curEmp; //ustaw element powrotu - istotne dla pozniejszej pracy
  304.                 curEmp:=curEmp^.empNext; //przesun sie na nastepny
  305.               end else
  306.             begin
  307.               prevEmp:=curEmp; //ustaw element powrotu - istotne dla pozniejszej pracy
  308.               curEmp:=curEmp^.empNext; //przesun sie na nastepny
  309.           end;
  310.         end;
  311.  
  312.         curEmp:=prevEmp;
  313.           writeln('juz tu');readln;
  314.           if (not user) then //jesli nie znaleziono pracownikow o zadanych parametrach, to informuj
  315.             writeln('Brak pasujacych uzytkownikow!')
  316.           else //w przeciwnym razie wybierz wsrod nich pracownika docelowego wg. numeru dowodu - jakos trzeba rozrozniac np. 2 janow kowalskich, a nr dowodu jest unikatowy.
  317.             begin
  318.                             write('Podaj nr dowodu pracownika, do ktorego dostep chcesz uzyskac: ');
  319.                 readln(idn);
  320.               writeln('teraz tu 1');readln;
  321.                         while (curEmp<>NIL) AND (curEmp^.empNext<>NIL) AND (curEmp^.idCardNo<>idn) do
  322.                 begin
  323.                 writeln('teraz tu 2');readln;
  324.                         curEmp:=curEmp^.empPrev;
  325.                 end;
  326.                 writeln('teraz tu 3');readln;
  327.                     if (curEmp<>NIL) AND ( ((curEmp^.idCardNo=idn) AND ((curEmp^.names<>nm) OR (curEmp^.surname<>snm))) ) then
  328.                 begin
  329.                     writeln('Ten numer dowodu nalezy do zupelnie innej osoby, niz wyszukane');
  330.                     empFound:=NIL;
  331.                     end else if (curEmp=NIL) then
  332.                 begin
  333.                     writeln('Prawdopodobnie podano bledny numer dowodu. Prosze sie upewnic o jego poprawnosci, gdyz w bazie nie istnieje taki numer.');
  334.                     empFound:=NIL;
  335.                     end else
  336.                     begin
  337.                         writeln('Przegladasz dane pracownika: ');
  338.                         write('Imie: ');
  339.                         writeln(curEmp^.names);
  340.                         write('Nazwisko: ');
  341.                         writeln(curEmp^.surname);
  342.                         write('Login: ');
  343.                         writeln(curEmp^.login);
  344.                         write('Nr dowodu: ');
  345.                         writeln(curEmp^.idCardNo);
  346.                         write('Uprawnienia administratora: ');
  347.                         if (not curEmp^.admin) then
  348.                             writeln('NIE')
  349.                         else
  350.                             writeln('TAK');
  351.                     empFound:=curEmp;
  352.                   end;
  353.             end;
  354.         //end;
  355.  
  356.     //end;
  357.   readln;
  358.  
  359. end; //koniec procedury
  360.  
  361. //tworzenie nowego wpisu w raporcie.
  362. procedure newReport(var repHead:rep;var empFound:emp);
  363. var
  364.     curEmp:emp;
  365.     newRep,curRep,prevRep:rep;
  366.     stHr,stMin,enHr,enMin:byte;
  367.     stDay,stMnth,enDay,enMnth:byte;
  368.     stYr,enYr:integer;
  369.     act:string;
  370.  
  371. begin
  372.     curEmp:=empFound;
  373.   if (curEmp=NIL) then
  374.     writeln('Nie wybrano zadnego pracownika, wiec nie mozna dodac raportu')
  375.     else
  376.     begin
  377.  
  378.         writeln('Wprowadz raport:');
  379.         writeln('data rozpoczecia: ');
  380.         write('Dzien: ');
  381.         readln(stDay);
  382.         write('Miesiac: ');
  383.         readln(stMnth);
  384.         write('Rok: ');
  385.         readln(stYr);
  386.         writeln('Czas rozpoczecia: ');
  387.         write('Godzina: ');
  388.         readln(stHr);
  389.         write('Minuta: ');
  390.         readln(stMin);
  391.  
  392.         writeln('data zakonczenia:');
  393.         write('Dzien: ');
  394.         read(enDay);
  395.         write('Miesiac: ');
  396.         readln(enMnth);
  397.         write('Rok: ');
  398.         readln(enYr);
  399.         writeln('Czas zakonczenia');
  400.         write('Godzina: ');
  401.         read(enHr);
  402.         writeln('Minuta: ');
  403.         readln(enMin);
  404.  
  405.         if (repHead=NIL) then
  406.         begin
  407.             new(newRep);
  408.             newRep^.startDay:=stDay;
  409.             newRep^.startMonth:=stMnth;
  410.             newRep^.startYear:=stYr;
  411.             newRep^.startHour:=stHr;
  412.             newRep^.startMinute:=stMin;
  413.             newRep^.endDay:=enDay;
  414.             newRep^.endMonth:=enMnth;
  415.             newRep^.endYear:=enYr;
  416.             newRep^.endHour:=enHr;
  417.             newRep^.endMinute:=enMin;
  418.             newRep^.activities:=act;
  419.             newRep^.repNext:=NIL;
  420.             newRep^.repPrev:=NIL;
  421.             curEmp^.empRep:=newRep;
  422.             repHead:=newRep;
  423.         end else
  424.         begin
  425.             curRep:=repHead;
  426.             while (curRep^.repNext<>NIL) do
  427.                 curRep:=curRep^.repNext;
  428.  
  429.             curRep:=repHead;
  430.             prevRep:=repHead;
  431.             new(newRep);
  432.             newRep^.startDay:=stDay;
  433.             newRep^.startMonth:=stMnth;
  434.             newRep^.startYear:=stYr;
  435.             newRep^.startHour:=stHr;
  436.             newRep^.startMinute:=stMin;
  437.             newRep^.endDay:=enDay;
  438.             newRep^.endMonth:=enMnth;
  439.             newRep^.endYear:=enYr;
  440.             newRep^.endHour:=enHr;
  441.             newRep^.endMinute:=enMin;
  442.             newRep^.activities:=act;
  443.  
  444.             prevRep^.repNext:=newRep;
  445.             newRep^.repNext:=NIL;
  446.             newRep^.repPrev:=prevRep;
  447.  
  448.  
  449.  
  450.  
  451.   end; {else
  452.     begin
  453.     newRep:=curEmp^.empRep;
  454.     new(curEmp^.empRep);
  455.     curEmp^.empRep^.repNext:=newRep;
  456.     newRep^.repPrev:=curEmp^.empRep;}
  457.   end;
  458.   writeln('Raport zosta&#322; dodany');
  459.  
  460. end; //koniec procedury
  461.  
  462.  
  463. //Wyswietlanie wszystkich uzytkownikow!
  464. procedure showAllUsers(var empHead:emp);
  465. var
  466.   curEmp:emp;
  467.   n:integer;
  468.  
  469.     begin
  470.   clrscr;
  471.     if empHead=nil then
  472.             writeln('Brak u&#380;ytkownikow.')
  473.         else
  474.     begin
  475.         curEmp:=empHead;
  476.         n:=0;
  477.         while (curEmp<>nil) do
  478.         begin
  479.             inc(n);
  480.             writeln(n,'. ',curEmp^.names,' ',curEmp^.surname);
  481.           curEmp:=curEmp^.empNext;
  482.         end;
  483.     end;
  484.   readln;
  485. end; //koniec procedury
  486.  
  487.  
  488. procedure empMenu;
  489. var
  490.     m:char;
  491.  
  492. begin
  493. new(empHead);
  494. empHead:=NIL;
  495. new(repHead);
  496. repHead:=NIL;
  497. repeat
  498.     clrscr;
  499.     writeln('Menu obslugi pracownikow');
  500.     writeln('1. Utworz nowego pracownika');
  501.     writeln('2. Wyszukaj pracownika');
  502.     writeln('3. Wyswietl liste wszystkich pracownikow');
  503.     writeln('ESC - powrot do poprzedniego menu');
  504.     m:=readkey;
  505.     case m of
  506.     '1': begin
  507.          newUser(empHead);
  508.          //saveAll;
  509.          end;
  510.     '2': findUser(empHead);
  511.     '3': showAllUsers(empHead);
  512.     #27: begin
  513.          writeln('Wybrano powrót do poprzedniego menu');
  514.          delay(1500);
  515.          end;
  516.     else writeln('Nie rozpoznano wyboru');
  517.     end;
  518. until m=#27;
  519. newReport(repHead,empFound);
  520. writeln('raport');
  521. readln;
  522. saveAll(empHead);
  523. writeln('zapis');
  524. end;
  525.  
  526.  
  527. begin
  528.     clrscr;
  529.     writeln('Witamy w programie');
  530.     repeat
  531.     clrscr;
  532.     writeln('Menu glowne!');
  533.     writeln('1. Obsluga pracownikow');
  534.     writeln('ESC - aby wyjsc');
  535.     m:=readkey;
  536.     case m of
  537.     '1':empMenu;
  538.     #27:writeln('Zakonczono prace programu')
  539.     else begin
  540.             writeln('Nie rozpoznano wyboru');
  541.             delay(500);
  542.          end;
  543.     end;
  544.     until m=#27;
  545.  
  546.  
  547.  
  548. readln;
  549. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement