Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uses Crt,SysUtils;
- type
- plista_d = ^tosoba;
- tosoba = record
- imie: string[25];
- nazwisko: string[40];
- wiek: byte;
- PESEL: string[11];
- nast,pop: plista_d;
- end;
- var
- pocz:plista_d;
- numer:integer;
- procedure wstawDoListy(var pocz:plista_d; temp:plista_d);
- var
- poczatek:plista_d;
- begin
- if pocz=nil then
- begin
- temp^.pop:=nil;
- temp^.nast:=nil;
- pocz:=temp;
- end
- else
- begin
- poczatek:=pocz;
- while(pocz<>nil) do
- begin
- if (temp^.nazwisko<pocz^.nazwisko) then
- begin
- if(pocz^.pop=nil) then
- begin
- temp^.nast:=pocz;
- temp^.pop:=nil;
- pocz^.pop:=temp;
- pocz:=temp;
- break;
- end
- else
- begin
- temp^.nast:=pocz;
- temp^.pop:=pocz^.pop;
- pocz^.pop^.nast:=temp;
- pocz^.pop:=temp;
- pocz:=temp;
- pocz:=poczatek;
- break;
- end;
- end
- else
- begin
- if(pocz^.nast=nil) then
- begin
- temp^.nast:=nil;
- temp^.pop:=pocz;
- pocz^.nast:=temp;
- pocz:=poczatek;
- break;
- end;
- pocz:=pocz^.nast;
- end;
- end;
- end;
- end;
- procedure dodaj(var pocz:plista_d);
- var
- temp,nazwisko:plista_d;
- czyWystapil:boolean;
- numer:integer;
- begin
- repeat
- writeln('Wybierz w jaki sposob chcesz dodac:');
- writeln('1) Dodaj z zachowaniem porzadku klucza (nazwisko)');
- writeln('2) Dodaj z zachowaniem porzadku klucza (nazwisko) oraz sprawdzeniem unikalnosci');
- readln(numer);
- until (numer=1) or (numer=2);
- new(temp);
- writeln('Podaj imie:');
- readln(temp^.imie);
- if(numer=1) then
- begin
- writeln('Podaj nazwisko:');
- readln(temp^.nazwisko);
- end
- else
- begin
- repeat
- nazwisko:=pocz;
- czyWystapil:=false;
- writeln('Podaj nazwisko:');
- readln(temp^.nazwisko);
- if pocz<>nil then
- begin
- repeat
- if(nazwisko^.nazwisko=temp^.nazwisko) then
- begin
- writeln('Takie nazwisko juz jest na liscie!');
- czyWystapil:=true;
- end;
- nazwisko:=nazwisko^.nast;
- until nazwisko=nil;
- end
- until czyWystapil=false;
- end;
- writeln('Podaj wiek:');
- readln(temp^.wiek);
- writeln('Podaj PESEL:');
- readln(temp^.PESEL);
- wstawDoListy(pocz,temp);
- writeln('Gotowe!');
- writeln('Nacisnij ENTER, aby kontynuowac...');
- readln;
- end;
- function usunZListy(var pocz:plista_d; nazwisko:string):boolean;
- var
- poczatek,temp:plista_d;
- begin
- poczatek:=nil;
- if(pocz^.nazwisko=nazwisko) then
- begin
- temp:=pocz;
- if pocz^.nast<>nil then
- begin
- pocz:=pocz^.nast;
- pocz^.pop:=nil;
- end
- else pocz:=nil;
- dispose(temp);
- temp:=nil;
- usunZListy:=true;
- end
- else
- begin
- poczatek:=pocz;
- pocz:=pocz^.nast;
- while pocz<>nil do
- begin
- if(pocz^.nazwisko=nazwisko) then
- begin
- temp:=pocz;
- if pocz^.nast<>nil then
- begin
- pocz^.pop^.nast:=pocz^.nast;
- pocz^.nast^.pop:=pocz^.pop;
- end
- else
- pocz^.pop^.nast:=nil;
- dispose(temp);
- temp:=nil;
- usunZListy:=true;
- break;
- end
- else pocz:=pocz^.nast;
- end;
- if(pocz=nil) then usunZListy:=false;
- pocz:=poczatek;
- end;
- end;
- function usunPoPeselu(var pocz:plista_d; pesel:string):boolean;
- var
- poczatek,temp:plista_d;
- begin
- poczatek:=nil;
- if(pocz^.PESEL=pesel) then
- begin
- temp:=pocz;
- if pocz^.nast<>nil then
- begin
- pocz:=pocz^.nast;
- pocz^.pop:=nil;
- end
- else pocz:=nil;
- dispose(temp);
- temp:=nil;
- usunPoPeselu:=true;
- end
- else
- begin
- poczatek:=pocz;
- pocz:=pocz^.nast;
- while pocz<>nil do
- begin
- if(pocz^.PESEL=pesel) then
- begin
- temp:=pocz;
- if pocz^.nast<>nil then
- begin
- pocz^.pop^.nast:=pocz^.nast;
- pocz^.nast^.pop:=pocz^.pop;
- end
- else
- pocz^.pop^.nast:=nil;
- dispose(temp);
- temp:=nil;
- usunPoPeselu:=true;
- break;
- end
- else pocz:=pocz^.nast;
- end;
- if(pocz=nil) then usunPoPeselu:=false;
- pocz:=poczatek;
- end;
- end;
- procedure usun(var pocz:plista_d);
- var
- nazwisko:string;
- begin
- if(pocz=nil) then
- writeln('Nie mozesz nic usunac, poniewaz lista jest pusta!')
- else
- begin
- writeln('Podaj nazwisko do usuniecia:');
- readln(nazwisko);
- if (usunZListy(pocz,nazwisko)) then
- writeln('Usunieto element o podanym nazwisku z listy.')
- else
- writeln('Brak takiego nazwiska w liscie.');
- end;
- writeln('Nacisnij ENTER, aby kontynuowac...');
- readln;
- end;
- procedure usunWszystko(var pocz:plista_d);
- var
- temp,poczatek:plista_d;
- nazwisko:string;
- licznik:integer;
- begin
- licznik:=0;
- poczatek:=pocz;
- if pocz=nil then writeln('Nie mozesz nic usunac, poniewaz lista jest pusta!')
- else
- begin
- writeln('Podaj nazwisko do usuniecia:');
- readln(nazwisko);
- while pocz<>nil do
- begin
- if(pocz^.nazwisko=nazwisko) then
- begin
- if(pocz^.pop=nil) then
- begin
- temp:=pocz;
- if pocz^.nast<>nil then
- begin
- pocz:=pocz^.nast;
- pocz^.pop:=nil;
- end
- else pocz:=nil;
- dispose(temp);
- temp:=nil;
- poczatek:=pocz;
- writeln('Usunieto element o podanym nazwisku z listy.');
- inc(licznik);
- continue;
- end;
- if(pocz^.pop<>nil) then
- begin
- temp:=pocz;
- if pocz^.nast<>nil then
- begin
- pocz^.pop^.nast:=pocz^.nast;
- pocz^.nast^.pop:=pocz^.pop;
- end
- else
- pocz^.pop^.nast:=nil;
- pocz:=pocz^.nast;
- dispose(temp);
- temp:=nil;
- writeln('Usunieto element o podanym nazwisku z listy.');
- inc(licznik);
- end;
- end
- else pocz:=pocz^.nast;
- end;
- pocz:=poczatek;
- if licznik=0 then writeln('Brak takiego nazwiska w liscie.');
- end;
- writeln('Nacisnij ENTER, aby kontynuowac...');
- readln;
- end;
- procedure edytuj(var pocz:plista_d);
- var
- element:string;
- poczatek,temp:plista_d;
- licznik:integer;
- begin
- licznik:=0;
- if(pocz=nil) then writeln('Nie mozesz edytowac pustej listy!')
- else
- begin
- repeat
- writeln('Wybierz po jakim elemencie chcesz edytowac:');
- writeln('1) Edytuj poprzez "NAZWISKO"');
- writeln('2) Edytuj poprzez "PESEL"');
- readln(numer);
- until (numer=1) or (numer=2);
- poczatek:=pocz;
- new(temp);
- if(numer=1) then
- writeln('Wpisz NAZWISKO osoby, ktorej dane chcesz zmienic:')
- else
- writeln('Wpisz PESEL osoby, ktorej dane chcesz zmienic:');
- readln(element);
- while(pocz<>nil) do
- begin {
- if(pocz^.PESEL=element) or (pocz^.nazwisko=element) then
- begin
- if(numer=1) then
- begin
- writeln('Podaj imie:');
- readln(pocz^.imie);
- writeln('Podaj wiek:');
- readln(pocz^.wiek);
- writeln('Podaj PESEL:');
- readln(pocz^.PESEL);
- end
- else
- begin
- writeln('Podaj imie:');
- readln(temp^.imie);
- writeln('Podaj nazwisko:');
- readln(temp^.nazwisko);
- writeln('Podaj wiek:');
- readln(temp^.wiek);
- temp^.PESEL:=pocz^.PESEL;
- usunZListy(poczatek,element);
- wstawDoListy(poczatek,temp);
- end;}
- //if(pocz^.PESEL=element) or (pocz^.nazwisko=element) then
- //begin
- if((numer=1) and (pocz^.nazwisko=element)) then
- begin
- writeln('Podaj imie:');
- readln(pocz^.imie);
- writeln('Podaj wiek:');
- readln(pocz^.wiek);
- writeln('Podaj PESEL:');
- readln(pocz^.PESEL);
- writeln('Pomyslnie edytowano dane.');
- inc(licznik);
- break;
- end;
- if((numer=2) and ((pocz^.PESEL=element))) then
- begin
- writeln('Podaj imie:');
- readln(temp^.imie);
- writeln('Podaj nazwisko:');
- readln(temp^.nazwisko);
- writeln('Podaj wiek:');
- readln(temp^.wiek);
- temp^.PESEL:=pocz^.PESEL;
- usunPoPeselu(poczatek,element);
- wstawDoListy(poczatek,temp);
- writeln('Pomyslnie edytowano dane.');
- inc(licznik);
- break;
- end;
- pocz:=pocz^.nast;
- //else
- end;
- if licznik=0 then
- begin
- if(numer=1) then
- writeln('Brak podanego NAZWISKA w liscie.')
- else
- writeln('Brak podanego numeru PESEL w liscie.');
- end;
- end;
- pocz:=poczatek;
- writeln('---------------------');
- writeln('Nacisnij ENTER, aby kontynuowac...');
- readln;
- end;
- procedure zapiszDoPliku(pocz:plista_d);
- var
- txtFile:textfile;
- numer:integer;
- nazwisko:string;
- begin
- if pocz=nil then writeln('Nie mozesz nic zapisac do pliku, poniewaz lista jest pusta!')
- else
- begin
- repeat
- writeln('Wybierz jakie elementy mam umiescic w pliku:');
- writeln('1) Wszystkie elementy listy');
- writeln('2) Elementy o wybranym nazwisku');
- writeln('3) Osoby pelnoletnie');
- readln(numer);
- until (numer=1) or (numer=2) or (numer=3);
- if(numer=2) then
- begin
- writeln('Podaj nazwisko:');
- readln(nazwisko);
- end;
- assignfile(txtFile, 'lista.txt');
- rewrite(txtFile);
- writeln('Zapisuje...');
- repeat
- begin
- if(numer=1) then
- begin
- writeln(txtFile,'Imie: ',pocz^.imie);
- writeln(txtFile,'Nazwisko: ',pocz^.nazwisko);
- writeln(txtFile,'Wiek: ',pocz^.wiek);
- writeln(txtFile,'PESEL: ',pocz^.PESEL);
- writeln(txtFile,'---------------------');
- end;
- if(numer=2) and (pocz^.nazwisko=nazwisko) then
- begin
- writeln(txtFile,'Imie: ',pocz^.imie);
- writeln(txtFile,'Nazwisko: ',pocz^.nazwisko);
- writeln(txtFile,'Wiek: ',pocz^.wiek);
- writeln(txtFile,'PESEL: ',pocz^.PESEL);
- writeln(txtFile,'---------------------');
- end;
- if(numer=3) and (pocz^.wiek>=18) then
- begin
- writeln(txtFile,'Imie: ',pocz^.imie);
- writeln(txtFile,'Nazwisko: ',pocz^.nazwisko);
- writeln(txtFile,'Wiek: ',pocz^.wiek);
- writeln(txtFile,'PESEL: ',pocz^.PESEL);
- writeln(txtFile,'---------------------');
- end;
- pocz:=pocz^.nast;
- end;
- until pocz=nil;
- writeln('Zapisano!');
- closefile(txtFile);
- end;
- writeln('Nacisnij ENTER, aby kontynuowac...');
- readln;
- end;
- procedure wyswietl(pocz:plista_d);
- begin
- if pocz=nil then writeln('Lista jest pusta.')
- else
- repeat
- begin
- writeln('Imie: ',pocz^.imie);
- writeln('Nazwisko: ',pocz^.nazwisko);
- writeln('Wiek: ',pocz^.wiek);
- writeln('PESEL: ',pocz^.PESEL);
- writeln('---------------------');
- pocz:=pocz^.nast;
- end;
- until pocz=nil;
- writeln('Nacisnij ENTER, aby kontynuowac...');
- readln;
- end;
- procedure wyswietlPlik();
- var
- txtFile:textfile;
- znak:char;
- nameFile:string;
- begin
- nameFile:='lista.txt';
- if FileExists(nameFile) then
- begin
- assignfile(txtFile,nameFile);
- reset(txtFile);
- while not eof(txtFile) do
- begin
- read(txtFile,znak);
- write(znak);
- end;
- closefile(txtFile);
- end
- else writeln('Brak podanego pliku! Uzyj jednego z punktow MENU aby go stworzyc.');
- writeln('Nacisnij ENTER, aby kontynuowac...');
- readln;
- end;
- begin
- pocz:=nil;
- repeat
- clrscr;
- writeln('[1] Dodaj element do listy dwukierunkowej');
- writeln('[2] Usun z listy pierwszy element o podanej wartosci klucza');
- writeln('[3] Usun z listy wszystkie elementy o podanej wartosci klucza');
- writeln('[4] Edytuj wybrany element listy dwukierunkowej');
- writeln('[5] Zapisz do pliku tekstowego elementy listy dwukierunkowej');
- writeln('[6] Wyswietl zawartosc listy dwukierunkowej na ekran');
- writeln('[7] Wyswietl zawartosc wczesniej utworzonego pliku tekstowego na ekran');
- writeln;
- writeln('Wybierz co mam zrobic lub wpisz [0] aby wyjsc...');
- readln(numer);
- writeln('---------------------');
- case numer of
- 1: dodaj(pocz);
- 2: usun(pocz);
- 3: usunWszystko(pocz);
- 4: edytuj(pocz);
- 5: zapiszDoPliku(pocz);
- 6: wyswietl(pocz);
- 7: wyswietlPlik();
- end;
- until (numer=0);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement