diff --git a/ex01/Bureaucrat.cpp b/ex01/Bureaucrat.cpp index 3e9ffae..700237d 100644 --- a/ex01/Bureaucrat.cpp +++ b/ex01/Bureaucrat.cpp @@ -1,3 +1,4 @@ +#include "Form.hpp" #include "Bureaucrat.hpp" Bureaucrat::Bureaucrat() : _name("default"), _grade(150) @@ -70,3 +71,17 @@ const char *Bureaucrat::GradeTooLowException::what() const throw() { return ("Grade too low!"); } + +void Bureaucrat::signForm(Form &form) +{ + try + { + form.beSigned(*this); + } + catch(const std::exception& e) + { + std::cout << _name << " couldn't sign " << form.getName() << " because " << e.what() << std::endl; + return; + } + std::cout << _name << " signed " << form.getName() << std::endl; +} diff --git a/ex01/Bureaucrat.hpp b/ex01/Bureaucrat.hpp index acbacac..045fb49 100644 --- a/ex01/Bureaucrat.hpp +++ b/ex01/Bureaucrat.hpp @@ -5,6 +5,8 @@ #include #include +class Form; + class Bureaucrat { private: @@ -16,11 +18,13 @@ class Bureaucrat Bureaucrat(const std::string _name, int _grade); Bureaucrat(const Bureaucrat ©); Bureaucrat &operator=(const Bureaucrat &other); + ~Bureaucrat(); std::string getName() const; int getGrade() const; void incrementGrade(); void decrementGrade(); + void signForm(Form &form); class GradeTooHighException : public std::exception { diff --git a/ex01/Form.cpp b/ex01/Form.cpp index cf77e88..ef0f238 100644 --- a/ex01/Form.cpp +++ b/ex01/Form.cpp @@ -1,18 +1,15 @@ #include "Form.hpp" +#include "Bureaucrat.hpp" -Bureaucrat::Bureaucrat() +Form::Form() : _name("Default"), _signed(false), _grade_ex(150), _grade_si(150) { } -Form::Form() : _name("Default"), _signed(false), _grade_si(150), _grade_ex(150) +Form::Form(const std::string name, const int grade_si, const int grade_ex) : _name(name), _signed(false), _grade_ex(grade_ex), _grade_si(grade_si) { } -Form::Form(const std::string name, const int grade_si, const int grade_ex) : _name(name), _signed(false), _grade_si(grade_si), _grade_ex(grade_ex) -{ -} - -Form::Form(const Form &other) : _name(other._name), _signed(other._signed), _grade_si(other._grade_si), _grade_ex(other._grade_ex) +Form::Form(const Form &other) : _name(other._name), _signed(other._signed), _grade_ex(other._grade_ex), _grade_si(other._grade_si) { } @@ -39,3 +36,33 @@ int Form::getSignGrade() const { return (_grade_si); } + +void Form::beSigned(const Bureaucrat &bureaucrat) +{ + if (bureaucrat.getGrade() <= _grade_si) + _signed = true; + else + throw GradeTooLowException(); +} + +Form &Form::operator=(const Form &other) +{ + _signed = other._signed; + return (*this); +} + +const char *Form::GradeTooHighException::what() const throw() +{ + return ("Grade too high!"); +} + +const char *Form::GradeTooLowException::what() const throw() +{ + return ("Grade too low!"); +} + +std::ostream &operator<<(std::ostream &os, Form const &form) +{ + os << "Name: " << form.getName() << " Signed: " << form.getSigned() << " SiGrade: " << form.getSignGrade() << " ExGrade: " << form.getExecuteGrade() << std::endl; + return (os); +} \ No newline at end of file diff --git a/ex01/Form.hpp b/ex01/Form.hpp index eef2189..ded2d40 100644 --- a/ex01/Form.hpp +++ b/ex01/Form.hpp @@ -4,7 +4,8 @@ #include #include #include -#include "Bureaucrat.hpp" + +class Bureaucrat; class Form { @@ -26,5 +27,19 @@ class Form bool getSigned() const; int getExecuteGrade() const; int getSignGrade() const; + + class GradeTooLowException : public std::exception + { + public: + virtual const char *what() const throw(); + }; + + class GradeTooHighException : public std::exception + { + public: + virtual const char *what() const throw(); + }; }; -#endif +std::ostream &operator<<(std::ostream &os, Form const &form); + +#endif \ No newline at end of file diff --git a/ex01/Main.cpp b/ex01/Main.cpp index 8f68194..c56f7b1 100644 --- a/ex01/Main.cpp +++ b/ex01/Main.cpp @@ -1,48 +1,102 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Main.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: toi +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/01/15 10:00:00 by toi #+# #+# */ +/* Updated: 2025/01/15 10:00:00 by toi ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "Bureaucrat.hpp" +#include "Form.hpp" int main(void) { - Bureaucrat cat("Moulinette", 1); - Bureaucrat stud("Student", 150); - std::cout << std::endl << "---Test too high/low create---" << std::endl; - try { - Bureaucrat test("test", 1500); - } catch (const std::exception &e) { - std::cerr << "Exception caught: " << e.what() << std::endl; + std::cout << "\033[35m" << std::endl << "Test ex01" << "\033[0m" << std::endl; + + std::cout << "\033[31m" << std::endl << "Test creation trop haut et trop bas" << "\033[0m" << std::endl; + try + { + Bureaucrat Dormeur1("Bernard", 1500); } - try { - Bureaucrat test1("test2", -10); - } catch (const std::exception &e) { - std::cerr << "Exception caught: " << e.what() << std::endl; + catch(const std::exception &e) + { + std::cerr << "Exception attrapée: " << e.what() << std::endl; } - std::cout << std::endl << "---Test too high/low in/de---" << std::endl; - std::cout << cat; - try { - cat.incrementGrade(); - } catch (const std::exception &e) { - std::cerr << "Exception caught: " << e.what() << std::endl; + + try + { + Bureaucrat Dormeur2("Olivier", -10); } - std::cout << stud; - try { - stud.decrementGrade(); - } catch (const std::exception &e) { - std::cerr << "Exception caught: " << e.what() << std::endl; + catch(const std::exception &e) + { + std::cerr << "Exception attrapée: " << e.what() << std::endl; } - std::cout << std::endl << "---Test increment---" << std::endl; - std::cout << stud; - try { - stud.incrementGrade(); - } catch (const std::exception &e) { - std::cerr << "Exception caught: " << e.what() << std::endl; + + std::cout << "\033[32m" << std::endl << "Test augmentation" << "\033[0m" << std::endl; + Bureaucrat robert("Robert", 2); + std::cout << robert; + try + { + robert.incrementGrade(); } - std::cout << stud; - std::cout << std::endl << "---Test decrement---" << std::endl; - std::cout << cat; - try { - cat.decrementGrade(); - } catch (const std::exception &e) { - std::cerr << "Exception caught: " << e.what() << std::endl; + catch(const std::exception& e) + { + std::cerr << "Exception attrapée: " << e.what() << std::endl; } - std::cout << cat; + std::cout << robert; + + try + { + robert.incrementGrade(); + } + catch(const std::exception& e) + { + std::cerr << "Exception attrapée: " << e.what() << std::endl; + } + std::cout << robert; + + + + std::cout << "\033[33m" << std::endl << "Test diminution" << "\033[0m" << std::endl; + Bureaucrat thomas("Thomas", 149); + std::cout << thomas; + try + { + thomas.decrementGrade(); + } + catch(const std::exception& e) + { + std::cerr << "Exception attrapée: " << e.what() << std::endl; + } + std::cout << thomas; + + try + { + thomas.decrementGrade(); + } + catch(const std::exception& e) + { + std::cerr << "Exception attrapée: " << e.what() << std::endl; + } + std::cout << thomas; + + + std::cout << "\033[34m" << std::endl << "Test signatures de formulaires" << "\033[0m" << std::endl; + + Form formulaire_id("FORMULAIRE IDENTITE", 100, 90); + Bureaucrat mr_lent; + Bureaucrat mr_identite("MR_IDENTITE", 100); + std::cout << formulaire_id; + + mr_lent.signForm(formulaire_id); + std::cout << formulaire_id; + + mr_identite.signForm(formulaire_id); + std::cout << formulaire_id; + return (0); -} +} \ No newline at end of file diff --git a/ex01/Makefile b/ex01/Makefile index fbdebbf..7712a53 100644 --- a/ex01/Makefile +++ b/ex01/Makefile @@ -1,9 +1,9 @@ CXX = c++ CXXFLAGS = -Wall -Wextra -Werror -std=c++98 OBJDIR = obj -SOURCES = Main.cpp Bureaucrat.cpp +SOURCES = Main.cpp Bureaucrat.cpp Form.cpp OBJECTS = $(addprefix $(OBJDIR)/, $(SOURCES:.cpp=.o)) -NAME = Bureaucrat +NAME = Form all: $(NAME)