Une calculatrice scientifique moderne développée en WPF (.NET 8.0) avec une architecture propre et maintenable utilisant le pattern Partial Classes pour une séparation optimale des responsabilités.
- Aperçu
- Fonctionnalités
- Architecture
- Structure du projet
- Installation
- Utilisation
- Technologies
- Déploiement
- Contribution
Simply Calc est une calculatrice scientifique complète offrant des opérations arithmétiques de base, des fonctions trigonométriques et la gestion de constantes mathématiques. L'application suit les principes SOLID et utilise une architecture modulaire pour faciliter la maintenance et l'évolution.
┌─────────────────────────────────────┐
│ Simply Calc - v1.0.0 │
├─────────────────────────────────────┤
│ sin(45)+cos(30)×π │ ← Zone d'opération
│ = 4.23594 │ ← Résultat intermédiaire
│ 4.23594 │ ← Résultat principal
├─────────────────────────────────────┤
│ [Sin] [Cos] [Tan] [CE] [C] │
│ [Arc] [Arc] [Arc] [Bck] [÷] │
│ [ π ] [ 7 ] [ 8 ] [ 9 ] [×] │
│ [ e ] [ 4 ] [ 5 ] [ 6 ] [-] │
│ [+/-] [ 1 ] [ 2 ] [ 3 ] [+] │
│ [+/-] [ 0 ] [ . ] [ = ] │
└─────────────────────────────────────┘
- Addition, soustraction, multiplication, division
- Gestion des nombres décimaux
- Changement de signe (+/-)
- Effacement (CE / C / Back)
- Trigonométrie directe : sin, cos, tan (en degrés)
- Trigonométrie inverse : arcsin, arccos, arctan
- Constantes : π (Pi), e (Euler)
- Conversion automatique degrés ↔ radians
- Interface WPF moderne et responsive
- Ajustement dynamique de la taille de police
- Gestion des erreurs avec affichage visuel
- Support clavier complet
- Thème sombre élégant
- Icône personnalisée
- Historique des calculs avec export CSV/JSON/TXT
- Validation des expressions en temps réel
- Gestion des parenthèses automatique
- Calcul en chaîne
- Logs d'erreurs détaillés
- Lanceur discret (VBS/BAT)
L'application utilise intensivement les partial classes pour séparer les responsabilités de la fenêtre principale :
MainWindow
├── MainWindow.xaml.cs (Constructeur et initialisation)
│
└── UI/ (Partial Classes)
├── MainWindowState.cs (État et services)
├── MainWindowOperator.cs (Opérateurs arithmétiques)
├── MainWindowFunction.cs (Fonctions scientifiques)
├── MainWindowSpecialKey.cs (Touches spéciales)
├── MainWindowCompute.cs (Moteur de calcul)
├── MainWindowDisplay.cs (Gestion de l'affichage)
└── MainWindowEventHandler.cs (Gestionnaires d'événements)
- Separation of Concerns : Chaque partial class a une responsabilité unique
- DRY (Don't Repeat Yourself) : Code réutilisable via helpers et services
- Single Responsibility Principle : Classes cohésives avec un seul objectif
- Dependency Injection : Services injectés via constructeur
- Error Handling : Gestion centralisée des erreurs
Simply-Calc_AppWPF/
│
├── 📂 bin/ # Fichiers compilés
│ ├── Debug/net8.0-windows/ # Build Debug
│ │ ├── Simply-Calc_AppWPF.exe # Exécutable Debug
│ │ ├── Simply-Calc_AppWPF.dll # (107 KB)
│ │ └── Simply-Calc_AppWPF.pdb # Symboles Debug
│ └── Release/net8.0-windows/ # Build Release
│ ├── Simply-Calc_AppWPF.exe # Exécutable Release
│ ├── Simply-Calc_AppWPF.dll # (97 KB - Optimisé)
│ └── Simply-Calc_AppWPF.pdb # Symboles Release
│
├── 📂 core/ # Logique métier principale
│ ├── CalculatorEngine.cs # Moteur de calcul (12 KB)
│ ├── Constants.cs # Constantes globales (13 KB)
│ └── OperationHistory.cs # Historique des opérations (17 KB)
│
├── 📂 Models/ # Modèles de données
│ ├── CalculatorState.cs # État de la calculatrice (13 KB)
│ └── OperatorType.cs # Types d'opérateurs (9 KB)
│
├── 📂 Services/ # Services applicatifs
│ ├── ErrorHandler.cs # Gestion des erreurs (20 KB)
│ ├── ExpressionEvaluator.cs # Évaluation d'expressions (16 KB)
│ └── FunctionRegistry.cs # Registre des fonctions (17 KB)
│
├── 📂 Helpers/ # Classes utilitaires
│ ├── FormattingHelper.cs # Formatage des nombres (7 KB)
│ ├── MathHelper.cs # Opérations mathématiques (9 KB)
│ └── ParsingHelper.cs # Parsing et validation (12 KB)
│
├── 📂 UI/ # Partial classes UI
│ ├── MainWindowState.cs # Variables d'état (8 KB)
│ ├── MainWindowOperator.cs # Logique opérateurs (4 KB)
│ ├── MainWindowFunction.cs # Logique fonctions (10 KB)
│ ├── MainWindowSpecialKey.cs # Touches spéciales (9 KB)
│ ├── MainWindowCompute.cs # Calculs (2 KB)
│ ├── MainWindowDisplay.cs # Affichage (7 KB)
│ └── MainWindowEventHandler.cs # Événements (14 KB)
│
├── 📂 Ressources/ # Ressources graphiques
│ ├── Demo.png # Capture d'écran (457 KB)
│ ├── icons8-calculator-480.ico # Icône de l'application
│ ├── Launcher.bat # Script de lancement
│ ├── launch_cach.vbs # Lanceur discret
│ └── Simply_Calc.exe.lnk # Raccourci Windows
│
├── 📂 log/ # Journaux d'application
│ ├── error.log # Logs d'erreurs
│ └── Operation.log # Logs des opérations
│
├── 📂 obj/ # Fichiers temporaires de compilation
│ ├── Debug/net8.0-windows/ # Objets Debug
│ └── Release/net8.0-windows/ # Objets Release
│
├── MainWindow.xaml # Interface XAML (6 KB)
├── MainWindow.xaml.cs # Code-behind principal (7 KB)
├── App.xaml # Configuration application (5 KB)
├── App.xaml.cs # Point d'entrée (3 KB)
├── AssemblyInfo.cs # Informations d'assembly
├── Simply-Calc_AppWPF.csproj # Fichier projet (.6 KB)
├── Simply-Calc_AppWPF.sln # Solution Visual Studio
├── .gitignore # Configuration Git (6 KB)
├── .gitattributes # Attributs Git (2 KB)
└── README.md # Documentation (12 KB)
| Catégorie | Nombre de fichiers | Taille totale |
|---|---|---|
| Code source (.cs) | 23 | ~220 KB |
| XAML | 2 | ~12 KB |
| Ressources | 5 | ~465 KB |
| Exécutables | 2 (Debug/Release) | ~253 KB |
| Documentation | 1 | ~13 KB |
| Total | ~33 fichiers principaux | ~963 KB |
- Windows 10/11 (64-bit)
- .NET 8.0 SDK ou supérieur
- Visual Studio 2022 (recommandé) ou VS Code
- Git (optionnel)
- Cloner le dépôt
git clone https://github.com/KryssSampi/Simply-Calc_AppWPF.git
cd Simply-Calc_AppWPF- Restaurer les packages NuGet
dotnet restore- Compiler le projet
Mode Debug
dotnet build --configuration DebugMode Release (Optimisé) :* :
dotnet build --configuration Release- Exécuter l'application
Depuis le terminal :
dotnet runOu directement :
# Debug
.\bin\Debug\net8.0-windows\Simply-Calc_AppWPF.exe
# Release (Recommandé)
.\bin\Release\net8.0-windows\Simply-Calc_AppWPF.exe- Ouvrir
Simply-Calc_AppWPF.slndans Visual Studio 2022 - Sélectionner la configuration (Debug/Release)
- Appuyer sur
F5pour compiler et exécuter
Exemples :
5 + 3 → 8
10 - 4 → 6
7 × 8 → 56
20 ÷ 4 → 5
-5 + 3 → -2
Exemples :
sin(30) → 0.5
cos(60) → 0.5
tan(45) → 1
arcsin(0.5) → 30
π × 2 → 6.283185
e × 3 → 8.154845
Exemples :
sin(45) + cos(30) × π → 4.23594
3 × (4 + 5) → 27
arctan(1) × 4 → 180
| Touche | Action |
|---|---|
0-9 |
Saisie de chiffres |
+ - * / |
Opérateurs |
. ou , |
Point décimal |
Enter |
Égal (=) |
Backspace |
Supprimer dernier caractère |
Delete |
Clear Entry (CE) |
Escape |
Clear All (C) |
F9 |
Changement de signe |
Ctrl+S |
sin |
Ctrl+C |
cos |
Ctrl+T |
tan |
Ctrl+P |
π |
Ctrl+E |
e |
- .NET 8.0 - Framework applicatif
- C# 12.0 - Langage de programmation
- WPF (Windows Presentation Foundation) - Interface utilisateur
- XAML - Markup interface
System.Windows- Framework WPFSystem.Globalization- Gestion des formats numériquesSystem.IO- Gestion des fichiers (logs, exports)
- Visual Studio 2022 - IDE
- Git - Contrôle de version
- MSBuild - Système de compilation
- Partial Classes - Séparation des responsabilités
- MVVM-like - État séparé de la logique UI
- Service Pattern - Services réutilisables
- Repository Pattern - Historique des opérations
- Strategy Pattern - Fonctions et opérateurs
Pour créer une version optimisée pour la production :
dotnet publish -c Release --self-contained false -r win-x64L'exécutable sera généré dans :
bin/Release/net8.0-windows/
Le projet inclut plusieurs options de lancement :
- Exécutable direct :
Simply-Calc_AppWPF.exe - Script batch :
Ressources/Launcher.bat - Lanceur discret VBS :
Ressources/launch_cach.vbs(sans console) - Raccourci Windows :
Ressources/Simply_Calc.exe.lnk
L'icône de l'application est définie dans le fichier .csproj :
<ApplicationIcon>Ressources\icons8-calculator-480.ico</ApplicationIcon>┌──────────────┐
│ Saisie User │
└──────┬───────┘
│
▼
┌──────────────────┐
│ Validation Input │
└──────┬───────────┘
│
▼
┌─────────────────┐
│ Parsing/Tokenize│
└──────┬──────────┘
│
▼
┌──────────────────┐
│ CalculatorEngine │
└──────┬───────────┘
│
▼
┌───────────────┐
│ Formatage │
└──────┬────────┘
│
▼
┌──────────────┐
│ Affichage │
└──────────────┘
┌─────────────────────────────────────────┐
│ MainWindow (UI) │
│ ┌───────────────────────────────────┐ │
│ │ Partial Classes (UI/) │ │
│ │ - State, Operator, Function │ │
│ │ - SpecialKey, Compute, Display │ │
│ │ - EventHandler │ │
│ └───────────────────────────────────┘ │
└──────────────┬──────────────────────────┘
│
│ utilise
▼
┌──────────────────────────────────────────┐
│ Services Layer │
│ ┌────────────────────────────────────┐ │
│ │ • CalculatorEngine │ │
│ │ • ErrorHandler │ │
│ │ • ExpressionEvaluator │ │
│ │ • FunctionRegistry │ │
│ │ • OperationHistory │ │
│ └────────────────────────────────────┘ │
└──────────────┬───────────────────────────┘
│
│ utilise
▼
┌──────────────────────────────────────────┐
│ Helpers & Models │
│ ┌────────────────────────────────────┐ │
│ │ • FormattingHelper │ │
│ │ • MathHelper │ │
│ │ • ParsingHelper │ │
│ │ • CalculatorState │ │
│ │ • OperatorType │ │
│ └────────────────────────────────────┘ │
└──────────────────────────────────────────┘
L'application génère automatiquement des logs dans le dossier log/ :
log/
├── error.log # Logs d'erreurs critiques
└── Operation.log # Historique des opérations
Format des logs d'erreurs :
[2025-10-14 23:44:15] [ERROR] Division par zéro
Contexte: Expression: 5/0
Stack Trace: ...
# Exécuter les tests unitaires (à venir)
dotnet testLes contributions sont les bienvenues ! Voici comment contribuer :
- Fork le projet
- Créer une branche (
git checkout -b feature/AmazingFeature) - Commit les changements (
git commit -m 'Add AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
- Suivre les conventions de nommage C#
- Documenter avec XML comments
- Respecter l'architecture en partial classes
- Ajouter des tests unitaires pour les nouvelles fonctionnalités
- Maintenir la cohérence avec l'organisation des dossiers
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
Moi : Kryss Nana .
- GitHub: Kryss Nana
- Email: Kryss Nana Mail
- Microsoft pour le framework .NET et WPF
- Icons8 pour l'icône de calculatrice
- La communauté C# pour les ressources et l'inspiration
- Tous les contributeurs du projet
- Mode scientifique avancé (log, ln, exp, puissance)
- Mode programmeur (binaire, hexadécimal)
- Thèmes personnalisables (clair/sombre)
- Support multi-langue (FR/EN)
- Tests unitaires complets
- Graphiques de fonctions
- Résolution d'équations
- Calcul matriciel
- Mode RPN (Notation Polonaise Inverse)
- Historique persistant entre sessions
- Mode tablette tactile
- Synchronisation cloud
- Plugins extensibles
- API REST
- La division par zéro est gérée mais affiche "Impossible"
- Les très grands nombres passent en notation scientifique
- Le support des parenthèses imbriquées est limité à un niveau
- Les logs peuvent devenir volumineux avec le temps
- Vérifier que .NET 8.0 Runtime est installé
- Exécuter en mode administrateur si nécessaire
- Vérifier les logs dans le dossier
log/
- Consulter
log/error.logpour les détails - Vérifier la syntaxe de l'expression
- Essayer avec l'effacement complet (C)
- Utiliser la version Release plutôt que Debug
- Vider l'historique périodiquement
- Nettoyer les anciens logs
Pour toute question ou problème :
- Ouvrir une issue
- Consulter la documentation
- Email: support@example.com
⭐ Si vous aimez ce projet, n'hésitez pas à lui donner une étoile !
Fait avec ❤️ en C# et WPF
Version: 1.0.0
