From 54e1597c6d5f84e3e3d9e4d19da40978b0a78891 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Fri, 25 Jan 2019 20:49:17 +0100 Subject: [PATCH 01/65] Start of project, main added. --- CMakeLists.txt | 9 +++++++++ main.cpp | 8 ++++++++ 2 files changed, 17 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..a28bea8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,9 @@ +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +project(universityDatabase) +cmake_minimum_required(VERSION 2.8) +aux_source_directory(. SRC_LIST) +add_definitions(-Wall -Wextra -Werror) +add_executable(${PROJECT_NAME} ${SRC_LIST}) + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..6643162 --- /dev/null +++ b/main.cpp @@ -0,0 +1,8 @@ +#include + +int main() +{ + std::cout << "Hello on master!\n"; + + return 0; +} From d2d7d0384e0c3f9d2538742b97baef4fabf5bbeb Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Fri, 25 Jan 2019 22:06:30 +0100 Subject: [PATCH 02/65] travis added --- .travis.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..055670f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,17 @@ +language: cpp +compiler: gcc +dist: trusty + +before_install: + # C++17 + - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test + - sudo apt-get update -qq + +install: + # C++17 + - sudo apt-get install -qq g++-6 + - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 90 + +script: + - g++ main.cpp -std=c++17 -o universityDatabase + - ./universityDatabase From d9d1efdba33f2b3bfbdb294714550e87609cc50f Mon Sep 17 00:00:00 2001 From: majkel Date: Fri, 25 Jan 2019 22:11:05 +0100 Subject: [PATCH 03/65] CLASS PERSON dependant Employee dependant Student --- Person.cpp | 44 +++++++++++++++++++++++++++++++++++++++ Person.hpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 Person.cpp create mode 100644 Person.hpp diff --git a/Person.cpp b/Person.cpp new file mode 100644 index 0000000..30dd007 --- /dev/null +++ b/Person.cpp @@ -0,0 +1,44 @@ +#include "Person.hpp" + + +Person::Person(const std::string firstName, + const std::string lastName, + const int64_t personalID, + const bool gender, + const std::string adress) + : firstName_(firstName), + lastName_(lastName), + personalID_(personalID), + gender_(gender), + adress_(adress) +{} + +std::string Person::getLastName() const +{ + return lastName_; +} + +int32_t Person::getPersonalID()const +{ + return personalID_; +} + +Employee::Employee(const std::string firstName, + const std::string lastName, + const int64_t personalID, + const bool gender, + const std::string adress, + const int salaries) + : Person(firstName, lastName, personalID, gender, adress), + salaries_(salaries) +{} + +Student::Student(const std::string firstName, + const std::string lastName, + const int64_t personalID, + const bool gender, + const std::string adress, + const int studentID) + : Person(firstName, lastName, personalID, gender, adress), + studentID_(studentID) +{} diff --git a/Person.hpp b/Person.hpp new file mode 100644 index 0000000..9700678 --- /dev/null +++ b/Person.hpp @@ -0,0 +1,61 @@ +#pragma once +#include +#include + +class Person +{ + //enum gender{male, female}; + + protected: + std::string firstName_; + std::string lastName_; + int64_t personalID_; + bool gender_; + std::string adress_; + + public: + Person(const std::string firstName, + const std::string lastName, + const int64_t personalID, + const bool gender, + const std::string adress); + + virtual ~Person() {}; + virtual int getData() const + { + return personalID_; + } + std::string getLastName() const; + int32_t getPersonalID() const; +}; + +class Employee : public Person +{ + int salaries_; + public: + Employee(const std::string firstName, + const std::string lastName, + const int64_t personalID, + const bool gender, + const std::string adress, + const int salaries); +}; + +class Student : public Person +{ + private: + int32_t studentID_; + + public: + Student(const std::string firstName, + const std::string lastName, + const int64_t personalID, + const bool gender, + const std::string adress, + const int studentID); + + int getData() const + { + return studentID_; + }; +}; From a33f0b507d4ee87f6c6b78c8fd519c28eb05a474 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Fri, 25 Jan 2019 22:13:15 +0100 Subject: [PATCH 04/65] README added --- README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..f7e662c --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# UniversityDatabase +[![Build Status](https://travis-ci.org/gitmajo/UniversityDatabase.svg?branch=master)](https://travis-ci.org/gitmajo/UniversityDatabase) From c0c04da17e02dd6601576d2345ff5a5eb8311ecc Mon Sep 17 00:00:00 2001 From: majkel Date: Fri, 25 Jan 2019 23:29:15 +0100 Subject: [PATCH 05/65] CLASS PERSON - reviev correction --- Person.cpp | 26 ++++++++++++++++++-------- Person.hpp | 30 +++++++++++++----------------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/Person.cpp b/Person.cpp index 30dd007..55af300 100644 --- a/Person.cpp +++ b/Person.cpp @@ -3,7 +3,7 @@ Person::Person(const std::string firstName, const std::string lastName, - const int64_t personalID, + const unsigned long personalID, const bool gender, const std::string adress) : firstName_(firstName), @@ -18,27 +18,37 @@ std::string Person::getLastName() const return lastName_; } -int32_t Person::getPersonalID()const +unsigned long Person::getPersonalID()const { return personalID_; } Employee::Employee(const std::string firstName, const std::string lastName, - const int64_t personalID, + const unsigned long personalID, const bool gender, const std::string adress, - const int salaries) + const double salary) : Person(firstName, lastName, personalID, gender, adress), - salaries_(salaries) + salary_(salary) {} +double Employee::getSalary() const +{ + return salary_; +} + Student::Student(const std::string firstName, const std::string lastName, - const int64_t personalID, + const unsigned long personalID, const bool gender, const std::string adress, - const int studentID) + const unsigned long studentIndex) : Person(firstName, lastName, personalID, gender, adress), - studentID_(studentID) + studentIndex_(studentIndex) {} + +unsigned long Student::getStudentIndex() const +{ + return studentIndex_; +} diff --git a/Person.hpp b/Person.hpp index 9700678..c98cd5c 100644 --- a/Person.hpp +++ b/Person.hpp @@ -9,53 +9,49 @@ class Person protected: std::string firstName_; std::string lastName_; - int64_t personalID_; + unsigned long personalID_; bool gender_; std::string adress_; public: Person(const std::string firstName, const std::string lastName, - const int64_t personalID, + const unsigned long personalID, const bool gender, const std::string adress); virtual ~Person() {}; - virtual int getData() const - { - return personalID_; - } std::string getLastName() const; - int32_t getPersonalID() const; + unsigned long getPersonalID() const; }; class Employee : public Person { - int salaries_; + private: + double salary_; public: Employee(const std::string firstName, const std::string lastName, - const int64_t personalID, + const unsigned long personalID, const bool gender, const std::string adress, - const int salaries); + const double salary); + + double getSalary() const; }; class Student : public Person { private: - int32_t studentID_; + unsigned long studentIndex_; public: Student(const std::string firstName, const std::string lastName, - const int64_t personalID, + const unsigned long personalID, const bool gender, const std::string adress, - const int studentID); + const unsigned long studentIndex); - int getData() const - { - return studentID_; - }; + unsigned long getStudentIndex() const; }; From c9eea62330f7fb82701536d81afcfb3bc6481466 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 26 Jan 2019 10:24:15 +0100 Subject: [PATCH 06/65] Empty Database files added. --- Database.cpp | 0 Database.hpp | 0 main.cpp | 2 ++ 3 files changed, 2 insertions(+) create mode 100644 Database.cpp create mode 100644 Database.hpp diff --git a/Database.cpp b/Database.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Database.hpp b/Database.hpp new file mode 100644 index 0000000..e69de29 diff --git a/main.cpp b/main.cpp index 6643162..ba112da 100644 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,6 @@ #include +#include "Person.hpp" +#include "Database.hpp" int main() { From 7714274d4ad95e5d8e8ad2332325f48b7232e195 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 26 Jan 2019 10:29:04 +0100 Subject: [PATCH 07/65] travis modified for separate cpp files --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 055670f..cc2a397 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,5 +13,5 @@ install: - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 90 script: - - g++ main.cpp -std=c++17 -o universityDatabase + - g++ *.cpp -std=c++17 -o universityDatabase - ./universityDatabase From 4c0762818f2e70dd63d9708f05b3e8af40acd710 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 26 Jan 2019 11:30:02 +0100 Subject: [PATCH 08/65] printDatabase added --- Database.cpp | 8 ++++++++ Database.hpp | 21 +++++++++++++++++++++ Person.cpp | 12 ++++++------ Person.hpp | 11 +++++++---- main.cpp | 11 +++++++++++ 5 files changed, 53 insertions(+), 10 deletions(-) diff --git a/Database.cpp b/Database.cpp index e69de29..c2a3fe2 100644 --- a/Database.cpp +++ b/Database.cpp @@ -0,0 +1,8 @@ +#include "Database.hpp" + +void Database::printDatabase() const +{ + for(const auto& person : data) + std::cout << person; + std::cout << "\n"; +} diff --git a/Database.hpp b/Database.hpp index e69de29..d7c6bf6 100644 --- a/Database.hpp +++ b/Database.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include "Person.hpp" + +class Database +{ + private: + std::vector data; + public: + void printDatabase() const; + bool addStudent() const; + bool addEmployee() const; + +}; + diff --git a/Person.cpp b/Person.cpp index 55af300..57a3354 100644 --- a/Person.cpp +++ b/Person.cpp @@ -5,12 +5,12 @@ Person::Person(const std::string firstName, const std::string lastName, const unsigned long personalID, const bool gender, - const std::string adress) + const std::string address) : firstName_(firstName), lastName_(lastName), personalID_(personalID), gender_(gender), - adress_(adress) + address_(address) {} std::string Person::getLastName() const @@ -27,9 +27,9 @@ Employee::Employee(const std::string firstName, const std::string lastName, const unsigned long personalID, const bool gender, - const std::string adress, + const std::string address, const double salary) - : Person(firstName, lastName, personalID, gender, adress), + : Person(firstName, lastName, personalID, gender, address), salary_(salary) {} @@ -42,9 +42,9 @@ Student::Student(const std::string firstName, const std::string lastName, const unsigned long personalID, const bool gender, - const std::string adress, + const std::string address, const unsigned long studentIndex) - : Person(firstName, lastName, personalID, gender, adress), + : Person(firstName, lastName, personalID, gender, address), studentIndex_(studentIndex) {} diff --git a/Person.hpp b/Person.hpp index c98cd5c..5e3f768 100644 --- a/Person.hpp +++ b/Person.hpp @@ -11,18 +11,21 @@ class Person std::string lastName_; unsigned long personalID_; bool gender_; - std::string adress_; + std::string address_; public: Person(const std::string firstName, const std::string lastName, const unsigned long personalID, const bool gender, - const std::string adress); + const std::string address); virtual ~Person() {}; std::string getLastName() const; unsigned long getPersonalID() const; + + friend std::ostream& operator<<(std::ostream& os, const Person& person); + }; class Employee : public Person @@ -34,7 +37,7 @@ class Employee : public Person const std::string lastName, const unsigned long personalID, const bool gender, - const std::string adress, + const std::string address, const double salary); double getSalary() const; @@ -50,7 +53,7 @@ class Student : public Person const std::string lastName, const unsigned long personalID, const bool gender, - const std::string adress, + const std::string address, const unsigned long studentIndex); unsigned long getStudentIndex() const; diff --git a/main.cpp b/main.cpp index ba112da..fe2e763 100644 --- a/main.cpp +++ b/main.cpp @@ -2,6 +2,17 @@ #include "Person.hpp" #include "Database.hpp" +std::ostream& operator<<(std::ostream& os, const Person& person) +{ + os << std::left << std::setw(13) << person.lastName_ << " " + << std::left << std::setw(13) << person.firstName_ << " " + << std::left << std::setw(13) << person.personalID_ << " " + << std::left << std::setw(13) << person.gender_ << " " + << std::left << std::setw(13) << person.address_ << "\n"; + return os; +} + + int main() { std::cout << "Hello on master!\n"; From 06ac1de224f73aa5eb2356b89b096d920c9cb753 Mon Sep 17 00:00:00 2001 From: majkel Date: Sat, 26 Jan 2019 22:58:26 +0100 Subject: [PATCH 09/65] DataBase new methods addPerson & sortByLastName --- Database.cpp | 27 +++++++++++++++++++++++++++ Database.hpp | 16 ++++++++++++---- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/Database.cpp b/Database.cpp index c2a3fe2..8ae6a26 100644 --- a/Database.cpp +++ b/Database.cpp @@ -1,4 +1,8 @@ #include "Database.hpp" +#include + +//void searchByLastName(); +//void searchByPersonalID(); void Database::printDatabase() const { @@ -6,3 +10,26 @@ void Database::printDatabase() const std::cout << person; std::cout << "\n"; } + +// void Database::sortBySalary(); + +void Database::sortByLastName() +{ + std::sort(begin(data), end(data), [] (Person * left, Person * right) + { + return left->getLastName() < right->getLastName(); + }); +} + +void Database::addPerson(Person * person) +{ + data.push_back(person); +} + +//void Database::loadFromFile(); +//void Database::saveToFile(); +//void Database::removeByPersonalID(const unsigned long personalID); +//void Database::modifySalary(const unsigned long personalID); +//void Database::modifyAdress(const unsigned long personalID); +//bool Database::validatePersonalID(const unsigned long personalID); + diff --git a/Database.hpp b/Database.hpp index d7c6bf6..6a8d184 100644 --- a/Database.hpp +++ b/Database.hpp @@ -11,11 +11,19 @@ class Database { private: - std::vector data; + std::vector data; public: + void searchByLastName(); + void searchByPersonalID(); void printDatabase() const; - bool addStudent() const; - bool addEmployee() const; - + void sortBySalary(); + void sortByLastName(); + void addPerson(Person * person); + void loadFromFile(); + void saveToFile(); + void removeByPersonalID(const unsigned long personalID); + void modifySalary(const unsigned long personalID); + void modifyAdress(const unsigned long personalID); + bool validatePersonalID(const unsigned long personalID); }; From 002381e445d1d103ae85cf628433b44a41096b44 Mon Sep 17 00:00:00 2001 From: majkel Date: Sun, 27 Jan 2019 00:36:46 +0100 Subject: [PATCH 10/65] New method remove Person by personalID --- Database.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Database.cpp b/Database.cpp index 8ae6a26..98163ff 100644 --- a/Database.cpp +++ b/Database.cpp @@ -28,7 +28,16 @@ void Database::addPerson(Person * person) //void Database::loadFromFile(); //void Database::saveToFile(); -//void Database::removeByPersonalID(const unsigned long personalID); + +void Database::removeByPersonalID(const unsigned long personalID) +{ + auto iter = std::find_if(begin(data), end(data), [personalID](Person * person){return person->getPersonalID()==personalID;}); + if (iter != end(data)) + { + data.erase(iter); + } +} + //void Database::modifySalary(const unsigned long personalID); //void Database::modifyAdress(const unsigned long personalID); //bool Database::validatePersonalID(const unsigned long personalID); From 236c7a4c696a651832ea7135a828e965369f8aa3 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 27 Jan 2019 05:05:58 +0100 Subject: [PATCH 11/65] polymorphic getInfo added --- Database.cpp | 33 +++++++++++++++++++++++++++++--- Database.hpp | 17 ++++++++++++++++- Person.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++----- Person.hpp | 22 ++++++++++++++-------- main.cpp | 23 +++++++++++++++-------- 5 files changed, 123 insertions(+), 25 deletions(-) diff --git a/Database.cpp b/Database.cpp index 8ae6a26..25e051e 100644 --- a/Database.cpp +++ b/Database.cpp @@ -6,8 +6,8 @@ void Database::printDatabase() const { - for(const auto& person : data) - std::cout << person; + for(const auto& personPtr : data) + std::cout << personPtr; std::cout << "\n"; } @@ -21,11 +21,38 @@ void Database::sortByLastName() }); } -void Database::addPerson(Person * person) +void Database::addPerson(Person* person) { data.push_back(person); } +bool Database::addStudent(const std::string firstName, + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const unsigned long studentIndex) +{ + Person* student = new Student(firstName, lastName, personalID, + gender, address, studentIndex); + addPerson(student); + return true; +} + +bool Database::addEmployee(const std::string firstName, + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const double salary) +{ + Person* employee = new Employee(firstName, lastName, personalID, + gender, address, salary); + addPerson(employee); + return true; +} + + //void Database::loadFromFile(); //void Database::saveToFile(); //void Database::removeByPersonalID(const unsigned long personalID); diff --git a/Database.hpp b/Database.hpp index 6a8d184..d2b9590 100644 --- a/Database.hpp +++ b/Database.hpp @@ -18,7 +18,22 @@ class Database void printDatabase() const; void sortBySalary(); void sortByLastName(); - void addPerson(Person * person); + void addPerson(Person* person); + + bool addStudent(const std::string firstName, + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const unsigned long studentIndex); + + bool addEmployee(const std::string firstName, + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const double salary); + void loadFromFile(); void saveToFile(); void removeByPersonalID(const unsigned long personalID); diff --git a/Person.cpp b/Person.cpp index 57a3354..5d30d16 100644 --- a/Person.cpp +++ b/Person.cpp @@ -1,9 +1,8 @@ #include "Person.hpp" - Person::Person(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address) : firstName_(firstName), @@ -18,14 +17,29 @@ std::string Person::getLastName() const return lastName_; } -unsigned long Person::getPersonalID()const +unsigned long long Person::getPersonalID() const { return personalID_; } +std::string Person::getInfo() +{ + return "person"; +} +//{ +/* os << std::left << std::setw(13) << person.lastName_ << " " + << std::left << std::setw(13) << person.firstName_ << " " + << std::left << std::setw(13) << person.personalID_ << " " + << std::left << std::setw(13) << person.gender_ << " " + << std::left << std::setw(13) << person.address_ << "\n"; + return os; +*/ +//} + + Employee::Employee(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address, const double salary) @@ -38,9 +52,23 @@ double Employee::getSalary() const return salary_; } +std::string Employee::getInfo() +{ + return "employee"; +/* os << std::left << std::setw(13) << person.lastName_ << " " + << std::left << std::setw(13) << person.firstName_ << " " + << std::left << std::setw(13) << person.personalID_ << " " + << std::left << std::setw(13) << person.gender_ << " " + << std::left << std::setw(13) << person.address_ << " " + << std::left << std::setw(13) << person.salary_ << " " + << std::left << std::setw(13) << "----" << "\n"; + return os; +*/ +} + Student::Student(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address, const unsigned long studentIndex) @@ -52,3 +80,18 @@ unsigned long Student::getStudentIndex() const { return studentIndex_; } + +std::string Student::getInfo() +{ + return "student"; +/* os << std::left << std::setw(13) << person.lastName_ << " " + << std::left << std::setw(13) << person.firstName_ << " " + << std::left << std::setw(13) << person.personalID_ << " " + << std::left << std::setw(13) << person.gender_ << " " + << std::left << std::setw(13) << person.address_ << " " + << std::left << std::setw(13) << "----" << " " + << std::left << std::setw(13) << person.studentIndex_ << "\n"; + return os; +*/ + +} diff --git a/Person.hpp b/Person.hpp index 5e3f768..e98d485 100644 --- a/Person.hpp +++ b/Person.hpp @@ -9,23 +9,26 @@ class Person protected: std::string firstName_; std::string lastName_; - unsigned long personalID_; + unsigned long long personalID_; bool gender_; std::string address_; public: Person(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address); - virtual ~Person() {}; - std::string getLastName() const; - unsigned long getPersonalID() const; - friend std::ostream& operator<<(std::ostream& os, const Person& person); + std::string getLastName() const; + unsigned long long getPersonalID() const; + friend std::ostream& operator<<(std::ostream& os, Person* person); + virtual std::string getInfo(); + virtual ~Person() {}; + + }; class Employee : public Person @@ -35,12 +38,14 @@ class Employee : public Person public: Employee(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address, const double salary); double getSalary() const; + std::string getInfo(); + }; class Student : public Person @@ -51,10 +56,11 @@ class Student : public Person public: Student(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address, const unsigned long studentIndex); unsigned long getStudentIndex() const; + std::string getInfo(); }; diff --git a/main.cpp b/main.cpp index fe2e763..ee44df3 100644 --- a/main.cpp +++ b/main.cpp @@ -2,20 +2,27 @@ #include "Person.hpp" #include "Database.hpp" -std::ostream& operator<<(std::ostream& os, const Person& person) +std::ostream& operator<<(std::ostream& os, Person* person) { - os << std::left << std::setw(13) << person.lastName_ << " " - << std::left << std::setw(13) << person.firstName_ << " " - << std::left << std::setw(13) << person.personalID_ << " " - << std::left << std::setw(13) << person.gender_ << " " - << std::left << std::setw(13) << person.address_ << "\n"; - return os; + os << person->getInfo(); + return os; } int main() { - std::cout << "Hello on master!\n"; + std::cout << "Hello on master!\n\n"; + + Database db; + + db.addStudent("Kubus", "Puchatek", 91653426865, 1, "Las", 11111); + db.addStudent("Tomasz", "Kowalski", 87654237541, 1, "Wroclaw", 22222); + db.addStudent("Kasia", "Nowak", 64247643211, 0, "Opole", 34568); + db.addEmployee("Jan", "Szymczak", 87235681241, 1, "Wroclaw", 54674); + db.addEmployee("Aldona", "Tomczyk", 65321543987, 0, "Lublin", 43211); + db.addStudent("Stanislaw", "Olech", 90764357981, 1, "Lublin", 65421); + + db.printDatabase(); return 0; } From eaf4763fa40bd3a3bd0981f893024a2c2640b4e5 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 27 Jan 2019 05:20:33 +0100 Subject: [PATCH 12/65] min example with sstream --- Person.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Person.cpp b/Person.cpp index 5d30d16..a9f264c 100644 --- a/Person.cpp +++ b/Person.cpp @@ -1,4 +1,6 @@ #include "Person.hpp" +#include +#include Person::Person(const std::string firstName, const std::string lastName, @@ -24,7 +26,9 @@ unsigned long long Person::getPersonalID() const std::string Person::getInfo() { - return "person"; + auto ss = std::stringstream{}; + ss << lastName_; + return ss.str(); } //{ /* os << std::left << std::setw(13) << person.lastName_ << " " @@ -54,7 +58,10 @@ double Employee::getSalary() const std::string Employee::getInfo() { - return "employee"; + auto ss = std::stringstream{}; + ss << salary_; + return ss.str(); + /* os << std::left << std::setw(13) << person.lastName_ << " " << std::left << std::setw(13) << person.firstName_ << " " << std::left << std::setw(13) << person.personalID_ << " " @@ -83,7 +90,10 @@ unsigned long Student::getStudentIndex() const std::string Student::getInfo() { - return "student"; + auto ss = std::stringstream{}; + ss << studentIndex_ << std::setw(13) << lastName_; + return ss.str(); + /* os << std::left << std::setw(13) << person.lastName_ << " " << std::left << std::setw(13) << person.firstName_ << " " << std::left << std::setw(13) << person.personalID_ << " " From a2e676605fb8e2c6ab1eb5e77b76abdceca9ceee Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 27 Jan 2019 05:27:24 +0100 Subject: [PATCH 13/65] first version of printDatabase --- Person.cpp | 58 +++++++++++++++++++++++------------------------------- Person.hpp | 2 ++ 2 files changed, 27 insertions(+), 33 deletions(-) diff --git a/Person.cpp b/Person.cpp index a9f264c..5c16eb8 100644 --- a/Person.cpp +++ b/Person.cpp @@ -27,18 +27,14 @@ unsigned long long Person::getPersonalID() const std::string Person::getInfo() { auto ss = std::stringstream{}; - ss << lastName_; + ss << std::left << std::setw(13) << lastName_ << " " + << std::left << std::setw(13) << firstName_ << " " + << std::left << std::setw(13) << personalID_ << " " + << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(13) << address_ << "\n"; + return ss.str(); } -//{ -/* os << std::left << std::setw(13) << person.lastName_ << " " - << std::left << std::setw(13) << person.firstName_ << " " - << std::left << std::setw(13) << person.personalID_ << " " - << std::left << std::setw(13) << person.gender_ << " " - << std::left << std::setw(13) << person.address_ << "\n"; - return os; -*/ -//} Employee::Employee(const std::string firstName, @@ -59,18 +55,17 @@ double Employee::getSalary() const std::string Employee::getInfo() { auto ss = std::stringstream{}; - ss << salary_; + + ss << std::left << std::setw(13) << lastName_ << " " + << std::left << std::setw(13) << firstName_ << " " + << std::left << std::setw(13) << personalID_ << " " + << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(13) << address_ << " " + << std::left << std::setw(13) << salary_ << " " + << std::left << std::setw(13) << "----" << "\n"; + return ss.str(); - -/* os << std::left << std::setw(13) << person.lastName_ << " " - << std::left << std::setw(13) << person.firstName_ << " " - << std::left << std::setw(13) << person.personalID_ << " " - << std::left << std::setw(13) << person.gender_ << " " - << std::left << std::setw(13) << person.address_ << " " - << std::left << std::setw(13) << person.salary_ << " " - << std::left << std::setw(13) << "----" << "\n"; - return os; -*/ + } Student::Student(const std::string firstName, @@ -91,17 +86,14 @@ unsigned long Student::getStudentIndex() const std::string Student::getInfo() { auto ss = std::stringstream{}; - ss << studentIndex_ << std::setw(13) << lastName_; - return ss.str(); - -/* os << std::left << std::setw(13) << person.lastName_ << " " - << std::left << std::setw(13) << person.firstName_ << " " - << std::left << std::setw(13) << person.personalID_ << " " - << std::left << std::setw(13) << person.gender_ << " " - << std::left << std::setw(13) << person.address_ << " " - << std::left << std::setw(13) << "----" << " " - << std::left << std::setw(13) << person.studentIndex_ << "\n"; - return os; -*/ + + ss << std::left << std::setw(13) << lastName_ << " " + << std::left << std::setw(13) << firstName_ << " " + << std::left << std::setw(13) << personalID_ << " " + << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(13) << address_ << " " + << std::left << std::setw(13) << "----" << " " + << std::left << std::setw(13) << studentIndex_ << "\n"; + return ss.str(); } diff --git a/Person.hpp b/Person.hpp index e98d485..c48068d 100644 --- a/Person.hpp +++ b/Person.hpp @@ -1,6 +1,8 @@ #pragma once #include #include +#include +#include class Person { From 4f903035cde84d068d4fdf41c9929a57ec465eb7 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 27 Jan 2019 13:25:50 +0100 Subject: [PATCH 14/65] small corrections --- Database.hpp | 8 ++++---- Person.cpp | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Database.hpp b/Database.hpp index d2b9590..b829a60 100644 --- a/Database.hpp +++ b/Database.hpp @@ -36,9 +36,9 @@ class Database void loadFromFile(); void saveToFile(); - void removeByPersonalID(const unsigned long personalID); - void modifySalary(const unsigned long personalID); - void modifyAdress(const unsigned long personalID); - bool validatePersonalID(const unsigned long personalID); + void removeByPersonalID(const unsigned long long personalID); + void modifySalary(const unsigned long long personalID); + void modifyAdress(const unsigned long long personalID); + bool validatePersonalID(const unsigned long long personalID); }; diff --git a/Person.cpp b/Person.cpp index 5c16eb8..350ac1b 100644 --- a/Person.cpp +++ b/Person.cpp @@ -1,6 +1,5 @@ #include "Person.hpp" -#include -#include + Person::Person(const std::string firstName, const std::string lastName, From 201365ec6bf8a886826fbfd6dc94557b54ab0f1f Mon Sep 17 00:00:00 2001 From: majkel Date: Sat, 26 Jan 2019 22:58:26 +0100 Subject: [PATCH 15/65] DataBase new methods addPerson & sortByLastName --- Database.cpp | 27 +++++++++++++++++++++++++++ Database.hpp | 16 ++++++++++++---- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/Database.cpp b/Database.cpp index c2a3fe2..8ae6a26 100644 --- a/Database.cpp +++ b/Database.cpp @@ -1,4 +1,8 @@ #include "Database.hpp" +#include + +//void searchByLastName(); +//void searchByPersonalID(); void Database::printDatabase() const { @@ -6,3 +10,26 @@ void Database::printDatabase() const std::cout << person; std::cout << "\n"; } + +// void Database::sortBySalary(); + +void Database::sortByLastName() +{ + std::sort(begin(data), end(data), [] (Person * left, Person * right) + { + return left->getLastName() < right->getLastName(); + }); +} + +void Database::addPerson(Person * person) +{ + data.push_back(person); +} + +//void Database::loadFromFile(); +//void Database::saveToFile(); +//void Database::removeByPersonalID(const unsigned long personalID); +//void Database::modifySalary(const unsigned long personalID); +//void Database::modifyAdress(const unsigned long personalID); +//bool Database::validatePersonalID(const unsigned long personalID); + diff --git a/Database.hpp b/Database.hpp index d7c6bf6..6a8d184 100644 --- a/Database.hpp +++ b/Database.hpp @@ -11,11 +11,19 @@ class Database { private: - std::vector data; + std::vector data; public: + void searchByLastName(); + void searchByPersonalID(); void printDatabase() const; - bool addStudent() const; - bool addEmployee() const; - + void sortBySalary(); + void sortByLastName(); + void addPerson(Person * person); + void loadFromFile(); + void saveToFile(); + void removeByPersonalID(const unsigned long personalID); + void modifySalary(const unsigned long personalID); + void modifyAdress(const unsigned long personalID); + bool validatePersonalID(const unsigned long personalID); }; From 550a5235d6a84aed2f0292cff2d71c26ec385812 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 27 Jan 2019 05:05:58 +0100 Subject: [PATCH 16/65] polymorphic getInfo added --- Database.cpp | 33 +++++++++++++++++++++++++++++--- Database.hpp | 17 ++++++++++++++++- Person.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++----- Person.hpp | 22 ++++++++++++++-------- main.cpp | 23 +++++++++++++++-------- 5 files changed, 123 insertions(+), 25 deletions(-) diff --git a/Database.cpp b/Database.cpp index 8ae6a26..25e051e 100644 --- a/Database.cpp +++ b/Database.cpp @@ -6,8 +6,8 @@ void Database::printDatabase() const { - for(const auto& person : data) - std::cout << person; + for(const auto& personPtr : data) + std::cout << personPtr; std::cout << "\n"; } @@ -21,11 +21,38 @@ void Database::sortByLastName() }); } -void Database::addPerson(Person * person) +void Database::addPerson(Person* person) { data.push_back(person); } +bool Database::addStudent(const std::string firstName, + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const unsigned long studentIndex) +{ + Person* student = new Student(firstName, lastName, personalID, + gender, address, studentIndex); + addPerson(student); + return true; +} + +bool Database::addEmployee(const std::string firstName, + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const double salary) +{ + Person* employee = new Employee(firstName, lastName, personalID, + gender, address, salary); + addPerson(employee); + return true; +} + + //void Database::loadFromFile(); //void Database::saveToFile(); //void Database::removeByPersonalID(const unsigned long personalID); diff --git a/Database.hpp b/Database.hpp index 6a8d184..d2b9590 100644 --- a/Database.hpp +++ b/Database.hpp @@ -18,7 +18,22 @@ class Database void printDatabase() const; void sortBySalary(); void sortByLastName(); - void addPerson(Person * person); + void addPerson(Person* person); + + bool addStudent(const std::string firstName, + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const unsigned long studentIndex); + + bool addEmployee(const std::string firstName, + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const double salary); + void loadFromFile(); void saveToFile(); void removeByPersonalID(const unsigned long personalID); diff --git a/Person.cpp b/Person.cpp index 57a3354..5d30d16 100644 --- a/Person.cpp +++ b/Person.cpp @@ -1,9 +1,8 @@ #include "Person.hpp" - Person::Person(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address) : firstName_(firstName), @@ -18,14 +17,29 @@ std::string Person::getLastName() const return lastName_; } -unsigned long Person::getPersonalID()const +unsigned long long Person::getPersonalID() const { return personalID_; } +std::string Person::getInfo() +{ + return "person"; +} +//{ +/* os << std::left << std::setw(13) << person.lastName_ << " " + << std::left << std::setw(13) << person.firstName_ << " " + << std::left << std::setw(13) << person.personalID_ << " " + << std::left << std::setw(13) << person.gender_ << " " + << std::left << std::setw(13) << person.address_ << "\n"; + return os; +*/ +//} + + Employee::Employee(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address, const double salary) @@ -38,9 +52,23 @@ double Employee::getSalary() const return salary_; } +std::string Employee::getInfo() +{ + return "employee"; +/* os << std::left << std::setw(13) << person.lastName_ << " " + << std::left << std::setw(13) << person.firstName_ << " " + << std::left << std::setw(13) << person.personalID_ << " " + << std::left << std::setw(13) << person.gender_ << " " + << std::left << std::setw(13) << person.address_ << " " + << std::left << std::setw(13) << person.salary_ << " " + << std::left << std::setw(13) << "----" << "\n"; + return os; +*/ +} + Student::Student(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address, const unsigned long studentIndex) @@ -52,3 +80,18 @@ unsigned long Student::getStudentIndex() const { return studentIndex_; } + +std::string Student::getInfo() +{ + return "student"; +/* os << std::left << std::setw(13) << person.lastName_ << " " + << std::left << std::setw(13) << person.firstName_ << " " + << std::left << std::setw(13) << person.personalID_ << " " + << std::left << std::setw(13) << person.gender_ << " " + << std::left << std::setw(13) << person.address_ << " " + << std::left << std::setw(13) << "----" << " " + << std::left << std::setw(13) << person.studentIndex_ << "\n"; + return os; +*/ + +} diff --git a/Person.hpp b/Person.hpp index 5e3f768..e98d485 100644 --- a/Person.hpp +++ b/Person.hpp @@ -9,23 +9,26 @@ class Person protected: std::string firstName_; std::string lastName_; - unsigned long personalID_; + unsigned long long personalID_; bool gender_; std::string address_; public: Person(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address); - virtual ~Person() {}; - std::string getLastName() const; - unsigned long getPersonalID() const; - friend std::ostream& operator<<(std::ostream& os, const Person& person); + std::string getLastName() const; + unsigned long long getPersonalID() const; + friend std::ostream& operator<<(std::ostream& os, Person* person); + virtual std::string getInfo(); + virtual ~Person() {}; + + }; class Employee : public Person @@ -35,12 +38,14 @@ class Employee : public Person public: Employee(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address, const double salary); double getSalary() const; + std::string getInfo(); + }; class Student : public Person @@ -51,10 +56,11 @@ class Student : public Person public: Student(const std::string firstName, const std::string lastName, - const unsigned long personalID, + const unsigned long long personalID, const bool gender, const std::string address, const unsigned long studentIndex); unsigned long getStudentIndex() const; + std::string getInfo(); }; diff --git a/main.cpp b/main.cpp index fe2e763..ee44df3 100644 --- a/main.cpp +++ b/main.cpp @@ -2,20 +2,27 @@ #include "Person.hpp" #include "Database.hpp" -std::ostream& operator<<(std::ostream& os, const Person& person) +std::ostream& operator<<(std::ostream& os, Person* person) { - os << std::left << std::setw(13) << person.lastName_ << " " - << std::left << std::setw(13) << person.firstName_ << " " - << std::left << std::setw(13) << person.personalID_ << " " - << std::left << std::setw(13) << person.gender_ << " " - << std::left << std::setw(13) << person.address_ << "\n"; - return os; + os << person->getInfo(); + return os; } int main() { - std::cout << "Hello on master!\n"; + std::cout << "Hello on master!\n\n"; + + Database db; + + db.addStudent("Kubus", "Puchatek", 91653426865, 1, "Las", 11111); + db.addStudent("Tomasz", "Kowalski", 87654237541, 1, "Wroclaw", 22222); + db.addStudent("Kasia", "Nowak", 64247643211, 0, "Opole", 34568); + db.addEmployee("Jan", "Szymczak", 87235681241, 1, "Wroclaw", 54674); + db.addEmployee("Aldona", "Tomczyk", 65321543987, 0, "Lublin", 43211); + db.addStudent("Stanislaw", "Olech", 90764357981, 1, "Lublin", 65421); + + db.printDatabase(); return 0; } From 15f1110dbab217b80c236ba748b4757db6471153 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 27 Jan 2019 05:20:33 +0100 Subject: [PATCH 17/65] min example with sstream --- Person.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Person.cpp b/Person.cpp index 5d30d16..a9f264c 100644 --- a/Person.cpp +++ b/Person.cpp @@ -1,4 +1,6 @@ #include "Person.hpp" +#include +#include Person::Person(const std::string firstName, const std::string lastName, @@ -24,7 +26,9 @@ unsigned long long Person::getPersonalID() const std::string Person::getInfo() { - return "person"; + auto ss = std::stringstream{}; + ss << lastName_; + return ss.str(); } //{ /* os << std::left << std::setw(13) << person.lastName_ << " " @@ -54,7 +58,10 @@ double Employee::getSalary() const std::string Employee::getInfo() { - return "employee"; + auto ss = std::stringstream{}; + ss << salary_; + return ss.str(); + /* os << std::left << std::setw(13) << person.lastName_ << " " << std::left << std::setw(13) << person.firstName_ << " " << std::left << std::setw(13) << person.personalID_ << " " @@ -83,7 +90,10 @@ unsigned long Student::getStudentIndex() const std::string Student::getInfo() { - return "student"; + auto ss = std::stringstream{}; + ss << studentIndex_ << std::setw(13) << lastName_; + return ss.str(); + /* os << std::left << std::setw(13) << person.lastName_ << " " << std::left << std::setw(13) << person.firstName_ << " " << std::left << std::setw(13) << person.personalID_ << " " From 8db8bdb757ef40b1d1a97edba551e6b2d158e443 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 27 Jan 2019 05:27:24 +0100 Subject: [PATCH 18/65] first version of printDatabase --- Person.cpp | 58 +++++++++++++++++++++++------------------------------- Person.hpp | 2 ++ 2 files changed, 27 insertions(+), 33 deletions(-) diff --git a/Person.cpp b/Person.cpp index a9f264c..5c16eb8 100644 --- a/Person.cpp +++ b/Person.cpp @@ -27,18 +27,14 @@ unsigned long long Person::getPersonalID() const std::string Person::getInfo() { auto ss = std::stringstream{}; - ss << lastName_; + ss << std::left << std::setw(13) << lastName_ << " " + << std::left << std::setw(13) << firstName_ << " " + << std::left << std::setw(13) << personalID_ << " " + << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(13) << address_ << "\n"; + return ss.str(); } -//{ -/* os << std::left << std::setw(13) << person.lastName_ << " " - << std::left << std::setw(13) << person.firstName_ << " " - << std::left << std::setw(13) << person.personalID_ << " " - << std::left << std::setw(13) << person.gender_ << " " - << std::left << std::setw(13) << person.address_ << "\n"; - return os; -*/ -//} Employee::Employee(const std::string firstName, @@ -59,18 +55,17 @@ double Employee::getSalary() const std::string Employee::getInfo() { auto ss = std::stringstream{}; - ss << salary_; + + ss << std::left << std::setw(13) << lastName_ << " " + << std::left << std::setw(13) << firstName_ << " " + << std::left << std::setw(13) << personalID_ << " " + << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(13) << address_ << " " + << std::left << std::setw(13) << salary_ << " " + << std::left << std::setw(13) << "----" << "\n"; + return ss.str(); - -/* os << std::left << std::setw(13) << person.lastName_ << " " - << std::left << std::setw(13) << person.firstName_ << " " - << std::left << std::setw(13) << person.personalID_ << " " - << std::left << std::setw(13) << person.gender_ << " " - << std::left << std::setw(13) << person.address_ << " " - << std::left << std::setw(13) << person.salary_ << " " - << std::left << std::setw(13) << "----" << "\n"; - return os; -*/ + } Student::Student(const std::string firstName, @@ -91,17 +86,14 @@ unsigned long Student::getStudentIndex() const std::string Student::getInfo() { auto ss = std::stringstream{}; - ss << studentIndex_ << std::setw(13) << lastName_; - return ss.str(); - -/* os << std::left << std::setw(13) << person.lastName_ << " " - << std::left << std::setw(13) << person.firstName_ << " " - << std::left << std::setw(13) << person.personalID_ << " " - << std::left << std::setw(13) << person.gender_ << " " - << std::left << std::setw(13) << person.address_ << " " - << std::left << std::setw(13) << "----" << " " - << std::left << std::setw(13) << person.studentIndex_ << "\n"; - return os; -*/ + + ss << std::left << std::setw(13) << lastName_ << " " + << std::left << std::setw(13) << firstName_ << " " + << std::left << std::setw(13) << personalID_ << " " + << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(13) << address_ << " " + << std::left << std::setw(13) << "----" << " " + << std::left << std::setw(13) << studentIndex_ << "\n"; + return ss.str(); } diff --git a/Person.hpp b/Person.hpp index e98d485..c48068d 100644 --- a/Person.hpp +++ b/Person.hpp @@ -1,6 +1,8 @@ #pragma once #include #include +#include +#include class Person { From 057acbba76b4172cad92bb751cb4855ae0d1c2d4 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 27 Jan 2019 13:25:50 +0100 Subject: [PATCH 19/65] small corrections --- Database.hpp | 8 ++++---- Person.cpp | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Database.hpp b/Database.hpp index d2b9590..b829a60 100644 --- a/Database.hpp +++ b/Database.hpp @@ -36,9 +36,9 @@ class Database void loadFromFile(); void saveToFile(); - void removeByPersonalID(const unsigned long personalID); - void modifySalary(const unsigned long personalID); - void modifyAdress(const unsigned long personalID); - bool validatePersonalID(const unsigned long personalID); + void removeByPersonalID(const unsigned long long personalID); + void modifySalary(const unsigned long long personalID); + void modifyAdress(const unsigned long long personalID); + bool validatePersonalID(const unsigned long long personalID); }; diff --git a/Person.cpp b/Person.cpp index 5c16eb8..350ac1b 100644 --- a/Person.cpp +++ b/Person.cpp @@ -1,6 +1,5 @@ #include "Person.hpp" -#include -#include + Person::Person(const std::string firstName, const std::string lastName, From 6e124d913d34a55a554e3098d0fbc84a36696d91 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 27 Jan 2019 16:40:12 +0100 Subject: [PATCH 20/65] sortBySalary() added --- Database.cpp | 21 +++++++++++++++++++-- Person.cpp | 5 +++++ Person.hpp | 5 ++++- main.cpp | 22 ++++++++++++++++------ 4 files changed, 44 insertions(+), 9 deletions(-) diff --git a/Database.cpp b/Database.cpp index 25e051e..713d026 100644 --- a/Database.cpp +++ b/Database.cpp @@ -11,11 +11,28 @@ void Database::printDatabase() const std::cout << "\n"; } -// void Database::sortBySalary(); +void Database::sortBySalary() +{ + std::sort(begin(data), end(data), [](Person* left, Person* right) + { + //input: 10.1 Nan 2.5 Nan 3.6 + //output: 2.5 3.6 10.1 Nan Nan + + //NaN 2.5 --- if NaN on the left: bad! + if (std::isnan(left->getSalary())) return false; + + //2.5 NaN -- if NaN on the right: good! + if (std::isnan(right->getSalary())) return true; + + //left and right are finite, so compare it usually + return left->getSalary() < right->getSalary(); + }); + +} void Database::sortByLastName() { - std::sort(begin(data), end(data), [] (Person * left, Person * right) + std::sort(begin(data), end(data), [](Person* left, Person* right) { return left->getLastName() < right->getLastName(); }); diff --git a/Person.cpp b/Person.cpp index 350ac1b..dda58ef 100644 --- a/Person.cpp +++ b/Person.cpp @@ -77,6 +77,11 @@ Student::Student(const std::string firstName, studentIndex_(studentIndex) {} +double Student::getSalary() const +{ + return std::nan(""); +} + unsigned long Student::getStudentIndex() const { return studentIndex_; diff --git a/Person.hpp b/Person.hpp index c48068d..08357b3 100644 --- a/Person.hpp +++ b/Person.hpp @@ -3,6 +3,7 @@ #include #include #include +#include class Person { @@ -28,6 +29,7 @@ class Person friend std::ostream& operator<<(std::ostream& os, Person* person); virtual std::string getInfo(); + virtual double getSalary() const = 0; //pure virtual function virtual ~Person() {}; @@ -62,7 +64,8 @@ class Student : public Person const bool gender, const std::string address, const unsigned long studentIndex); - + + double getSalary() const; unsigned long getStudentIndex() const; std::string getInfo(); }; diff --git a/main.cpp b/main.cpp index ee44df3..5b1029f 100644 --- a/main.cpp +++ b/main.cpp @@ -15,14 +15,24 @@ int main() Database db; - db.addStudent("Kubus", "Puchatek", 91653426865, 1, "Las", 11111); - db.addStudent("Tomasz", "Kowalski", 87654237541, 1, "Wroclaw", 22222); - db.addStudent("Kasia", "Nowak", 64247643211, 0, "Opole", 34568); - db.addEmployee("Jan", "Szymczak", 87235681241, 1, "Wroclaw", 54674); - db.addEmployee("Aldona", "Tomczyk", 65321543987, 0, "Lublin", 43211); - db.addStudent("Stanislaw", "Olech", 90764357981, 1, "Lublin", 65421); + db.addStudent("Kubus", "Puchatek", 91653426865, 1, "Las", 111111); + db.addStudent("Tomasz", "Kowalski", 87654237541, 1, "Wroclaw", 122222); + db.addStudent("Kasia", "Nowak", 64247643211, 0, "Opole", 334568); + db.addEmployee("Jan", "Szymczak", 87235681241, 1, "Wroclaw", 3674); + db.addEmployee("Aldona", "Tomczyk", 65321543987, 0, "Lublin", 2211); + db.addStudent("Stanislaw", "Olech", 90764357981, 1, "Lublin", 265421); db.printDatabase(); + std::cout << "sortBySalary():\n"; + db.sortBySalary(); + db.printDatabase(); + + std::cout << "sortByLastName():\n"; + db.sortByLastName(); + db.printDatabase(); + + + return 0; } From 9d6e51206b8c870c2fe45c7f39b65c17f2e65817 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 27 Jan 2019 18:56:56 +0100 Subject: [PATCH 21/65] Reformat of code to default vim style --- Database.cpp | 48 +++++++++++++++++----------------- Database.hpp | 24 ++++++++--------- Person.cpp | 74 ++++++++++++++++++++++++++-------------------------- Person.hpp | 16 ++++++------ main.cpp | 10 +++---- 5 files changed, 86 insertions(+), 86 deletions(-) diff --git a/Database.cpp b/Database.cpp index 713d026..54ad635 100644 --- a/Database.cpp +++ b/Database.cpp @@ -15,17 +15,17 @@ void Database::sortBySalary() { std::sort(begin(data), end(data), [](Person* left, Person* right) { - //input: 10.1 Nan 2.5 Nan 3.6 - //output: 2.5 3.6 10.1 Nan Nan - - //NaN 2.5 --- if NaN on the left: bad! - if (std::isnan(left->getSalary())) return false; - - //2.5 NaN -- if NaN on the right: good! - if (std::isnan(right->getSalary())) return true; - - //left and right are finite, so compare it usually - return left->getSalary() < right->getSalary(); + //input: 10.1 Nan 2.5 Nan 3.6 + //output: 2.5 3.6 10.1 Nan Nan + + //NaN 2.5 --- if NaN on the left: bad! + if (std::isnan(left->getSalary())) return false; + + //2.5 NaN -- if NaN on the right: good! + if (std::isnan(right->getSalary())) return true; + + //left and right are finite, so compare it usually + return left->getSalary() < right->getSalary(); }); } @@ -34,7 +34,7 @@ void Database::sortByLastName() { std::sort(begin(data), end(data), [](Person* left, Person* right) { - return left->getLastName() < right->getLastName(); + return left->getLastName() < right->getLastName(); }); } @@ -44,27 +44,27 @@ void Database::addPerson(Person* person) } bool Database::addStudent(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const unsigned long studentIndex) + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const unsigned long studentIndex) { Person* student = new Student(firstName, lastName, personalID, - gender, address, studentIndex); + gender, address, studentIndex); addPerson(student); return true; } bool Database::addEmployee(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const double salary) + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const double salary) { Person* employee = new Employee(firstName, lastName, personalID, - gender, address, salary); + gender, address, salary); addPerson(employee); return true; } diff --git a/Database.hpp b/Database.hpp index b829a60..a435bfd 100644 --- a/Database.hpp +++ b/Database.hpp @@ -19,21 +19,21 @@ class Database void sortBySalary(); void sortByLastName(); void addPerson(Person* person); - + bool addStudent(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const unsigned long studentIndex); + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const unsigned long studentIndex); bool addEmployee(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const double salary); - + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const double salary); + void loadFromFile(); void saveToFile(); void removeByPersonalID(const unsigned long long personalID); diff --git a/Person.cpp b/Person.cpp index dda58ef..2b4f4ce 100644 --- a/Person.cpp +++ b/Person.cpp @@ -2,11 +2,11 @@ Person::Person(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address) - : firstName_(firstName), + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address) +: firstName_(firstName), lastName_(lastName), personalID_(personalID), gender_(gender), @@ -27,22 +27,22 @@ std::string Person::getInfo() { auto ss = std::stringstream{}; ss << std::left << std::setw(13) << lastName_ << " " - << std::left << std::setw(13) << firstName_ << " " - << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(13) << gender_ << " " - << std::left << std::setw(13) << address_ << "\n"; - + << std::left << std::setw(13) << firstName_ << " " + << std::left << std::setw(13) << personalID_ << " " + << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(13) << address_ << "\n"; + return ss.str(); } Employee::Employee(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const double salary) - : Person(firstName, lastName, personalID, gender, address), + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const double salary) +: Person(firstName, lastName, personalID, gender, address), salary_(salary) {} @@ -54,26 +54,26 @@ double Employee::getSalary() const std::string Employee::getInfo() { auto ss = std::stringstream{}; - + ss << std::left << std::setw(13) << lastName_ << " " - << std::left << std::setw(13) << firstName_ << " " - << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(13) << gender_ << " " - << std::left << std::setw(13) << address_ << " " - << std::left << std::setw(13) << salary_ << " " - << std::left << std::setw(13) << "----" << "\n"; - + << std::left << std::setw(13) << firstName_ << " " + << std::left << std::setw(13) << personalID_ << " " + << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(13) << address_ << " " + << std::left << std::setw(13) << salary_ << " " + << std::left << std::setw(13) << "----" << "\n"; + return ss.str(); } Student::Student(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const unsigned long studentIndex) - : Person(firstName, lastName, personalID, gender, address), + const std::string lastName, + const unsigned long long personalID, + const bool gender, + const std::string address, + const unsigned long studentIndex) +: Person(firstName, lastName, personalID, gender, address), studentIndex_(studentIndex) {} @@ -90,14 +90,14 @@ unsigned long Student::getStudentIndex() const std::string Student::getInfo() { auto ss = std::stringstream{}; - + ss << std::left << std::setw(13) << lastName_ << " " - << std::left << std::setw(13) << firstName_ << " " - << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(13) << gender_ << " " - << std::left << std::setw(13) << address_ << " " - << std::left << std::setw(13) << "----" << " " - << std::left << std::setw(13) << studentIndex_ << "\n"; + << std::left << std::setw(13) << firstName_ << " " + << std::left << std::setw(13) << personalID_ << " " + << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(13) << address_ << " " + << std::left << std::setw(13) << "----" << " " + << std::left << std::setw(13) << studentIndex_ << "\n"; return ss.str(); } diff --git a/Person.hpp b/Person.hpp index 08357b3..acb57fd 100644 --- a/Person.hpp +++ b/Person.hpp @@ -8,14 +8,14 @@ class Person { //enum gender{male, female}; - + protected: std::string firstName_; std::string lastName_; unsigned long long personalID_; bool gender_; std::string address_; - + public: Person(const std::string firstName, const std::string lastName, @@ -23,7 +23,7 @@ class Person const bool gender, const std::string address); - + std::string getLastName() const; unsigned long long getPersonalID() const; friend std::ostream& operator<<(std::ostream& os, Person* person); @@ -31,8 +31,8 @@ class Person virtual std::string getInfo(); virtual double getSalary() const = 0; //pure virtual function virtual ~Person() {}; - - + + }; class Employee : public Person @@ -49,14 +49,14 @@ class Employee : public Person double getSalary() const; std::string getInfo(); - + }; class Student : public Person { private: unsigned long studentIndex_; - + public: Student(const std::string firstName, const std::string lastName, @@ -64,7 +64,7 @@ class Student : public Person const bool gender, const std::string address, const unsigned long studentIndex); - + double getSalary() const; unsigned long getStudentIndex() const; std::string getInfo(); diff --git a/main.cpp b/main.cpp index 61a71fa..58f461f 100644 --- a/main.cpp +++ b/main.cpp @@ -4,24 +4,24 @@ std::ostream& operator<<(std::ostream& os, Person* person) { - os << person->getInfo(); - return os; + os << person->getInfo(); + return os; } int main() { std::cout << "Hello on master!\n\n"; - + Database db; - + db.addStudent("Kubus", "Puchatek", 91653426865, 1, "Las", 111111); db.addStudent("Tomasz", "Kowalski", 87654237541, 1, "Wroclaw", 122222); db.addStudent("Kasia", "Nowak", 64247643211, 0, "Opole", 334568); db.addEmployee("Jan", "Szymczak", 87235681241, 1, "Wroclaw", 3674); db.addEmployee("Aldona", "Tomczyk", 65321543987, 0, "Lublin", 2211); db.addStudent("Stanislaw", "Olech", 90764357981, 1, "Lublin", 265421); - + db.printDatabase(); std::cout << "sortBySalary():\n"; From ae092e72604ca20b2744daa9a908c30e07797465 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 27 Jan 2019 22:21:17 +0100 Subject: [PATCH 22/65] saveToFile() added --- Database.cpp | 23 +++++++++++++++++++++-- Database.hpp | 5 +++-- Person.cpp | 6 +++--- Person.hpp | 8 ++++---- main.cpp | 3 ++- 5 files changed, 33 insertions(+), 12 deletions(-) diff --git a/Database.cpp b/Database.cpp index 54ad635..0ea5ab0 100644 --- a/Database.cpp +++ b/Database.cpp @@ -70,8 +70,27 @@ bool Database::addEmployee(const std::string firstName, } -//void Database::loadFromFile(); -//void Database::saveToFile(); +bool Database::loadFromFile() +{ + return true; +} + +bool Database::saveToFile() +{ + std::string filename {"../database.txt"}; + std::ofstream ofs {filename}; //output file stream + + if(!ofs){ + std::cout << "bad filename: " << filename << "\n"; + return false; + } + for(const auto& personPtr : data) + ofs << personPtr; + ofs << "\n"; + return true; +} + + //void Database::removeByPersonalID(const unsigned long personalID); //void Database::modifySalary(const unsigned long personalID); //void Database::modifyAdress(const unsigned long personalID); diff --git a/Database.hpp b/Database.hpp index a435bfd..f33b1eb 100644 --- a/Database.hpp +++ b/Database.hpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "Person.hpp" @@ -34,8 +35,8 @@ class Database const std::string address, const double salary); - void loadFromFile(); - void saveToFile(); + bool loadFromFile(); + bool saveToFile(); void removeByPersonalID(const unsigned long long personalID); void modifySalary(const unsigned long long personalID); void modifyAdress(const unsigned long long personalID); diff --git a/Person.cpp b/Person.cpp index 2b4f4ce..cc5bd81 100644 --- a/Person.cpp +++ b/Person.cpp @@ -23,7 +23,7 @@ unsigned long long Person::getPersonalID() const return personalID_; } -std::string Person::getInfo() +std::string Person::getInfo() const { auto ss = std::stringstream{}; ss << std::left << std::setw(13) << lastName_ << " " @@ -51,7 +51,7 @@ double Employee::getSalary() const return salary_; } -std::string Employee::getInfo() +std::string Employee::getInfo() const { auto ss = std::stringstream{}; @@ -87,7 +87,7 @@ unsigned long Student::getStudentIndex() const return studentIndex_; } -std::string Student::getInfo() +std::string Student::getInfo() const { auto ss = std::stringstream{}; diff --git a/Person.hpp b/Person.hpp index acb57fd..b3520c4 100644 --- a/Person.hpp +++ b/Person.hpp @@ -26,9 +26,9 @@ class Person std::string getLastName() const; unsigned long long getPersonalID() const; - friend std::ostream& operator<<(std::ostream& os, Person* person); + friend std::ostream& operator<<(std::ostream& os, const Person* person); - virtual std::string getInfo(); + virtual std::string getInfo() const; virtual double getSalary() const = 0; //pure virtual function virtual ~Person() {}; @@ -48,7 +48,7 @@ class Employee : public Person const double salary); double getSalary() const; - std::string getInfo(); + std::string getInfo() const; }; @@ -67,5 +67,5 @@ class Student : public Person double getSalary() const; unsigned long getStudentIndex() const; - std::string getInfo(); + std::string getInfo() const; }; diff --git a/main.cpp b/main.cpp index 58f461f..ee41694 100644 --- a/main.cpp +++ b/main.cpp @@ -2,7 +2,7 @@ #include "Person.hpp" #include "Database.hpp" -std::ostream& operator<<(std::ostream& os, Person* person) +std::ostream& operator<<(std::ostream& os, const Person* person) { os << person->getInfo(); return os; @@ -32,6 +32,7 @@ int main() db.sortByLastName(); db.printDatabase(); + db.saveToFile(); return 0; } From c555a071f33e8e736eb14091e174892440a4a088 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Mon, 28 Jan 2019 18:35:04 +0100 Subject: [PATCH 23/65] Passing by value changed to passing by reference --- Database.cpp | 33 ++++++++++++++++++--------------- Database.hpp | 36 ++++++++++++++++++------------------ Person.cpp | 35 +++++++++++++++++------------------ Person.hpp | 34 +++++++++++++++++----------------- 4 files changed, 70 insertions(+), 68 deletions(-) diff --git a/Database.cpp b/Database.cpp index 0ea5ab0..51e6303 100644 --- a/Database.cpp +++ b/Database.cpp @@ -43,12 +43,12 @@ void Database::addPerson(Person* person) data.push_back(person); } -bool Database::addStudent(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const unsigned long studentIndex) +bool Database::addStudent(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const unsigned long& studentIndex) { Person* student = new Student(firstName, lastName, personalID, gender, address, studentIndex); @@ -56,12 +56,12 @@ bool Database::addStudent(const std::string firstName, return true; } -bool Database::addEmployee(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const double salary) +bool Database::addEmployee(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const double& salary) { Person* employee = new Employee(firstName, lastName, personalID, gender, address, salary); @@ -70,14 +70,17 @@ bool Database::addEmployee(const std::string firstName, } -bool Database::loadFromFile() +bool Database::loadFromFile(const std::string& filename/*="database.txt"*/) { + std::ifstream ifs {filename}; //input file stream + + + return true; } -bool Database::saveToFile() +bool Database::saveToFile(const std::string& filename/*="database.txt"*/) { - std::string filename {"../database.txt"}; std::ofstream ofs {filename}; //output file stream if(!ofs){ diff --git a/Database.hpp b/Database.hpp index f33b1eb..fdd4436 100644 --- a/Database.hpp +++ b/Database.hpp @@ -21,25 +21,25 @@ class Database void sortByLastName(); void addPerson(Person* person); - bool addStudent(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const unsigned long studentIndex); + bool addStudent(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const unsigned long& studentIndex); - bool addEmployee(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const double salary); + bool addEmployee(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const double& salary); - bool loadFromFile(); - bool saveToFile(); - void removeByPersonalID(const unsigned long long personalID); - void modifySalary(const unsigned long long personalID); - void modifyAdress(const unsigned long long personalID); - bool validatePersonalID(const unsigned long long personalID); + bool loadFromFile(const std::string& filename = "../database.txt"); + bool saveToFile(const std::string& filename = "../database.txt"); + void removeByPersonalID(const unsigned long long& personalID); + void modifySalary(const unsigned long long& personalID); + void modifyAdress(const unsigned long long& personalID); + bool validatePersonalID(const unsigned long long& personalID); }; diff --git a/Person.cpp b/Person.cpp index cc5bd81..a3329b3 100644 --- a/Person.cpp +++ b/Person.cpp @@ -1,11 +1,10 @@ #include "Person.hpp" - -Person::Person(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address) +Person::Person(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address) : firstName_(firstName), lastName_(lastName), personalID_(personalID), @@ -36,12 +35,12 @@ std::string Person::getInfo() const } -Employee::Employee(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const double salary) +Employee::Employee(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const double& salary) : Person(firstName, lastName, personalID, gender, address), salary_(salary) {} @@ -67,12 +66,12 @@ std::string Employee::getInfo() const } -Student::Student(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const unsigned long studentIndex) +Student::Student(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const unsigned long& studentIndex) : Person(firstName, lastName, personalID, gender, address), studentIndex_(studentIndex) {} diff --git a/Person.hpp b/Person.hpp index b3520c4..2af5ef8 100644 --- a/Person.hpp +++ b/Person.hpp @@ -17,11 +17,11 @@ class Person std::string address_; public: - Person(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address); + Person(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address); std::string getLastName() const; @@ -40,12 +40,12 @@ class Employee : public Person private: double salary_; public: - Employee(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const double salary); + Employee(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const double& salary); double getSalary() const; std::string getInfo() const; @@ -58,12 +58,12 @@ class Student : public Person unsigned long studentIndex_; public: - Student(const std::string firstName, - const std::string lastName, - const unsigned long long personalID, - const bool gender, - const std::string address, - const unsigned long studentIndex); + Student(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const unsigned long& studentIndex); double getSalary() const; unsigned long getStudentIndex() const; From deee056a23a76b0da954c31b8b38ab9697e5017b Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Mon, 28 Jan 2019 19:51:30 +0100 Subject: [PATCH 24/65] loadFromFile() added --- Database.cpp | 31 +++++++++++++++++++++++++------ Database.hpp | 4 ++-- main.cpp | 10 ++++++++-- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/Database.cpp b/Database.cpp index 51e6303..8f62c27 100644 --- a/Database.cpp +++ b/Database.cpp @@ -70,21 +70,40 @@ bool Database::addEmployee(const std::string& firstName, } -bool Database::loadFromFile(const std::string& filename/*="database.txt"*/) +bool Database::loadFromFile(const std::string filename/*="database.txt"*/) { std::ifstream ifs {filename}; //input file stream - + if(!ifs){ + std::cout << "Could not open " << filename << " for reading!\n"; + return false; + } + + std::string firstName, lastName, address, salary, studentIndex; + unsigned long long personalID; + bool gender; + + while(ifs >> lastName >> firstName >> personalID >> gender >> + address >> salary >> studentIndex) + { + if(salary == "----") + addStudent(firstName, lastName, personalID, gender, address, std::stold(studentIndex)); + else if(studentIndex == "----") + addEmployee(firstName, lastName, personalID, gender, address, std::stod(salary)); + else{ + std::cout << "\nInvalid line in input file!\n"; + return false; + } + } - return true; } -bool Database::saveToFile(const std::string& filename/*="database.txt"*/) +bool Database::saveToFile(const std::string filename/*="database.txt"*/) { std::ofstream ofs {filename}; //output file stream - + if(!ofs){ - std::cout << "bad filename: " << filename << "\n"; + std::cout << "Could not open " << filename << " for writing!\n"; return false; } for(const auto& personPtr : data) diff --git a/Database.hpp b/Database.hpp index fdd4436..cdab418 100644 --- a/Database.hpp +++ b/Database.hpp @@ -35,8 +35,8 @@ class Database const std::string& address, const double& salary); - bool loadFromFile(const std::string& filename = "../database.txt"); - bool saveToFile(const std::string& filename = "../database.txt"); + bool loadFromFile(const std::string filename = "../database.txt"); + bool saveToFile(const std::string filename = "../database.txt"); void removeByPersonalID(const unsigned long long& personalID); void modifySalary(const unsigned long long& personalID); void modifyAdress(const unsigned long long& personalID); diff --git a/main.cpp b/main.cpp index ee41694..541cbab 100644 --- a/main.cpp +++ b/main.cpp @@ -11,8 +11,6 @@ std::ostream& operator<<(std::ostream& os, const Person* person) int main() { - std::cout << "Hello on master!\n\n"; - Database db; db.addStudent("Kubus", "Puchatek", 91653426865, 1, "Las", 111111); @@ -34,5 +32,13 @@ int main() db.saveToFile(); + Database temp; + std::cout << "b print\n"; + temp.printDatabase(); + std::cout << "a print\n"; + + temp.loadFromFile(); + temp.printDatabase(); + return 0; } From 88e61aa95aa6e239aa12a80ff85cd2e30c1fd916 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Mon, 28 Jan 2019 20:43:13 +0100 Subject: [PATCH 25/65] setSalary added --- Person.cpp | 5 +++++ Person.hpp | 1 + 2 files changed, 6 insertions(+) diff --git a/Person.cpp b/Person.cpp index a3329b3..1961036 100644 --- a/Person.cpp +++ b/Person.cpp @@ -50,6 +50,11 @@ double Employee::getSalary() const return salary_; } +void Employee::setSalary(const double& salary) +{ + salary_ = salary; +} + std::string Employee::getInfo() const { auto ss = std::stringstream{}; diff --git a/Person.hpp b/Person.hpp index 2af5ef8..358d47f 100644 --- a/Person.hpp +++ b/Person.hpp @@ -48,6 +48,7 @@ class Employee : public Person const double& salary); double getSalary() const; + void setSalary(const double& salary); std::string getInfo() const; }; From b0067df2860e50d3c5c7631e579d34195d03b163 Mon Sep 17 00:00:00 2001 From: majkel Date: Sun, 27 Jan 2019 00:36:46 +0100 Subject: [PATCH 26/65] New method remove Person by personalID --- Database.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Database.cpp b/Database.cpp index 54ad635..a3c32c9 100644 --- a/Database.cpp +++ b/Database.cpp @@ -72,7 +72,16 @@ bool Database::addEmployee(const std::string firstName, //void Database::loadFromFile(); //void Database::saveToFile(); -//void Database::removeByPersonalID(const unsigned long personalID); + +void Database::removeByPersonalID(const unsigned long personalID) +{ + auto iter = std::find_if(begin(data), end(data), [personalID](Person * person){return person->getPersonalID()==personalID;}); + if (iter != end(data)) + { + data.erase(iter); + } +} + //void Database::modifySalary(const unsigned long personalID); //void Database::modifyAdress(const unsigned long personalID); //bool Database::validatePersonalID(const unsigned long personalID); From 05b2ae545e198304872be35c685255071dc2ca7a Mon Sep 17 00:00:00 2001 From: majkel Date: Mon, 28 Jan 2019 22:19:16 +0100 Subject: [PATCH 27/65] Sort by StudentID --- Database.cpp | 12 +++++++++++- Database.hpp | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Database.cpp b/Database.cpp index a3c32c9..a857947 100644 --- a/Database.cpp +++ b/Database.cpp @@ -38,6 +38,16 @@ void Database::sortByLastName() }); } +void Database::sortByStudentID() +{ + std::sort(begin(data), end(data), [](Person* left, Person* right) + { + Student* student1 = dynamic_cast(left); + Student* student2 = dynamic_cast(right); + return student1 -> getStudentIndex() < student2 -> getStudentIndex(); + }); +} + void Database::addPerson(Person* person) { data.push_back(person); @@ -73,7 +83,7 @@ bool Database::addEmployee(const std::string firstName, //void Database::loadFromFile(); //void Database::saveToFile(); -void Database::removeByPersonalID(const unsigned long personalID) +void Database::removeByPersonalID(const unsigned long long personalID) { auto iter = std::find_if(begin(data), end(data), [personalID](Person * person){return person->getPersonalID()==personalID;}); if (iter != end(data)) diff --git a/Database.hpp b/Database.hpp index a435bfd..fdb8451 100644 --- a/Database.hpp +++ b/Database.hpp @@ -18,6 +18,7 @@ class Database void printDatabase() const; void sortBySalary(); void sortByLastName(); + void sortByStudentID(); void addPerson(Person* person); bool addStudent(const std::string firstName, From 57c1474ca83395d2ca2098ba115f4d1251dcd79c Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Mon, 28 Jan 2019 22:55:43 +0100 Subject: [PATCH 28/65] sortBySalary() modified, dynamic_cast added --- Database.cpp | 22 +++++++++++++--------- Person.cpp | 5 ----- Person.hpp | 3 --- main.cpp | 2 -- 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/Database.cpp b/Database.cpp index 8f62c27..c577234 100644 --- a/Database.cpp +++ b/Database.cpp @@ -6,6 +6,9 @@ void Database::printDatabase() const { + if(data.empty()) + std::cout << "Empty database!\n"; + for(const auto& personPtr : data) std::cout << personPtr; std::cout << "\n"; @@ -14,22 +17,23 @@ void Database::printDatabase() const void Database::sortBySalary() { std::sort(begin(data), end(data), [](Person* left, Person* right) - { - //input: 10.1 Nan 2.5 Nan 3.6 + { + //input: 10.1 NaN 2.5 NaN 3.6 //output: 2.5 3.6 10.1 Nan Nan - //NaN 2.5 --- if NaN on the left: bad! - if (std::isnan(left->getSalary())) return false; + //NaN 2.5 --- if student on the left: bad! + if(dynamic_cast(left)) return false; - //2.5 NaN -- if NaN on the right: good! - if (std::isnan(right->getSalary())) return true; + //2.5 NaN -- if student on the right: good! move all to the right + if(dynamic_cast(right)) return true; - //left and right are finite, so compare it usually - return left->getSalary() < right->getSalary(); + Employee* e_left = dynamic_cast(left); + Employee* e_right = dynamic_cast(right); + //if employee, compare it usually + return e_left->getSalary() < e_right->getSalary(); }); } - void Database::sortByLastName() { std::sort(begin(data), end(data), [](Person* left, Person* right) diff --git a/Person.cpp b/Person.cpp index 1961036..2b5d06c 100644 --- a/Person.cpp +++ b/Person.cpp @@ -81,11 +81,6 @@ Student::Student(const std::string& firstName, studentIndex_(studentIndex) {} -double Student::getSalary() const -{ - return std::nan(""); -} - unsigned long Student::getStudentIndex() const { return studentIndex_; diff --git a/Person.hpp b/Person.hpp index 358d47f..6836c56 100644 --- a/Person.hpp +++ b/Person.hpp @@ -27,9 +27,7 @@ class Person std::string getLastName() const; unsigned long long getPersonalID() const; friend std::ostream& operator<<(std::ostream& os, const Person* person); - virtual std::string getInfo() const; - virtual double getSalary() const = 0; //pure virtual function virtual ~Person() {}; @@ -66,7 +64,6 @@ class Student : public Person const std::string& address, const unsigned long& studentIndex); - double getSalary() const; unsigned long getStudentIndex() const; std::string getInfo() const; }; diff --git a/main.cpp b/main.cpp index 541cbab..d816388 100644 --- a/main.cpp +++ b/main.cpp @@ -33,9 +33,7 @@ int main() db.saveToFile(); Database temp; - std::cout << "b print\n"; temp.printDatabase(); - std::cout << "a print\n"; temp.loadFromFile(); temp.printDatabase(); From bd9fb035989a8c893f28df2a3552d46fdcb7b29a Mon Sep 17 00:00:00 2001 From: majkel Date: Mon, 28 Jan 2019 23:23:37 +0100 Subject: [PATCH 29/65] Formating changes after review --- Database.cpp | 4 ++-- Database.hpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Database.cpp b/Database.cpp index a857947..42c001e 100644 --- a/Database.cpp +++ b/Database.cpp @@ -83,9 +83,9 @@ bool Database::addEmployee(const std::string firstName, //void Database::loadFromFile(); //void Database::saveToFile(); -void Database::removeByPersonalID(const unsigned long long personalID) +bool Database::removeByPersonalID(const unsigned long long personalID) { - auto iter = std::find_if(begin(data), end(data), [personalID](Person * person){return person->getPersonalID()==personalID;}); + auto iter = std::find_if(begin(data), end(data), [personalID](Person* person){return person->getPersonalID()==personalID;}); if (iter != end(data)) { data.erase(iter); diff --git a/Database.hpp b/Database.hpp index fdb8451..9c003da 100644 --- a/Database.hpp +++ b/Database.hpp @@ -37,7 +37,7 @@ class Database void loadFromFile(); void saveToFile(); - void removeByPersonalID(const unsigned long long personalID); + bool removeByPersonalID(const unsigned long long personalID); void modifySalary(const unsigned long long personalID); void modifyAdress(const unsigned long long personalID); bool validatePersonalID(const unsigned long long personalID); From 6e9b449bfa6a4a2f09e0a12a53357cac02e1477e Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Tue, 29 Jan 2019 00:21:39 +0100 Subject: [PATCH 30/65] fix problems from merge --- Database.cpp | 1 + Database.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Database.cpp b/Database.cpp index 2b639bf..192ddc0 100644 --- a/Database.cpp +++ b/Database.cpp @@ -133,6 +133,7 @@ bool Database::removeByPersonalID(const unsigned long long& personalID) { data.erase(iter); } + return true; } //void Database::modifySalary(const unsigned long personalID); diff --git a/Database.hpp b/Database.hpp index ad3e7d6..4e0658d 100644 --- a/Database.hpp +++ b/Database.hpp @@ -38,7 +38,7 @@ class Database bool loadFromFile(const std::string filename = "../database.txt"); bool saveToFile(const std::string filename = "../database.txt"); - void removeByPersonalID(const unsigned long long& personalID); + bool removeByPersonalID(const unsigned long long& personalID); void modifySalary(const unsigned long long& personalID); void modifyAdress(const unsigned long long& personalID); bool validatePersonalID(const unsigned long long& personalID); From c79f15e9aa329cb7cb984aebeb7581c35bded494 Mon Sep 17 00:00:00 2001 From: majkel Date: Tue, 29 Jan 2019 00:43:37 +0100 Subject: [PATCH 31/65] searchByLastName - in progress --- Database.cpp | 14 +++++++++++++- Database.hpp | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Database.cpp b/Database.cpp index 42c001e..f7f7ab8 100644 --- a/Database.cpp +++ b/Database.cpp @@ -1,7 +1,19 @@ #include "Database.hpp" #include -//void searchByLastName(); +void Database::searchByLastName(const std::string lastName) +{ + std::vector::iterator it = std::find_if(begin(data), end(data), [lastName] (Person* person) + { + return person -> getLastName() == lastName; + }); + if (it != end(data)) + { + //std::cout << lastName << "found on position " << *it << std::endl; + //person + } +} + //void searchByPersonalID(); void Database::printDatabase() const diff --git a/Database.hpp b/Database.hpp index 9c003da..e2bf211 100644 --- a/Database.hpp +++ b/Database.hpp @@ -13,7 +13,7 @@ class Database private: std::vector data; public: - void searchByLastName(); + void searchByLastName(const std::string lastName); void searchByPersonalID(); void printDatabase() const; void sortBySalary(); From 97030048244168b5bfdcf9785269d31ade6f7c9f Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Tue, 29 Jan 2019 18:28:26 +0100 Subject: [PATCH 32/65] checkPersonalID() added - initial version --- Database.cpp | 2 +- Database.hpp | 4 +- validatePersonalID/main.cpp | 87 +++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 validatePersonalID/main.cpp diff --git a/Database.cpp b/Database.cpp index 192ddc0..a9f3c6e 100644 --- a/Database.cpp +++ b/Database.cpp @@ -48,7 +48,7 @@ void Database::sortByStudentID() { Student* student1 = dynamic_cast(left); Student* student2 = dynamic_cast(right); - return student1 -> getStudentIndex() < student2 -> getStudentIndex(); + return student1->getStudentIndex() < student2->getStudentIndex(); }); } diff --git a/Database.hpp b/Database.hpp index 4e0658d..c105f9e 100644 --- a/Database.hpp +++ b/Database.hpp @@ -36,8 +36,8 @@ class Database const std::string& address, const double& salary); - bool loadFromFile(const std::string filename = "../database.txt"); - bool saveToFile(const std::string filename = "../database.txt"); + bool loadFromFile(const std::string filename "=../database.txt"); + bool saveToFile(const std::string filename "=../database.txt"); bool removeByPersonalID(const unsigned long long& personalID); void modifySalary(const unsigned long long& personalID); void modifyAdress(const unsigned long long& personalID); diff --git a/validatePersonalID/main.cpp b/validatePersonalID/main.cpp new file mode 100644 index 0000000..b9b28ef --- /dev/null +++ b/validatePersonalID/main.cpp @@ -0,0 +1,87 @@ +#include +#include + +bool checkPersonalID(const unsigned long long& personalID); +bool initialIdCheck(const unsigned long long& personalID); +void splitNumberIntoDigits(std::vector& digits, unsigned long long number); +bool checkDay(std::vector& digits, const unsigned long long& personalID); +bool checkcontrolSum(std::vector& digits, const unsigned long long& personalID); + +int main(){ + std::cout << "check PersonalID!\n"; + + unsigned long long a = 44051401358; + unsigned long long b = 81100216357; + unsigned long long c = 81100216353; + unsigned long long d = 65071209862; + unsigned long long e = 12076509862; + + + std::cout << a << ": " << checkPersonalID(a) << "\n"; + std::cout << b << ": " << checkPersonalID(b) << "\n"; + std::cout << c << ": " << checkPersonalID(c) << "\n"; + std::cout << d << ": " << checkPersonalID(d) << "\n"; + std::cout << e << ": " << checkPersonalID(e) << "\n"; + + return 0; +} + +bool initialIdCheck(std::vector& digits, const unsigned long long& personalID) +{ + const int personalIdLength = 11; + splitNumberIntoDigits(digits, personalID); + + if(personalID < 0 or digits.size() != personalIdLength) + return false; + + return true; +} + +bool checkDay(std::vector& digits, const unsigned long long& personalID) +{ + int day = digits[4]*10 + digits[5]; + if(day >= 1 and day <= 31) + return true; + + return false; +} + +bool checkPersonalID(const unsigned long long& personalID){ + std::vector digits {}; + + std::cout << "a"; + if( !initialIdCheck(digits, personalID)) return false; + + std::cout << "b"; + if( !checkDay(digits, personalID)) return false; + + std::cout << "c"; + if( !checkcontrolSum(digits, personalID)) return false; + std::cout << "d"; + + return true; +} + +bool checkcontrolSum(std::vector& digits, const unsigned long long& personalID) +{ + unsigned long int sum = 0; + const std::vector multipliers {1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1}; + for(int i=0; i& digits, unsigned long long number) +{ + int digit = 0; + while(number > 0) + { + digit = number % 10; + number /= 10; + digits.insert(digits.begin(), digit); + } +} From 5808a9deda8b1f51dfe2eebb3e3dec50d736bfac Mon Sep 17 00:00:00 2001 From: majkel Date: Tue, 29 Jan 2019 21:29:46 +0100 Subject: [PATCH 33/65] Search by last name and personal ID Sort by student ID changes --- Database.cpp | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/Database.cpp b/Database.cpp index f7f7ab8..458171a 100644 --- a/Database.cpp +++ b/Database.cpp @@ -9,12 +9,30 @@ void Database::searchByLastName(const std::string lastName) }); if (it != end(data)) { - //std::cout << lastName << "found on position " << *it << std::endl; - //person + std::cout << lastName << "found on position " << *it << std::endl; + Person* p = *it; + p -> getInfo(); } + else + std::cout << "Person " << lastName << " not found." << std::endl; } -//void searchByPersonalID(); +void searchByPersonalID() +{ + + std::vector::iterator it = std::find_if(begin(data), end(data), [personalID] (Person* person) + { + return person -> getPersonalID() == personalID; + }); + if (it != end(data)) + { + std::cout << personalID << "found on position " << *it << std::endl; + Person* p = *it; + p -> getInfo(); + } + else + std::cout << "Personal ID " << personalID << " not found." << std::endl; +} void Database::printDatabase() const { @@ -54,6 +72,9 @@ void Database::sortByStudentID() { std::sort(begin(data), end(data), [](Person* left, Person* right) { + if(dynamic_cast(left)) return false; + if(dynamic_cast(right)) return true; + Student* student1 = dynamic_cast(left); Student* student2 = dynamic_cast(right); return student1 -> getStudentIndex() < student2 -> getStudentIndex(); From 7c096be0fc1d31b3422ae31eeb680c8fbf0d606e Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Tue, 29 Jan 2019 22:30:29 +0100 Subject: [PATCH 34/65] validatePersonalID() added, version in namespace --- Database.hpp | 7 ++- PersonalID.cpp | 86 ++++++++++++++++++++++++++++++++++++ PersonalID.hpp | 12 +++++ main.cpp | 4 ++ validatePersonalID/main.cpp | 87 ------------------------------------- 5 files changed, 105 insertions(+), 91 deletions(-) create mode 100644 PersonalID.cpp create mode 100644 PersonalID.hpp delete mode 100644 validatePersonalID/main.cpp diff --git a/Database.hpp b/Database.hpp index c105f9e..62eef39 100644 --- a/Database.hpp +++ b/Database.hpp @@ -8,6 +8,7 @@ #include #include "Person.hpp" +#include "PersonalID.hpp" class Database { @@ -36,12 +37,10 @@ class Database const std::string& address, const double& salary); - bool loadFromFile(const std::string filename "=../database.txt"); - bool saveToFile(const std::string filename "=../database.txt"); + bool loadFromFile(const std::string filename = "../database.txt"); + bool saveToFile(const std::string filename = "../database.txt"); bool removeByPersonalID(const unsigned long long& personalID); void modifySalary(const unsigned long long& personalID); void modifyAdress(const unsigned long long& personalID); - bool validatePersonalID(const unsigned long long& personalID); - }; diff --git a/PersonalID.cpp b/PersonalID.cpp new file mode 100644 index 0000000..3d252c0 --- /dev/null +++ b/PersonalID.cpp @@ -0,0 +1,86 @@ +#include "PersonalID.hpp" + +namespace +{ + bool initialIdCheck(std::vector& digits, const unsigned long long& personalID); + void splitNumberIntoDigits(std::vector& digits, unsigned long long number); + bool checkDay(std::vector& digits); + bool checkControlSum(std::vector& digits); +} + +namespace ValidatePersonalID +{ + bool validatePersonalID(const unsigned long long& personalID) + { + std::vector digits {}; + + if( !initialIdCheck(digits, personalID)) return false; + if( !checkDay(digits)) return false; + if( !checkControlSum(digits)) return false; + + return true; + } + + void test() + { + unsigned long long a = 44051401358; + unsigned long long b = 81100216357; + unsigned long long c = 81100216353; + unsigned long long d = 65071209862; + unsigned long long e = 12076509862; + + std::cout << a << ": " << validatePersonalID(a) << "\n"; + std::cout << b << ": " << validatePersonalID(b) << "\n"; + std::cout << c << ": " << validatePersonalID(c) << "\n"; + std::cout << d << ": " << validatePersonalID(d) << "\n"; + std::cout << e << ": " << validatePersonalID(e) << "\n"; + } +} + +namespace +{ + bool initialIdCheck(std::vector& digits, const unsigned long long& personalID) + { + const int personalIdLength = 11; + splitNumberIntoDigits(digits, personalID); + + if(digits.size() != personalIdLength) + return false; + + return true; + } + + void splitNumberIntoDigits(std::vector& digits, unsigned long long number) + { + int digit = 0; + while(number > 0) + { + digit = number % 10; + number /= 10; + digits.insert(digits.begin(), digit); + } + } + + bool checkDay(std::vector& digits) + { + int day = digits[4]*10 + digits[5]; + if(day >= 1 and day <= 31) + return true; + + return false; + } + + bool checkControlSum(std::vector& digits) + { + unsigned long int sum = 0; + const std::vector multipliers {1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1}; + for(unsigned int i=0; i +#include + +namespace ValidatePersonalID +{ + bool validatePersonalID(const unsigned long long& personalID); + void test(); +} + +namespace vpid = ValidatePersonalID; + diff --git a/main.cpp b/main.cpp index d816388..3b985d4 100644 --- a/main.cpp +++ b/main.cpp @@ -37,6 +37,10 @@ int main() temp.loadFromFile(); temp.printDatabase(); + + std::cout << "validatePersonalID():\n"; + vpid::test(); + return 0; } diff --git a/validatePersonalID/main.cpp b/validatePersonalID/main.cpp deleted file mode 100644 index b9b28ef..0000000 --- a/validatePersonalID/main.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include - -bool checkPersonalID(const unsigned long long& personalID); -bool initialIdCheck(const unsigned long long& personalID); -void splitNumberIntoDigits(std::vector& digits, unsigned long long number); -bool checkDay(std::vector& digits, const unsigned long long& personalID); -bool checkcontrolSum(std::vector& digits, const unsigned long long& personalID); - -int main(){ - std::cout << "check PersonalID!\n"; - - unsigned long long a = 44051401358; - unsigned long long b = 81100216357; - unsigned long long c = 81100216353; - unsigned long long d = 65071209862; - unsigned long long e = 12076509862; - - - std::cout << a << ": " << checkPersonalID(a) << "\n"; - std::cout << b << ": " << checkPersonalID(b) << "\n"; - std::cout << c << ": " << checkPersonalID(c) << "\n"; - std::cout << d << ": " << checkPersonalID(d) << "\n"; - std::cout << e << ": " << checkPersonalID(e) << "\n"; - - return 0; -} - -bool initialIdCheck(std::vector& digits, const unsigned long long& personalID) -{ - const int personalIdLength = 11; - splitNumberIntoDigits(digits, personalID); - - if(personalID < 0 or digits.size() != personalIdLength) - return false; - - return true; -} - -bool checkDay(std::vector& digits, const unsigned long long& personalID) -{ - int day = digits[4]*10 + digits[5]; - if(day >= 1 and day <= 31) - return true; - - return false; -} - -bool checkPersonalID(const unsigned long long& personalID){ - std::vector digits {}; - - std::cout << "a"; - if( !initialIdCheck(digits, personalID)) return false; - - std::cout << "b"; - if( !checkDay(digits, personalID)) return false; - - std::cout << "c"; - if( !checkcontrolSum(digits, personalID)) return false; - std::cout << "d"; - - return true; -} - -bool checkcontrolSum(std::vector& digits, const unsigned long long& personalID) -{ - unsigned long int sum = 0; - const std::vector multipliers {1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1}; - for(int i=0; i& digits, unsigned long long number) -{ - int digit = 0; - while(number > 0) - { - digit = number % 10; - number /= 10; - digits.insert(digits.begin(), digit); - } -} From 88044c22d7c41f4b2792eabefc1c4e26616d2c33 Mon Sep 17 00:00:00 2001 From: majkel Date: Tue, 29 Jan 2019 22:42:54 +0100 Subject: [PATCH 35/65] searchByLastName, searchByPersonalID, sortByStudentID corrected --- Database.cpp | 17 ++++++----------- Database.hpp | 4 ++-- main.cpp | 10 +++++++++- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Database.cpp b/Database.cpp index 458171a..b9f7569 100644 --- a/Database.cpp +++ b/Database.cpp @@ -1,5 +1,4 @@ #include "Database.hpp" -#include void Database::searchByLastName(const std::string lastName) { @@ -9,26 +8,21 @@ void Database::searchByLastName(const std::string lastName) }); if (it != end(data)) { - std::cout << lastName << "found on position " << *it << std::endl; - Person* p = *it; - p -> getInfo(); + std::cout << *it << std::endl; } else std::cout << "Person " << lastName << " not found." << std::endl; } -void searchByPersonalID() +void Database::searchByPersonalID(const unsigned long personalID) { - std::vector::iterator it = std::find_if(begin(data), end(data), [personalID] (Person* person) { return person -> getPersonalID() == personalID; }); if (it != end(data)) { - std::cout << personalID << "found on position " << *it << std::endl; - Person* p = *it; - p -> getInfo(); + std::cout << *it << std::endl; } else std::cout << "Personal ID " << personalID << " not found." << std::endl; @@ -116,14 +110,15 @@ bool Database::addEmployee(const std::string firstName, //void Database::loadFromFile(); //void Database::saveToFile(); -bool Database::removeByPersonalID(const unsigned long long personalID) +/*void Database::removeByPersonalID(const unsigned long long personalID) { auto iter = std::find_if(begin(data), end(data), [personalID](Person* person){return person->getPersonalID()==personalID;}); if (iter != end(data)) { data.erase(iter); + //return true; } -} +}*/ //void Database::modifySalary(const unsigned long personalID); //void Database::modifyAdress(const unsigned long personalID); diff --git a/Database.hpp b/Database.hpp index e2bf211..a3e8b60 100644 --- a/Database.hpp +++ b/Database.hpp @@ -14,7 +14,7 @@ class Database std::vector data; public: void searchByLastName(const std::string lastName); - void searchByPersonalID(); + void searchByPersonalID(const unsigned long personalID); void printDatabase() const; void sortBySalary(); void sortByLastName(); @@ -37,7 +37,7 @@ class Database void loadFromFile(); void saveToFile(); - bool removeByPersonalID(const unsigned long long personalID); + void removeByPersonalID(const unsigned long long personalID); void modifySalary(const unsigned long long personalID); void modifyAdress(const unsigned long long personalID); bool validatePersonalID(const unsigned long long personalID); diff --git a/main.cpp b/main.cpp index 58f461f..c217aaf 100644 --- a/main.cpp +++ b/main.cpp @@ -31,7 +31,15 @@ int main() std::cout << "sortByLastName():\n"; db.sortByLastName(); db.printDatabase(); - + + std::cout << "Searching for Puchatek" << std::endl; + db.searchByLastName("Puchatek"); + std::cout << "Searching for ID 87235681241" << std::endl; + db.searchByPersonalID(87235681241); + + std::cout << "sortByStudentID():\n"; + db.sortByStudentID(); + db.printDatabase(); return 0; } From d83c74a0780d0d94645467ae998b2b2713e61818 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Tue, 29 Jan 2019 18:28:26 +0100 Subject: [PATCH 36/65] checkPersonalID() added - initial version --- Database.cpp | 2 +- Database.hpp | 4 +- validatePersonalID/main.cpp | 87 +++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 validatePersonalID/main.cpp diff --git a/Database.cpp b/Database.cpp index 192ddc0..a9f3c6e 100644 --- a/Database.cpp +++ b/Database.cpp @@ -48,7 +48,7 @@ void Database::sortByStudentID() { Student* student1 = dynamic_cast(left); Student* student2 = dynamic_cast(right); - return student1 -> getStudentIndex() < student2 -> getStudentIndex(); + return student1->getStudentIndex() < student2->getStudentIndex(); }); } diff --git a/Database.hpp b/Database.hpp index 4e0658d..c105f9e 100644 --- a/Database.hpp +++ b/Database.hpp @@ -36,8 +36,8 @@ class Database const std::string& address, const double& salary); - bool loadFromFile(const std::string filename = "../database.txt"); - bool saveToFile(const std::string filename = "../database.txt"); + bool loadFromFile(const std::string filename "=../database.txt"); + bool saveToFile(const std::string filename "=../database.txt"); bool removeByPersonalID(const unsigned long long& personalID); void modifySalary(const unsigned long long& personalID); void modifyAdress(const unsigned long long& personalID); diff --git a/validatePersonalID/main.cpp b/validatePersonalID/main.cpp new file mode 100644 index 0000000..b9b28ef --- /dev/null +++ b/validatePersonalID/main.cpp @@ -0,0 +1,87 @@ +#include +#include + +bool checkPersonalID(const unsigned long long& personalID); +bool initialIdCheck(const unsigned long long& personalID); +void splitNumberIntoDigits(std::vector& digits, unsigned long long number); +bool checkDay(std::vector& digits, const unsigned long long& personalID); +bool checkcontrolSum(std::vector& digits, const unsigned long long& personalID); + +int main(){ + std::cout << "check PersonalID!\n"; + + unsigned long long a = 44051401358; + unsigned long long b = 81100216357; + unsigned long long c = 81100216353; + unsigned long long d = 65071209862; + unsigned long long e = 12076509862; + + + std::cout << a << ": " << checkPersonalID(a) << "\n"; + std::cout << b << ": " << checkPersonalID(b) << "\n"; + std::cout << c << ": " << checkPersonalID(c) << "\n"; + std::cout << d << ": " << checkPersonalID(d) << "\n"; + std::cout << e << ": " << checkPersonalID(e) << "\n"; + + return 0; +} + +bool initialIdCheck(std::vector& digits, const unsigned long long& personalID) +{ + const int personalIdLength = 11; + splitNumberIntoDigits(digits, personalID); + + if(personalID < 0 or digits.size() != personalIdLength) + return false; + + return true; +} + +bool checkDay(std::vector& digits, const unsigned long long& personalID) +{ + int day = digits[4]*10 + digits[5]; + if(day >= 1 and day <= 31) + return true; + + return false; +} + +bool checkPersonalID(const unsigned long long& personalID){ + std::vector digits {}; + + std::cout << "a"; + if( !initialIdCheck(digits, personalID)) return false; + + std::cout << "b"; + if( !checkDay(digits, personalID)) return false; + + std::cout << "c"; + if( !checkcontrolSum(digits, personalID)) return false; + std::cout << "d"; + + return true; +} + +bool checkcontrolSum(std::vector& digits, const unsigned long long& personalID) +{ + unsigned long int sum = 0; + const std::vector multipliers {1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1}; + for(int i=0; i& digits, unsigned long long number) +{ + int digit = 0; + while(number > 0) + { + digit = number % 10; + number /= 10; + digits.insert(digits.begin(), digit); + } +} From cea3a06fcf7037d2b8b04935eace72f5bde5e1a9 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Tue, 29 Jan 2019 22:30:29 +0100 Subject: [PATCH 37/65] validatePersonalID() added, version in namespace --- Database.hpp | 7 ++- PersonalID.cpp | 86 ++++++++++++++++++++++++++++++++++++ PersonalID.hpp | 12 +++++ main.cpp | 4 ++ validatePersonalID/main.cpp | 87 ------------------------------------- 5 files changed, 105 insertions(+), 91 deletions(-) create mode 100644 PersonalID.cpp create mode 100644 PersonalID.hpp delete mode 100644 validatePersonalID/main.cpp diff --git a/Database.hpp b/Database.hpp index c105f9e..62eef39 100644 --- a/Database.hpp +++ b/Database.hpp @@ -8,6 +8,7 @@ #include #include "Person.hpp" +#include "PersonalID.hpp" class Database { @@ -36,12 +37,10 @@ class Database const std::string& address, const double& salary); - bool loadFromFile(const std::string filename "=../database.txt"); - bool saveToFile(const std::string filename "=../database.txt"); + bool loadFromFile(const std::string filename = "../database.txt"); + bool saveToFile(const std::string filename = "../database.txt"); bool removeByPersonalID(const unsigned long long& personalID); void modifySalary(const unsigned long long& personalID); void modifyAdress(const unsigned long long& personalID); - bool validatePersonalID(const unsigned long long& personalID); - }; diff --git a/PersonalID.cpp b/PersonalID.cpp new file mode 100644 index 0000000..3d252c0 --- /dev/null +++ b/PersonalID.cpp @@ -0,0 +1,86 @@ +#include "PersonalID.hpp" + +namespace +{ + bool initialIdCheck(std::vector& digits, const unsigned long long& personalID); + void splitNumberIntoDigits(std::vector& digits, unsigned long long number); + bool checkDay(std::vector& digits); + bool checkControlSum(std::vector& digits); +} + +namespace ValidatePersonalID +{ + bool validatePersonalID(const unsigned long long& personalID) + { + std::vector digits {}; + + if( !initialIdCheck(digits, personalID)) return false; + if( !checkDay(digits)) return false; + if( !checkControlSum(digits)) return false; + + return true; + } + + void test() + { + unsigned long long a = 44051401358; + unsigned long long b = 81100216357; + unsigned long long c = 81100216353; + unsigned long long d = 65071209862; + unsigned long long e = 12076509862; + + std::cout << a << ": " << validatePersonalID(a) << "\n"; + std::cout << b << ": " << validatePersonalID(b) << "\n"; + std::cout << c << ": " << validatePersonalID(c) << "\n"; + std::cout << d << ": " << validatePersonalID(d) << "\n"; + std::cout << e << ": " << validatePersonalID(e) << "\n"; + } +} + +namespace +{ + bool initialIdCheck(std::vector& digits, const unsigned long long& personalID) + { + const int personalIdLength = 11; + splitNumberIntoDigits(digits, personalID); + + if(digits.size() != personalIdLength) + return false; + + return true; + } + + void splitNumberIntoDigits(std::vector& digits, unsigned long long number) + { + int digit = 0; + while(number > 0) + { + digit = number % 10; + number /= 10; + digits.insert(digits.begin(), digit); + } + } + + bool checkDay(std::vector& digits) + { + int day = digits[4]*10 + digits[5]; + if(day >= 1 and day <= 31) + return true; + + return false; + } + + bool checkControlSum(std::vector& digits) + { + unsigned long int sum = 0; + const std::vector multipliers {1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1}; + for(unsigned int i=0; i +#include + +namespace ValidatePersonalID +{ + bool validatePersonalID(const unsigned long long& personalID); + void test(); +} + +namespace vpid = ValidatePersonalID; + diff --git a/main.cpp b/main.cpp index d816388..3b985d4 100644 --- a/main.cpp +++ b/main.cpp @@ -37,6 +37,10 @@ int main() temp.loadFromFile(); temp.printDatabase(); + + std::cout << "validatePersonalID():\n"; + vpid::test(); + return 0; } diff --git a/validatePersonalID/main.cpp b/validatePersonalID/main.cpp deleted file mode 100644 index b9b28ef..0000000 --- a/validatePersonalID/main.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include - -bool checkPersonalID(const unsigned long long& personalID); -bool initialIdCheck(const unsigned long long& personalID); -void splitNumberIntoDigits(std::vector& digits, unsigned long long number); -bool checkDay(std::vector& digits, const unsigned long long& personalID); -bool checkcontrolSum(std::vector& digits, const unsigned long long& personalID); - -int main(){ - std::cout << "check PersonalID!\n"; - - unsigned long long a = 44051401358; - unsigned long long b = 81100216357; - unsigned long long c = 81100216353; - unsigned long long d = 65071209862; - unsigned long long e = 12076509862; - - - std::cout << a << ": " << checkPersonalID(a) << "\n"; - std::cout << b << ": " << checkPersonalID(b) << "\n"; - std::cout << c << ": " << checkPersonalID(c) << "\n"; - std::cout << d << ": " << checkPersonalID(d) << "\n"; - std::cout << e << ": " << checkPersonalID(e) << "\n"; - - return 0; -} - -bool initialIdCheck(std::vector& digits, const unsigned long long& personalID) -{ - const int personalIdLength = 11; - splitNumberIntoDigits(digits, personalID); - - if(personalID < 0 or digits.size() != personalIdLength) - return false; - - return true; -} - -bool checkDay(std::vector& digits, const unsigned long long& personalID) -{ - int day = digits[4]*10 + digits[5]; - if(day >= 1 and day <= 31) - return true; - - return false; -} - -bool checkPersonalID(const unsigned long long& personalID){ - std::vector digits {}; - - std::cout << "a"; - if( !initialIdCheck(digits, personalID)) return false; - - std::cout << "b"; - if( !checkDay(digits, personalID)) return false; - - std::cout << "c"; - if( !checkcontrolSum(digits, personalID)) return false; - std::cout << "d"; - - return true; -} - -bool checkcontrolSum(std::vector& digits, const unsigned long long& personalID) -{ - unsigned long int sum = 0; - const std::vector multipliers {1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1}; - for(int i=0; i& digits, unsigned long long number) -{ - int digit = 0; - while(number > 0) - { - digit = number % 10; - number /= 10; - digits.insert(digits.begin(), digit); - } -} From 33807531f4c6ff65f07e079533866655b067dd96 Mon Sep 17 00:00:00 2001 From: majkel Date: Wed, 30 Jan 2019 00:01:43 +0100 Subject: [PATCH 38/65] Code formating --- Database.cpp | 15 +++++++++++---- Database.hpp | 5 +++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Database.cpp b/Database.cpp index b9f7569..98b0145 100644 --- a/Database.cpp +++ b/Database.cpp @@ -1,6 +1,6 @@ #include "Database.hpp" -void Database::searchByLastName(const std::string lastName) +void Database::searchByLastName(const std::string& lastName) { std::vector::iterator it = std::find_if(begin(data), end(data), [lastName] (Person* person) { @@ -11,7 +11,9 @@ void Database::searchByLastName(const std::string lastName) std::cout << *it << std::endl; } else + { std::cout << "Person " << lastName << " not found." << std::endl; + } } void Database::searchByPersonalID(const unsigned long personalID) @@ -110,15 +112,20 @@ bool Database::addEmployee(const std::string firstName, //void Database::loadFromFile(); //void Database::saveToFile(); -/*void Database::removeByPersonalID(const unsigned long long personalID) + +bool Database::removeByPersonalID(const unsigned long long personalID) { auto iter = std::find_if(begin(data), end(data), [personalID](Person* person){return person->getPersonalID()==personalID;}); if (iter != end(data)) { data.erase(iter); - //return true; + return true; } -}*/ + else + return false; +} + +//bool Database::removeByStudentID(const unsigned long studentID) //void Database::modifySalary(const unsigned long personalID); //void Database::modifyAdress(const unsigned long personalID); diff --git a/Database.hpp b/Database.hpp index a3e8b60..ab3ae85 100644 --- a/Database.hpp +++ b/Database.hpp @@ -13,7 +13,7 @@ class Database private: std::vector data; public: - void searchByLastName(const std::string lastName); + void searchByLastName(const std::string& lastName); void searchByPersonalID(const unsigned long personalID); void printDatabase() const; void sortBySalary(); @@ -37,7 +37,8 @@ class Database void loadFromFile(); void saveToFile(); - void removeByPersonalID(const unsigned long long personalID); + bool removeByPersonalID(const unsigned long long personalID); + bool removeByStudentID(const unsigned long studentID); void modifySalary(const unsigned long long personalID); void modifyAdress(const unsigned long long personalID); bool validatePersonalID(const unsigned long long personalID); From 052d3d6321d6cb8df53f28636ee4a8963146e027 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Wed, 30 Jan 2019 00:57:08 +0100 Subject: [PATCH 39/65] Fix after merge. Code format improved. --- Database.cpp | 32 +++++++++++++++----------------- Database.hpp | 2 +- Person.hpp | 2 -- main.cpp | 8 ++++---- 4 files changed, 20 insertions(+), 24 deletions(-) diff --git a/Database.cpp b/Database.cpp index 83459e8..215b246 100644 --- a/Database.cpp +++ b/Database.cpp @@ -4,28 +4,24 @@ void Database::searchByLastName(const std::string& lastName) { std::vector::iterator it = std::find_if(begin(data), end(data), [lastName] (Person* person) { - return person -> getLastName() == lastName; + return person -> getLastName() == lastName; }); + if (it != end(data)) - { std::cout << *it << std::endl; - } else - { std::cout << "Person " << lastName << " not found." << std::endl; - } } -void Database::searchByPersonalID(const unsigned long personalID) +void Database::searchByPersonalID(const unsigned long long& personalID) { std::vector::iterator it = std::find_if(begin(data), end(data), [personalID] (Person* person) { - return person -> getPersonalID() == personalID; + return person -> getPersonalID() == personalID; }); + if (it != end(data)) - { std::cout << *it << std::endl; - } else std::cout << "Personal ID " << personalID << " not found." << std::endl; } @@ -72,12 +68,12 @@ void Database::sortByStudentID() { std::sort(begin(data), end(data), [](Person* left, Person* right) { - if(dynamic_cast(left)) return false; - if(dynamic_cast(right)) return true; + if(dynamic_cast(left)) return false; + if(dynamic_cast(right)) return true; - Student* student1 = dynamic_cast(left); - Student* student2 = dynamic_cast(right); - return student1->getStudentIndex() < student2->getStudentIndex(); + Student* student1 = dynamic_cast(left); + Student* student2 = dynamic_cast(right); + return student1->getStudentIndex() < student2->getStudentIndex(); }); } @@ -159,7 +155,10 @@ bool Database::saveToFile(const std::string filename/*="database.txt"*/) bool Database::removeByPersonalID(const unsigned long long& personalID) { - auto iter = std::find_if(begin(data), end(data), [personalID](Person* person){return person->getPersonalID()==personalID;}); + auto iter = std::find_if(begin(data), end(data), [personalID] (Person* person) + { return person->getPersonalID() == personalID; + }); + if (iter != end(data)) { data.erase(iter); @@ -169,9 +168,8 @@ bool Database::removeByPersonalID(const unsigned long long& personalID) return false; } -//bool Database::removeByStudentID(const unsigned long studentID) +//bool Database::removeByStudentID(const unsigned long studentID) //void Database::modifySalary(const unsigned long personalID); //void Database::modifyAdress(const unsigned long personalID); -//bool Database::validatePersonalID(const unsigned long personalID); diff --git a/Database.hpp b/Database.hpp index 701084d..6be6827 100644 --- a/Database.hpp +++ b/Database.hpp @@ -16,7 +16,7 @@ class Database std::vector data; public: void searchByLastName(const std::string& lastName); - void searchByPersonalID(const unsigned long personalID); + void searchByPersonalID(const unsigned long long& personalID); void printDatabase() const; void sortBySalary(); void sortByLastName(); diff --git a/Person.hpp b/Person.hpp index 6836c56..70eeef7 100644 --- a/Person.hpp +++ b/Person.hpp @@ -29,8 +29,6 @@ class Person friend std::ostream& operator<<(std::ostream& os, const Person* person); virtual std::string getInfo() const; virtual ~Person() {}; - - }; class Employee : public Person diff --git a/main.cpp b/main.cpp index e8b72c3..889b631 100644 --- a/main.cpp +++ b/main.cpp @@ -29,10 +29,10 @@ int main() std::cout << "sortByLastName():\n"; db.sortByLastName(); db.printDatabase(); - + std::cout << "Searching for Puchatek:\n"; db.searchByLastName("Puchatek"); - + std::cout << "Searching for ID 87235681241:\n"; db.searchByPersonalID(87235681241); @@ -44,10 +44,10 @@ int main() Database temp; temp.printDatabase(); - + temp.loadFromFile(); temp.printDatabase(); - + std::cout << "validatePersonalID():\n"; vpid::test(); From ec8c035b7ce250fddcdb149ed0729aef5e537ae2 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Wed, 30 Jan 2019 20:08:39 +0100 Subject: [PATCH 40/65] modifySalary(), modifyAddress(), setAddress() added. --- Database.cpp | 43 ++++++++++++++++++++++++++++++++++--------- Database.hpp | 10 ++++++---- Person.cpp | 4 ++++ Person.hpp | 2 ++ 4 files changed, 46 insertions(+), 13 deletions(-) diff --git a/Database.cpp b/Database.cpp index 215b246..0cefe64 100644 --- a/Database.cpp +++ b/Database.cpp @@ -1,6 +1,6 @@ #include "Database.hpp" -void Database::searchByLastName(const std::string& lastName) +personIter Database::searchByLastName(const std::string& lastName) { std::vector::iterator it = std::find_if(begin(data), end(data), [lastName] (Person* person) { @@ -10,10 +10,11 @@ void Database::searchByLastName(const std::string& lastName) if (it != end(data)) std::cout << *it << std::endl; else - std::cout << "Person " << lastName << " not found." << std::endl; + std::cout << "Person " << lastName << " not found\n"; + return it; } -void Database::searchByPersonalID(const unsigned long long& personalID) +personIter Database::searchByPersonalID(const unsigned long long& personalID) { std::vector::iterator it = std::find_if(begin(data), end(data), [personalID] (Person* person) { @@ -23,7 +24,8 @@ void Database::searchByPersonalID(const unsigned long long& personalID) if (it != end(data)) std::cout << *it << std::endl; else - std::cout << "Personal ID " << personalID << " not found." << std::endl; + std::cout << "Personal ID " << personalID << " not found.\n"; + return it; } void Database::printDatabase() const @@ -155,9 +157,7 @@ bool Database::saveToFile(const std::string filename/*="database.txt"*/) bool Database::removeByPersonalID(const unsigned long long& personalID) { - auto iter = std::find_if(begin(data), end(data), [personalID] (Person* person) - { return person->getPersonalID() == personalID; - }); + auto iter = searchByPersonalID(personalID); if (iter != end(data)) { @@ -170,6 +170,31 @@ bool Database::removeByPersonalID(const unsigned long long& personalID) //bool Database::removeByStudentID(const unsigned long studentID) -//void Database::modifySalary(const unsigned long personalID); -//void Database::modifyAdress(const unsigned long personalID); +bool Database::modifySalary(const unsigned long long& personalID, const double& newSalary) +{ + auto personIter = searchByPersonalID(personalID); + + if (personIter != data.end()) + if(Employee* isEmployee = dynamic_cast(*personIter)) + { + isEmployee->setSalary(newSalary); + return true; + } + + return false; +} + + +bool Database::modifyAdress(const unsigned long long& personalID, const std::string& newAddress) +{ + auto personIter = searchByPersonalID(personalID); + + if (personIter != data.end()) + { + (*personIter)->setAddress(newAddress); + return true; + } + return false; +} + diff --git a/Database.hpp b/Database.hpp index 6be6827..7219801 100644 --- a/Database.hpp +++ b/Database.hpp @@ -10,13 +10,15 @@ #include "Person.hpp" #include "PersonalID.hpp" +using personIter = std::vector::iterator; + class Database { private: std::vector data; public: - void searchByLastName(const std::string& lastName); - void searchByPersonalID(const unsigned long long& personalID); + personIter searchByLastName(const std::string& lastName); + personIter searchByPersonalID(const unsigned long long& personalID); void printDatabase() const; void sortBySalary(); void sortByLastName(); @@ -40,6 +42,6 @@ class Database bool loadFromFile(const std::string filename = "../database.txt"); bool saveToFile(const std::string filename = "../database.txt"); bool removeByPersonalID(const unsigned long long& personalID); - void modifySalary(const unsigned long long& personalID); - void modifyAdress(const unsigned long long& personalID); + bool modifySalary(const unsigned long long& personalID, const double& newSalary); + bool modifyAdress(const unsigned long long& personalID, const std::string& address); }; diff --git a/Person.cpp b/Person.cpp index bb06ef7..d5033f1 100644 --- a/Person.cpp +++ b/Person.cpp @@ -34,6 +34,10 @@ std::string Person::getInfo() const return ss.str(); } +void Person::setAddress(const std::string& newAddress) +{ + address_ = newAddress; +} Employee::Employee(const std::string& firstName, const std::string& lastName, diff --git a/Person.hpp b/Person.hpp index 70eeef7..435827f 100644 --- a/Person.hpp +++ b/Person.hpp @@ -26,6 +26,8 @@ class Person std::string getLastName() const; unsigned long long getPersonalID() const; + void setAddress(const std::string& newAddress); + friend std::ostream& operator<<(std::ostream& os, const Person* person); virtual std::string getInfo() const; virtual ~Person() {}; From 52832bb80736995b076763dee64a9cba103f7261 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Wed, 30 Jan 2019 20:58:29 +0100 Subject: [PATCH 41/65] new calls added to main --- Database.cpp | 14 ++++++++------ Database.hpp | 2 +- PersonalID.cpp | 2 +- main.cpp | 22 ++++++++++++++++++++-- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Database.cpp b/Database.cpp index 0cefe64..08c7517 100644 --- a/Database.cpp +++ b/Database.cpp @@ -8,9 +8,9 @@ personIter Database::searchByLastName(const std::string& lastName) }); if (it != end(data)) - std::cout << *it << std::endl; + std::cout << *it << "\n"; else - std::cout << "Person " << lastName << " not found\n"; + std::cout << "Person " << lastName << " not found\n\n"; return it; } @@ -22,9 +22,9 @@ personIter Database::searchByPersonalID(const unsigned long long& personalID) }); if (it != end(data)) - std::cout << *it << std::endl; + std::cout << *it << "\n"; else - std::cout << "Personal ID " << personalID << " not found.\n"; + std::cout << "Personal ID " << personalID << " not found.\n\n"; return it; } @@ -175,17 +175,19 @@ bool Database::modifySalary(const unsigned long long& personalID, const double& auto personIter = searchByPersonalID(personalID); if (personIter != data.end()) + { if(Employee* isEmployee = dynamic_cast(*personIter)) { isEmployee->setSalary(newSalary); return true; } - + std::cout << "Personal ID " << personalID << " is not an Employee.\n\n"; + } return false; } -bool Database::modifyAdress(const unsigned long long& personalID, const std::string& newAddress) +bool Database::modifyAddress(const unsigned long long& personalID, const std::string& newAddress) { auto personIter = searchByPersonalID(personalID); diff --git a/Database.hpp b/Database.hpp index 7219801..d6abdbd 100644 --- a/Database.hpp +++ b/Database.hpp @@ -43,5 +43,5 @@ class Database bool saveToFile(const std::string filename = "../database.txt"); bool removeByPersonalID(const unsigned long long& personalID); bool modifySalary(const unsigned long long& personalID, const double& newSalary); - bool modifyAdress(const unsigned long long& personalID, const std::string& address); + bool modifyAddress(const unsigned long long& personalID, const std::string& address); }; diff --git a/PersonalID.cpp b/PersonalID.cpp index 3d252c0..801d3f6 100644 --- a/PersonalID.cpp +++ b/PersonalID.cpp @@ -33,7 +33,7 @@ namespace ValidatePersonalID std::cout << b << ": " << validatePersonalID(b) << "\n"; std::cout << c << ": " << validatePersonalID(c) << "\n"; std::cout << d << ": " << validatePersonalID(d) << "\n"; - std::cout << e << ": " << validatePersonalID(e) << "\n"; + std::cout << e << ": " << validatePersonalID(e) << "\n\n"; } } diff --git a/main.cpp b/main.cpp index cfaee8a..2cf072f 100644 --- a/main.cpp +++ b/main.cpp @@ -51,10 +51,28 @@ int main() std::cout << "validatePersonalID():\n"; vpid::test(); + std::cout << "Searching for ID 87235681241:\n"; + db.searchByPersonalID(87235681241); + + std::cout << "modifyAddress(87235681241, Kalisz):\n"; + db.modifyAddress(87235681241, "Kalisz"); + db.searchByPersonalID(87235681241); - std::cout << "validatePersonalID():\n"; - vpid::test(); + std::cout << "modifyAddress(invalid, Kalisz):\n"; + db.modifyAddress(87235681240, "Kalisz"); + + std::cout << "modifySalary(87235681241, 3333):\n"; + db.modifySalary(87235681241, 3333); + db.searchByPersonalID(87235681241); + + std::cout << "modifySalary(invalid, 3333):\n"; + db.modifySalary(87235681240, 3333); + + std::cout << "modifySalary(student, 3333):\n"; + db.modifySalary(64247643211, 3333); + + return 0; } From 2d66ea38069f3a68376ce2665a089e328ec602c0 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Wed, 30 Jan 2019 20:58:29 +0100 Subject: [PATCH 42/65] new calls added to main --- Database.cpp | 14 ++++++++------ Database.hpp | 2 +- PersonalID.cpp | 2 +- main.cpp | 22 ++++++++++++++++++++-- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Database.cpp b/Database.cpp index 0cefe64..08c7517 100644 --- a/Database.cpp +++ b/Database.cpp @@ -8,9 +8,9 @@ personIter Database::searchByLastName(const std::string& lastName) }); if (it != end(data)) - std::cout << *it << std::endl; + std::cout << *it << "\n"; else - std::cout << "Person " << lastName << " not found\n"; + std::cout << "Person " << lastName << " not found\n\n"; return it; } @@ -22,9 +22,9 @@ personIter Database::searchByPersonalID(const unsigned long long& personalID) }); if (it != end(data)) - std::cout << *it << std::endl; + std::cout << *it << "\n"; else - std::cout << "Personal ID " << personalID << " not found.\n"; + std::cout << "Personal ID " << personalID << " not found.\n\n"; return it; } @@ -175,17 +175,19 @@ bool Database::modifySalary(const unsigned long long& personalID, const double& auto personIter = searchByPersonalID(personalID); if (personIter != data.end()) + { if(Employee* isEmployee = dynamic_cast(*personIter)) { isEmployee->setSalary(newSalary); return true; } - + std::cout << "Personal ID " << personalID << " is not an Employee.\n\n"; + } return false; } -bool Database::modifyAdress(const unsigned long long& personalID, const std::string& newAddress) +bool Database::modifyAddress(const unsigned long long& personalID, const std::string& newAddress) { auto personIter = searchByPersonalID(personalID); diff --git a/Database.hpp b/Database.hpp index 7219801..d6abdbd 100644 --- a/Database.hpp +++ b/Database.hpp @@ -43,5 +43,5 @@ class Database bool saveToFile(const std::string filename = "../database.txt"); bool removeByPersonalID(const unsigned long long& personalID); bool modifySalary(const unsigned long long& personalID, const double& newSalary); - bool modifyAdress(const unsigned long long& personalID, const std::string& address); + bool modifyAddress(const unsigned long long& personalID, const std::string& address); }; diff --git a/PersonalID.cpp b/PersonalID.cpp index 3d252c0..801d3f6 100644 --- a/PersonalID.cpp +++ b/PersonalID.cpp @@ -33,7 +33,7 @@ namespace ValidatePersonalID std::cout << b << ": " << validatePersonalID(b) << "\n"; std::cout << c << ": " << validatePersonalID(c) << "\n"; std::cout << d << ": " << validatePersonalID(d) << "\n"; - std::cout << e << ": " << validatePersonalID(e) << "\n"; + std::cout << e << ": " << validatePersonalID(e) << "\n\n"; } } diff --git a/main.cpp b/main.cpp index cfaee8a..2cf072f 100644 --- a/main.cpp +++ b/main.cpp @@ -51,10 +51,28 @@ int main() std::cout << "validatePersonalID():\n"; vpid::test(); + std::cout << "Searching for ID 87235681241:\n"; + db.searchByPersonalID(87235681241); + + std::cout << "modifyAddress(87235681241, Kalisz):\n"; + db.modifyAddress(87235681241, "Kalisz"); + db.searchByPersonalID(87235681241); - std::cout << "validatePersonalID():\n"; - vpid::test(); + std::cout << "modifyAddress(invalid, Kalisz):\n"; + db.modifyAddress(87235681240, "Kalisz"); + + std::cout << "modifySalary(87235681241, 3333):\n"; + db.modifySalary(87235681241, 3333); + db.searchByPersonalID(87235681241); + + std::cout << "modifySalary(invalid, 3333):\n"; + db.modifySalary(87235681240, 3333); + + std::cout << "modifySalary(student, 3333):\n"; + db.modifySalary(64247643211, 3333); + + return 0; } From f488804cd37573446016cf5f3cf7bef39450f56d Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Wed, 30 Jan 2019 23:06:17 +0100 Subject: [PATCH 43/65] CMakeLists.txt improved --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a28bea8..42f5890 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,10 @@ +cmake_minimum_required(VERSION 3.1) +project(universityDatabase) + set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) -project(universityDatabase) -cmake_minimum_required(VERSION 2.8) aux_source_directory(. SRC_LIST) add_definitions(-Wall -Wextra -Werror) add_executable(${PROJECT_NAME} ${SRC_LIST}) From cd712cfd7cc3b93fe0d3c3bee67e76ab6c97f28d Mon Sep 17 00:00:00 2001 From: majkel Date: Wed, 30 Jan 2019 23:23:10 +0100 Subject: [PATCH 44/65] searchByStudentID, removeByStudentID --- Database.cpp | 28 +++++++++++++++++++++++++++- Database.hpp | 2 ++ main.cpp | 6 ++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Database.cpp b/Database.cpp index 08c7517..6a71401 100644 --- a/Database.cpp +++ b/Database.cpp @@ -28,6 +28,21 @@ personIter Database::searchByPersonalID(const unsigned long long& personalID) return it; } +personIter Database::searchByStudentID(const unsigned long& studentID) +{ + std::vector::iterator it = std::find_if(begin(data), end(data), [studentID] (Person* person) + { + Student* student = dynamic_cast(person); + return student -> getStudentIndex() == studentID; + }); + + if (it != end(data)) + std::cout << *it << "\n"; + else + std::cout << "Student ID " << studentID << " not found.\n\n"; + return it; +} + void Database::printDatabase() const { if(data.empty()) @@ -168,8 +183,19 @@ bool Database::removeByPersonalID(const unsigned long long& personalID) return false; } +bool Database::removeByStudentID(const unsigned long& studentID) +{ + auto iter = searchByStudentID(studentID); + + if (iter != end(data)) + { + data.erase(iter); + return true; + } + else + return false; +} -//bool Database::removeByStudentID(const unsigned long studentID) bool Database::modifySalary(const unsigned long long& personalID, const double& newSalary) { auto personIter = searchByPersonalID(personalID); diff --git a/Database.hpp b/Database.hpp index d6abdbd..c30b741 100644 --- a/Database.hpp +++ b/Database.hpp @@ -19,6 +19,7 @@ class Database public: personIter searchByLastName(const std::string& lastName); personIter searchByPersonalID(const unsigned long long& personalID); + personIter searchByStudentID(const unsigned long& studentID); void printDatabase() const; void sortBySalary(); void sortByLastName(); @@ -42,6 +43,7 @@ class Database bool loadFromFile(const std::string filename = "../database.txt"); bool saveToFile(const std::string filename = "../database.txt"); bool removeByPersonalID(const unsigned long long& personalID); + bool removeByStudentID(const unsigned long& studentID); bool modifySalary(const unsigned long long& personalID, const double& newSalary); bool modifyAddress(const unsigned long long& personalID, const std::string& address); }; diff --git a/main.cpp b/main.cpp index 2cf072f..17edbee 100644 --- a/main.cpp +++ b/main.cpp @@ -36,6 +36,12 @@ int main() std::cout << "Searching for ID 87235681241:\n"; db.searchByPersonalID(87235681241); + std::cout << "Searching for index 334568:\n"; + db.searchByStudentID(334568); + db.removeByStudentID(334568); + std::cout << "removeByStudentID(334568):\n"; + db.printDatabase(); + std::cout << "sortByStudentID():\n"; db.sortByStudentID(); db.printDatabase(); From 19dbc44fe46517ee9b69083df1acfb678c2c1b71 Mon Sep 17 00:00:00 2001 From: majkel Date: Wed, 30 Jan 2019 23:37:37 +0100 Subject: [PATCH 45/65] sortByPersonalID --- Database.cpp | 9 +++++++++ Database.hpp | 1 + main.cpp | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/Database.cpp b/Database.cpp index 6a71401..c1da4cc 100644 --- a/Database.cpp +++ b/Database.cpp @@ -73,6 +73,7 @@ void Database::sortBySalary() }); } + void Database::sortByLastName() { std::sort(begin(data), end(data), [](Person* left, Person* right) @@ -81,6 +82,14 @@ void Database::sortByLastName() }); } +void Database::sortByPersonalID() +{ + std::sort(begin(data), end(data), [](Person* left, Person* right) + { + return left->getPersonalID() < right->getPersonalID(); + }); +} + void Database::sortByStudentID() { std::sort(begin(data), end(data), [](Person* left, Person* right) diff --git a/Database.hpp b/Database.hpp index c30b741..02d5bdd 100644 --- a/Database.hpp +++ b/Database.hpp @@ -23,6 +23,7 @@ class Database void printDatabase() const; void sortBySalary(); void sortByLastName(); + void sortByPersonalID(); void sortByStudentID(); void addPerson(Person* person); diff --git a/main.cpp b/main.cpp index 17edbee..b04657b 100644 --- a/main.cpp +++ b/main.cpp @@ -30,6 +30,10 @@ int main() db.sortByLastName(); db.printDatabase(); + std::cout << "sortByPersonalID():\n"; + db.sortByPersonalID(); + db.printDatabase(); + std::cout << "Searching for Puchatek:\n"; db.searchByLastName("Puchatek"); From 5ff743a6de1a486364cc66d6e5e1b04e9f4e7bc2 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Wed, 30 Jan 2019 23:53:17 +0100 Subject: [PATCH 46/65] modifySalary() argument changed --- main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index b04657b..fbf898a 100644 --- a/main.cpp +++ b/main.cpp @@ -79,7 +79,7 @@ int main() db.modifySalary(87235681240, 3333); std::cout << "modifySalary(student, 3333):\n"; - db.modifySalary(64247643211, 3333); + db.modifySalary(91653426865, 3333); From f04a4b02f641639da40ed988f3fec5717a2cafc2 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Thu, 31 Jan 2019 00:23:18 +0100 Subject: [PATCH 47/65] removeByPersonalID() call added to main --- main.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/main.cpp b/main.cpp index fbf898a..e1c4c55 100644 --- a/main.cpp +++ b/main.cpp @@ -13,12 +13,13 @@ int main() { Database db; - db.addStudent("Kubus", "Puchatek", 91653426865, 1, "Las", 111111); - db.addStudent("Tomasz", "Kowalski", 87654237541, 1, "Wroclaw", 122222); - db.addStudent("Kasia", "Nowak", 64247643211, 0, "Opole", 334568); - db.addEmployee("Jan", "Szymczak", 87235681241, 1, "Wroclaw", 3674); - db.addEmployee("Aldona", "Tomczyk", 65321543987, 0, "Lublin", 2211); - db.addStudent("Stanislaw", "Olech", 90764357981, 1, "Lublin", 265421); + db.addStudent("Kubus", "Puchatek", 91653426865, 1, "Las", 111111); + db.addStudent("Tomasz", "Kowalski", 87654237541, 1, "Wroclaw", 122222); + db.addStudent("Kasia", "Nowak", 64247643211, 0, "Opole", 334568); + db.addEmployee("Jan", "Szymczak", 87235681241, 1, "Wroclaw", 3674); + db.addStudent("Franek", "Dabrowski", 11210754919, 1, "Lodz", 123422); + db.addEmployee("Aldona", "Tomczyk", 65321543987, 0, "Lublin", 2211); + db.addStudent("Stanislaw", "Olech", 90764357981, 1, "Lublin", 265421); db.printDatabase(); @@ -42,10 +43,18 @@ int main() std::cout << "Searching for index 334568:\n"; db.searchByStudentID(334568); - db.removeByStudentID(334568); std::cout << "removeByStudentID(334568):\n"; + db.removeByStudentID(334568); + db.printDatabase(); + + std::cout << "Searching for PersonalID 11210754919:\n"; + db.searchByPersonalID(11210754919); + std::cout << "removeByPersonalID(11210754919):\n"; + db.removeByPersonalID(11210754919); db.printDatabase(); + + std::cout << "sortByStudentID():\n"; db.sortByStudentID(); db.printDatabase(); From 43c86e0da1ffe8fa6c49f553340310575ac98fdc Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Thu, 31 Jan 2019 01:25:54 +0100 Subject: [PATCH 48/65] Change of code architecture. Classes separated to new files. --- Database.cpp | 4 +++ Database.hpp | 7 ------ Employee.cpp | 39 +++++++++++++++++++++++++++++ Employee.hpp | 21 ++++++++++++++++ Person.cpp | 67 ++------------------------------------------------ Person.hpp | 41 +----------------------------- PersonalID.cpp | 2 ++ PersonalID.hpp | 2 -- Student.cpp | 34 +++++++++++++++++++++++++ Student.hpp | 19 ++++++++++++++ main.cpp | 3 +-- 11 files changed, 123 insertions(+), 116 deletions(-) create mode 100644 Employee.cpp create mode 100644 Employee.hpp create mode 100644 Student.cpp create mode 100644 Student.hpp diff --git a/Database.cpp b/Database.cpp index c1da4cc..1c3c733 100644 --- a/Database.cpp +++ b/Database.cpp @@ -1,4 +1,8 @@ #include "Database.hpp" +#include "Employee.hpp" +#include "Student.hpp" +#include +#include personIter Database::searchByLastName(const std::string& lastName) { diff --git a/Database.hpp b/Database.hpp index 02d5bdd..e633d7b 100644 --- a/Database.hpp +++ b/Database.hpp @@ -1,14 +1,7 @@ #pragma once - -#include #include #include -#include -#include -#include - #include "Person.hpp" -#include "PersonalID.hpp" using personIter = std::vector::iterator; diff --git a/Employee.cpp b/Employee.cpp new file mode 100644 index 0000000..e20215b --- /dev/null +++ b/Employee.cpp @@ -0,0 +1,39 @@ +#include "Employee.hpp" +#include +#include + +Employee::Employee(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const double& salary) +: Person(firstName, lastName, personalID, gender, address), + salary_(salary) +{} + +double Employee::getSalary() const +{ + return salary_; +} + +void Employee::setSalary(const double& salary) +{ + salary_ = salary; +} + +std::string Employee::getInfo() const +{ + auto ss = std::stringstream{}; + + ss << std::left << std::setw(13) << lastName_ << " " + << std::left << std::setw(13) << firstName_ << " " + << std::left << std::setw(13) << personalID_ << " " + << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(13) << address_ << " " + << std::left << std::setw(13) << salary_ << " " + << std::left << std::setw(13) << "----" << "\n"; + + return ss.str(); + +} diff --git a/Employee.hpp b/Employee.hpp new file mode 100644 index 0000000..0c62bb8 --- /dev/null +++ b/Employee.hpp @@ -0,0 +1,21 @@ +#pragma once +#include "Person.hpp" + +class Employee : public Person +{ + private: + double salary_; + public: + Employee(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const double& salary); + + double getSalary() const; + void setSalary(const double& salary); + std::string getInfo() const; + +}; + diff --git a/Person.cpp b/Person.cpp index d5033f1..5f4d481 100644 --- a/Person.cpp +++ b/Person.cpp @@ -1,4 +1,6 @@ #include "Person.hpp" +#include +#include Person::Person(const std::string& firstName, const std::string& lastName, @@ -39,69 +41,4 @@ void Person::setAddress(const std::string& newAddress) address_ = newAddress; } -Employee::Employee(const std::string& firstName, - const std::string& lastName, - const unsigned long long& personalID, - const bool& gender, - const std::string& address, - const double& salary) -: Person(firstName, lastName, personalID, gender, address), - salary_(salary) -{} - -double Employee::getSalary() const -{ - return salary_; -} - -void Employee::setSalary(const double& salary) -{ - salary_ = salary; -} - -std::string Employee::getInfo() const -{ - auto ss = std::stringstream{}; - - ss << std::left << std::setw(13) << lastName_ << " " - << std::left << std::setw(13) << firstName_ << " " - << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(13) << gender_ << " " - << std::left << std::setw(13) << address_ << " " - << std::left << std::setw(13) << salary_ << " " - << std::left << std::setw(13) << "----" << "\n"; - - return ss.str(); - -} - -Student::Student(const std::string& firstName, - const std::string& lastName, - const unsigned long long& personalID, - const bool& gender, - const std::string& address, - const unsigned long& studentIndex) -: Person(firstName, lastName, personalID, gender, address), - studentIndex_(studentIndex) -{} - -unsigned long Student::getStudentIndex() const -{ - return studentIndex_; -} - -std::string Student::getInfo() const -{ - auto ss = std::stringstream{}; - - ss << std::left << std::setw(13) << lastName_ << " " - << std::left << std::setw(13) << firstName_ << " " - << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(13) << gender_ << " " - << std::left << std::setw(13) << address_ << " " - << std::left << std::setw(13) << "----" << " " - << std::left << std::setw(13) << studentIndex_ << "\n"; - - return ss.str(); -} diff --git a/Person.hpp b/Person.hpp index 435827f..a6e0776 100644 --- a/Person.hpp +++ b/Person.hpp @@ -1,14 +1,9 @@ #pragma once -#include #include -#include -#include -#include +#include class Person { - //enum gender{male, female}; - protected: std::string firstName_; std::string lastName_; @@ -33,37 +28,3 @@ class Person virtual ~Person() {}; }; -class Employee : public Person -{ - private: - double salary_; - public: - Employee(const std::string& firstName, - const std::string& lastName, - const unsigned long long& personalID, - const bool& gender, - const std::string& address, - const double& salary); - - double getSalary() const; - void setSalary(const double& salary); - std::string getInfo() const; - -}; - -class Student : public Person -{ - private: - unsigned long studentIndex_; - - public: - Student(const std::string& firstName, - const std::string& lastName, - const unsigned long long& personalID, - const bool& gender, - const std::string& address, - const unsigned long& studentIndex); - - unsigned long getStudentIndex() const; - std::string getInfo() const; -}; diff --git a/PersonalID.cpp b/PersonalID.cpp index 801d3f6..27af240 100644 --- a/PersonalID.cpp +++ b/PersonalID.cpp @@ -1,4 +1,6 @@ #include "PersonalID.hpp" +#include +#include namespace { diff --git a/PersonalID.hpp b/PersonalID.hpp index 7fac0fc..64e0cc5 100644 --- a/PersonalID.hpp +++ b/PersonalID.hpp @@ -1,6 +1,4 @@ #pragma once -#include -#include namespace ValidatePersonalID { diff --git a/Student.cpp b/Student.cpp new file mode 100644 index 0000000..b571406 --- /dev/null +++ b/Student.cpp @@ -0,0 +1,34 @@ +#include "Student.hpp" +#include +#include + +Student::Student(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const unsigned long& studentIndex) +: Person(firstName, lastName, personalID, gender, address), + studentIndex_(studentIndex) +{} + +unsigned long Student::getStudentIndex() const +{ + return studentIndex_; +} + +std::string Student::getInfo() const +{ + auto ss = std::stringstream{}; + + ss << std::left << std::setw(13) << lastName_ << " " + << std::left << std::setw(13) << firstName_ << " " + << std::left << std::setw(13) << personalID_ << " " + << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(13) << address_ << " " + << std::left << std::setw(13) << "----" << " " + << std::left << std::setw(13) << studentIndex_ << "\n"; + + return ss.str(); +} + diff --git a/Student.hpp b/Student.hpp new file mode 100644 index 0000000..3f3b939 --- /dev/null +++ b/Student.hpp @@ -0,0 +1,19 @@ +#pragma once +#include "Person.hpp" + +class Student : public Person +{ + private: + unsigned long studentIndex_; + + public: + Student(const std::string& firstName, + const std::string& lastName, + const unsigned long long& personalID, + const bool& gender, + const std::string& address, + const unsigned long& studentIndex); + + unsigned long getStudentIndex() const; + std::string getInfo() const; +}; diff --git a/main.cpp b/main.cpp index e1c4c55..c3ae6eb 100644 --- a/main.cpp +++ b/main.cpp @@ -1,6 +1,5 @@ -#include -#include "Person.hpp" #include "Database.hpp" +#include "PersonalID.hpp" std::ostream& operator<<(std::ostream& os, const Person* person) { From 7028e32e2d1aaf2bf90c6524bb8ad58b2c28fc16 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Thu, 31 Jan 2019 02:15:20 +0100 Subject: [PATCH 49/65] SmartPtrs added --- Database.cpp | 45 ++++++++++++++++++++++----------------------- Database.hpp | 7 ++++--- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/Database.cpp b/Database.cpp index 1c3c733..bfebf5a 100644 --- a/Database.cpp +++ b/Database.cpp @@ -6,7 +6,7 @@ personIter Database::searchByLastName(const std::string& lastName) { - std::vector::iterator it = std::find_if(begin(data), end(data), [lastName] (Person* person) + auto it = std::find_if(begin(data), end(data), [lastName] (std::shared_ptr person) { return person -> getLastName() == lastName; }); @@ -20,7 +20,7 @@ personIter Database::searchByLastName(const std::string& lastName) personIter Database::searchByPersonalID(const unsigned long long& personalID) { - std::vector::iterator it = std::find_if(begin(data), end(data), [personalID] (Person* person) + auto it = std::find_if(begin(data), end(data), [personalID] (std::shared_ptr person) { return person -> getPersonalID() == personalID; }); @@ -34,9 +34,9 @@ personIter Database::searchByPersonalID(const unsigned long long& personalID) personIter Database::searchByStudentID(const unsigned long& studentID) { - std::vector::iterator it = std::find_if(begin(data), end(data), [studentID] (Person* person) + auto it = std::find_if(begin(data), end(data), [studentID] (std::shared_ptr person) { - Student* student = dynamic_cast(person); + std::shared_ptr student = std::dynamic_pointer_cast(person); return student -> getStudentIndex() == studentID; }); @@ -59,19 +59,19 @@ void Database::printDatabase() const void Database::sortBySalary() { - std::sort(begin(data), end(data), [](Person* left, Person* right) + std::sort(begin(data), end(data), [](std::shared_ptr left, std::shared_ptr right) { //input: 10.1 NaN 2.5 NaN 3.6 //output: 2.5 3.6 10.1 Nan Nan //NaN 2.5 --- if student on the left: bad! - if(dynamic_cast(left)) return false; + if(std::dynamic_pointer_cast(left)) return false; //2.5 NaN -- if student on the right: good! move all to the right - if(dynamic_cast(right)) return true; + if(std::dynamic_pointer_cast(right)) return true; - Employee* e_left = dynamic_cast(left); - Employee* e_right = dynamic_cast(right); + std::shared_ptr e_left = std::dynamic_pointer_cast(left); + std::shared_ptr e_right = std::dynamic_pointer_cast(right); //if employee, compare it usually return e_left->getSalary() < e_right->getSalary(); }); @@ -80,7 +80,7 @@ void Database::sortBySalary() void Database::sortByLastName() { - std::sort(begin(data), end(data), [](Person* left, Person* right) + std::sort(begin(data), end(data), [](std::shared_ptr left, std::shared_ptr right) { return left->getLastName() < right->getLastName(); }); @@ -88,7 +88,7 @@ void Database::sortByLastName() void Database::sortByPersonalID() { - std::sort(begin(data), end(data), [](Person* left, Person* right) + std::sort(begin(data), end(data), [](std::shared_ptr left, std::shared_ptr right) { return left->getPersonalID() < right->getPersonalID(); }); @@ -96,18 +96,18 @@ void Database::sortByPersonalID() void Database::sortByStudentID() { - std::sort(begin(data), end(data), [](Person* left, Person* right) + std::sort(begin(data), end(data), [](std::shared_ptr left, std::shared_ptr right) { - if(dynamic_cast(left)) return false; - if(dynamic_cast(right)) return true; + if(std::dynamic_pointer_cast(left)) return false; + if(std::dynamic_pointer_cast(right)) return true; - Student* student1 = dynamic_cast(left); - Student* student2 = dynamic_cast(right); + std::shared_ptr student1 = std::dynamic_pointer_cast(left); + std::shared_ptr student2 = std::dynamic_pointer_cast(right); return student1->getStudentIndex() < student2->getStudentIndex(); }); } -void Database::addPerson(Person* person) +void Database::addPerson(std::shared_ptr person) { data.push_back(person); } @@ -119,8 +119,8 @@ bool Database::addStudent(const std::string& firstName, const std::string& address, const unsigned long& studentIndex) { - Person* student = new Student(firstName, lastName, personalID, - gender, address, studentIndex); + std::shared_ptr student = std::make_shared(firstName, + lastName, personalID, gender, address, studentIndex); addPerson(student); return true; } @@ -132,8 +132,8 @@ bool Database::addEmployee(const std::string& firstName, const std::string& address, const double& salary) { - Person* employee = new Employee(firstName, lastName, personalID, - gender, address, salary); + std::shared_ptr employee = std::make_shared(firstName, + lastName, personalID, gender, address, salary); addPerson(employee); return true; } @@ -215,7 +215,7 @@ bool Database::modifySalary(const unsigned long long& personalID, const double& if (personIter != data.end()) { - if(Employee* isEmployee = dynamic_cast(*personIter)) + if(std::shared_ptr isEmployee = std::dynamic_pointer_cast(*personIter)) { isEmployee->setSalary(newSalary); return true; @@ -238,4 +238,3 @@ bool Database::modifyAddress(const unsigned long long& personalID, const std::st return false; } - diff --git a/Database.hpp b/Database.hpp index e633d7b..f029046 100644 --- a/Database.hpp +++ b/Database.hpp @@ -1,14 +1,15 @@ #pragma once #include #include +#include #include "Person.hpp" -using personIter = std::vector::iterator; +using personIter = std::vector>::iterator; class Database { private: - std::vector data; + std::vector> data {}; public: personIter searchByLastName(const std::string& lastName); personIter searchByPersonalID(const unsigned long long& personalID); @@ -18,7 +19,7 @@ class Database void sortByLastName(); void sortByPersonalID(); void sortByStudentID(); - void addPerson(Person* person); + void addPerson(std::shared_ptr person); bool addStudent(const std::string& firstName, const std::string& lastName, From 3aeff1f184441f3f75b2dfcd198ec518e83301b1 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Thu, 31 Jan 2019 18:16:27 +0100 Subject: [PATCH 50/65] Aliases added, to make code more clean --- Database.cpp | 62 ++++++++++++++++++++++++++++------------------------ Database.hpp | 5 +++-- Person.hpp | 2 +- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/Database.cpp b/Database.cpp index bfebf5a..d12a69d 100644 --- a/Database.cpp +++ b/Database.cpp @@ -4,9 +4,13 @@ #include #include +using studentPtr = std::shared_ptr; +using employeePtr = std::shared_ptr; +using std::dynamic_pointer_cast; + personIter Database::searchByLastName(const std::string& lastName) { - auto it = std::find_if(begin(data), end(data), [lastName] (std::shared_ptr person) + auto it = std::find_if(begin(data), end(data), [lastName] (personPtr person) { return person -> getLastName() == lastName; }); @@ -20,7 +24,7 @@ personIter Database::searchByLastName(const std::string& lastName) personIter Database::searchByPersonalID(const unsigned long long& personalID) { - auto it = std::find_if(begin(data), end(data), [personalID] (std::shared_ptr person) + auto it = std::find_if(begin(data), end(data), [personalID] (personPtr person) { return person -> getPersonalID() == personalID; }); @@ -34,9 +38,9 @@ personIter Database::searchByPersonalID(const unsigned long long& personalID) personIter Database::searchByStudentID(const unsigned long& studentID) { - auto it = std::find_if(begin(data), end(data), [studentID] (std::shared_ptr person) + auto it = std::find_if(begin(data), end(data), [studentID] (personPtr person) { - std::shared_ptr student = std::dynamic_pointer_cast(person); + studentPtr student = dynamic_pointer_cast(person); return student -> getStudentIndex() == studentID; }); @@ -59,19 +63,19 @@ void Database::printDatabase() const void Database::sortBySalary() { - std::sort(begin(data), end(data), [](std::shared_ptr left, std::shared_ptr right) + std::sort(begin(data), end(data), [](personPtr left, personPtr right) { //input: 10.1 NaN 2.5 NaN 3.6 //output: 2.5 3.6 10.1 Nan Nan //NaN 2.5 --- if student on the left: bad! - if(std::dynamic_pointer_cast(left)) return false; + if(dynamic_pointer_cast(left)) return false; //2.5 NaN -- if student on the right: good! move all to the right - if(std::dynamic_pointer_cast(right)) return true; + if(dynamic_pointer_cast(right)) return true; - std::shared_ptr e_left = std::dynamic_pointer_cast(left); - std::shared_ptr e_right = std::dynamic_pointer_cast(right); + employeePtr e_left = dynamic_pointer_cast(left); + employeePtr e_right = dynamic_pointer_cast(right); //if employee, compare it usually return e_left->getSalary() < e_right->getSalary(); }); @@ -80,7 +84,7 @@ void Database::sortBySalary() void Database::sortByLastName() { - std::sort(begin(data), end(data), [](std::shared_ptr left, std::shared_ptr right) + std::sort(begin(data), end(data), [](personPtr left, personPtr right) { return left->getLastName() < right->getLastName(); }); @@ -88,26 +92,26 @@ void Database::sortByLastName() void Database::sortByPersonalID() { - std::sort(begin(data), end(data), [](std::shared_ptr left, std::shared_ptr right) - { - return left->getPersonalID() < right->getPersonalID(); - }); + std::sort(begin(data), end(data), [](personPtr left, personPtr right) + { + return left->getPersonalID() < right->getPersonalID(); + }); } void Database::sortByStudentID() { - std::sort(begin(data), end(data), [](std::shared_ptr left, std::shared_ptr right) + std::sort(begin(data), end(data), [](personPtr left, personPtr right) { - if(std::dynamic_pointer_cast(left)) return false; - if(std::dynamic_pointer_cast(right)) return true; + if(dynamic_pointer_cast(left)) return false; + if(dynamic_pointer_cast(right)) return true; - std::shared_ptr student1 = std::dynamic_pointer_cast(left); - std::shared_ptr student2 = std::dynamic_pointer_cast(right); + studentPtr student1 = dynamic_pointer_cast(left); + studentPtr student2 = dynamic_pointer_cast(right); return student1->getStudentIndex() < student2->getStudentIndex(); }); } -void Database::addPerson(std::shared_ptr person) +void Database::addPerson(personPtr person) { data.push_back(person); } @@ -119,7 +123,7 @@ bool Database::addStudent(const std::string& firstName, const std::string& address, const unsigned long& studentIndex) { - std::shared_ptr student = std::make_shared(firstName, + personPtr student = std::make_shared(firstName, lastName, personalID, gender, address, studentIndex); addPerson(student); return true; @@ -132,7 +136,7 @@ bool Database::addEmployee(const std::string& firstName, const std::string& address, const double& salary) { - std::shared_ptr employee = std::make_shared(firstName, + personPtr employee = std::make_shared(firstName, lastName, personalID, gender, address, salary); addPerson(employee); return true; @@ -201,12 +205,12 @@ bool Database::removeByStudentID(const unsigned long& studentID) auto iter = searchByStudentID(studentID); if (iter != end(data)) - { - data.erase(iter); - return true; - } - else - return false; + { + data.erase(iter); + return true; + } + else + return false; } bool Database::modifySalary(const unsigned long long& personalID, const double& newSalary) @@ -215,7 +219,7 @@ bool Database::modifySalary(const unsigned long long& personalID, const double& if (personIter != data.end()) { - if(std::shared_ptr isEmployee = std::dynamic_pointer_cast(*personIter)) + if(employeePtr isEmployee = dynamic_pointer_cast(*personIter)) { isEmployee->setSalary(newSalary); return true; diff --git a/Database.hpp b/Database.hpp index f029046..d2af0de 100644 --- a/Database.hpp +++ b/Database.hpp @@ -5,11 +5,12 @@ #include "Person.hpp" using personIter = std::vector>::iterator; +using personPtr = std::shared_ptr; class Database { private: - std::vector> data {}; + std::vector data {}; public: personIter searchByLastName(const std::string& lastName); personIter searchByPersonalID(const unsigned long long& personalID); @@ -19,7 +20,7 @@ class Database void sortByLastName(); void sortByPersonalID(); void sortByStudentID(); - void addPerson(std::shared_ptr person); + void addPerson(personPtr person); bool addStudent(const std::string& firstName, const std::string& lastName, diff --git a/Person.hpp b/Person.hpp index a6e0776..af31349 100644 --- a/Person.hpp +++ b/Person.hpp @@ -22,7 +22,7 @@ class Person std::string getLastName() const; unsigned long long getPersonalID() const; void setAddress(const std::string& newAddress); - + friend std::ostream& operator<<(std::ostream& os, const Person* person); virtual std::string getInfo() const; virtual ~Person() {}; From 42ec01d063604e1cb36605156c736ef61e50ca3b Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 2 Feb 2019 13:57:34 +0100 Subject: [PATCH 51/65] src and include dirs added, CmakeLists.txt improved --- CMakeLists.txt | 24 +++++++++++++++++++++--- Database.hpp => include/Database.hpp | 0 Employee.hpp => include/Employee.hpp | 0 Person.hpp => include/Person.hpp | 0 PersonalID.hpp => include/PersonalID.hpp | 0 Student.hpp => include/Student.hpp | 0 Database.cpp => src/Database.cpp | 0 Employee.cpp => src/Employee.cpp | 0 Person.cpp => src/Person.cpp | 0 PersonalID.cpp => src/PersonalID.cpp | 0 Student.cpp => src/Student.cpp | 0 main.cpp => src/main.cpp | 0 12 files changed, 21 insertions(+), 3 deletions(-) rename Database.hpp => include/Database.hpp (100%) rename Employee.hpp => include/Employee.hpp (100%) rename Person.hpp => include/Person.hpp (100%) rename PersonalID.hpp => include/PersonalID.hpp (100%) rename Student.hpp => include/Student.hpp (100%) rename Database.cpp => src/Database.cpp (100%) rename Employee.cpp => src/Employee.cpp (100%) rename Person.cpp => src/Person.cpp (100%) rename PersonalID.cpp => src/PersonalID.cpp (100%) rename Student.cpp => src/Student.cpp (100%) rename main.cpp => src/main.cpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 42f5890..72d95fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,25 @@ set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -aux_source_directory(. SRC_LIST) -add_definitions(-Wall -Wextra -Werror) -add_executable(${PROJECT_NAME} ${SRC_LIST}) +include_directories(include) + +set(SOURCES + src/Database.cpp + src/Employee.cpp + src/Person.cpp + src/PersonalID.cpp + src/Student.cpp + src/main.cpp +) + +set(HEADER_FILES + include/Database.hpp + include/Employee.hpp + include/Person.hpp + include/PersonalID.hpp + include/Student.hpp +) + +add_executable(${PROJECT_NAME} ${SOURCES} ${HEADER_FILES}) +add_compile_options(-Wall -Wextra -Werror) diff --git a/Database.hpp b/include/Database.hpp similarity index 100% rename from Database.hpp rename to include/Database.hpp diff --git a/Employee.hpp b/include/Employee.hpp similarity index 100% rename from Employee.hpp rename to include/Employee.hpp diff --git a/Person.hpp b/include/Person.hpp similarity index 100% rename from Person.hpp rename to include/Person.hpp diff --git a/PersonalID.hpp b/include/PersonalID.hpp similarity index 100% rename from PersonalID.hpp rename to include/PersonalID.hpp diff --git a/Student.hpp b/include/Student.hpp similarity index 100% rename from Student.hpp rename to include/Student.hpp diff --git a/Database.cpp b/src/Database.cpp similarity index 100% rename from Database.cpp rename to src/Database.cpp diff --git a/Employee.cpp b/src/Employee.cpp similarity index 100% rename from Employee.cpp rename to src/Employee.cpp diff --git a/Person.cpp b/src/Person.cpp similarity index 100% rename from Person.cpp rename to src/Person.cpp diff --git a/PersonalID.cpp b/src/PersonalID.cpp similarity index 100% rename from PersonalID.cpp rename to src/PersonalID.cpp diff --git a/Student.cpp b/src/Student.cpp similarity index 100% rename from Student.cpp rename to src/Student.cpp diff --git a/main.cpp b/src/main.cpp similarity index 100% rename from main.cpp rename to src/main.cpp From 07fb32ce46415b8baac0c665d817e7f6f63f910a Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 2 Feb 2019 14:02:31 +0100 Subject: [PATCH 52/65] travis will use CMake now --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cc2a397..362603d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,5 +13,8 @@ install: - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 90 script: - - g++ *.cpp -std=c++17 -o universityDatabase + - mkdird build + - cd build + - cmake .. + - make - ./universityDatabase From 7f437cd6ed9efb1a7d8ef9d9bb904c7ac376edb0 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 2 Feb 2019 14:14:24 +0100 Subject: [PATCH 53/65] travis fix - typo --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 362603d..9aa831a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,17 +3,17 @@ compiler: gcc dist: trusty before_install: - # C++17 + # C++14 - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test - sudo apt-get update -qq install: - # C++17 + # C++14 - sudo apt-get install -qq g++-6 - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 90 script: - - mkdird build + - mkdir build - cd build - cmake .. - make From 545a3e818e5a1cb9bd9b747e6e3f347b0b5a1fb2 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 2 Feb 2019 17:49:14 +0100 Subject: [PATCH 54/65] Gender changed from bool to enum Wpedantic added to CMakeLists.txt, order of lines fixed --- CMakeLists.txt | 3 +-- include/Database.hpp | 4 ++-- include/Employee.hpp | 2 +- include/Person.hpp | 8 ++++++-- include/Student.hpp | 2 +- src/Database.cpp | 15 +++++++++------ src/Employee.cpp | 4 ++-- src/Person.cpp | 4 ++-- src/Student.cpp | 4 ++-- src/main.cpp | 14 +++++++------- 10 files changed, 33 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 72d95fd..cdb8f91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,5 @@ set(HEADER_FILES include/Student.hpp ) +add_compile_options(-Wall -Wextra -Werror -Wpedantic) add_executable(${PROJECT_NAME} ${SOURCES} ${HEADER_FILES}) -add_compile_options(-Wall -Wextra -Werror) - diff --git a/include/Database.hpp b/include/Database.hpp index d2af0de..6d326e4 100644 --- a/include/Database.hpp +++ b/include/Database.hpp @@ -25,14 +25,14 @@ class Database bool addStudent(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const unsigned long& studentIndex); bool addEmployee(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const double& salary); diff --git a/include/Employee.hpp b/include/Employee.hpp index 0c62bb8..88f1df3 100644 --- a/include/Employee.hpp +++ b/include/Employee.hpp @@ -9,7 +9,7 @@ class Employee : public Person Employee(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const double& salary); diff --git a/include/Person.hpp b/include/Person.hpp index af31349..41b14c1 100644 --- a/include/Person.hpp +++ b/include/Person.hpp @@ -1,6 +1,9 @@ #pragma once #include #include +#include + +enum class Gender {female, male}; class Person { @@ -8,14 +11,15 @@ class Person std::string firstName_; std::string lastName_; unsigned long long personalID_; - bool gender_; + Gender gender_; std::string address_; + std::map convMap {{Gender::female, '0'}, {Gender::male, '1'}}; public: Person(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address); diff --git a/include/Student.hpp b/include/Student.hpp index 3f3b939..3206a24 100644 --- a/include/Student.hpp +++ b/include/Student.hpp @@ -10,7 +10,7 @@ class Student : public Person Student(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const unsigned long& studentIndex); diff --git a/src/Database.cpp b/src/Database.cpp index d12a69d..c193113 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -3,11 +3,13 @@ #include "Student.hpp" #include #include +#include using studentPtr = std::shared_ptr; using employeePtr = std::shared_ptr; using std::dynamic_pointer_cast; + personIter Database::searchByLastName(const std::string& lastName) { auto it = std::find_if(begin(data), end(data), [lastName] (personPtr person) @@ -119,7 +121,7 @@ void Database::addPerson(personPtr person) bool Database::addStudent(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const unsigned long& studentIndex) { @@ -132,7 +134,7 @@ bool Database::addStudent(const std::string& firstName, bool Database::addEmployee(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const double& salary) { @@ -153,15 +155,16 @@ bool Database::loadFromFile(const std::string filename/*="database.txt"*/) std::string firstName, lastName, address, salary, studentIndex; unsigned long long personalID; - bool gender; + char cGender; + std::map convMap {{'0', Gender::female}, {'1', Gender::male}}; - while(ifs >> lastName >> firstName >> personalID >> gender >> + while(ifs >> lastName >> firstName >> personalID >> cGender >> address >> salary >> studentIndex) { if(salary == "----") - addStudent(firstName, lastName, personalID, gender, address, std::stold(studentIndex)); + addStudent(firstName, lastName, personalID, convMap[cGender], address, std::stold(studentIndex)); else if(studentIndex == "----") - addEmployee(firstName, lastName, personalID, gender, address, std::stod(salary)); + addEmployee(firstName, lastName, personalID, convMap[cGender], address, std::stod(salary)); else{ std::cout << "\nInvalid line in input file!\n"; return false; diff --git a/src/Employee.cpp b/src/Employee.cpp index e20215b..453c894 100644 --- a/src/Employee.cpp +++ b/src/Employee.cpp @@ -5,7 +5,7 @@ Employee::Employee(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const double& salary) : Person(firstName, lastName, personalID, gender, address), @@ -29,7 +29,7 @@ std::string Employee::getInfo() const ss << std::left << std::setw(13) << lastName_ << " " << std::left << std::setw(13) << firstName_ << " " << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(8) << convMap.at(gender_) << " " << std::left << std::setw(13) << address_ << " " << std::left << std::setw(13) << salary_ << " " << std::left << std::setw(13) << "----" << "\n"; diff --git a/src/Person.cpp b/src/Person.cpp index 5f4d481..8281af6 100644 --- a/src/Person.cpp +++ b/src/Person.cpp @@ -5,7 +5,7 @@ Person::Person(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address) : firstName_(firstName), lastName_(lastName), @@ -30,7 +30,7 @@ std::string Person::getInfo() const ss << std::left << std::setw(13) << lastName_ << " " << std::left << std::setw(13) << firstName_ << " " << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(8) << convMap.at(gender_) << " " << std::left << std::setw(13) << address_ << "\n"; return ss.str(); diff --git a/src/Student.cpp b/src/Student.cpp index b571406..6ba0a72 100644 --- a/src/Student.cpp +++ b/src/Student.cpp @@ -5,7 +5,7 @@ Student::Student(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const unsigned long& studentIndex) : Person(firstName, lastName, personalID, gender, address), @@ -24,7 +24,7 @@ std::string Student::getInfo() const ss << std::left << std::setw(13) << lastName_ << " " << std::left << std::setw(13) << firstName_ << " " << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(8) << convMap.at(gender_) << " " << std::left << std::setw(13) << address_ << " " << std::left << std::setw(13) << "----" << " " << std::left << std::setw(13) << studentIndex_ << "\n"; diff --git a/src/main.cpp b/src/main.cpp index c3ae6eb..ba64215 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,13 +12,13 @@ int main() { Database db; - db.addStudent("Kubus", "Puchatek", 91653426865, 1, "Las", 111111); - db.addStudent("Tomasz", "Kowalski", 87654237541, 1, "Wroclaw", 122222); - db.addStudent("Kasia", "Nowak", 64247643211, 0, "Opole", 334568); - db.addEmployee("Jan", "Szymczak", 87235681241, 1, "Wroclaw", 3674); - db.addStudent("Franek", "Dabrowski", 11210754919, 1, "Lodz", 123422); - db.addEmployee("Aldona", "Tomczyk", 65321543987, 0, "Lublin", 2211); - db.addStudent("Stanislaw", "Olech", 90764357981, 1, "Lublin", 265421); + db.addStudent("Krzysztof", "Jarzyna", 91653426865, Gender::male, "Szczecin", 111111); + db.addStudent("Tomasz", "Kowalski", 87654237541, Gender::male, "Wroclaw", 122222); + db.addStudent("Kasia", "Nowak", 64247643211, Gender::female, "Opole", 334568); + db.addEmployee("Jan", "Szymczak", 87235681241, Gender::male, "Wroclaw", 3674); + db.addStudent("Franek", "Dabrowski", 11210754919, Gender::male, "Lodz", 123422); + db.addEmployee("Aldona", "Tomczyk", 65321543987, Gender::female, "Lublin", 2211); + db.addStudent("Stanislaw", "Olech", 90764357981, Gender::male, "Lublin", 265421); db.printDatabase(); From 53691d5ca462cbc89022e3866fee38ec6fe1d780 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 2 Feb 2019 19:10:02 +0100 Subject: [PATCH 55/65] database filename saved in variable --- include/Database.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/Database.hpp b/include/Database.hpp index 6d326e4..7e52a7f 100644 --- a/include/Database.hpp +++ b/include/Database.hpp @@ -11,6 +11,7 @@ class Database { private: std::vector data {}; + constexpr static auto dbFilename = "../database.txt"; //literal public: personIter searchByLastName(const std::string& lastName); personIter searchByPersonalID(const unsigned long long& personalID); @@ -36,8 +37,8 @@ class Database const std::string& address, const double& salary); - bool loadFromFile(const std::string filename = "../database.txt"); - bool saveToFile(const std::string filename = "../database.txt"); + bool loadFromFile(const std::string filename = dbFilename); + bool saveToFile(const std::string filename = dbFilename); bool removeByPersonalID(const unsigned long long& personalID); bool removeByStudentID(const unsigned long& studentID); bool modifySalary(const unsigned long long& personalID, const double& newSalary); From e0028ad789b1bad7c557813e9f3698b639dea9cf Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 2 Feb 2019 19:42:22 +0100 Subject: [PATCH 56/65] Code format improved - indentation checkDay() changed to checkFormatOfDate() conversion to unsigned long fixed --- src/Database.cpp | 50 ++++++++++++++++++++++++---------------------- src/PersonalID.cpp | 15 ++++++++------ src/main.cpp | 1 - 3 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/Database.cpp b/src/Database.cpp index c193113..ca8795a 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -14,7 +14,7 @@ personIter Database::searchByLastName(const std::string& lastName) { auto it = std::find_if(begin(data), end(data), [lastName] (personPtr person) { - return person -> getLastName() == lastName; + return person -> getLastName() == lastName; }); if (it != end(data)) @@ -28,7 +28,7 @@ personIter Database::searchByPersonalID(const unsigned long long& personalID) { auto it = std::find_if(begin(data), end(data), [personalID] (personPtr person) { - return person -> getPersonalID() == personalID; + return person -> getPersonalID() == personalID; }); if (it != end(data)) @@ -42,8 +42,8 @@ personIter Database::searchByStudentID(const unsigned long& studentID) { auto it = std::find_if(begin(data), end(data), [studentID] (personPtr person) { - studentPtr student = dynamic_pointer_cast(person); - return student -> getStudentIndex() == studentID; + studentPtr student = dynamic_pointer_cast(person); + return student -> getStudentIndex() == studentID; }); if (it != end(data)) @@ -67,19 +67,19 @@ void Database::sortBySalary() { std::sort(begin(data), end(data), [](personPtr left, personPtr right) { - //input: 10.1 NaN 2.5 NaN 3.6 - //output: 2.5 3.6 10.1 Nan Nan + //input: 10.1 NaN 2.5 NaN 3.6 + //output: 2.5 3.6 10.1 Nan Nan - //NaN 2.5 --- if student on the left: bad! - if(dynamic_pointer_cast(left)) return false; + //NaN 2.5 --- if student on the left: bad! + if(dynamic_pointer_cast(left)) return false; - //2.5 NaN -- if student on the right: good! move all to the right - if(dynamic_pointer_cast(right)) return true; + //2.5 NaN -- if student on the right: good! move all to the right + if(dynamic_pointer_cast(right)) return true; - employeePtr e_left = dynamic_pointer_cast(left); - employeePtr e_right = dynamic_pointer_cast(right); - //if employee, compare it usually - return e_left->getSalary() < e_right->getSalary(); + employeePtr e_left = dynamic_pointer_cast(left); + employeePtr e_right = dynamic_pointer_cast(right); + //if employee, compare it usually + return e_left->getSalary() < e_right->getSalary(); }); } @@ -88,7 +88,7 @@ void Database::sortByLastName() { std::sort(begin(data), end(data), [](personPtr left, personPtr right) { - return left->getLastName() < right->getLastName(); + return left->getLastName() < right->getLastName(); }); } @@ -96,7 +96,7 @@ void Database::sortByPersonalID() { std::sort(begin(data), end(data), [](personPtr left, personPtr right) { - return left->getPersonalID() < right->getPersonalID(); + return left->getPersonalID() < right->getPersonalID(); }); } @@ -104,12 +104,12 @@ void Database::sortByStudentID() { std::sort(begin(data), end(data), [](personPtr left, personPtr right) { - if(dynamic_pointer_cast(left)) return false; - if(dynamic_pointer_cast(right)) return true; + if(dynamic_pointer_cast(left)) return false; + if(dynamic_pointer_cast(right)) return true; - studentPtr student1 = dynamic_pointer_cast(left); - studentPtr student2 = dynamic_pointer_cast(right); - return student1->getStudentIndex() < student2->getStudentIndex(); + studentPtr student1 = dynamic_pointer_cast(left); + studentPtr student2 = dynamic_pointer_cast(right); + return student1->getStudentIndex() < student2->getStudentIndex(); }); } @@ -148,7 +148,8 @@ bool Database::addEmployee(const std::string& firstName, bool Database::loadFromFile(const std::string filename/*="database.txt"*/) { std::ifstream ifs {filename}; //input file stream - if(!ifs){ + if(!ifs) + { std::cout << "Could not open " << filename << " for reading!\n"; return false; } @@ -162,7 +163,7 @@ bool Database::loadFromFile(const std::string filename/*="database.txt"*/) address >> salary >> studentIndex) { if(salary == "----") - addStudent(firstName, lastName, personalID, convMap[cGender], address, std::stold(studentIndex)); + addStudent(firstName, lastName, personalID, convMap[cGender], address, std::stoul(studentIndex)); else if(studentIndex == "----") addEmployee(firstName, lastName, personalID, convMap[cGender], address, std::stod(salary)); else{ @@ -178,7 +179,8 @@ bool Database::saveToFile(const std::string filename/*="database.txt"*/) { std::ofstream ofs {filename}; //output file stream - if(!ofs){ + if(!ofs) + { std::cout << "Could not open " << filename << " for writing!\n"; return false; } diff --git a/src/PersonalID.cpp b/src/PersonalID.cpp index 27af240..8d90b94 100644 --- a/src/PersonalID.cpp +++ b/src/PersonalID.cpp @@ -1,12 +1,13 @@ #include "PersonalID.hpp" #include #include +#include namespace { bool initialIdCheck(std::vector& digits, const unsigned long long& personalID); void splitNumberIntoDigits(std::vector& digits, unsigned long long number); - bool checkDay(std::vector& digits); + bool checkFormatOfDate(std::vector& digits); bool checkControlSum(std::vector& digits); } @@ -17,7 +18,7 @@ namespace ValidatePersonalID std::vector digits {}; if( !initialIdCheck(digits, personalID)) return false; - if( !checkDay(digits)) return false; + if( !checkFormatOfDate(digits)) return false; if( !checkControlSum(digits)) return false; return true; @@ -63,8 +64,9 @@ namespace } } - bool checkDay(std::vector& digits) + bool checkFormatOfDate(std::vector& digits) { + //check if yy-mm-dd format was changed to dd-mm-yy int day = digits[4]*10 + digits[5]; if(day >= 1 and day <= 31) return true; @@ -74,10 +76,11 @@ namespace bool checkControlSum(std::vector& digits) { - unsigned long int sum = 0; const std::vector multipliers {1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1}; - for(unsigned int i=0; i Date: Sat, 2 Feb 2019 13:57:34 +0100 Subject: [PATCH 57/65] src and include dirs added, CmakeLists.txt improved --- CMakeLists.txt | 24 +++++++++++++++++++++--- Database.hpp => include/Database.hpp | 0 Employee.hpp => include/Employee.hpp | 0 Person.hpp => include/Person.hpp | 0 PersonalID.hpp => include/PersonalID.hpp | 0 Student.hpp => include/Student.hpp | 0 Database.cpp => src/Database.cpp | 0 Employee.cpp => src/Employee.cpp | 0 Person.cpp => src/Person.cpp | 0 PersonalID.cpp => src/PersonalID.cpp | 0 Student.cpp => src/Student.cpp | 0 main.cpp => src/main.cpp | 0 12 files changed, 21 insertions(+), 3 deletions(-) rename Database.hpp => include/Database.hpp (100%) rename Employee.hpp => include/Employee.hpp (100%) rename Person.hpp => include/Person.hpp (100%) rename PersonalID.hpp => include/PersonalID.hpp (100%) rename Student.hpp => include/Student.hpp (100%) rename Database.cpp => src/Database.cpp (100%) rename Employee.cpp => src/Employee.cpp (100%) rename Person.cpp => src/Person.cpp (100%) rename PersonalID.cpp => src/PersonalID.cpp (100%) rename Student.cpp => src/Student.cpp (100%) rename main.cpp => src/main.cpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 42f5890..72d95fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,25 @@ set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -aux_source_directory(. SRC_LIST) -add_definitions(-Wall -Wextra -Werror) -add_executable(${PROJECT_NAME} ${SRC_LIST}) +include_directories(include) + +set(SOURCES + src/Database.cpp + src/Employee.cpp + src/Person.cpp + src/PersonalID.cpp + src/Student.cpp + src/main.cpp +) + +set(HEADER_FILES + include/Database.hpp + include/Employee.hpp + include/Person.hpp + include/PersonalID.hpp + include/Student.hpp +) + +add_executable(${PROJECT_NAME} ${SOURCES} ${HEADER_FILES}) +add_compile_options(-Wall -Wextra -Werror) diff --git a/Database.hpp b/include/Database.hpp similarity index 100% rename from Database.hpp rename to include/Database.hpp diff --git a/Employee.hpp b/include/Employee.hpp similarity index 100% rename from Employee.hpp rename to include/Employee.hpp diff --git a/Person.hpp b/include/Person.hpp similarity index 100% rename from Person.hpp rename to include/Person.hpp diff --git a/PersonalID.hpp b/include/PersonalID.hpp similarity index 100% rename from PersonalID.hpp rename to include/PersonalID.hpp diff --git a/Student.hpp b/include/Student.hpp similarity index 100% rename from Student.hpp rename to include/Student.hpp diff --git a/Database.cpp b/src/Database.cpp similarity index 100% rename from Database.cpp rename to src/Database.cpp diff --git a/Employee.cpp b/src/Employee.cpp similarity index 100% rename from Employee.cpp rename to src/Employee.cpp diff --git a/Person.cpp b/src/Person.cpp similarity index 100% rename from Person.cpp rename to src/Person.cpp diff --git a/PersonalID.cpp b/src/PersonalID.cpp similarity index 100% rename from PersonalID.cpp rename to src/PersonalID.cpp diff --git a/Student.cpp b/src/Student.cpp similarity index 100% rename from Student.cpp rename to src/Student.cpp diff --git a/main.cpp b/src/main.cpp similarity index 100% rename from main.cpp rename to src/main.cpp From c9e3107dd075e8bfb5d2bf75f93d7b97b940f197 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 2 Feb 2019 14:02:31 +0100 Subject: [PATCH 58/65] travis will use CMake now --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cc2a397..362603d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,5 +13,8 @@ install: - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 90 script: - - g++ *.cpp -std=c++17 -o universityDatabase + - mkdird build + - cd build + - cmake .. + - make - ./universityDatabase From 6df7527a01d9853232dfb3dec629eae8fb090d0d Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 2 Feb 2019 14:14:24 +0100 Subject: [PATCH 59/65] travis fix - typo --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 362603d..9aa831a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,17 +3,17 @@ compiler: gcc dist: trusty before_install: - # C++17 + # C++14 - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test - sudo apt-get update -qq install: - # C++17 + # C++14 - sudo apt-get install -qq g++-6 - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 90 script: - - mkdird build + - mkdir build - cd build - cmake .. - make From 599610c86d96fbcbcccda739311e06cab90cc8c2 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 2 Feb 2019 17:49:14 +0100 Subject: [PATCH 60/65] Gender changed from bool to enum Wpedantic added to CMakeLists.txt, order of lines fixed --- CMakeLists.txt | 3 +-- include/Database.hpp | 4 ++-- include/Employee.hpp | 2 +- include/Person.hpp | 8 ++++++-- include/Student.hpp | 2 +- src/Database.cpp | 15 +++++++++------ src/Employee.cpp | 4 ++-- src/Person.cpp | 4 ++-- src/Student.cpp | 4 ++-- src/main.cpp | 14 +++++++------- 10 files changed, 33 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 72d95fd..cdb8f91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,5 @@ set(HEADER_FILES include/Student.hpp ) +add_compile_options(-Wall -Wextra -Werror -Wpedantic) add_executable(${PROJECT_NAME} ${SOURCES} ${HEADER_FILES}) -add_compile_options(-Wall -Wextra -Werror) - diff --git a/include/Database.hpp b/include/Database.hpp index d2af0de..6d326e4 100644 --- a/include/Database.hpp +++ b/include/Database.hpp @@ -25,14 +25,14 @@ class Database bool addStudent(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const unsigned long& studentIndex); bool addEmployee(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const double& salary); diff --git a/include/Employee.hpp b/include/Employee.hpp index 0c62bb8..88f1df3 100644 --- a/include/Employee.hpp +++ b/include/Employee.hpp @@ -9,7 +9,7 @@ class Employee : public Person Employee(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const double& salary); diff --git a/include/Person.hpp b/include/Person.hpp index af31349..41b14c1 100644 --- a/include/Person.hpp +++ b/include/Person.hpp @@ -1,6 +1,9 @@ #pragma once #include #include +#include + +enum class Gender {female, male}; class Person { @@ -8,14 +11,15 @@ class Person std::string firstName_; std::string lastName_; unsigned long long personalID_; - bool gender_; + Gender gender_; std::string address_; + std::map convMap {{Gender::female, '0'}, {Gender::male, '1'}}; public: Person(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address); diff --git a/include/Student.hpp b/include/Student.hpp index 3f3b939..3206a24 100644 --- a/include/Student.hpp +++ b/include/Student.hpp @@ -10,7 +10,7 @@ class Student : public Person Student(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const unsigned long& studentIndex); diff --git a/src/Database.cpp b/src/Database.cpp index d12a69d..c193113 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -3,11 +3,13 @@ #include "Student.hpp" #include #include +#include using studentPtr = std::shared_ptr; using employeePtr = std::shared_ptr; using std::dynamic_pointer_cast; + personIter Database::searchByLastName(const std::string& lastName) { auto it = std::find_if(begin(data), end(data), [lastName] (personPtr person) @@ -119,7 +121,7 @@ void Database::addPerson(personPtr person) bool Database::addStudent(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const unsigned long& studentIndex) { @@ -132,7 +134,7 @@ bool Database::addStudent(const std::string& firstName, bool Database::addEmployee(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const double& salary) { @@ -153,15 +155,16 @@ bool Database::loadFromFile(const std::string filename/*="database.txt"*/) std::string firstName, lastName, address, salary, studentIndex; unsigned long long personalID; - bool gender; + char cGender; + std::map convMap {{'0', Gender::female}, {'1', Gender::male}}; - while(ifs >> lastName >> firstName >> personalID >> gender >> + while(ifs >> lastName >> firstName >> personalID >> cGender >> address >> salary >> studentIndex) { if(salary == "----") - addStudent(firstName, lastName, personalID, gender, address, std::stold(studentIndex)); + addStudent(firstName, lastName, personalID, convMap[cGender], address, std::stold(studentIndex)); else if(studentIndex == "----") - addEmployee(firstName, lastName, personalID, gender, address, std::stod(salary)); + addEmployee(firstName, lastName, personalID, convMap[cGender], address, std::stod(salary)); else{ std::cout << "\nInvalid line in input file!\n"; return false; diff --git a/src/Employee.cpp b/src/Employee.cpp index e20215b..453c894 100644 --- a/src/Employee.cpp +++ b/src/Employee.cpp @@ -5,7 +5,7 @@ Employee::Employee(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const double& salary) : Person(firstName, lastName, personalID, gender, address), @@ -29,7 +29,7 @@ std::string Employee::getInfo() const ss << std::left << std::setw(13) << lastName_ << " " << std::left << std::setw(13) << firstName_ << " " << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(8) << convMap.at(gender_) << " " << std::left << std::setw(13) << address_ << " " << std::left << std::setw(13) << salary_ << " " << std::left << std::setw(13) << "----" << "\n"; diff --git a/src/Person.cpp b/src/Person.cpp index 5f4d481..8281af6 100644 --- a/src/Person.cpp +++ b/src/Person.cpp @@ -5,7 +5,7 @@ Person::Person(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address) : firstName_(firstName), lastName_(lastName), @@ -30,7 +30,7 @@ std::string Person::getInfo() const ss << std::left << std::setw(13) << lastName_ << " " << std::left << std::setw(13) << firstName_ << " " << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(8) << convMap.at(gender_) << " " << std::left << std::setw(13) << address_ << "\n"; return ss.str(); diff --git a/src/Student.cpp b/src/Student.cpp index b571406..6ba0a72 100644 --- a/src/Student.cpp +++ b/src/Student.cpp @@ -5,7 +5,7 @@ Student::Student(const std::string& firstName, const std::string& lastName, const unsigned long long& personalID, - const bool& gender, + const Gender& gender, const std::string& address, const unsigned long& studentIndex) : Person(firstName, lastName, personalID, gender, address), @@ -24,7 +24,7 @@ std::string Student::getInfo() const ss << std::left << std::setw(13) << lastName_ << " " << std::left << std::setw(13) << firstName_ << " " << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(13) << gender_ << " " + << std::left << std::setw(8) << convMap.at(gender_) << " " << std::left << std::setw(13) << address_ << " " << std::left << std::setw(13) << "----" << " " << std::left << std::setw(13) << studentIndex_ << "\n"; diff --git a/src/main.cpp b/src/main.cpp index c3ae6eb..ba64215 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,13 +12,13 @@ int main() { Database db; - db.addStudent("Kubus", "Puchatek", 91653426865, 1, "Las", 111111); - db.addStudent("Tomasz", "Kowalski", 87654237541, 1, "Wroclaw", 122222); - db.addStudent("Kasia", "Nowak", 64247643211, 0, "Opole", 334568); - db.addEmployee("Jan", "Szymczak", 87235681241, 1, "Wroclaw", 3674); - db.addStudent("Franek", "Dabrowski", 11210754919, 1, "Lodz", 123422); - db.addEmployee("Aldona", "Tomczyk", 65321543987, 0, "Lublin", 2211); - db.addStudent("Stanislaw", "Olech", 90764357981, 1, "Lublin", 265421); + db.addStudent("Krzysztof", "Jarzyna", 91653426865, Gender::male, "Szczecin", 111111); + db.addStudent("Tomasz", "Kowalski", 87654237541, Gender::male, "Wroclaw", 122222); + db.addStudent("Kasia", "Nowak", 64247643211, Gender::female, "Opole", 334568); + db.addEmployee("Jan", "Szymczak", 87235681241, Gender::male, "Wroclaw", 3674); + db.addStudent("Franek", "Dabrowski", 11210754919, Gender::male, "Lodz", 123422); + db.addEmployee("Aldona", "Tomczyk", 65321543987, Gender::female, "Lublin", 2211); + db.addStudent("Stanislaw", "Olech", 90764357981, Gender::male, "Lublin", 265421); db.printDatabase(); From f3fa3d592d798ef121dbfb07c312f46c72036e9f Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 2 Feb 2019 19:10:02 +0100 Subject: [PATCH 61/65] database filename saved in variable --- include/Database.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/Database.hpp b/include/Database.hpp index 6d326e4..7e52a7f 100644 --- a/include/Database.hpp +++ b/include/Database.hpp @@ -11,6 +11,7 @@ class Database { private: std::vector data {}; + constexpr static auto dbFilename = "../database.txt"; //literal public: personIter searchByLastName(const std::string& lastName); personIter searchByPersonalID(const unsigned long long& personalID); @@ -36,8 +37,8 @@ class Database const std::string& address, const double& salary); - bool loadFromFile(const std::string filename = "../database.txt"); - bool saveToFile(const std::string filename = "../database.txt"); + bool loadFromFile(const std::string filename = dbFilename); + bool saveToFile(const std::string filename = dbFilename); bool removeByPersonalID(const unsigned long long& personalID); bool removeByStudentID(const unsigned long& studentID); bool modifySalary(const unsigned long long& personalID, const double& newSalary); From 802efec6807115e4b0d3bd17c11a5439fb4f4d0d Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sat, 2 Feb 2019 19:42:22 +0100 Subject: [PATCH 62/65] Code format improved - indentation checkDay() changed to checkFormatOfDate() conversion to unsigned long fixed --- src/Database.cpp | 50 ++++++++++++++++++++++++---------------------- src/PersonalID.cpp | 15 ++++++++------ src/main.cpp | 1 - 3 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/Database.cpp b/src/Database.cpp index c193113..ca8795a 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -14,7 +14,7 @@ personIter Database::searchByLastName(const std::string& lastName) { auto it = std::find_if(begin(data), end(data), [lastName] (personPtr person) { - return person -> getLastName() == lastName; + return person -> getLastName() == lastName; }); if (it != end(data)) @@ -28,7 +28,7 @@ personIter Database::searchByPersonalID(const unsigned long long& personalID) { auto it = std::find_if(begin(data), end(data), [personalID] (personPtr person) { - return person -> getPersonalID() == personalID; + return person -> getPersonalID() == personalID; }); if (it != end(data)) @@ -42,8 +42,8 @@ personIter Database::searchByStudentID(const unsigned long& studentID) { auto it = std::find_if(begin(data), end(data), [studentID] (personPtr person) { - studentPtr student = dynamic_pointer_cast(person); - return student -> getStudentIndex() == studentID; + studentPtr student = dynamic_pointer_cast(person); + return student -> getStudentIndex() == studentID; }); if (it != end(data)) @@ -67,19 +67,19 @@ void Database::sortBySalary() { std::sort(begin(data), end(data), [](personPtr left, personPtr right) { - //input: 10.1 NaN 2.5 NaN 3.6 - //output: 2.5 3.6 10.1 Nan Nan + //input: 10.1 NaN 2.5 NaN 3.6 + //output: 2.5 3.6 10.1 Nan Nan - //NaN 2.5 --- if student on the left: bad! - if(dynamic_pointer_cast(left)) return false; + //NaN 2.5 --- if student on the left: bad! + if(dynamic_pointer_cast(left)) return false; - //2.5 NaN -- if student on the right: good! move all to the right - if(dynamic_pointer_cast(right)) return true; + //2.5 NaN -- if student on the right: good! move all to the right + if(dynamic_pointer_cast(right)) return true; - employeePtr e_left = dynamic_pointer_cast(left); - employeePtr e_right = dynamic_pointer_cast(right); - //if employee, compare it usually - return e_left->getSalary() < e_right->getSalary(); + employeePtr e_left = dynamic_pointer_cast(left); + employeePtr e_right = dynamic_pointer_cast(right); + //if employee, compare it usually + return e_left->getSalary() < e_right->getSalary(); }); } @@ -88,7 +88,7 @@ void Database::sortByLastName() { std::sort(begin(data), end(data), [](personPtr left, personPtr right) { - return left->getLastName() < right->getLastName(); + return left->getLastName() < right->getLastName(); }); } @@ -96,7 +96,7 @@ void Database::sortByPersonalID() { std::sort(begin(data), end(data), [](personPtr left, personPtr right) { - return left->getPersonalID() < right->getPersonalID(); + return left->getPersonalID() < right->getPersonalID(); }); } @@ -104,12 +104,12 @@ void Database::sortByStudentID() { std::sort(begin(data), end(data), [](personPtr left, personPtr right) { - if(dynamic_pointer_cast(left)) return false; - if(dynamic_pointer_cast(right)) return true; + if(dynamic_pointer_cast(left)) return false; + if(dynamic_pointer_cast(right)) return true; - studentPtr student1 = dynamic_pointer_cast(left); - studentPtr student2 = dynamic_pointer_cast(right); - return student1->getStudentIndex() < student2->getStudentIndex(); + studentPtr student1 = dynamic_pointer_cast(left); + studentPtr student2 = dynamic_pointer_cast(right); + return student1->getStudentIndex() < student2->getStudentIndex(); }); } @@ -148,7 +148,8 @@ bool Database::addEmployee(const std::string& firstName, bool Database::loadFromFile(const std::string filename/*="database.txt"*/) { std::ifstream ifs {filename}; //input file stream - if(!ifs){ + if(!ifs) + { std::cout << "Could not open " << filename << " for reading!\n"; return false; } @@ -162,7 +163,7 @@ bool Database::loadFromFile(const std::string filename/*="database.txt"*/) address >> salary >> studentIndex) { if(salary == "----") - addStudent(firstName, lastName, personalID, convMap[cGender], address, std::stold(studentIndex)); + addStudent(firstName, lastName, personalID, convMap[cGender], address, std::stoul(studentIndex)); else if(studentIndex == "----") addEmployee(firstName, lastName, personalID, convMap[cGender], address, std::stod(salary)); else{ @@ -178,7 +179,8 @@ bool Database::saveToFile(const std::string filename/*="database.txt"*/) { std::ofstream ofs {filename}; //output file stream - if(!ofs){ + if(!ofs) + { std::cout << "Could not open " << filename << " for writing!\n"; return false; } diff --git a/src/PersonalID.cpp b/src/PersonalID.cpp index 27af240..8d90b94 100644 --- a/src/PersonalID.cpp +++ b/src/PersonalID.cpp @@ -1,12 +1,13 @@ #include "PersonalID.hpp" #include #include +#include namespace { bool initialIdCheck(std::vector& digits, const unsigned long long& personalID); void splitNumberIntoDigits(std::vector& digits, unsigned long long number); - bool checkDay(std::vector& digits); + bool checkFormatOfDate(std::vector& digits); bool checkControlSum(std::vector& digits); } @@ -17,7 +18,7 @@ namespace ValidatePersonalID std::vector digits {}; if( !initialIdCheck(digits, personalID)) return false; - if( !checkDay(digits)) return false; + if( !checkFormatOfDate(digits)) return false; if( !checkControlSum(digits)) return false; return true; @@ -63,8 +64,9 @@ namespace } } - bool checkDay(std::vector& digits) + bool checkFormatOfDate(std::vector& digits) { + //check if yy-mm-dd format was changed to dd-mm-yy int day = digits[4]*10 + digits[5]; if(day >= 1 and day <= 31) return true; @@ -74,10 +76,11 @@ namespace bool checkControlSum(std::vector& digits) { - unsigned long int sum = 0; const std::vector multipliers {1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1}; - for(unsigned int i=0; i Date: Sun, 3 Feb 2019 13:54:49 +0100 Subject: [PATCH 63/65] dynamic_cast replaced with virtual functions, writToFile() / readToFile() divided. --- include/Database.hpp | 2 ++ include/Person.hpp | 3 +++ src/Database.cpp | 58 +++++++++++++++++++++----------------------- src/Person.cpp | 13 +++++++++- 4 files changed, 44 insertions(+), 32 deletions(-) diff --git a/include/Database.hpp b/include/Database.hpp index 7e52a7f..31e59ec 100644 --- a/include/Database.hpp +++ b/include/Database.hpp @@ -12,6 +12,8 @@ class Database private: std::vector data {}; constexpr static auto dbFilename = "../database.txt"; //literal + bool parseLineByLine(std::ifstream& ifs); + bool writeLineByLine(std::ofstream& ofs); public: personIter searchByLastName(const std::string& lastName); personIter searchByPersonalID(const unsigned long long& personalID); diff --git a/include/Person.hpp b/include/Person.hpp index 41b14c1..11df56e 100644 --- a/include/Person.hpp +++ b/include/Person.hpp @@ -29,6 +29,9 @@ class Person friend std::ostream& operator<<(std::ostream& os, const Person* person); virtual std::string getInfo() const; + virtual double getSalary() const; + virtual unsigned long getStudentIndex() const; + virtual void setSalary(const double& salary); virtual ~Person() {}; }; diff --git a/src/Database.cpp b/src/Database.cpp index ca8795a..ac66716 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -4,17 +4,16 @@ #include #include #include +#include using studentPtr = std::shared_ptr; using employeePtr = std::shared_ptr; -using std::dynamic_pointer_cast; - personIter Database::searchByLastName(const std::string& lastName) { auto it = std::find_if(begin(data), end(data), [lastName] (personPtr person) { - return person -> getLastName() == lastName; + return person->getLastName() == lastName; }); if (it != end(data)) @@ -28,7 +27,7 @@ personIter Database::searchByPersonalID(const unsigned long long& personalID) { auto it = std::find_if(begin(data), end(data), [personalID] (personPtr person) { - return person -> getPersonalID() == personalID; + return person->getPersonalID() == personalID; }); if (it != end(data)) @@ -42,8 +41,7 @@ personIter Database::searchByStudentID(const unsigned long& studentID) { auto it = std::find_if(begin(data), end(data), [studentID] (personPtr person) { - studentPtr student = dynamic_pointer_cast(person); - return student -> getStudentIndex() == studentID; + return person->getStudentIndex() == studentID; }); if (it != end(data)) @@ -63,23 +61,20 @@ void Database::printDatabase() const std::cout << "\n"; } + void Database::sortBySalary() { std::sort(begin(data), end(data), [](personPtr left, personPtr right) - { - //input: 10.1 NaN 2.5 NaN 3.6 - //output: 2.5 3.6 10.1 Nan Nan - - //NaN 2.5 --- if student on the left: bad! - if(dynamic_pointer_cast(left)) return false; + { //input: 10.1 Nan 2.5 Nan 3.6 //output: 2.5 3.6 10.1 Nan Nan + + //NaN 2.5 --- if NaN on the left: bad! + if (std::isnan(left->getSalary())) return false; - //2.5 NaN -- if student on the right: good! move all to the right - if(dynamic_pointer_cast(right)) return true; + //2.5 NaN -- if NaN on the right: good! + if (std::isnan(right->getSalary())) return true; - employeePtr e_left = dynamic_pointer_cast(left); - employeePtr e_right = dynamic_pointer_cast(right); - //if employee, compare it usually - return e_left->getSalary() < e_right->getSalary(); + //left and right are finite, so compare it usually + return left->getSalary() < right->getSalary(); }); } @@ -104,12 +99,7 @@ void Database::sortByStudentID() { std::sort(begin(data), end(data), [](personPtr left, personPtr right) { - if(dynamic_pointer_cast(left)) return false; - if(dynamic_pointer_cast(right)) return true; - - studentPtr student1 = dynamic_pointer_cast(left); - studentPtr student2 = dynamic_pointer_cast(right); - return student1->getStudentIndex() < student2->getStudentIndex(); + return left->getStudentIndex() < right->getStudentIndex(); }); } @@ -144,7 +134,6 @@ bool Database::addEmployee(const std::string& firstName, return true; } - bool Database::loadFromFile(const std::string filename/*="database.txt"*/) { std::ifstream ifs {filename}; //input file stream @@ -153,7 +142,11 @@ bool Database::loadFromFile(const std::string filename/*="database.txt"*/) std::cout << "Could not open " << filename << " for reading!\n"; return false; } + return parseLineByLine(ifs); +} +bool Database::parseLineByLine(std::ifstream& ifs) +{ std::string firstName, lastName, address, salary, studentIndex; unsigned long long personalID; char cGender; @@ -166,12 +159,12 @@ bool Database::loadFromFile(const std::string filename/*="database.txt"*/) addStudent(firstName, lastName, personalID, convMap[cGender], address, std::stoul(studentIndex)); else if(studentIndex == "----") addEmployee(firstName, lastName, personalID, convMap[cGender], address, std::stod(salary)); - else{ + else + { std::cout << "\nInvalid line in input file!\n"; return false; } } - return true; } @@ -184,14 +177,17 @@ bool Database::saveToFile(const std::string filename/*="database.txt"*/) std::cout << "Could not open " << filename << " for writing!\n"; return false; } + return writeLineByLine(ofs); +} + +bool Database::writeLineByLine(std::ofstream& ofs) +{ for(const auto& personPtr : data) ofs << personPtr; ofs << "\n"; return true; } - - bool Database::removeByPersonalID(const unsigned long long& personalID) { auto iter = searchByPersonalID(personalID); @@ -224,9 +220,9 @@ bool Database::modifySalary(const unsigned long long& personalID, const double& if (personIter != data.end()) { - if(employeePtr isEmployee = dynamic_pointer_cast(*personIter)) + if(std::isfinite((*personIter)->getSalary())) { - isEmployee->setSalary(newSalary); + (*personIter)->setSalary(newSalary); return true; } std::cout << "Personal ID " << personalID << " is not an Employee.\n\n"; diff --git a/src/Person.cpp b/src/Person.cpp index 8281af6..e833650 100644 --- a/src/Person.cpp +++ b/src/Person.cpp @@ -1,6 +1,7 @@ #include "Person.hpp" #include #include +#include Person::Person(const std::string& firstName, const std::string& lastName, @@ -36,9 +37,19 @@ std::string Person::getInfo() const return ss.str(); } +double Person::getSalary() const +{ + return std::nan(""); +} + +unsigned long Person::getStudentIndex() const +{ + return 0; +} + void Person::setAddress(const std::string& newAddress) { address_ = newAddress; } - +void Person::setSalary(const double& /*salary*/) { } From b15c94ea846912767247bb9108ca4bfb168d5e9e Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 3 Feb 2019 19:13:38 +0100 Subject: [PATCH 64/65] private members renamed - name_ --- include/Database.hpp | 2 +- include/Person.hpp | 2 +- src/Database.cpp | 46 ++++++++++++++++++++++---------------------- src/Employee.cpp | 2 +- src/Person.cpp | 2 +- src/Student.cpp | 2 +- 6 files changed, 28 insertions(+), 28 deletions(-) diff --git a/include/Database.hpp b/include/Database.hpp index 31e59ec..2fa6b67 100644 --- a/include/Database.hpp +++ b/include/Database.hpp @@ -10,7 +10,7 @@ using personPtr = std::shared_ptr; class Database { private: - std::vector data {}; + std::vector data_ {}; constexpr static auto dbFilename = "../database.txt"; //literal bool parseLineByLine(std::ifstream& ifs); bool writeLineByLine(std::ofstream& ofs); diff --git a/include/Person.hpp b/include/Person.hpp index 11df56e..340517c 100644 --- a/include/Person.hpp +++ b/include/Person.hpp @@ -13,7 +13,7 @@ class Person unsigned long long personalID_; Gender gender_; std::string address_; - std::map convMap {{Gender::female, '0'}, {Gender::male, '1'}}; + std::map convMap_ {{Gender::female, '0'}, {Gender::male, '1'}}; public: Person(const std::string& firstName, diff --git a/src/Database.cpp b/src/Database.cpp index a221dec..c94eaf5 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -11,12 +11,12 @@ using employeePtr = std::shared_ptr; personIter Database::searchByLastName(const std::string& lastName) { - auto it = std::find_if(begin(data), end(data), [lastName] (personPtr person) + auto it = std::find_if(begin(data_), end(data_), [lastName] (personPtr person) { return person->getLastName() == lastName; }); - if (it != end(data)) + if (it != end(data_)) std::cout << *it << "\n"; else std::cout << "Person " << lastName << " not found\n\n"; @@ -25,12 +25,12 @@ personIter Database::searchByLastName(const std::string& lastName) personIter Database::searchByPersonalID(const unsigned long long& personalID) { - auto it = std::find_if(begin(data), end(data), [personalID] (personPtr person) + auto it = std::find_if(begin(data_), end(data_), [personalID] (personPtr person) { return person->getPersonalID() == personalID; }); - if (it != end(data)) + if (it != end(data_)) std::cout << *it << "\n"; else std::cout << "Personal ID " << personalID << " not found.\n\n"; @@ -39,12 +39,12 @@ personIter Database::searchByPersonalID(const unsigned long long& personalID) personIter Database::searchByStudentID(const unsigned long& studentID) { - auto it = std::find_if(begin(data), end(data), [studentID] (personPtr person) + auto it = std::find_if(begin(data_), end(data_), [studentID] (personPtr person) { return person->getStudentIndex() == studentID; }); - if (it != end(data)) + if (it != end(data_)) std::cout << *it << "\n"; else std::cout << "Student ID " << studentID << " not found.\n\n"; @@ -53,17 +53,17 @@ personIter Database::searchByStudentID(const unsigned long& studentID) void Database::printDatabase() const { - if(data.empty()) - std::cout << "Empty database!\n"; + if(data_.empty()) + std::cout << "Empty data_base!\n"; - for(const auto& personPtr : data) + for(const auto& personPtr : data_) std::cout << personPtr; std::cout << "\n"; } void Database::sortBySalary() { - std::sort(begin(data), end(data), [](personPtr left, personPtr right) + std::sort(begin(data_), end(data_), [](personPtr left, personPtr right) { //input: 10.1 Nan 2.5 Nan 3.6 //output: 2.5 3.6 10.1 Nan Nan //NaN 2.5 --- if NaN on the left: bad! @@ -79,7 +79,7 @@ void Database::sortBySalary() void Database::sortByLastName() { - std::sort(begin(data), end(data), [](personPtr left, personPtr right) + std::sort(begin(data_), end(data_), [](personPtr left, personPtr right) { return left->getLastName() < right->getLastName(); }); @@ -87,7 +87,7 @@ void Database::sortByLastName() void Database::sortByPersonalID() { - std::sort(begin(data), end(data), [](personPtr left, personPtr right) + std::sort(begin(data_), end(data_), [](personPtr left, personPtr right) { return left->getPersonalID() < right->getPersonalID(); }); @@ -95,7 +95,7 @@ void Database::sortByPersonalID() void Database::sortByStudentID() { - std::sort(begin(data), end(data), [](personPtr left, personPtr right) + std::sort(begin(data_), end(data_), [](personPtr left, personPtr right) { return left->getStudentIndex() < right->getStudentIndex(); }); @@ -103,7 +103,7 @@ void Database::sortByStudentID() void Database::addPerson(personPtr person) { - data.push_back(person); + data_.push_back(person); } bool Database::addStudent(const std::string& firstName, @@ -132,7 +132,7 @@ bool Database::addEmployee(const std::string& firstName, return true; } -bool Database::loadFromFile(const std::string filename/*="database.txt"*/) +bool Database::loadFromFile(const std::string filename/*="data_base.txt"*/) { std::ifstream ifs {filename}; //input file stream if(!ifs) @@ -166,7 +166,7 @@ bool Database::parseLineByLine(std::ifstream& ifs) return true; } -bool Database::saveToFile(const std::string filename/*="database.txt"*/) +bool Database::saveToFile(const std::string filename/*="data_base.txt"*/) { std::ofstream ofs {filename}; //output file stream @@ -180,7 +180,7 @@ bool Database::saveToFile(const std::string filename/*="database.txt"*/) bool Database::writeLineByLine(std::ofstream& ofs) { - for(const auto& personPtr : data) + for(const auto& personPtr : data_) ofs << personPtr; ofs << "\n"; return true; @@ -190,9 +190,9 @@ bool Database::removeByPersonalID(const unsigned long long& personalID) { auto iter = searchByPersonalID(personalID); - if (iter != end(data)) + if (iter != end(data_)) { - data.erase(iter); + data_.erase(iter); return true; } else @@ -203,9 +203,9 @@ bool Database::removeByStudentID(const unsigned long& studentID) { auto iter = searchByStudentID(studentID); - if (iter != end(data)) + if (iter != end(data_)) { - data.erase(iter); + data_.erase(iter); return true; } else @@ -216,7 +216,7 @@ bool Database::modifySalary(const unsigned long long& personalID, const double& { auto personIter = searchByPersonalID(personalID); - if (personIter != data.end()) + if (personIter != data_.end()) { if(std::isfinite((*personIter)->getSalary())) { @@ -232,7 +232,7 @@ bool Database::modifyAddress(const unsigned long long& personalID, const std::st { auto personIter = searchByPersonalID(personalID); - if (personIter != data.end()) + if (personIter != data_.end()) { (*personIter)->setAddress(newAddress); return true; diff --git a/src/Employee.cpp b/src/Employee.cpp index 453c894..279a1e1 100644 --- a/src/Employee.cpp +++ b/src/Employee.cpp @@ -29,7 +29,7 @@ std::string Employee::getInfo() const ss << std::left << std::setw(13) << lastName_ << " " << std::left << std::setw(13) << firstName_ << " " << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(8) << convMap.at(gender_) << " " + << std::left << std::setw(8) << convMap_.at(gender_) << " " << std::left << std::setw(13) << address_ << " " << std::left << std::setw(13) << salary_ << " " << std::left << std::setw(13) << "----" << "\n"; diff --git a/src/Person.cpp b/src/Person.cpp index e833650..77ee6ac 100644 --- a/src/Person.cpp +++ b/src/Person.cpp @@ -31,7 +31,7 @@ std::string Person::getInfo() const ss << std::left << std::setw(13) << lastName_ << " " << std::left << std::setw(13) << firstName_ << " " << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(8) << convMap.at(gender_) << " " + << std::left << std::setw(8) << convMap_.at(gender_) << " " << std::left << std::setw(13) << address_ << "\n"; return ss.str(); diff --git a/src/Student.cpp b/src/Student.cpp index 6ba0a72..5a41d1b 100644 --- a/src/Student.cpp +++ b/src/Student.cpp @@ -24,7 +24,7 @@ std::string Student::getInfo() const ss << std::left << std::setw(13) << lastName_ << " " << std::left << std::setw(13) << firstName_ << " " << std::left << std::setw(13) << personalID_ << " " - << std::left << std::setw(8) << convMap.at(gender_) << " " + << std::left << std::setw(8) << convMap_.at(gender_) << " " << std::left << std::setw(13) << address_ << " " << std::left << std::setw(13) << "----" << " " << std::left << std::setw(13) << studentIndex_ << "\n"; From eb57f766276878c125e10f91782c0dc87289ef51 Mon Sep 17 00:00:00 2001 From: PrzemekB Date: Sun, 3 Feb 2019 22:25:22 +0100 Subject: [PATCH 65/65] small correction in comment --- src/Database.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Database.cpp b/src/Database.cpp index c94eaf5..8faeb7c 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -132,7 +132,7 @@ bool Database::addEmployee(const std::string& firstName, return true; } -bool Database::loadFromFile(const std::string filename/*="data_base.txt"*/) +bool Database::loadFromFile(const std::string filename/*="database.txt"*/) { std::ifstream ifs {filename}; //input file stream if(!ifs) @@ -166,7 +166,7 @@ bool Database::parseLineByLine(std::ifstream& ifs) return true; } -bool Database::saveToFile(const std::string filename/*="data_base.txt"*/) +bool Database::saveToFile(const std::string filename/*="database.txt"*/) { std::ofstream ofs {filename}; //output file stream