#include
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<
cout<
cout<
}
}