Retour au portfolio

Compte Rendu - Coach v1

Application mobile multiplateforme .NET MAUI

📋 Informations gĂ©nĂ©rales

Nom du projet : Coach v1 - Application de calcul d'IMG
Date de création : Projet BTS SIO SLAM
Auteur : Abdelmalek Elidrissi
Type : Application mobile multiplateforme

🎯 Objectifs du projet

đŸ› ïž Technologies utilisĂ©es

Framework

.NET MAUI C# XAML

Plateformes supportées

Android iOS Windows macOS (MacCatalyst)

Architecture

MSTest

đŸ“± .NET MAUI : PrĂ©sentation dĂ©taillĂ©e

Qu'est-ce que .NET MAUI ?

.NET MAUI (Multi-platform App UI) est un framework open-source développé par Microsoft qui permet de créer des applications natives pour plusieurs plateformes à partir d'un seul code source partagé.

🎯 Objectif principal : DĂ©velopper une fois, dĂ©ployer partout (Android, iOS, Windows, macOS) avec des performances natives et une expĂ©rience utilisateur optimale sur chaque plateforme.

Historique et évolution

📁 Structure du projet

Coach V1/ ├── MauiAppCoach/ # Application principale │ ├── MainPage.xaml # Interface utilisateur principale │ ├── MainPage.xaml.cs # Code-behind de la page principale │ ├── App.xaml # Application XAML │ ├── App.xaml.cs # Point d'entrĂ©e de l'application │ ├── AppShell.xaml # Navigation et structure de l'app │ ├── Platforms/ # Code spĂ©cifique par plateforme │ │ ├── Android/ │ │ ├── iOS/ │ │ ├── Windows/ │ │ └── MacCatalyst/ │ ├── Resources/ # Ressources (images, styles) │ │ ├── Images/ │ │ │ ├── smiley_parfait.png │ │ │ ├── smiley_surpoids.png │ │ │ ├── smiley_tropmaigre.png │ │ │ └── smiley.png │ │ └── Styles/ │ └── Tests/ # Tests unitaires ├── MauiAppCoach.Core/ # BibliothĂšque de classes partagĂ©e │ └── Modele/ │ └── Profil.cs # ModĂšle de donnĂ©es pour le calcul IMG ├── TestProjectCoach/ # Projet de tests └── MauiAppCoach.slnx # Solution Visual Studio

🔧 FonctionnalitĂ©s implĂ©mentĂ©es

1. Calcul de l'IMG (Indice de Masse Grasse)

L'application calcule l'IMG selon la formule de Deurenberg :

IMG = (1.2 × poids / tailleÂČ) + (0.23 × Ăąge) - (10.83 × sexe) - 5.4 OĂč : - poids : en kilogrammes - taille : en centimĂštres (convertie en mĂštres) - Ăąge : en annĂ©es - sexe : 1 pour homme, 0 pour femme

2. Évaluation selon le sexe

Pour les femmes (sexe = 0)

  • IMG < 25 : Trop maigre
  • 25 ≀ IMG < 30 : Parfait
  • IMG ≄ 30 : Surpoids

Pour les hommes (sexe = 1)

  • IMG < 15 : Trop maigre
  • 15 ≀ IMG < 20 : Parfait
  • IMG ≄ 20 : Surpoids

3. Interface utilisateur

Champs de saisie :

Affichage des résultats :

4. ModÚle de données

La classe Profil encapsule :

đŸ’» Code principal

Classe Profil

public class Profil { private int sexe; private int poids; private int taille; private int age; private double img; private string message; private string image; public Profil(int sexe, int poids, int taille, int age) { this.sexe = sexe; this.poids = poids; this.taille = taille; this.age = age; CalculIMG(); ResultatIMG(); } private void CalculIMG() { double tailleEnMetres = taille / 100.0; img = (1.2 * poids / (tailleEnMetres * tailleEnMetres)) + (0.23 * age) - (10.83 * sexe) - 5.4; } private void ResultatIMG() { if (sexe == 0) // Femme { if (img < 25) { message = "Trop maigre."; image = "smiley_tropmaigre.png"; } else if (img < 30) { message = "Parfait."; image = "smiley_parfait.png"; } else { message = "Surpoids."; image = "smiley_surpoids.png"; } } else // Homme { if (img < 15) { message = "Trop maigre."; image = "smiley_tropmaigre.png"; } else if (img < 20) { message = "Parfait."; image = "smiley_parfait.png"; } else { message = "Surpoids."; image = "smiley_surpoids.png"; } } } }

MainPage.xaml.cs

private void btCalculer_Clicked(object sender, EventArgs e) { int poids = Convert.ToInt32(entPoids.Text); int taille = Convert.ToInt32(entTaille.Text); int age = Convert.ToInt32(entAge.Text); int sexe = rdHomme.IsChecked ? 1 : 0; Profil profil = new Profil(sexe, poids, taille, age); CounterLabel.Text = "Votre IMG : " + profil.GetMessage() + profil.GetImg().ToString("0.0"); imgResultat.Source = profil.GetImage(); }

📾 Aperçu de l'application Coach v1

Voici un aperçu réel de l'application Coach v1 en exécution sur un émulateur Android (ici un Pixel 7 - API 33) :

Aperçu de l'application Coach v1 sur émulateur Android

Écran principal de l'application Coach v1 : saisie des donnĂ©es et rĂ©sultat de l'IMG.

Description détaillée de l'écran

Interprétation de cet aperçu :

Avec les valeurs de l'exemple (65 kg, 171 cm, 19 ans, Homme), l'application calcule un IMG de 14.8. Cela correspond Ă  la catĂ©gorie « Trop maigre » pour un homme, d'oĂč l'affichage d'un smiley qui n'est pas entiĂšrement satisfait. Cet Ă©cran illustre concrĂštement le lien entre la formule mathĂ©matique, la logique mĂ©tier de la classe Profil et le retour visuel donnĂ© Ă  l'utilisateur.

🚀 Installation et dĂ©marrage

Prérequis

Étapes d'installation

  1. Ouvrir la solution
    Ouvrir MauiAppCoach.slnx dans Visual Studio
  2. Restaurer les packages NuGet
    dotnet restore
  3. Compiler l'application
    dotnet build
  4. Lancer l'application
    • SĂ©lectionner la plateforme cible (Android, iOS, Windows)
    • Appuyer sur F5 ou cliquer sur "DĂ©marrer"

Plateformes disponibles

💡 Points techniques remarquables

Architecture

  • SĂ©paration ModĂšle/Interface
  • Code partagĂ© (MauiAppCoach.Core)
  • Code spĂ©cifique par plateforme

Calculs

  • Formule IMG validĂ©e (Deurenberg)
  • Conversion cm → mĂštres
  • PrĂ©cision avec une dĂ©cimale

Interface utilisateur

  • XAML dĂ©claratif
  • Code-behind C#
  • Ressources centralisĂ©es

Tests

  • Tests unitaires
  • MSTest framework
  • Validation des calculs

🐛 DifficultĂ©s rencontrĂ©es et solutions

ProblĂšme 1 : Configuration multiplateforme

Configuration des différentes plateformes (Android, iOS, Windows).

Solution : Utilisation de .NET MAUI qui simplifie la configuration multiplateforme avec des fichiers manifestes spécifiques par plateforme.
ProblÚme 2 : Conversion des unités

Conversion correcte de la taille de centimĂštres en mĂštres pour le calcul.

Solution : Division par 100.0 pour obtenir des mÚtres avec précision décimale.
ProblÚme 3 : Résulat neutre ( ni réussite ni échec )

Obtenir les bons résultat lors de l'exécution des tests unitaires

Solution : Faire référence à l'outil de test et appeler aux différentes solutions.
ProblÚme 4 : Gestion des résultats selon le sexe

Seuils différents pour hommes et femmes.

Solution : Implémentation de la méthode `ResultatIMG()` avec conditions spécifiques selon la valeur de `sexe`.

📈 AmĂ©liorations possibles

Fonctionnalités

  • Validation des entrĂ©es
  • Gestion des erreurs (Try-catch)
  • Historique des calculs
  • Graphiques d'Ă©volution
  • Objectifs de poids/IMG

Technique

  • Export PDF/CSV
  • Localisation multilingue
  • ThĂšmes (mode sombre/clair)
  • Base de donnĂ©es
  • Synchronisation cloud

📚 CompĂ©tences dĂ©veloppĂ©es

Développement mobile

  • .NET MAUI framework
  • XAML dĂ©claratif
  • C# orientĂ© objet avancĂ©

Architecture

  • Code partagĂ© entre plateformes
  • ModularitĂ© (projets sĂ©parĂ©s)
  • Calculs et logique mĂ©tier

    • ImplĂ©mentation formules mathĂ©matiques
    • Validation des donnĂ©es
    • Tests unitaires

    Multiplateforme

    • Android (configuration et dĂ©veloppement)
    • iOS (sur macOS)
    • Windows (application native)
    • macOS (MacCatalyst)

    🎓 Conclusion

    Ce projet a permis de découvrir le développement d'applications mobiles multiplateformes avec .NET MAUI. L'application combine une interface utilisateur simple avec une logique de calcul précise pour fournir un outil utile de calcul d'IMG.

    L'utilisation de .NET MAUI démontre la capacité à créer des applications natives pour plusieurs plateformes à partir d'un seul code source, ce qui est un avantage majeur pour le développement moderne.

    Points forts :
    • Application multiplateforme fonctionnelle
    • Code bien structurĂ© avec sĂ©paration des responsabilitĂ©s
    • Interface utilisateur intuitive
    • Tests unitaires pour valider la logique

    Prochaines étapes : Amélioration de l'interface utilisateur, ajout de fonctionnalités avancées (historique, graphiques), validation des entrées et gestion des erreurs.