Smart Event & Task Manager - System
Design
1. System Overview
Objective:
A C++ application for managing tasks and events, storing data in a database, providing
reminders, search, and reporting features.
Components:
User Interface (UI): Console or GUI (Qt/SFML)
Application Logic (C++ Core): Handles tasks, events, and notifications
Database Layer (SQLite/MySQL): Stores users, tasks, events, and history
Notification System: Optional multi-threaded reminders
2. Modules & Responsibilities
Authentication Module
User registration
Login
Password validation & hashing
Task/Event Manager
CRUD operations on tasks/events
Priority management
Database Handler
Connect to DB
Execute queries
Map C++ objects to DB
Search & Filter Module
Search tasks by date, keyword, category, or priority
Reminder / Notification Module
Multi-threaded notifications for upcoming tasks
Reporting Module
Generate daily/weekly summaries
Export CSV/text
3. Database Design
Users Table:
user_id (INTEGER PK)
username (TEXT)
password (TEXT)
email (TEXT)
Tasks Table:
task_id (INTEGER PK)
user_id (INTEGER FK)
title (TEXT)
description (TEXT)
category (TEXT)
priority (INT)
due_date (DATE/TEXT)
status (TEXT)
4. System Flow (Tree Structure)
Start
└── User Login/Register
├── Success → Main Menu (UI)
│ ├── Manage Tasks
│ │ └── CRUD operations → Update DB via DB Layer → Notification Module (optional)
│ ├── Search/Filter
│ │ └── Query DB → Display results
│ └── Reports/Export
│ └── Generate CSV/Text → DB
└── Error/Retry
5. Interaction with Database
- All modules communicate with Database Handler
- Database Handler executes SQL queries (INSERT, UPDATE, DELETE, SELECT)
- C++ objects (Task/User) map to database rows
Example: Adding a Task
- User enters task info → Task Manager validates input
- Task Manager calls Database Handler → executes INSERT
- Task stored in Tasks table → available for search, reporting, notifications
6. Optional Enhancements
GUI using Qt
Multi-threaded reminder system (std::thread)
Task sorting by priority / due date
Notifications pop up on console or GUI