Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program EmployeesControl;
- uses
- SysUtils,
- crt;
- type
- emp=^account;
- rep=^report;
- account=record
- login:string[15];
- password:string[30];
- names:string[30];
- surname:string[45];
- idCardNo:string[10];
- admin:boolean;
- empNext,empPrev:emp;
- empRep:rep;
- end;
- report=record
- startHour,startMinute,endHour,endMinute:byte;
- startDay,startMonth,endDay,endMonth:byte;
- startYear,endYear:integer;
- activities:string;
- repNext,repPrev:rep;
- end;
- dataBaseFile=record
- login:string[15];
- password:string[30];
- names:string[30];
- surname:string[45];
- idCardNo:string[40];
- admin:boolean;
- startHour,startMinute,endHour,endMinute:byte;
- startDay,startMonth,endDay,endMonth:byte;
- startYear,endYear:integer;
- activities:string;
- end;
- const FILENAME='DataBase.dat';
- var
- empHead,empFound:emp;
- repHead:rep;
- m:char;
- //zapisywanie bazy do pliku
- procedure saveAll(var empHead:emp);
- var
- curEmp:emp;
- curRep:rep;
- fileDB:file of dataBaseFile;
- DB:dataBaseFile;
- begin
- write('poczatek saveall');readln;
- if (empHead=NIL) then
- writeln('Nie ma czego zapisac')
- else
- begin
- assign(fileDB,FILENAME);
- write('przypisano plik');readln;
- rewrite(fileDB);
- write('otwarto plik');readln;
- while (curEmp<>NIL) do
- begin
- write('pierwszy while');readln;
- curRep:=curEmp^.empRep;
- DB.login:=curEmp^.login;
- DB.password:=curEmp^.password;
- DB.names:=curEmp^.names;
- DB.surname:=curEmp^.surname;
- DB.idCardNo:=curEmp^.idCardNo;
- DB.admin:=curEmp^.admin;
- write('Przypisano zmienne');readln;
- // write(fileDB,DB);
- // write('teoretycznie zapisano zmienne do pliku');readln;
- if curRep=NIL then
- write(fileDB,DB);
- while (curRep<>NIL) do
- begin
- write('drugi while');readln;
- DB.startHour:=curRep^.startHour;
- DB.startMinute:=curRep^.startMinute;
- DB.endHour:=curRep^.endHour;
- DB.endMinute:=curRep^.endMinute;
- DB.startDay:=curRep^.startDay;
- DB.startMonth:=curRep^.startMonth;
- DB.endDay:=curRep^.endDay;
- DB.endMonth:=curRep^.endMonth;
- DB.startYear:=curRep^.startYear;
- DB.endYear:=curRep^.endYear;
- DB.activities:=curRep^.activities;
- write(fileDB,DB);
- writeln('Baza zostala zapisana');
- curRep:=curRep^.repNext;
- end;
- curEmp:=curEmp^.empNext;
- end;
- close(fileDB);
- end;
- readln;
- end;
- //wczytywanie bazy z pliku
- procedure loadAll;
- var
- fileDB:file of dataBaseFile;
- DB:dataBaseFile;
- begin;
- assign(fileDB,FILENAME);
- reset(fileDB);
- close(fileDB);
- end;
- {function hidePassword:string;
- var pass:char;
- begin
- pass:=readkey;
- while pass<>#13 do
- hidePassword:=hidePassword+pass;
- pass:=readkey;
- end;
- }
- // Tworzenie nowego uzytkownika!
- procedure newUser(var empHead:emp);
- var
- newEmp,curEmp,prevEmp:emp;
- exist,check,adm:boolean;
- lg,idn,nm,snm,pwd:string;
- a:char;
- begin
- clrscr;
- writeln(' ===== Tworzenie nowego konta ===== ');
- write('Imie: ');
- readln(nm);
- write('Nazwisko: ');
- readln(snm);
- write('Login: ');
- readln(lg);
- write('Haslo: ');
- readln(pwd);
- //pwd:=hidePassword;
- if (empHead = NIL) then //jezeli strutkura jeszcze "nie istnieje"
- begin
- new(newEmp);
- newEmp^.names:=nm;
- newEmp^.surname:=snm;
- newEmp^.login:=lg;
- newEmp^.password:=pwd;
- newEmp^.admin:=true;
- write('Numer dowodu: ');
- readln(idn);
- newEmp^.idCardNo:=idn;
- newEmp^.empNext:=NIL;
- newEmp^.empPrev:=NIL;
- newEmp^.empRep:=NIL;
- empHead:=newEmp;
- writeln('Jest to pierwsze konto. Domyslnie zostaly mu przypisane ustawienia administracyjne.');
- readln;
- end else
- begin
- curEmp:=empHead;
- exist:=false;
- while (not exist) do //petla ktora dziala wtedy i tylko wtedy jesli nie podano jeszcze unikatowego loginu
- begin
- 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
- curEmp:=curEmp^.empNext; //to przeskocz na kolejny element - z petli wyjdziemy kiedy się ona "skonczy", albo kiedy elementy beda zdublowane
- while (curEmp^.login = lg) do //jezeli "wyszlismy" z petli z powodu curEmp^.login = lg
- begin
- writeln('Login "',lg,'" jest juz zajety');
- write('Podaj inny login: ');
- readln(lg); //czytaj od usera kolejny login
- end; //jezeli wyszlismy bo petla sie juz skonczyla
- exist:=true;
- end;
- curEmp:=empHead;
- exist:=true;
- while (exist) do //petla ktora dziala wtedy i tylko wtedy jesli nie podano jeszcze unikatowego numeru dowodu
- begin
- write('Podaj numer dowodu: ');
- readln(idn); //czytaj od usera kolejny numeru dowodu
- 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
- curEmp:=curEmp^.empNext; //to przeskocz na kolejny element - z petli wyjdziemy kiedy się ona "skonczy", albo kiedy elementy beda zdublowane
- if (curEmp^.idCardNo = idn) then //jezeli "wyszlismy" z petli z powodu curEmp^.idCardNo = idn
- writeln('Numer dowodu jest juz zajety')
- else //jezeli wyszlismy bo petla sie juz skonczyla
- exist:=false;
- end;
- //ok w tym momencie mamy juz unikatowy login i idn - mozemy wstawiac
- curEmp:=empHead;
- prevEmp:=empHead;
- repeat
- check:=FALSE;
- if curEmp<>NIL then
- begin
- if curEmp^.surname<snm then
- begin
- check:=TRUE;
- prevEmp:=curEmp;
- curEmp:=curEmp^.empNext;
- end;
- end;
- until not check;
- //tworzymy nowy element (zdublowane to jest z tym co bylo na poczatku - mozna to zapisac bardziej elegancko wszystko, ale na razie robimy "dzialajaca" wersje
- new(newEmp);
- newEmp^.names:=nm;
- newEmp^.surname:=snm;
- newEmp^.login:=lg;
- newEmp^.password:=pwd;
- writeln('Czy nadac uzytkownikowi status administratora? (T/N)');
- a:=readkey;
- while ((a<>'T') AND (a<>'t') AND (a<>'N') AND (a<>'n')) do
- begin
- writeln('Nie rozpoznano wyboru. Wybierz "T" albo "N".');
- a:=readkey;
- end;
- if ((a='T') OR (a='t')) then
- adm:=true
- else
- adm:= false;
- newEmp^.admin:=adm;
- newEmp^.idCardNo:=idn;
- newEmp^.empRep:=NIL;
- if (curEmp = NIL) then //jakzesmy na koniec listy zalezli, czyli "mniejszych" nazwisk w liscie brak, i na koniec listy dopisywac bedziemy
- begin
- prevEmp^.empNext:=newEmp;
- newEmp^.empNext:=NIL;
- newEmp^.empPrev:=prevEmp;
- end else //czylismy znalezli nazwisko wieksze niz nasze i wpisywac miedzy one musim
- begin
- newEmp^.empNext:=prevEmp^.empNext;
- newEmp^.empPrev:=prevEmp;
- prevEmp^.empNext:=newEmp;
- curEmp^.empPrev:=newEmp;
- end;
- end;
- readln;
- end; //koniec procedury
- // Wyszukiwanie uzytkownika!
- procedure findUser(var empHead:emp);
- var
- curEmp,prevEmp:emp;
- user:boolean;
- idn,nm,snm:string;
- n:integer;
- begin
- clrscr;
- if empHead=nil then //jesli nie istnieja pracownicy, to informacja o tym
- writeln('Brak użytkownikow.')
- else //w przeciwnym razie okreslic, kto jest szukany
- begin
- writeln('Aby wyszukac pracownika, wprowadz jego dane.');
- write('Imie: ');
- readln(nm);
- write('Nazwisko: ');
- readln(snm);
- end;
- curEmp:=empHead;
- n:=0;
- writeln('Pracownicy pasujacy do wyszukania: ');
- user:=false; //wartosc, czy pracownik istnieje - inicjalizacja
- while (curEmp <> NIL) do //dopoki lista sie nie skonczyla
- begin
- if ((curEmp^.names=nm) AND (curEmp^.surname=snm)) then //jesli znaleziono imie i nazwisko
- begin
- user:=true;
- inc(n); //zwieksz liczbe porzadkowa
- writeln(n,'. ',curEmp^.names,' ',curEmp^.surname,', Nr dowodu: ',curEmp^.idCardNo); //wypisz dane pracownika
- prevEmp:=curEmp; //ustaw element powrotu - istotne dla pozniejszej pracy
- curEmp:=curEmp^.empNext; //przesun sie na nastepny
- end else
- begin
- prevEmp:=curEmp; //ustaw element powrotu - istotne dla pozniejszej pracy
- curEmp:=curEmp^.empNext; //przesun sie na nastepny
- end;
- end;
- curEmp:=prevEmp;
- writeln('juz tu');readln;
- if (not user) then //jesli nie znaleziono pracownikow o zadanych parametrach, to informuj
- writeln('Brak pasujacych uzytkownikow!')
- else //w przeciwnym razie wybierz wsrod nich pracownika docelowego wg. numeru dowodu - jakos trzeba rozrozniac np. 2 janow kowalskich, a nr dowodu jest unikatowy.
- begin
- write('Podaj nr dowodu pracownika, do ktorego dostep chcesz uzyskac: ');
- readln(idn);
- writeln('teraz tu 1');readln;
- while (curEmp<>NIL) AND (curEmp^.empNext<>NIL) AND (curEmp^.idCardNo<>idn) do
- begin
- writeln('teraz tu 2');readln;
- curEmp:=curEmp^.empPrev;
- end;
- writeln('teraz tu 3');readln;
- if (curEmp<>NIL) AND ( ((curEmp^.idCardNo=idn) AND ((curEmp^.names<>nm) OR (curEmp^.surname<>snm))) ) then
- begin
- writeln('Ten numer dowodu nalezy do zupelnie innej osoby, niz wyszukane');
- empFound:=NIL;
- end else if (curEmp=NIL) then
- begin
- writeln('Prawdopodobnie podano bledny numer dowodu. Prosze sie upewnic o jego poprawnosci, gdyz w bazie nie istnieje taki numer.');
- empFound:=NIL;
- end else
- begin
- writeln('Przegladasz dane pracownika: ');
- write('Imie: ');
- writeln(curEmp^.names);
- write('Nazwisko: ');
- writeln(curEmp^.surname);
- write('Login: ');
- writeln(curEmp^.login);
- write('Nr dowodu: ');
- writeln(curEmp^.idCardNo);
- write('Uprawnienia administratora: ');
- if (not curEmp^.admin) then
- writeln('NIE')
- else
- writeln('TAK');
- empFound:=curEmp;
- end;
- end;
- //end;
- //end;
- readln;
- end; //koniec procedury
- //tworzenie nowego wpisu w raporcie.
- procedure newReport(var repHead:rep;var empFound:emp);
- var
- curEmp:emp;
- newRep,curRep,prevRep:rep;
- stHr,stMin,enHr,enMin:byte;
- stDay,stMnth,enDay,enMnth:byte;
- stYr,enYr:integer;
- act:string;
- begin
- curEmp:=empFound;
- if (curEmp=NIL) then
- writeln('Nie wybrano zadnego pracownika, wiec nie mozna dodac raportu')
- else
- begin
- writeln('Wprowadz raport:');
- writeln('data rozpoczecia: ');
- write('Dzien: ');
- readln(stDay);
- write('Miesiac: ');
- readln(stMnth);
- write('Rok: ');
- readln(stYr);
- writeln('Czas rozpoczecia: ');
- write('Godzina: ');
- readln(stHr);
- write('Minuta: ');
- readln(stMin);
- writeln('data zakonczenia:');
- write('Dzien: ');
- read(enDay);
- write('Miesiac: ');
- readln(enMnth);
- write('Rok: ');
- readln(enYr);
- writeln('Czas zakonczenia');
- write('Godzina: ');
- read(enHr);
- writeln('Minuta: ');
- readln(enMin);
- if (repHead=NIL) then
- begin
- new(newRep);
- newRep^.startDay:=stDay;
- newRep^.startMonth:=stMnth;
- newRep^.startYear:=stYr;
- newRep^.startHour:=stHr;
- newRep^.startMinute:=stMin;
- newRep^.endDay:=enDay;
- newRep^.endMonth:=enMnth;
- newRep^.endYear:=enYr;
- newRep^.endHour:=enHr;
- newRep^.endMinute:=enMin;
- newRep^.activities:=act;
- newRep^.repNext:=NIL;
- newRep^.repPrev:=NIL;
- curEmp^.empRep:=newRep;
- repHead:=newRep;
- end else
- begin
- curRep:=repHead;
- while (curRep^.repNext<>NIL) do
- curRep:=curRep^.repNext;
- curRep:=repHead;
- prevRep:=repHead;
- new(newRep);
- newRep^.startDay:=stDay;
- newRep^.startMonth:=stMnth;
- newRep^.startYear:=stYr;
- newRep^.startHour:=stHr;
- newRep^.startMinute:=stMin;
- newRep^.endDay:=enDay;
- newRep^.endMonth:=enMnth;
- newRep^.endYear:=enYr;
- newRep^.endHour:=enHr;
- newRep^.endMinute:=enMin;
- newRep^.activities:=act;
- prevRep^.repNext:=newRep;
- newRep^.repNext:=NIL;
- newRep^.repPrev:=prevRep;
- end; {else
- begin
- newRep:=curEmp^.empRep;
- new(curEmp^.empRep);
- curEmp^.empRep^.repNext:=newRep;
- newRep^.repPrev:=curEmp^.empRep;}
- end;
- writeln('Raport został dodany');
- end; //koniec procedury
- //Wyswietlanie wszystkich uzytkownikow!
- procedure showAllUsers(var empHead:emp);
- var
- curEmp:emp;
- n:integer;
- begin
- clrscr;
- if empHead=nil then
- writeln('Brak użytkownikow.')
- else
- begin
- curEmp:=empHead;
- n:=0;
- while (curEmp<>nil) do
- begin
- inc(n);
- writeln(n,'. ',curEmp^.names,' ',curEmp^.surname);
- curEmp:=curEmp^.empNext;
- end;
- end;
- readln;
- end; //koniec procedury
- procedure empMenu;
- var
- m:char;
- begin
- new(empHead);
- empHead:=NIL;
- new(repHead);
- repHead:=NIL;
- repeat
- clrscr;
- writeln('Menu obslugi pracownikow');
- writeln('1. Utworz nowego pracownika');
- writeln('2. Wyszukaj pracownika');
- writeln('3. Wyswietl liste wszystkich pracownikow');
- writeln('ESC - powrot do poprzedniego menu');
- m:=readkey;
- case m of
- '1': begin
- newUser(empHead);
- //saveAll;
- end;
- '2': findUser(empHead);
- '3': showAllUsers(empHead);
- #27: begin
- writeln('Wybrano powrót do poprzedniego menu');
- delay(1500);
- end;
- else writeln('Nie rozpoznano wyboru');
- end;
- until m=#27;
- newReport(repHead,empFound);
- writeln('raport');
- readln;
- saveAll(empHead);
- writeln('zapis');
- end;
- begin
- clrscr;
- writeln('Witamy w programie');
- repeat
- clrscr;
- writeln('Menu glowne!');
- writeln('1. Obsluga pracownikow');
- writeln('ESC - aby wyjsc');
- m:=readkey;
- case m of
- '1':empMenu;
- #27:writeln('Zakonczono prace programu')
- else begin
- writeln('Nie rozpoznano wyboru');
- delay(500);
- end;
- end;
- until m=#27;
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement