diff --git a/Employee.hpp b/Employee.hpp
new file mode 100755
index 0000000..fba4c31
--- /dev/null
+++ b/Employee.hpp
@@ -0,0 +1,22 @@
+#pragma once
+#include <climits>
+
+class Employee : public Person {
+private:
+	static const char alias_ = 'e';
+	float salary_;
+
+public:
+	float getSalary() { return salary_; }
+	void setSalary(float salary) { salary_ = salary; }
+
+	void show();
+
+	Employee(std::string name = "", std::string surname = "",
+		std::string PESEL = "00000000000", std::string gender = "", 
+		std::string address = "", float earnings = 0.0F);
+
+	//bad solution (virtual base class method restriction)
+	int getIndex() { return INT_MAX; }
+	
+};
\ No newline at end of file
diff --git a/Interface.cpp b/Interface.cpp
new file mode 100755
index 0000000..0f2f7e4
--- /dev/null
+++ b/Interface.cpp
@@ -0,0 +1,154 @@
+#include "Interface.hpp"
+
+#include <iostream>
+#include <algorithm>
+
+/* UNIVERSAL METHODS */
+
+void Interface::addNewPerson(std::unique_ptr<Person> person){
+	database_.push_back(std::move(person));
+}
+
+void Interface::deleteByPESEL(std::string PESEL) {
+		for (size_t i = 0; i < database_.size(); i++)
+			if (database_.at(i)->getPESEL() == PESEL)
+				database_.erase(database_.begin() + i);
+}
+
+int Interface::findBySurname(std::string surname){
+	for (size_t i = 0; i < database_.size(); i++)
+		if (database_.at(i)->getSurname() == surname) {
+			database_.at(i)->show();
+			return i;
+		}         //prints result and outputs index
+	return -1;    //-1 means: no index found
+}
+
+int Interface::findByPESEL(std::string PESEL){
+	for (size_t i = 0; i < database_.size(); i++)
+		if (database_.at(i)->getPESEL() == PESEL) {
+			database_.at(i)->show();
+			return i;
+		}         //prints result and outputs PESEL
+	return -1;    //-1 means: no index found
+}
+
+void Interface::sortByName(){
+	if (!database_.empty())
+		sort(database_.begin(), database_.end(),
+			[](const std::unique_ptr<Person>& p1, const std::unique_ptr<Person>& p2) {
+		return  p1->getName() < p2->getName();
+	});
+}
+
+void Interface::sortByPESEL(){
+	if (!database_.empty())
+		sort(database_.begin(), database_.end(),
+			[](const std::unique_ptr<Person>& p1, const std::unique_ptr<Person>& p2) {
+		return  p1->getPESEL() < p2->getPESEL();
+	});
+}
+
+void Interface::displayRecords() {
+
+	if (!database_.empty()) {
+		std::cout << "RECORD LIST:\n";
+		for (size_t i = 0; i < database_.size(); i++) {
+			std::cout << i + 1 << ". "; database_.at(i)->show();
+		}
+		std::cout << "\n";
+	}
+}
+
+bool Interface::changeAddress(std::string PESEL, std::string address){
+	for (size_t i = 0; i < database_.size(); i++)
+		if (database_.at(i)->getPESEL() == PESEL) {
+			database_.at(i)->setAddress(address);
+			return true;
+		}        
+	return false;    
+}
+
+//TO DO! (STL functor / algorithm / isalpha)
+bool Interface::checkPESEL(std::string PESEL){
+	if (PESEL.size() != 11)
+		return false;
+	return true;
+}
+
+//TO DO! (algorithm!)
+void Interface::mockData(){
+}
+
+//TO DO! (modify old)
+void Interface::exportToFile(char *){
+}
+
+//TO DO! (modify old)
+void Interface::importFromFile(char *){
+}
+
+void debugFill(Interface &I) {
+	std::unique_ptr<Person> s1(new Student("Jack", "Berenz",
+		"83018503020", "male", "Zurawia 7, Wroclaw", 3210));
+
+	std::unique_ptr<Person> s2(new Student("Annabelle", "Savage",
+		"66674366610", "female", "Minor st. 3, LA ", 6661));
+
+	std::unique_ptr<Person> e1(new Employee("Wayne", "Static",
+		"47392040165", "male", "Sandy Roads 13, Joshua Tree", 3800.0F));
+
+	std::unique_ptr<Person> e2(new Employee("Ben", "Kowalewicz",
+		"16421041288", "male", "Maple st. 65, Ottawa", 6000.0F));
+
+	std::unique_ptr<Person> e3(new Employee("Anna", "Grodzki",
+		"20231231654", "neuter", "Karczewska 29, Otwock", 8000.0F));
+	
+	I.addNewPerson(std::move(e1));
+	I.addNewPerson(std::move(e2));
+	I.addNewPerson(std::move(e3));
+	I.addNewPerson(std::move(s2));
+	I.addNewPerson(std::move(s1));
+}
+
+/* EMPLOYEE SPECYFIC */
+
+void Interface::sortByEarnings(){
+	if (!database_.empty())
+		sort(database_.begin(), database_.end(),
+			[](const std::unique_ptr<Person>& p1, const std::unique_ptr<Person>& p2) {
+		return  p1->getSalary() > p2->getSalary();
+	});
+}
+
+bool Interface::changeEarnings(std::string PESEL, float earnings){
+	for (size_t i = 0; i < database_.size(); i++)
+		if (database_.at(i)->getPESEL() == PESEL) {
+			database_.at(i)->setSalary(earnings);
+			return true;
+		}
+	return false;
+}
+
+/* STUDENT SPECYFIC */
+
+void Interface::sortByIndex(){
+	
+	if (!database_.empty())
+		sort(database_.begin(), database_.end(),
+			[](const std::unique_ptr<Person>& s1, const std::unique_ptr<Person>& s2) {
+		return  s1->getIndex() < s2->getIndex(); 
+	});
+}
+
+void Interface::deleteByIndex(int index){
+	for (size_t i = 0; i < database_.size(); i++)
+		if (database_.at(i)->getIndex() == index)
+			database_.erase(database_.begin() + i);
+}
+
+/* PRIVATE - HIDDEN */
+
+//TO DO! (modify old)
+void Interface::LoadContent(std::vector<std::string>&){
+}
diff --git a/Interface.hpp b/Interface.hpp
new file mode 100755
index 0000000..d90af78
--- /dev/null
+++ b/Interface.hpp
@@ -0,0 +1,42 @@
+#pragma once
+
+#include "Person.hpp"
+#include "Student.hpp"
+#include "Employee.hpp"
+
+#include <vector>
+#include <memory>
+
+class Interface{
+
+private:
+	std::vector< std::unique_ptr<Person> > database_;
+	void LoadContent(std::vector<std::string>&);
+
+public:
+	//universal
+	void addNewPerson( std::unique_ptr<Person> person );
+	void deleteByPESEL(std::string PESEL);
+	int findBySurname(std::string surname);
+	int findByPESEL(std::string PESEL);
+	void sortByName();
+	void sortByPESEL();
+	void displayRecords();
+	bool changeAddress(std::string PESEL, std::string address);
+	bool checkPESEL(std::string PESEL);
+	void mockData();
+
+	void exportToFile(char *);
+	void importFromFile(char *);
+
+	//employee specyfic
+	void sortByEarnings();
+	bool changeEarnings(std::string PESEL, float ernings);
+
+	//student specyfic
+	void sortByIndex();
+	void deleteByIndex(int);
+};
+
+//fills vector with static data
+void debugFill(Interface &I);
\ No newline at end of file
diff --git a/Main.cpp b/Main.cpp
new file mode 100755
index 0000000..b509d14
--- /dev/null
+++ b/Main.cpp
@@ -0,0 +1,26 @@
+// BazaFinal.cpp : Defines the entry point for the console application.
+//
+#include "Interface.hpp"
+#include "Person.hpp"
+#include "Employee.hpp"
+#include "Student.hpp"
+
+#include <iostream>
+
+int main()
+{
+	Interface I;
+
+	debugFill(I);
+
+	I.changeAddress("20231231654", "CHUJ");
+	I.displayRecords();
+	I.sortByEarnings();
+	I.deleteByPESEL("83018503020");
+	I.displayRecords();
+	I.findBySurname("Kowalewicz");
+	
+	std::cin.get();
+    return 0;
+}
+
diff --git a/Methods.cpp b/Methods.cpp
new file mode 100755
index 0000000..3888afa
--- /dev/null
+++ b/Methods.cpp
@@ -0,0 +1,47 @@
+#include "Person.hpp"
+#include "Student.hpp"
+#include "Employee.hpp"
+
+#include <iostream>
+
+/* PERSON CLASS */
+
+void Person::show() {
+	std::cout << name_ << " " << surname_ << ", " << PESEL_ <<
+		", " << gender_ << ", " << address_ << "\n";
+}
+
+/* STUDENT CLASS */
+
+void Student::show() {
+	std::cout <<"["<< Student::alias_ << "] " << name_ << " " << surname_ << ", " << PESEL_ <<
+		", " << gender_ << ", " << address_ <<", " << index_ << "\n";
+}
+
+	Student::Student(std::string name, std::string surname,
+	std::string PESEL, std::string gender, std::string address, int index) {
+	name_ = name;
+	surname_ = surname;
+	PESEL_ = PESEL;
+	gender_ = gender;
+	address_ = address;
+	index_ = index;
+}
+
+
+/* EMPLOYEE CLASS */
+
+void Employee::show() {
+	std::cout << "[" << Employee::alias_ << "] " << name_ << " " << surname_ << ", " << PESEL_ <<
+		", " << gender_ << ", " << address_ << ", " << salary_ << "$\n";
+}
+
+	Employee::Employee(std::string name, std::string surname,
+	std::string PESEL, std::string gender, std::string address, float earnings){
+	name_ = name;
+	surname_ = surname;
+	PESEL_ = PESEL;
+	gender_ = gender;
+	address_ = address;
+	salary_ = earnings;
+}
\ No newline at end of file
diff --git a/Person.hpp b/Person.hpp
new file mode 100755
index 0000000..af7bc50
--- /dev/null
+++ b/Person.hpp
@@ -0,0 +1,25 @@
+#pragma once
+#include <string>
+
+class Person {
+protected:
+	std::string name_;
+	std::string surname_;
+	std::string PESEL_;
+	std::string gender_;
+	std::string address_;
+public:
+	virtual void show() = 0;
+	
+	std::string getName() const { return name_; }
+	std::string getSurname() const { return surname_; }
+	std::string getPESEL() const { return PESEL_; }
+	std::string getGender() const { return gender_; }
+	std::string getAddress() const { return address_; }
+	void setAddress(std::string address) { address_ = address;}
+
+	//temporary solution of bad project concept
+	virtual int getIndex() = 0;
+	virtual float getSalary() = 0;
+	virtual void setSalary(float) = 0;
+};
\ No newline at end of file
diff --git a/Student.hpp b/Student.hpp
new file mode 100755
index 0000000..60d88d3
--- /dev/null
+++ b/Student.hpp
@@ -0,0 +1,22 @@
+#pragma once
+#include <string>
+
+class Student : public Person {
+private:
+	static const char alias_ = 's';
+	int index_;
+
+public:
+	int getIndex() { return index_; }
+	void setIndex(int index) { index_ = index; }
+
+	void show();
+	
+	Student(std::string name = "", std::string surname = "",
+		std::string PESEL = "00000000000", std::string gender = "",
+		std::string address = "", int index = 0000);
+
+	//bad solution (virtual base class method restriction)
+	float getSalary() { return -1.0F; }
+	void setSalary(float DO_NOT) {}
+};
\ No newline at end of file
