- #include <iostream>
- #include <string.h>
- using namespace std;
- class Person
- {
- char lastname[40];
- char name[20];
- int age;
- public:
- Person *next_Person; *previous_Person;
- void save_Person_data(char add_lastname[], char add_name[], int add_age);
- char *display_lastname();
- char *display_name();
- int display_age();
- char* get_name() { return name; }
- char* get_lastname() { return lastname; }
- int get_age() { return age; }
- Person* get_next() { return this->next_Person; } //wsk this wskazuje na obiekt dla którego została wywołana metoda
- void set_next(Person* next_person) { this->next_Person = next_Person; }
- bool less_than(Person* other) {
- return (this->name < other->get_name());
- }
- };
- class List
- {
- Person *first_Person;
- public:
- Person find_Person(char lastanme[]); //it means that function displays Person using it's lastname.
- void add_Person (Person *pointer_Person);//function take pointer at Person that should be added
- void add_person1 (Person *pointer_Person);
- void print_list();
- };
- int main()
- {
- //menu
- //cout << "Input 1 to add and save new person." << endl;
- //cout << "Input 2 to show list." << endl;
- //cout << "Input 3 to stop." << endl;
- int choice_number = 1;
- List *person_container = new List();
- int if_end = 0;
- while (if_end < 3) {
- cout << "Input 1 to add and save new person." << endl;
- cout << "Input 2 to show list." << endl;
- cout << "Input 3 to stop." << endl;
- cin >> choice_number;
- switch(choice_number)
- {
- case 1:
- {
- Person *tmp_pointer = new Person();
- char tmp_lastname[40];
- char tmp_name[20];
- int tmp_age;
- cout << "Input last name: " << endl;
- cin >> tmp_lastname;
- cout << "Input name: " << endl;
- cin >> tmp_name;
- cout << "Input age: " << endl;
- cin >> tmp_age;
- (*tmp_pointer).save_Person_data(tmp_lastname,tmp_name, tmp_age);
- person_container->add_Person(tmp_pointer);
- delete tmp_pointer;
- break;
- }
- case 2:
- {
- person_container -> print_list();
- break;
- }
- case 3:
- {
- if_end = 3;
- break;
- }
- }
- cout << "Type 3 to finish" << endl;
- cin >> if_end;
- cout << endl;
- }
- delete person_container;
- return 0;
- }
- //display last name
- char *Person:: display_lastname()
- {
- return lastname;}
- //save Person data
- void Person:: save_Person_data(char add_lastname[], char add_name[], int add_age)
- {
- strcpy(lastname, add_lastname);
- strcpy(name, add_name);
- age = add_age;
- // List:: add_Person();
- }
- //add Person to List
- void List:: add_Person(Person *pointer_Person)
- {
- Person *tmp_pointer = first_Person; //tymczasowy wskaznik na pierwsza osobe
- if(pointer_Person == NULL) return; //jesli wskzaznik nie wskzuje na nic to idz do nastpenej lini
- char tmp_lastname[40];
- strcpy(tmp_lastname, pointer_Person -> display_lastname());
- if(first_Person == NULL) //JESCCZE NIE MA PIERWSZEJ OSOBY
- {
- first_Person = pointer_Person; //WSKAZYWANA OSOBA STAJE SIĘ PIERWSZĄ OSOBĄ
- return; //PROGRAM PRZECHODZI DO NASTĘPNEJ LINI
- }
- if(strcmp(tmp_lastname, first_Person-> display_lastname())<0){ // jesli tymczasoe nazwisko jest więększe od pierwszego
- first_Person -> previous_Person = pointer_Person; //dodawana osoba staje sie poprzednia osoba i nadane jej jest nazwa first
- pointer_Person -> next_Person = first_Person;
- first_Person = pointer_Person;
- return;
- }
- //JEZELI DOSZLISMY DO TEGO MOMENTU DO pointer_Person MA BYC DOPISANA CONAJMNIEJ PO PIERWZYM ELEMENCIR
- while(tmp_pointer -> next_Person != NULL) //WYKONUJ DOPÓKI WSKAZNIK tmp_pointer WSKAZUJE NA NASTĘPNĄ OSOBĘ
- {
- if(strcmp(tmp_lastname, tmp_pointer -> next_Person -> display_lastname()) >0) //NOWĄ OSOBĘ DOPISAĆ W TYM MIEJSU
- {
- tmp_pointer -> next_Person -> previous_Person = pointer_Person;
- pointer_Person -> next_Person = tmp_pointer -> next_Person;
- pointer_Person -> previous_Person = tmp_pointer;
- tmp_pointer -> next_Person = pointer_Person;
- return;
- }
- tmp_pointer = tmp_pointer -> next_Person;
- }
- //JEZELI JESTESMY TU TO OSOBE NALEZAY DOPISAC NA KONIEC LISTY
- tmp_pointer -> next_Person = pointer_Person;
- pointer_Person -> previous_Person = tmp_pointer;
- return;
- }
- /*void List::add_person1(Person *head, Person *new_Person){
- if (head == NULL) {
- this->first_Person=new_Person;
- }
- else {
- if ((head->next_Person) == NULL) {
- head->next_Person=new_Person;
- }
- else {
- next_person = head->next_person;
- }
- }
- }
- */
- void List::print_list()
- {
- //Person *temp = this -> first_Person;
- Person *temp = first_Person;
- //while(temp!=NULL)
- for(int i = 0; i<2; i++)
- {
- cout<<temp->get_name()<<"\t";
- cout<<temp->get_lastname()<< "\t";
- cout<<temp->get_age()<<endl;
- temp = temp -> get_next();
- }
- }