Advertisement
Guest User

Untitled

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