MiniCRM - це настільна WPF-додаток для управління клієнтами та замовленнями з використанням SQLite як бази даних. Проект реалізований згідно з MVVM паттерном та використовує Repository Pattern для роботи з даними.
- ✅ Додавання нових клієнтів
- ✅ Редагування інформації про клієнтів
- ✅ Видалення клієнтів
- ✅ Пошук клієнтів за ім'ям, email або телефоном
- ✅ Фільтрація клієнтів за статусом (Активний/Неактивний)
- ✅ Створення нових замовлень
- ✅ Редагування замовлень
- ✅ Видалення замовлень
- ✅ Перегляд замовлень клієнта
- ✅ Пошук замовлень за назвою товару
- ✅ Фільтрація замовлень за статусом та періодом
- ✅ Автоматичний розрахунок загальної суми
- ✅ Загальна статистика по клієнтах
- ✅ Статистика по замовленнях за статусами
- ✅ Загальний дохід від завершених замовлень
- ✅ Топ-10 клієнтів за сумою замовлень
- ✅ Фільтрація звітів за періодом
- Платформа: WPF (.NET Framework 4.7.2)
- Мова: C#
- База даних: SQLite
- Архітектурний паттерн: MVVM (Model-View-ViewModel)
- Паттерни проектування: Repository Pattern, Dependency Injection
MiniCRM/
├── Models/ # Моделі даних
│ ├── Client.cs
│ ├── ClientStatus.cs
│ ├── Order.cs
│ └── OrderStatus.cs
├── ViewModels/ # MVVM ViewModels
│ ├── ViewModelBase.cs
│ ├── MainWindowViewModel.cs
│ ├── ClientListViewModel.cs
│ ├── ClientEditViewModel.cs
│ ├── OrderListViewModel.cs
│ ├── OrderEditViewModel.cs
│ └── ReportsViewModel.cs
├── Views/ # WPF Views
│ ├── ClientListView.xaml
│ ├── ClientEditView.xaml
│ ├── OrderListView.xaml
│ ├── OrderEditView.xaml
│ └── ReportsView.xaml
├── Services/ # Бізнес-логіка
│ ├── ClientService.cs
│ ├── OrderService.cs
│ └── ReportService.cs
├── Data/ # Робота з даними
│ ├── DatabaseContext.cs
│ ├── IRepository.cs
│ ├── ClientRepository.cs
│ └── OrderRepository.cs
├── Helpers/ # Допоміжні класи
│ ├── RelayCommand.cs
│ └── Converters.cs
└── Resources/ # Ресурси
- Visual Studio 2019 або новіша версія
- .NET Framework 4.7.2 або новіша версія
-
Відкрийте проект у Visual Studio
Відкрийте файл MiniCRM.sln у Visual Studio -
Встановіть NuGet пакети
- Клацніть правою кнопкою миші на проекті
- Виберіть "Manage NuGet Packages"
- Встановіть пакет
System.Data.SQLite.Coreверсії 1.0.118.0
Або використайте Package Manager Console:
Install-Package System.Data.SQLite.Core -Version 1.0.118.0 -
Зберіть проект
Build > Build Solution (Ctrl+Shift+B) -
Запустіть додаток
Debug > Start Debugging (F5)
При першому запуску додатку автоматично створюється база даних SQLite (minicrm.db) в директорії виконання програми з наступними таблицями:
CREATE TABLE Clients (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
FirstName TEXT NOT NULL,
LastName TEXT NOT NULL,
Email TEXT UNIQUE,
Phone TEXT,
Address TEXT,
RegistrationDate DATETIME DEFAULT CURRENT_TIMESTAMP,
Status INTEGER DEFAULT 1,
Notes TEXT
);CREATE TABLE Orders (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
ClientId INTEGER NOT NULL,
ProductName TEXT NOT NULL,
Description TEXT,
Quantity INTEGER DEFAULT 1,
UnitPrice DECIMAL(10,2),
TotalAmount DECIMAL(10,2),
CreatedDate DATETIME DEFAULT CURRENT_TIMESTAMP,
PlannedDate DATETIME,
Status INTEGER DEFAULT 0,
FOREIGN KEY (ClientId) REFERENCES Clients(Id) ON DELETE CASCADE
);- Ім'я та прізвище: обов'язкові поля (макс. 100 символів)
- Email: валідація формату email (макс. 255 символів)
- Телефон: валідація формату телефону (макс. 20 символів)
- Адреса: необов'язкове поле (макс. 500 символів)
- Клієнт: обов'язкове поле
- Назва товару/послуги: обов'язкове поле (макс. 200 символів)
- Кількість: повинна бути більше 0
- Ціна: повинна бути більше 0
- Планована дата: не може бути раніше дати створення
- Активний (Active)
- Неактивний (Inactive)
- Нове (New)
- В роботі (InProgress)
- Завершено (Completed)
- Скасовано (Cancelled)
- Повне розділення логіки від інтерфейсу
- Використання INotifyPropertyChanged для оновлення UI
- Command Pattern для обробки подій
- Generic інтерфейс IRepository
- Окремі репозиторії для кожної сутності
- Інкапсуляція логіки роботи з базою даних
- Ручна реалізація DI в MainWindow
- Впровадження залежностей через конструктори
- Try-catch блоки у всіх операціях з БД
- Виведення інформативних повідомлень користувачу
- Валідація даних перед збереженням
Реалізовано згідно технічного завдання для навчального проекту.
Навчальний проект.
Розробник: Сергій Щербаков Email: sergiyscherbakov@ukr.net Telegram: @s_help_2010