A comprehensive GUI-based offline application built entirely in C for complete student lifecycle management
- Secure Login System with email/password authentication
- SHA-256 password hashing with unique salt per user
- SQL injection prevention using prepared statements
- Session management with secure user context
- Multi-class support - manage multiple classes simultaneously
- Add, edit, delete, and search student records
- Detailed student profiles with roll number, name, email, and class
- Real-time student list with TreeView display
- Bulk operations support
- Create and manage assignments with title, subject, and due dates
- Track submissions per student with submission status
- Quality assessment - rate work quality (Excellent, Good, Average, Poor)
- Subject categorization - organize by subject areas
- Due date tracking - monitor deadlines and late submissions
- Per-student submission details with quality ratings
- Daily attendance tracking - mark Present/Absent for each student
- Date-based views - review attendance by specific dates
- Class-wise attendance - separate records per class
- Attendance history - view past attendance records
- Bulk marking - efficient attendance entry
- Student performance reports
- Assignment submission statistics
- Attendance summaries by student and class
- Export capabilities (planned)
- Offline operation - all data stored locally in SQLite
- Automatic database initialization
- Data persistence across sessions
- Portable deployment - run from USB drive or any location
- Clean modern GUI built with GTK 3
- Responsive layout that adapts to window size
- Intuitive navigation with clear menu structure
- Real-time updates - UI refreshes automatically
- Custom application icon - branded identity
- Language: C (C11 standard)
- GUI Framework: GTK 3
- Database: SQLite 3
- Security: OpenSSL (SHA-256 hashing)
Before building this project, you need to install the following dependencies:
-
Install MSYS2 from https://www.msys2.org/
-
Open MSYS2 MinGW 64-bit terminal and run:
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-gtk3
pacman -S mingw-w64-x86_64-sqlite3
pacman -S mingw-w64-x86_64-openssl
pacman -S mingw-w64-x86_64-pkg-config
pacman -S makesudo apt-get update
sudo apt-get install build-essential
sudo apt-get install libgtk-3-dev
sudo apt-get install libsqlite3-dev
sudo apt-get install libssl-dev
sudo apt-get install pkg-configsudo dnf install gcc make
sudo dnf install gtk3-devel
sudo dnf install sqlite-devel
sudo dnf install openssl-devel
sudo dnf install pkg-config-
Clone or extract the project to your desired location
-
Navigate to the project directory:
cd "C Final Prokect"- Build the project:
make- Run the application:
make runOr run directly:
./build/assignment_tracker.exe # Windows
./build/assignment_tracker # LinuxC Final Prokect/
├── include/ # Header files
│ ├── common.h # Common definitions and utilities
│ ├── database.h # Database operations
│ ├── security.h # Password hashing and security
│ ├── validation.h # Input validation functions
│ ├── ui_login.h # Login screen
│ ├── ui_dashboard.h # Main dashboard
│ ├── ui_students.h # Student management
│ ├── ui_assignments.h # Assignment tracking
│ ├── ui_attendance.h # Attendance management
│ └── ui_reports.h # Reports and analytics
├── src/ # Source files
│ ├── main.c # Application entry point
│ ├── common.c # Common utilities implementation
│ ├── database.c # Database operations
│ ├── security.c # Security functions
│ ├── validation.c # Validation functions
│ ├── ui_login.c # Login UI
│ ├── ui_dashboard.c # Dashboard UI
│ ├── ui_students.c # Student management UI
│ ├── ui_assignments.c # Assignment tracking UI
│ ├── ui_attendance.c # Attendance UI
│ └── ui_reports.c # Reports UI
├── build/ # Compiled output
├── data/ # Database storage
│ └── assignment_tracker.db # SQLite database (created on first run)
├── Makefile # Build configuration
└── README.md # This file
- Download or extract the
Aakalanfolder - Double-click
Start.batorAakalan.exe - No installation required - runs immediately!
- Build the project:
make - Run:
make runor./build/assignment_tracker
- Launch the application
- Click "Don't have an account? Register"
- Fill in your details:
- Name (minimum 3 characters)
- Valid email address
- Strong password (8+ characters, uppercase, lowercase, digit, special character)
- Click "Register"
- Login with your newly created credentials
- From the dashboard, click "Student Management"
- Add new student:
- Enter Roll Number (unique identifier)
- Enter student Name
- Enter Email address
- Select or enter Class name
- Click "Add Student"
- Edit existing student:
- Click on a student in the list
- Details populate in the form
- Modify fields as needed
- Click "Update Student"
- Delete student: Select student → Click "Delete Student"
- Search: Use the search box to filter students by name/roll
- From the dashboard, click "Assignment Tracking"
- Create new assignment:
- Enter Assignment Title
- Enter Subject name
- Select Due Date from calendar
- Click "Create Assignment"
- Track submissions:
- Select an assignment from the list
- View all students and their submission status
- Mark submissions with quality ratings:
- ✅ Excellent - Outstanding work
- 👍 Good - Above average quality
- 📝 Average - Meets requirements
- ❌ Poor - Needs improvement
- Monitor deadlines: Assignments show due dates for tracking
- From the dashboard, click "Attendance Management"
- Select date from the calendar picker
- Mark attendance for each student:
- Click "Present" for attending students
- Click "Absent" for non-attending students
- Review past attendance:
- Change the date to view historical records
- Attendance automatically loads for selected date
- Class filtering: Attendance is tracked per class
-
🔐 Password Security:
- SHA-256 hashing algorithm
- Unique random salt per user
- Passwords never stored in plain text
- Minimum complexity requirements enforced
-
🛡️ SQL Injection Prevention:
- All database queries use prepared statements
- Parameterized inputs for all user data
- No direct string concatenation in queries
-
✅ Input Validation:
- Email format validation with regex
- Password strength requirements (8+ chars, mixed case, numbers, special chars)
- Name length validation (3-50 characters)
- Roll number uniqueness checks
- SQL-safe character filtering
-
👤 Session Management:
- Secure user session context
- User ID propagated throughout application
- Automatic logout on window close
users
id(INTEGER PRIMARY KEY) - Unique user identifiername(TEXT NOT NULL) - User's full nameemail(TEXT UNIQUE NOT NULL) - Login emailpassword_hash(TEXT NOT NULL) - SHA-256 hashed passwordsalt(TEXT NOT NULL) - Random salt for hashingcreated_at(DATETIME DEFAULT CURRENT_TIMESTAMP) - Account creation time
students
id(INTEGER PRIMARY KEY) - Student IDuser_id(INTEGER) - Foreign key to users tableroll_number(TEXT NOT NULL) - Student roll numbername(TEXT NOT NULL) - Student nameemail(TEXT) - Student emailclass(TEXT) - Class/section namecreated_at(DATETIME) - Record creation timestamp
assignments
id(INTEGER PRIMARY KEY) - Assignment IDuser_id(INTEGER) - Foreign key to users tabletitle(TEXT NOT NULL) - Assignment titlesubject(TEXT NOT NULL) - Subject areadue_date(DATE NOT NULL) - Submission deadlinecreated_at(DATETIME) - Assignment creation time
assignment_submissions
id(INTEGER PRIMARY KEY) - Submission IDassignment_id(INTEGER) - Foreign key to assignmentsstudent_id(INTEGER) - Foreign key to studentssubmission_status(TEXT) - Submitted/Not Submittedquality(TEXT) - Excellent/Good/Average/Poorsubmitted_at(DATETIME) - Submission timestamp
attendance
id(INTEGER PRIMARY KEY) - Attendance record IDstudent_id(INTEGER) - Foreign key to studentsdate(DATE NOT NULL) - Attendance datestatus(TEXT NOT NULL) - Present/Absentclass(TEXT) - Class namemarked_at(DATETIME) - Record creation time
Error: gtk/gtk.h not found
- Make sure GTK 3 development packages are installed
- Verify pkg-config is working:
pkg-config --cflags gtk+-3.0
Error: sqlite3.h not found
- Install SQLite development packages
- Check with:
pkg-config --libs sqlite3
Error: openssl/sha.h not found
- Install OpenSSL development packages
Database initialization failed
- Ensure the
data/directory exists - Check write permissions
Window doesn't appear
- Verify GTK runtime libraries are in your PATH
- On Windows, make sure MSYS2 MinGW bin directory is in PATH
- Modular Design: Clear separation of concerns across modules
- MVC-like Pattern: UI, business logic, and data access separated
- Event-Driven: GTK signal/callback architecture
- Database Abstraction: Centralized database operations
- Header Files (
include/): Interface definitions and declarations - Source Files (
src/): Implementation of all modules - Single Responsibility: Each module handles one domain area
- Reusable Components: Common utilities shared across modules
- ✅ Const-correctness for function parameters
- ✅ Proper memory management with cleanup functions
- ✅ Error handling for all database/file operations
- ✅ Input validation before processing
- ✅ Prepared statements for SQL queries
- ✅ Meaningful variable and function names
- ✅ Comprehensive comments and documentation
- Advanced Reports: Graphical charts and visualizations
- Export Functionality: CSV, PDF, Excel export
- Data Import: Bulk student import from files
- Backup/Restore: Database backup and recovery
- User Roles: Admin, Instructor, Student access levels
- Notifications: Due date reminders and alerts
- Dark Mode: Theme switching support
- Multi-language: Internationalization support
- Cloud Sync: Optional cloud backup (future version)
- Mobile App: Companion mobile application
The Windows portable version includes:
- Aakalan.exe - Main executable with embedded icon
- 97 DLL files - All GTK, SQLite, OpenSSL dependencies
- Start.bat - Launcher script with PATH configuration
- data/ - Database storage directory
- README.txt - Quick reference guide
Package Size: ~100 MB Requirements: Windows 10/11 64-bit Installation: None required - extract and run!
This is an academic project developed for educational purposes.
Developed as a comprehensive C programming project demonstrating:
- ✨ Professional GUI development with GTK 3
- 🗄️ Database integration and design with SQLite
- 🔒 Security implementation (hashing, validation, SQL injection prevention)
- 🏗️ Modular software architecture and design patterns
- ✅ Input validation and comprehensive error handling
- 📦 Cross-platform development (Windows/Linux)
- 🎯 Real-world application development from concept to deployment
Built with ❤️ using C, GTK 3, SQLite, and OpenSSL
Aakalan - Empowering Education Through Technology