Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program stack;
- uses crt;
- type
- Subscriber = record
- name: string[255];
- adress : string[255];
- number_phone : string[255];
- end;
- type
- T = Subscriber;
- type
- PNode = ^ Node;
- Node = record
- data: T;
- next: PNode;
- end;
- type List = class
- private
- head: PNode;
- size: Integer;
- public
- constructor Create();
- function get_size() : integer;
- function get_el(pos:integer) : PNode;
- procedure push_front(el: T);
- procedure erase(pos:Integer);
- procedure out_list();
- end;
- constructor List.Create();
- begin
- head:=nil;
- size:=0;
- end;
- function List.get_size() : integer;
- begin
- get_size:=size;
- end;
- function List.get_el(pos:integer) : PNode;
- var
- current : PNode = head;
- begin
- for i:integer:=0 to size-1 do
- begin
- if(pos=i) then
- begin
- get_el:=current;
- break;
- end;
- current:=current^.next;
- end;
- end;
- procedure List.push_front(el: T);
- var
- current: PNode;
- begin
- new(current);
- current^ .data := el;
- current^ .next := head;
- head := current;
- size+=1;
- end;
- procedure List.erase(pos:Integer);
- var
- current:PNode=head;
- previous:PNode=nil;
- found : boolean = false;
- begin
- if(pos<0) then
- begin
- writeln('Incorrect position entered');
- exit;
- end;
- for i: Integer :=0 to size-1 do
- begin
- if(i=pos) then
- begin
- found:=true;
- if(previous = nil) then
- begin
- head := current^.next;
- dispose(current);
- break;
- end
- else
- begin
- previous^.next := current^.next;
- dispose(current);
- break;
- end;
- end;
- previous:=current;
- current:=current^.next;
- end;
- if(found) then
- size-=1
- else
- writeln('The entered position is larger than the size of the List');
- end;
- procedure List.out_list();
- var
- current: PNode;
- begin
- current := head;
- write('List = {');
- while (current <> nil) do
- begin
- write(current^.data:3, ';');
- current:=current^.next;
- end;
- write('}');
- writeln();
- write('Size = ',size);
- writeln();
- end;
- var a : List;
- quit, buf_string : string;
- number_command, pos, n_subscribers :integer;
- data : T;
- element : PNode;
- f : file of Subscriber;
- begin
- a := new List;
- Assign(f,'C:\PABCWork.NET\My Work\Subscribers.data');
- Rewrite(f);
- Writeln('Enter number of subscribers:');
- Readln(n_subscribers);
- for i:integer:=1 to n_subscribers do
- begin
- ClrScr();
- writeln('Entered name:');
- Readln(data.name);
- writeln('Entered adress:');
- Readln(data.adress);
- writeln('Entered number phone:');
- Readln(data.number_phone);
- Write(f,data);
- end;
- Close(f);
- Reset(f);
- while not Eof(f) do
- begin
- Read(f,data);
- a.push_front(data);
- end;
- Close(f);
- while(quit<>'q') do
- begin
- ClrScr();
- writeln('Choose a command:');
- writeln('1) Push front');
- writeln('2) Erase');
- Writeln('3) Edit');
- writeln('4) Out List');
- writeln('5) Quit');
- readln(number_command);
- case number_command of
- 1:
- begin
- ClrScr();
- writeln('Entered name:');
- Readln(data.name);
- writeln('Entered adress:');
- Readln(data.adress);
- writeln('Entered number phone:');
- Readln(data.number_phone);
- a.push_front(data);
- end;
- 2:
- begin
- ClrScr();
- writeln('Enter the position of the element to be deleted:');
- Readln(pos);
- a.erase(pos);
- if((pos<0) or (pos>=a.get_size())) then
- Readln();
- end;
- 3:
- begin
- ClrScr();
- writeln('Enter the position of the element to be edit:');
- Readln(pos);
- if((pos<0) or (pos>=a.get_size())) then
- Writeln('Incorrect position entered')
- else
- begin
- element:=a.get_el(pos);
- Writeln('Choose a command:');
- Writeln('1)Edit name');
- Writeln('2)Edit adress');
- Writeln('3)Edit number phone');
- Readln(number_command);
- case number_command of
- 1:
- begin
- Writeln('Entered new name:');
- Readln(buf_string);
- element^.data.name:=buf_string;
- end;
- 2:
- begin
- Writeln('Entered new adress:');
- Readln(buf_string);
- element^.data.adress:=buf_string;
- end;
- 3:
- begin
- Writeln('Entered new number phone:');
- Readln(buf_string);
- element^.data.number_phone:=buf_string;
- end;
- else
- begin
- ClrScr();
- writeln('Command not found.');
- readln();
- end;
- end;
- end;
- end;
- 4:
- begin
- ClrScr();
- a.out_list();
- Readln();
- end;
- 5: quit:='q';
- else
- begin
- ClrScr();
- writeln('Command not found. Please try again.');
- readln();
- end;
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement