From c2b097faccd0413bcb26e10cb18879f04e906696 Mon Sep 17 00:00:00 2001 From: nemo Date: Fri, 31 Jan 2025 16:43:56 +0100 Subject: [PATCH] init --- .gitignore | 1 + Makefile | 9 +++ fiche.c | 30 ++++++++ main.c | 214 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 254 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 fiche.c create mode 100644 main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..affdbe8 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +compta diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..42444de --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +BIN=compta + +all: $(BIN) + +compta: main.c fiche.c + clang main.c -o $(BIN) + +run: all + ./$(BIN) diff --git a/fiche.c b/fiche.c new file mode 100644 index 0000000..18f09de --- /dev/null +++ b/fiche.c @@ -0,0 +1,30 @@ +/* + * [nom] = { + * anciennete, nombre heure, nombre role, + * {role1, role2, ...}, + * {pourcentage1, pourcentage2, ...}, + * {niveau1, niveau2, ...}, + * }; + * + * exemple : + * + * [MAGNAUD] = { + * 10, 4*35, 3, + * {DEV, GRAPHISTE, PROJECT_MANAGER}, + * {75.0f, 15.0f, 10.0f}, + * {JUNIOR, SENIOR, EXPERT}, + * }; + */ + +// [HAMZA] = {0, 4*35, 1, {DEV}, {100.0f}, {JUNIOR}}, +// [DORIAN] = {0, 4*35, 1, {DESIGNER}, {100.0f}, {JUNIOR}}, +// [EBRAL] = {0, 4*35, 1, {GRAPHISTE}, {100.0f}, {JUNIOR}}, +// [LIAM] = {0, 4*35, 1, {PROJECT_MANAGER}, {100.0f}, {JUNIOR}}, + +[HAMZA] = {10, 500, 3, {DEV, DESIGNER, PROJECT_MANAGER}, {75.0f, 20.0f, 5.0f}, {EXPERT, EXPERT, EXPERT}}, + +[DORIAN] = {0, 4*35, 2, {DEV, DESIGNER}, {75.0f, 25.0f}, {JUNIOR, JUNIOR}}, + +[EBRAL] = {0, 4*35, 2, {DEV, DESIGNER}, {70.0f, 30.0f}, {JUNIOR, JUNIOR}}, + +[LIAM] = {0, 4*35, 3, {DEV, DESIGNER, PROJECT_MANAGER}, {70.0f, 25.0f, 5.0f}, {JUNIOR, JUNIOR, JUNIOR}}, diff --git a/main.c b/main.c new file mode 100644 index 0000000..2195eaf --- /dev/null +++ b/main.c @@ -0,0 +1,214 @@ +#include +#include + +#define RED "\033[31m" +#define BOLD "\033[1m" +#define NOCOLOR "\033[0m" + +#define NET2BRUT 1.282194f + +typedef enum Role { + DEV, + DESIGNER, + GRAPHISTE, + PROJECT_MANAGER, + ROLE_COUNT, +} Role; + +const char* role_name[] = { + [DEV] = "Developpeur", + [DESIGNER] = "Designer", + [GRAPHISTE] = "Graphiste", + [PROJECT_MANAGER] = "Project Manager", +}; + +static_assert( + sizeof(role_name)/sizeof(*role_name) == ROLE_COUNT, + "mettre a jour la liste des noms des roles ou enum Role" +); + +float role_salaire[] = { + [DEV] = 17.857142f, + [DESIGNER] = 14.878571f, + [GRAPHISTE] = 14.285714f, + [PROJECT_MANAGER] = 16.666666f, +}; + +static_assert( + sizeof(role_salaire)/sizeof(*role_salaire) == ROLE_COUNT, + "mettre a jour la liste des salaires des roles ou enum Role" +); + + +typedef enum Niveau { + JUNIOR, + SENIOR, + EXPERT, + NIVEAU_COUNT, +} Niveau; + +const char* niveau_name[] = { + [JUNIOR] = "Junior", + [SENIOR] = "Senior", + [EXPERT] = "Expert", +}; + +static_assert( + sizeof(niveau_name)/sizeof(*niveau_name) == NIVEAU_COUNT, + "mettre a jour la liste des noms des niveaux ou enum Niveau" +); + +float niveau_salaire[] = { + [JUNIOR] = 1.0f, + // [JUNIOR] = 0.61f, + [SENIOR] = 1.5f, + [EXPERT] = 2.0f, +}; + +static_assert( + sizeof(niveau_salaire)/sizeof(*niveau_salaire) == NIVEAU_COUNT, + "mettre a jour la liste des salaires des niveaux ou enum Niveau" +); + + +typedef enum Personne { + HAMZA, + DORIAN, + EBRAL, + LIAM, + PERSONNE_COUNT, +} Personne; + +const char* personne_name[] = { + [HAMZA] = "Hamza", + [DORIAN] = "Dorian", + [EBRAL] = "Ebral", + [LIAM] = "Liam", +}; + +static_assert( + sizeof(personne_name)/sizeof(*personne_name) == PERSONNE_COUNT, + "mettre a jour la liste des noms ou enum Personne" +); + + +typedef struct Employee { + int anciennete; + int nb_heure; + int nb_role; + Role role[ROLE_COUNT]; + float pourcentage[ROLE_COUNT]; + Niveau niveau[ROLE_COUNT]; +} Employee; + +Employee employees[] = { +#include "fiche.c" +}; + +const int nb_employee = sizeof(employees)/sizeof(*employees); + +static_assert( + sizeof(employees)/sizeof(*employees) == PERSONNE_COUNT, + "mettre a jour la liste des employees ou enum Personne" +); + +// budget net +// float budget = 1426.3f / NET2BRUT; +float budget = 7207.2f / NET2BRUT; + +void print_employees() +{ + float salaire_normal[nb_employee]; + + for (int i = 0; i < nb_employee; i++) { + printf( + BOLD"%s"NOCOLOR" (%ih, %ians): \n", + personne_name[i], employees[i].nb_heure, employees[i].anciennete + ); + float total_pourcentage = 0.0f; + for (int y = 0; y < employees[i].nb_role; y++) { + total_pourcentage += employees[i].pourcentage[y]; + float salaire_role = + role_salaire[employees[i].role[y]] + * employees[i].pourcentage[y]/100 + * employees[i].nb_heure + * niveau_salaire[employees[i].niveau[y]] + * (100+employees[i].anciennete)/100; + salaire_normal[i] += salaire_role; + printf( + " - (%.01f%%) %s %s = " + BOLD"%.02f€"NOCOLOR" net, " + BOLD"%.02f€"NOCOLOR" brut\n", + + employees[i].pourcentage[y], + role_name[employees[i].role[y]], + niveau_name[employees[i].niveau[y]], + salaire_role, + salaire_role * NET2BRUT + ); + } + if (total_pourcentage != 100) { + printf( + BOLD RED"[ERROR]"NOCOLOR + " pourcentage total different de 100%% (%.03f%%)\n", + total_pourcentage + ); + } else { + printf( + " - [TOTAL] = " + BOLD"%.02f€"NOCOLOR" net, " + BOLD"%.02f€"NOCOLOR" brut\n", + + salaire_normal[i], + salaire_normal[i] * NET2BRUT + ); + } + printf("\n"); + } + + float salaire_normal_total = 0.0f; + for (int i = 0; i < nb_employee; i++) { + salaire_normal_total += salaire_normal[i]; + } + printf( + "[TOTAL] budget salaire employees = " + BOLD"%.02f€"NOCOLOR" net, " + BOLD"%.02f€"NOCOLOR" brut\n\n", + + salaire_normal_total, + salaire_normal_total * NET2BRUT + ); + + float salaire_budget_total = 0.0f; + float salaire_budget[nb_employee]; + for (int i = 0; i < nb_employee; i++) { + salaire_budget[i] = salaire_normal[i] * budget / salaire_normal_total; + salaire_budget_total += salaire_budget[i]; + printf( + "%s: " + "net: ("BOLD"%.02f€ -> %.02f€"NOCOLOR") " + "brut: ("BOLD"%.02f€ -> %.02f€"NOCOLOR")\n", + + personne_name[i], + salaire_normal[i], + salaire_budget[i], + salaire_normal[i] * NET2BRUT, + salaire_budget[i] * NET2BRUT + ); + + } + + printf( + "\n[TOTAL] salaire employees %% budget = " + BOLD"%.02f€"NOCOLOR" net, " + BOLD"%.02f€"NOCOLOR" brut\n", + + salaire_budget_total, + salaire_budget_total * NET2BRUT + ); +} + +int main() +{ + print_employees(); +}