A comprehensive digital library management system for science fiction content, developed as an Object-Oriented Programming university project at the Department of Mathematics, University of Padova.
- Lorenzo Soligo - 2101057
- Antonio Tang - 2111017
Report by Lorenzo Soligo
The ScienceFiction Library is a specialized digital content management system designed for science fiction enthusiasts. Users can manage a diverse collection of sci-fi content including books, comics, films, TV series, and video games with an intuitive and flexible interface.
- Multi-format Content Management: Books, Comics, Films, TV Series, Video Games
- Import/Export: Support for XML and JSON formats
- Advanced Filtering: Granular search with multiple parameter combinations
- Visual Status Indicators: Color-coded frames for watched/starred content
- Keyboard Shortcuts: Complete keyboard navigation support
- Persistent Data: Automatic save state management
The interface uses a color-coding system for instant content recognition:
- ๐ข Neon Green: Watched content
- ๐ก Fluorescent Yellow: Starred/Favorite content
- ๐ฃ Neon Purple: Both watched AND starred content \
Here what the main window looks like:

Content (Abstract Base Class)
โโโ Paper (Abstract)
โ โโโ Book
โ โโโ Comic
โโโ Multimedia (Abstract)
โโโ Video (Abstract)
โ โโโ Film
โ โโโ Serie
โโโ VideoGame
- Visitor Pattern: Dynamic GUI rendering and data persistence
- Singleton Pattern: Single library instance management
- Bitmask Pattern: Efficient subgenre representation
Every content item includes:
- Unique ID: For relationship tracking (inspiration, prequel/sequel)
- Subgenres: Bitmask implementation for multiple sci-fi subgenres
- Metadata: Title, publication year, status flags
- Relationships: Inspiration links, prequel/sequel chains
Advanced bitmask implementation allowing:
- Multiple subgenre assignment per content
- Efficient storage and retrieval
- Granular filtering capabilities
- String representation for display
- Content Cards: Visual grid with cover images and status indicators
- Detail View: Comprehensive information display using Visitor pattern
- Edit Mode: Type-specific editing forms
- Advanced Filtering: Multi-parameter search with live results
- Responsive Layout: Automatic adaptation to screen size
Complete keyboard shortcut support for power users:
| Shortcut | Action |
|---|---|
| Main Window | |
Ctrl+N |
Create new content |
Ctrl+I |
Import library |
Ctrl+S |
Save as JSON |
Ctrl+Shift+S |
Save as XML |
Ctrl+F |
Toggle filters |
Ctrl+Shift+F |
Clear all filters |
Ctrl+K |
Focus search bar |
F5 |
Refresh view |
Ctrl+D |
Change sort direction |
| Detail/Edit Windows | |
Esc |
Close window |
Ctrl+S |
Save changes |
Ctrl+Z |
Undo changes |
- XML: Qt-based serialization with type tags
- JSON: Structured export with error handling and content grouping
- Unsaved Changes Detection: Warns before closing with unsaved data
- Import/Export Safety: Prevents data loss during operations
- File Validation: Error handling for corrupted files
The Visitor pattern enables:
- Dynamic UI Generation: Type-specific detail and edit views
- Serialization: Format-specific export (XML/JSON)
- Extensibility: Easy addition of new content types
- Smart Pointers:
unique_ptrusage for safety - Singleton Library: Single instance with controlled access
- Relationship Integrity: Automatic cleanup of broken references
| Activity | Planned Hours | Actual Hours |
|---|---|---|
| Design & Planning | 15 | 15 |
| Model Development | 20 | 20 |
| GUI Development | 10 | 25 |
| Filter & Search | 10 | 15 |
| UX & Styling | 0 | 5-10 |
| Testing & Debug | 10 | 15 |
| Code Review | 5 | 5 |
| Total | 70 | 95-100 |
- Logic Model: Content hierarchy (excluding VideoGame)
- XML Persistence: Complete serialization system
- Main Interface: Primary window and functionality
- Search System: Advanced filtering and search
- UI/UX: Icons, graphics, keyboard shortcuts
- Logic Model: Video hierarchy including VideoGame
- JSON Persistence: Complete serialization system
- Detail Views: Dynamic content-specific interfaces
- Edit System: Type-aware editing functionality
- Qt Framework
- C++ Compiler with C++11+ support
- CMake (recommended)
git clone https://github.com/Solgio/OOProject
cd OOProject
qmake
make
./OOProject- Launch Application: Run the compiled executable
- Create Content: Use
Ctrl+Nor the + button - Import Library: Load existing XML/JSON files
- Filter & Search: Use the advanced filtering system
- Export: Save your library in preferred format
- Static Analysis: SonarQube integration for code quality
- GitHub Integration: Version control and collaboration
- Modular Design: Easy testing and maintenance
- Error Handling: Comprehensive validation and recovery
- Direct Deletion: Remove content from main view
- Library Merging: Combine multiple libraries
- Content Type Conversion: Change content types dynamically
- Theme Support: Light/Dark mode toggle
- Batch Operations: Multi-select actions
- Visitors Hierarchy: Add a parent class to unify the Visitor calls with a single polymorphic call
accept()instead of the specific ones.
The modular architecture supports:
- New content types without modifying existing code
- Additional export formats
- Custom filtering parameters
- Enhanced relationship types
- Resolution: 1920x1080 for optimal experience
- OS: Cross-platform Qt support
- Memory: Adequate for large libraries
- Storage: Variable based on content collection
Developed for the Object-Oriented Programming course at the University of Padova, this project demonstrates:
- OOP Principles: Inheritance, polymorphism, encapsulation
- Design Patterns: Visitor, Singleton, proper abstraction
- GUI Development: Qt framework mastery
- Software Engineering: Version control, code quality, documentation Graded by prof. Zanella with almost full points (30/31)
Complete project documentation available in Italian, including:
- UML class diagrams
- Design pattern explanations
- Implementation details
- Time tracking and task distribution
This project showcases advanced object-oriented design principles applied to a real-world content management scenario, with emphasis on extensibility, user experience, and code quality.