From 53cb4b5f8b8b1b26f4ece0bd20f5ea86a704f3ea Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Fri, 4 Feb 2022 02:26:02 +0100 Subject: [PATCH] phonebook operationnel et coloree --- d00/ex01/Contact.class.cpp | 10 +-- d00/ex01/PhoneBook.class.cpp | 134 +++++++++++++++++++++++++++--- d00/ex01/PhoneBook.class.hpp | 26 +++++- d00/ex01/builds/Contact.class.o | Bin 8944 -> 8936 bytes d00/ex01/builds/PhoneBook.class.o | Bin 2504 -> 0 bytes d00/ex01/builds/main.o | Bin 4160 -> 5400 bytes d00/ex01/color.h | 25 ++++++ d00/ex01/main.cpp | 28 +++++-- d00/ex01/phonebook | Bin 19888 -> 29776 bytes 9 files changed, 195 insertions(+), 28 deletions(-) delete mode 100644 d00/ex01/builds/PhoneBook.class.o create mode 100644 d00/ex01/color.h diff --git a/d00/ex01/Contact.class.cpp b/d00/ex01/Contact.class.cpp index c1ffbe1..d23bcec 100644 --- a/d00/ex01/Contact.class.cpp +++ b/d00/ex01/Contact.class.cpp @@ -1,11 +1,11 @@ #include "Contact.class.hpp" Contact::Contact( void ) { - this->add_first("NOT DEFINED"); - this->add_last("NOT DEFINED"); - this->add_nick("NOT DEFINED"); - this->add_num("NOT DEFINED"); - this->add_secret("NOT DEFINED"); + this->add_first(""); + this->add_last(""); + this->add_nick(""); + this->add_num(""); + this->add_secret(""); return; } diff --git a/d00/ex01/PhoneBook.class.cpp b/d00/ex01/PhoneBook.class.cpp index 82bbba2..050e13b 100644 --- a/d00/ex01/PhoneBook.class.cpp +++ b/d00/ex01/PhoneBook.class.cpp @@ -2,6 +2,8 @@ #include "Contact.class.hpp" PhoneBook::PhoneBook( void ) { + + this->contact_count = 0; return; } @@ -9,18 +11,124 @@ PhoneBook::~PhoneBook( void ) { return; } - /* - Contact new_contact; +void PhoneBook::add_contact() { - new_contact.add_first(name); - new_contact.add_last("lamy"); - new_contact.add_nick("hugonosaure"); - new_contact.add_num("0123456789"); - new_contact.add_secret("je suis un dino"); + std::string str; + int it; - std::cout << "FIRST NAME : " << new_contact.get_first() << std::endl; - std::cout << "LAST NAME : " << new_contact.get_last() << std::endl; - std::cout << "NICKNAME : " << new_contact.get_nick() << std::endl; - std::cout << "NUMBER : " << new_contact.get_num() << std::endl; - std::cout << "SECRET : " << new_contact.get_secret() << std::endl; - */ + this->contact_count++; + it = this->contact_count; + if (it > 8) + it = 1; + it--; + + std::cout << B_CYAN "enter a first name pliz :" << std::endl; + while (contact[it].get_first().length() == 0) + { + std::cout << B_BLUE "-> " RESET; + std::getline(std::cin, str); + this->contact[it].add_first(str); + } + + std::cout << B_CYAN "enter a last name pliz :" << std::endl; + while (contact[it].get_last().length() == 0) + { + std::cout << B_BLUE "-> " RESET; + std::getline(std::cin, str); + this->contact[it].add_last(str); + } + + std::cout << B_CYAN "enter a nickname pliz :" << std::endl; + while (contact[it].get_nick().length() == 0) + { + std::cout << B_BLUE "-> " RESET; + std::getline(std::cin, str); + this->contact[it].add_nick(str); + } + + std::cout << B_CYAN "enter a number pliz :" << std::endl; + while (contact[it].get_num().length() == 0) + { + std::cout << B_BLUE "-> " RESET; + std::getline(std::cin, str); + this->contact[it].add_num(str); + } + + std::cout << B_CYAN "enter a secret of this contact pliz :" << std::endl; + while (contact[it].get_secret().length() == 0) + { + std::cout << B_BLUE "-> " RESET; + std::getline(std::cin, str); + this->contact[it].add_secret(str); + } +} + +std::string truncate(std::string str, size_t len) { + + if (str.length() > len) + return str.substr(0, len - 1) + "."; + return str; + +} + +void PhoneBook::print_phonebook() { + + std::cout << std::endl; + int it; + + it = this->contact_count; + if (it > 8) + it = 8; + it--; + + std::cout << " ------------------------------------------- " << std::endl; + std::cout << "|" << std::setw(10) << "index"; + std::cout << "|" << std::setw(10) << "first name"; + std::cout << "|" << std::setw(10) << "last name"; + std::cout << "|" << std::setw(10) << "nickname"; + std::cout << "|" << std::endl; + std::cout << " ---------- ---------- ---------- ---------- " << std::endl; + for (int i = 0; i <= it; i++) + { + std::cout << "|" << std::setw(10) << i; + std::cout << "|" << std::setw(10) << truncate(contact[i].get_first(), 10); + std::cout << "|" << std::setw(10) << truncate(contact[i].get_last(), 10); + std::cout << "|" << std::setw(10) << truncate(contact[i].get_nick(), 10); + std::cout << "|" << std::endl; + } + std::cout << " ------------------------------------------- " << std::endl; + std::cout << std::endl; +} + +void PhoneBook::print_contact( int id ) { + + std::cout << std::endl; + std::cout << B_CYAN "FIRST NAME : " << RESET << this->contact[id].get_first() << std::endl; + std::cout << B_CYAN " LAST NAME : " << RESET << this->contact[id].get_last() << std::endl; + std::cout << B_CYAN " NICKNAME : " << RESET << this->contact[id].get_nick() << std::endl; + std::cout << B_CYAN " NUMBER : " << RESET << this->contact[id].get_num() << std::endl; + std::cout << B_CYAN " SECRET : " << RESET << this->contact[id].get_secret() << std::endl; + +} + +void PhoneBook::search_contact() { + + std::string str; + std::stringstream convert; + int id; + + this->print_phonebook(); + id = -1; + std::cout << std::endl << B_CYAN "choose an index :" << std::endl; + while (id < 0 || id > this->contact_count - 1 || id > 7) + { + std::cout << B_BLUE "-> " RESET; + std::getline(std::cin, str); + convert << str; + convert >> id; + if (id < 0 || id > this->contact_count - 1 || id > 7) + std::cout << B_RED "sorry, not a valid index" RESET << std::endl; + } + this->print_contact(id); + +} diff --git a/d00/ex01/PhoneBook.class.hpp b/d00/ex01/PhoneBook.class.hpp index 03b7117..7235b0b 100644 --- a/d00/ex01/PhoneBook.class.hpp +++ b/d00/ex01/PhoneBook.class.hpp @@ -2,13 +2,37 @@ # define PHONEBOOK_CLASS_HPP #include "Contact.class.hpp" +#include "color.h" + #include +#include +#include class PhoneBook { + public: + PhoneBook(); ~PhoneBook(); - Contact contact; + + void add_contact(); + void search_contact(); + void print_phonebook(); + void print_contact( int id); + + private: + + Contact contact[8]; + int contact_count; + }; #endif + +/* + * class PhoneBook : + * add_contact + * print_phonebook + * search_by_index + * exit + */ diff --git a/d00/ex01/builds/Contact.class.o b/d00/ex01/builds/Contact.class.o index ad9941f1fc31a20b35ed166d0f6fd31771fe06ce..4126362aa3ae3b95fdc819292e3e7f508916e8f7 100644 GIT binary patch delta 112 zcmez1`oeXB2IGs3nuj=;85kHgf8z)eW$c*jDOb;EF!>~qJ{rp1|TwL8e{ajr(zvBoJWt=eCQLdiRV)8*CDKObl9?S-k z3nn`%v@`NdKB-_nxj~U*GKZoCh&WY73wvLlde OnA`{?JtiMiQU?J34<$GN diff --git a/d00/ex01/builds/PhoneBook.class.o b/d00/ex01/builds/PhoneBook.class.o deleted file mode 100644 index b7bc3a2af43ec64e183ea0a35f46f1f328b5f787..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2504 zcmb_dO=uHA6rMENR{Uu!ih_bUcu>Tptwk$}L|bi&p^Bv+6I%|klmCj{uC5Z zMCh?c&tCK*f(Jd+n-`DbUFgAs9t05~zHj%vWZZ5&`N7P4?|XkUvy;ia(}gn~sgx3= z)CtwLgjK4$v#sYsHK%$gax(w;OaA`XO#bnmpZOvU5(|FMDpbf57Uq z`VJmygwFoE17rszS{}u3rwfwgux7r9P`DdbhcC8XSXl?7%_h#JDO?(G=a_k6elKz24O0_?t zeB;l=BVG{hk&QHYl8`pyO@G>`FZ?4?GGZ8Vd<}ky_+F!LcxJ@yU4y^Me3m32@x7#@ zP8K9V_!{X+>p8pzj~kd2e~At-lW;s+DIUOy;(q+5s|oajB!J&QLwNZj_#Ry}1U;-E zehUqW-_AVZB?iXvYFBrU8e_f^{y;WItr(#=Ww;X7@Ubk;5eR=%o`B~3(PI=yqk%7~5e>20(Oawz^ z&(}rUcLv8Od!#>#JTmOLfn93ZMlFtrXAZ|Q#cpSYOtjFznGcjz@~TzG4V2cUd0X2= zmdUt05fp~BE_>Kb=$qFw6|ZPl^qgJSA!`+VpZAPXmLJ&lpixtLv~cd!$%58?qo~Jp z>i{fz&3xY~)oRLey}+?X$0rX`Qt5`WDwVmawx_4*p_}2F&aA#(x2q0ypY}aHYrE4G zM^Tr0U>8Z=tU~@DICLS?38kLmf)N_Hum)nLdO<#L=G{Vg4in*6BwBO)H~E}A+^Q7= zg~k3<$jd diff --git a/d00/ex01/builds/main.o b/d00/ex01/builds/main.o index e2dd9a34a02d049a2887a4fec82fb3f4212af79e..c964431c6dbdb1916cc81d91dc01bbaccd34524f 100644 GIT binary patch literal 5400 zcmbtXZD?E989tKSq+OlF>H3kzO(W7lDNQxY_UgFnRy&Ro8Jo$R(XIrSw9qk97-O)pKV#6c4q6y&EurfBoO@pB z_*i$W^o4sqp7;AbN9PN_XN9VGk zgK;mN;zlD5QW@{*`j>_oj4d;2+R3$brL}R171q}@so$~DUH zT@r1ry$#(zD){|k>uRy}s=_ybZ_$5&WVXA09_qvq>uVS)*SEvkHrJy)^?%yc$583h zii!{SprKDUk9^*4cb3`8s#A;g!u8^Xx3MEmZ^moKJECiemJft8dPij3d zi}{^tQDqKB@waF}O62tBo`cV+DfZ(BueICl)0?858BgWKpb&%oucyU>pQf&*#oyEY zn|-N&r{`$=X$JUO-$5ZR_1#49OMQ0>YxmD7`>GlIVgB1ABULYmyjs@Dx?#2I1WONP zCyyP=eluGtOwLagX;Aq7^ny^b!&T~ss)7VW%od8N0_En^Vk3weS-0W@azhV{G!!%c^f1jvb6C4uwO;Cpd68-kqz3zU-guFIuy+xT4|D|0f4s{FoO)tzR$1Pe!8F76zd;jxpqaD~eHgHf%>Fc4ne5*&psELd zH-Y~@=;su3pZKJ0i>xcRJ8W3|gyhqtF`+ps2O7^4o)TZ{$kSAjqve^QYN96@veb(* zaaP+{8L>Sc2xSbvrcx%ZunCFXV+Rl!2gnfpH0A@P4K&y>fFokzY^@U z67bCgTqfWz)4KHXJDh<3DIxwt3Gv^O;1_$gm*4-8-$QBa*qC@<6%yk4eFA@L$eVtjG33qopEGdN4)!6)j{i~&t6wDIJgn!x z(!Cw$D~3F7N~SmT0P=Uz$Mw0Yal1b688~=2qe0i=PQ_`~=bsvfteMxxhP+vy&kT9! zjO%%Z_74bg4$#MO-f!Uj27boCajCO>L*uZG?>qE?o;Ku7`@b;oT_neLUbXBTQ&#A$ zV#u3zQhL85elwmu2L5%!{(TAfBLoMfHR)F|-2l?)4DZ~v2vU~Rp-Z{{}>#n=^XKwC0c*pG`SMw@P z&JX-ZI<=Z}PRJjWqH%gPRsFz;yj7Z?9G_bb1Mg@Up2?5aJ*Va_OE(N6$Bha$KkqCp zZDp3CBYs$yi%#7eohCQO^0pEqrD#k_x7p0+^TQj#TnQJQid>}>6q;MC*LCS(G*^$DTGUt(xpFO}PM(ALQH> z!f9+ic|9nFhTXJQ4rLhtD;9JqaMZC zYwPq1XF)CuQ9ut$L{kbY^}^io`BGSt1!Zfj>_rtn@OqhxccPJ^uT#`E$K?FU#Pmv| zlB%$fmxY2jF*UWNpn0l)xa33*vdic4RR40bDOc!kM;JI2KRPE@hwyX%%5;?u5PJG- zqY^G9qAL~?=cq}C2>@oELEulIA>#K^Jlp=ZyO)%4*4lJYAC8Y{|F~mt*72Ffck+b< z{}&-lG!u877I<PbT>P7zZfP#kdpjk2r1rG;ry)tvbt`#YfZBA|A_Oq^v`QW-et%ix!d`lC4FGlHWBx0fY@8e zp8t&GfbqS{!mK~dfbLnJd+a;Bvu*!P4RE|{#-76t*OFz>U)K5aK12Rk3)W}+VKM+4 zTqhbTI+xtAvHkJHB@}hIkf~CEYTrQ_KXQkqX@K}Yk(sQnods!u8mHm%6 zd&Y~GIDf^XjB%_>>lJ*lwRLo`o8!^jL!*OZ(HJU>nU*3UpEn*+Xy`CopXG=6(pbG|U+Q1d8 zx^Y_F=*DE;yc4%C#rP1vJXu)cbPKnP$(@ifeXVj_I==y8McQq-HzuPu_2bgtPxoo5Yb_8Smb!K^PsJRjqNRXVWP?$6b(IgxMW}AV zWwd)zg)_LThGVT*C#2EH!C0r2!5{ZoCC#DHb6#meX-{?RE7qy!bV1Lel&-^`h~*k) zoGz}clk>r2RgJ9?$k=ef%q$~Y7oph`v3$fV|EYWNL~nJ?6auF1+z=jk-*{+7zPC$) W9+*)z%Pmw_#7pbvWED8@hW`R^+Wzza diff --git a/d00/ex01/color.h b/d00/ex01/color.h new file mode 100644 index 0000000..f40596b --- /dev/null +++ b/d00/ex01/color.h @@ -0,0 +1,25 @@ +#ifndef COLOR_H +# define COLOR_H + +# define GRAY "\e[0;30m" +# define RED "\e[0;31m" +# define GREEN "\e[0;32m" +# define YELLOW "\e[0;33m" +# define BLUE "\e[0;34m" +# define PURPLE "\e[0;35m" +# define CYAN "\e[0;36m" +# define WHITE "\e[0;37m" + +# define B_GRAY "\e[1;30m" +# define B_RED "\e[1;31m" +# define B_GREEN "\e[1;32m" +# define B_YELLOW "\e[1;33m" +# define B_BLUE "\e[1;34m" +# define B_PURPLE "\e[1;35m" +# define B_CYAN "\e[1;36m" +# define B_WHITE "\e[1;37m" + +# define RESET "\e[0m" + +#endif + diff --git a/d00/ex01/main.cpp b/d00/ex01/main.cpp index d9013eb..0726c04 100644 --- a/d00/ex01/main.cpp +++ b/d00/ex01/main.cpp @@ -1,4 +1,5 @@ #include "PhoneBook.class.hpp" +#include "color.h" # include # include @@ -6,22 +7,31 @@ int main() { std::string cmd; + PhoneBook YellowPage; while (1) { + std::cout << std::endl; + std::cout << B_YELLOW "enter a command: ADD / SEARCH / EXIT" << std::endl; + std::cout << std::endl << B_GREEN; std::getline(std::cin, cmd); + std::cout << RESET << std::endl; if (cmd.compare("ADD") == 0) - std::cout << "it works !" << std::endl; + YellowPage.add_contact(); + else if (cmd.compare("SEARCH") == 0) + YellowPage.search_contact(); + else if (cmd.compare("EXIT") == 0) + break; } - return 0; } -/* - * class PhoneBook : - * add_contact - * print_phonebook - * search_by_index - * exit - */ +// B_GRAY "\e[1;30m" +// B_RED "\e[1;31m" +// B_GREEN "\e[1;32m" +// B_YELLOW "\e[1;33m" +// B_BLUE "\e[1;34m" +// B_PURPLE "\e[1;35m" +// B_CYAN "\e[1;36m" +// B_WHITE "\e[1;37m" diff --git a/d00/ex01/phonebook b/d00/ex01/phonebook index d87fd625b389747b292509c1b36912e26b816374..4ccd5b14b5e513f121d931b76f81ff87edbec892 100755 GIT binary patch literal 29776 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 NAxq-|mw}5F{|oYVk!An@