{"id":15021577,"url":"https://github.com/mitchcamza/conferenceregistration","last_synced_at":"2026-02-03T22:33:49.226Z","repository":{"id":256881627,"uuid":"819591701","full_name":"mitchcamza/ConferenceRegistration","owner":"mitchcamza","description":"A Conference Registration Application","archived":false,"fork":false,"pushed_at":"2024-09-18T01:52:24.000Z","size":590,"stargazers_count":1,"open_issues_count":15,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-01T23:41:16.356Z","etag":null,"topics":["deserialization","factory-pattern","model-view","qt6","regex","regular-expressions","serialization","singleton-pattern","xml-parsing"],"latest_commit_sha":null,"homepage":"https://mitchcamza.github.io/ConferenceRegistration/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mitchcamza.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-24T20:25:41.000Z","updated_at":"2024-09-18T01:52:28.000Z","dependencies_parsed_at":"2024-09-19T07:01:02.638Z","dependency_job_id":null,"html_url":"https://github.com/mitchcamza/ConferenceRegistration","commit_stats":{"total_commits":66,"total_committers":2,"mean_commits":33.0,"dds":"0.24242424242424243","last_synced_commit":"83ca305cefdd95c00e2aea6158418e43d0945415"},"previous_names":["mitchcamza/conferenceregistration"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcamza%2FConferenceRegistration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcamza%2FConferenceRegistration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcamza%2FConferenceRegistration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcamza%2FConferenceRegistration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mitchcamza","download_url":"https://codeload.github.com/mitchcamza/ConferenceRegistration/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238791894,"owners_count":19531027,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deserialization","factory-pattern","model-view","qt6","regex","regular-expressions","serialization","singleton-pattern","xml-parsing"],"created_at":"2024-09-24T19:56:44.429Z","updated_at":"2026-02-03T22:33:49.218Z","avatar_url":"https://github.com/mitchcamza.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Conference Registration System\n[![CI](https://github.com/mitchcamza/ConferenceRegistration/actions/workflows/ci.yml/badge.svg)](https://github.com/mitchcamza/ConferenceRegistration/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n![C++](https://img.shields.io/badge/C++-17-blue.svg)\n![Qt](https://img.shields.io/badge/Qt-5%20%7C%206-green.svg)\n\n## 📋 Table of Contents\n- [About This Project](#about-this-project)\n- [Technical Skills Demonstrated](#technical-skills-demonstrated)\n- [Key Technical Highlights](#key-technical-highlights)\n- [Features](#features)\n- [Screenshots](#screenshots)\n- [Getting Started](#getting-started)\n- [Project Structure](#project-structure)\n- [Testing](#testing)\n- [Usage](#usage)\n- [What I Learned](#what-i-learned)\n- [Future Enhancements](#future-enhancements)\n- [API Documentation](#api-documentation)\n- [About Me](#about-me)\n- [License](#license)\n\n\u003ca id=\"about-this-project\"\u003e\u003c/a\u003e\n## 🎯 About This Project\n\nConference Registration is a cross-platform desktop application that streamlines the management of conference attendees. Built with C++ and the Qt Framework, this project demonstrates enterprise-level software engineering practices including object-oriented design, design patterns, and modern C++ development.\n\n**The Problem:** Conference organizers need an efficient way to manage different types of registrations (standard, student, and guest), calculate fees, track attendance, and maintain registration data with import/export capabilities.\n\n**The Solution:** A robust desktop application featuring:\n- Intuitive GUI for managing diverse registration types\n- Real-time filtering and search capabilities\n- XML-based serialization for data persistence\n- Automated fee calculation based on registration type\n- Cross-platform compatibility (Windows, macOS, Linux)\n\n**Built With:**\n- **Language:** C++17\n- **Framework:** Qt 5/6 (Widgets)\n- **Build System:** CMake 3.5+\n- **CI/CD:** GitHub Actions\n- **Documentation:** Doxygen\n\n\u003ca id=\"technical-skills-demonstrated\"\u003e\u003c/a\u003e\n## 💼 Technical Skills Demonstrated\n\nThis project showcases proficiency in:\n\n### Core Programming\n- **C++ Development**: Modern C++17 features, STL usage, memory management\n- **Object-Oriented Programming**: Inheritance, polymorphism, abstraction, encapsulation\n- **Design Patterns**: Factory Pattern, Singleton Pattern, Model-View architecture\n\n### Software Architecture\n- **Separation of Concerns**: Clean separation between business logic, data models, and UI\n- **SOLID Principles**: Single Responsibility, Open/Closed, Liskov Substitution\n- **MVC Pattern**: Custom model implementation with Qt's Model/View framework\n\n### Qt Framework Expertise\n- **Qt Widgets**: Custom dialogs, main windows, interactive UI components\n- **Qt Model/View**: Custom `QAbstractTableModel` and proxy filtering\n- **Signal/Slot Mechanism**: Event-driven programming\n- **Qt XML**: Serialization and deserialization using `QXmlStreamWriter` and `QXmlStreamReader`\n\n### Development Practices\n- **Build Automation**: CMake for cross-platform builds\n- **CI/CD**: Automated builds and testing using GitHub Actions\n- **Unit Testing**: Comprehensive test suite using GoogleTest framework\n- **UI Testing**: Qt Test framework for GUI component testing\n- **Code Coverage**: lcov/genhtml integration with 81.5% line coverage\n- **Version Control**: Git with feature branch workflow\n- **Documentation**: Comprehensive Doxygen documentation\n- **Code Quality**: Consistent naming conventions, well-commented code\n\n### Additional Skills\n- **Cross-Platform Development**: Linux, Windows, macOS compatibility\n- **File I/O Operations**: XML parsing, file system operations\n- **Data Filtering**: Custom proxy models for real-time search\n- **Resource Management**: Qt resource system integration\n\n\u003ca id=\"key-technical-highlights\"\u003e\u003c/a\u003e\n## 🔧 Key Technical Highlights\n\n### 1. **Factory Pattern Implementation**\nImplemented a singleton Factory class to create different registration types dynamically:\n```cpp\nRegistration *createRegistration(const QString \u0026type, ...);\n```\n\n### 2. **Custom Qt Model**\nBuilt a custom `QAbstractTableModel` to display registration data with real-time updates:\n- Overrode virtual methods (`data()`, `headerData()`, `rowCount()`)\n- Integrated with Qt's Model/View architecture\n- Supports dynamic data insertion and filtering\n\n### 3. **Proxy Model for Filtering**\nDeveloped a custom `QSortFilterProxyModel` for real-time name-based filtering without modifying the underlying data model.\n\n### 4. **XML Serialization**\nImplemented complete serialization/deserialization system:\n- Custom XML schema design\n- Robust error handling for malformed files\n- Support for appending imported data\n\n### 5. **Polymorphic Design**\nAbstract `Registration` base class with three derived types demonstrating runtime polymorphism for fee calculations and data management.\n\n### 6. **Automated CI/CD**\nGitHub Actions workflow for automated building and unit testing on multiple branches, ensuring code quality and build stability.\n\n### 7. **Comprehensive Testing**\nImplemented a robust test suite with 61 tests covering unit, integration, and UI testing:\n- **Unit Tests (42)**: Core domain logic including Person class, Registration types, and Factory pattern using GoogleTest\n- **Integration Tests (16)**: End-to-end XML persistence with round-trip validation and fixture-based testing using GoogleTest\n- **UI Tests (3 suites, 38 test functions)**: Qt-based UI component testing using Qt Test framework\n- Tests run automatically in CI pipeline ensuring code quality and preventing regressions\n\n### 8. **Code Coverage Reporting**\nIntegrated code coverage reporting using lcov/genhtml:\n- Achieves **81.5% line coverage** and **78.8% function coverage**\n- Excludes third-party code (Qt, GoogleTest, system headers)\n- HTML reports generated for detailed analysis\n- Coverage metrics tracked in CI pipeline\n\n\u003ca id=\"features\"\u003e\u003c/a\u003e\n## ✨ Features\n\n- **📝 Registration Management**: Add, view, and manage different types of registrations (Standard, Student, Guest)\n- **💰 Dynamic Fee Calculation**: Automatically calculate registration fees based on type\n- **📊 Attendee Analytics**: Real-time display of attendee counts per affiliation\n- **🔍 Smart Filtering**: Instantly filter registrations by attendee name with live updates\n- **📤 Export Functionality**: Serialize registration data to XML format for backup and transfer\n- **📥 Import Functionality**: Deserialize and append registration data from XML files\n- **🎨 Intuitive UI**: Clean, user-friendly Qt-based interface with toolbar and menu access\n- **🔄 Cross-Platform**: Runs seamlessly on Windows, macOS, and Linux\n\n\u003ca id=\"screenshots\"\u003e\u003c/a\u003e\n## 📸 Screenshots\n\n### Main Window - Viewing \u0026 Filtering Registrations\nRegistrations can be filtered using any of the fields\n![filtering-registrations](https://github.com/user-attachments/assets/5dd71ed2-20d5-4dc2-826f-4408a68bf4d2)\n\n### Handling XML\n\u003cimg width=\"964\" height=\"1144\" alt=\"registrations-xml\" src=\"https://github.com/user-attachments/assets/12e2a166-9436-4a98-a9cc-9702a0742c43\" /\u003e\n\n\n\u003ca id=\"getting-started\"\u003e\u003c/a\u003e\n## 🚀 Getting Started\n\n### Prerequisites\n\nEnsure you have the following installed on your system:\n\n- **Qt Framework**: Version 5 or 6 ([Download Qt](https://www.qt.io/download))\n- **CMake**: Version 3.5 or higher ([Download CMake](https://cmake.org/download/))\n- **C++ Compiler**: C++17 compatible (GCC, Clang, MSVC)\n\n### To Build \u0026 Run:\n\n1. **Clone the Repository**:\n   ```bash\n   git clone https://github.com/mitchcamza/ConferenceRegistration.git\n   cd ConferenceRegistration\n   ```\n\n2. **Build**\n   ```bash\n   mkdir build \u0026\u0026 cd build\n   cmake -S .. -B .\n   cmake --build .   # add \"--config Release\" for multi-config generators (e.g., Visual Studio, Xcode)\n   ```\n\n3. **Run the Application**\n   \n   On Windows (Git Bash/WSL):\n   ```bash\n   # For multi-config generators (Visual Studio), executables are in config subdirectories:\n   ./Release/ConferenceRegistration.exe   # or ./Debug/ConferenceRegistration.exe\n   \n   # For single-config generators (Ninja, MinGW Makefiles):\n   ./ConferenceRegistration.exe\n   ```\n   \n   On Windows (cmd/PowerShell):\n   ```powershell\n   # For multi-config generators (Visual Studio), executables are in config subdirectories:\n   .\\Release\\ConferenceRegistration.exe   # or .\\Debug\\ConferenceRegistration.exe\n   \n   # For single-config generators (Ninja, MinGW Makefiles):\n   .\\ConferenceRegistration.exe\n   ```\n\n   On Linux:\n   ```bash\n   chmod +x ConferenceRegistration\n   ./ConferenceRegistration\n   ```\n   \n   On macOS:\n   ```bash\n   # For multi-config generators (Xcode), executables are in config subdirectories:\n   # Ensure the bundled executable is runnable (if needed)\n   chmod +x Release/ConferenceRegistration.app/Contents/MacOS/ConferenceRegistration\n   \n   # Launch via Finder\n   open Release/ConferenceRegistration.app   # or Debug/ConferenceRegistration.app\n   \n   # Or run the binary directly\n   ./Release/ConferenceRegistration.app/Contents/MacOS/ConferenceRegistration\n   \n   # For single-config generators (Unix Makefiles, Ninja):\n   open ConferenceRegistration.app\n   # or ./ConferenceRegistration.app/Contents/MacOS/ConferenceRegistration\n   ```\n\n\n**⏱️ Build Time:** Less than a minute on a modern system.\n     \n\u003ca id=\"project-structure\"\u003e\u003c/a\u003e\n## 📁 Project Structure\n\n```\nConferenceRegistration/\n├── CMakeLists.txt                      # CMake build configuration\n├── resources/                          # Assets and Qt resource collection\n│   ├── icons/                          # SVG icons used in the UI\n│   └── resources.qrc                   # Qt resource file referencing icons\n├── src/\n│   ├── main.cpp                        # Application entry point\n│   │\n│   ├── core_classes\n│   │   ├── person.h/cpp                # Base Person class\n│   │   ├── registration.h/cpp          # Abstract Registration base class\n│   │   ├── standardregistration.*      # Standard registration type\n│   │   ├── studentregistration.*       # Student registration type\n│   │   └── guestregistration.*         # Guest registration type\n│   │\n│   ├── data_management\n│   │   ├── registrationlist.h/cpp      # Registration collection manager\n│   │   ├── registrationfactory.*       # Factory pattern for creating registrations\n│   │   └── registrationtypes.*         # Registration type enumerations\n│   │\n│   ├── qt_models\n│   │   ├── registrationmodel.*         # Custom QAbstractTableModel\n│   │   └── registrationfilterproxymodel.* # Filter proxy for search\n│   │\n│   ├── ui_components\n│   │   ├── mainwindow.*                # Main application window\n│   │   ├── newregistrationdialog.*     # Add registration dialog\n│   │   ├── totalfeesdialog.*           # Display total fees\n│   │   └── totalregistereddialog.*     # Display attendee counts\n│   │\n│   └── serialization\n│       ├── filewriter.h/cpp            # Generic file writing\n│       ├── filereader.h/cpp            # Generic file reading\n│       ├── registrationlistwriter.*    # XML serialization\n│       └── registrationlistreader.*    # XML deserialization\n│\n├── tests/\n│   ├── unit/                           # Unit tests (42 tests)\n│   │   ├── person_test.cpp             # Person class tests\n│   │   ├── registration_test.cpp       # Registration types tests\n│   │   └── registrationfactory_test.cpp # Factory pattern tests\n│   │\n│   ├── integration/                    # Integration tests (16 tests)\n│   │   ├── xml_persistence_test.cpp    # End-to-end XML I/O tests\n│   │   └── README.md                   # Integration test documentation\n│   │\n│   ├── ui/                             # UI tests (3 suites, 38 test functions)\n│   │   ├── mainwindow_test.cpp         # MainWindow UI tests\n│   │   ├── newregistrationdialog_test.cpp # Dialog UI tests\n│   │   ├── statistics_dialogs_test.cpp # Statistics dialogs tests\n│   │   └── README.md                   # UI test documentation\n│   │\n│   └── fixtures/\n│       └── xml/                        # Test fixture files\n│           ├── valid_standard.xml      # Valid test data\n│           ├── malformed.xml           # Error case fixtures\n│           └── README.md               # Fixture documentation\n│\n└── tools/\n   ├── build_and_run.sh                # Helper build script\n   ├── coverage_summary.sh             # Coverage metrics script\n   └── registrationgenerator.py        # Utility script for generating registrations\n```\n\n**Total Lines of Code:** ~3,200 lines across 45+ files\n  \n\u003ca id=\"testing\"\u003e\u003c/a\u003e\n## 🧪 Testing\n\nThe project includes a comprehensive test suite to ensure code reliability and correctness. Tests are fast, deterministic, and suitable for CI/CD pipelines, covering unit-level logic, end-to-end integration scenarios, and UI component testing.\n\n### Test Coverage\n\nThe test suite includes **61 tests** covering:\n\n#### Unit Tests (42 tests)\nUsing **GoogleTest** framework:\n- **Person Tests (6 tests)**: Constructor validation, empty/whitespace handling, special characters, and boundary testing\n- **Registration Tests (17 tests)**: Fee calculations for all registration types (Standard: $100, Student: $50, Guest: $10), booking date validation, and toString formatting\n- **RegistrationFactory Tests (19 tests)**: Singleton pattern verification, registration creation, case-insensitive type handling, and edge case validation\n\n#### Integration Tests (16 tests)\nUsing **GoogleTest** framework:\n- **Round-trip Integrity (5 tests)**: Write registrations to XML, read them back, and verify data integrity across all registration types\n- **Golden File Fixtures (4 tests)**: Parse known-good XML files and validate correct deserialization behavior\n- **Error \u0026 Edge Cases (7 tests)**: Malformed XML handling, missing required fields, missing type attributes, empty files, non-existent files, read-only locations, and deterministic output verification\n\n#### UI Tests (3 suites, 38 test functions)\nUsing **Qt Test** framework:\n- **MainWindow Tests (11 tests)**: Window initialization, menu structure (File, Edit, Reports), toolbar, table view/model, search widget\n- **NewRegistrationDialog Tests (14 tests)**: Dialog initialization, form fields, validation, registration type switching, conditional field visibility (student qualification, guest category)\n- **Statistics Dialogs Tests (13 tests)**: TotalFeesDialog and TotalRegisteredDialog initialization, calculations, and display\n\n#### Code Coverage\n- **Line Coverage**: 81.5% (555 of 681 lines)\n- **Function Coverage**: 78.8% (78 of 99 functions)\n- Coverage reports generated using lcov/genhtml\n- Excludes third-party code (Qt, GoogleTest, system headers)\n\n### Running Tests\n\n#### Run All Tests\n```bash\ncd build\n# Set headless mode for UI tests\nexport QT_QPA_PLATFORM=offscreen\nctest --output-on-failure\n```\n\n#### Run Unit Tests Only\n```bash\ncd build/tests/unit\n./unit_tests\n```\n\n#### Run Integration Tests Only\n```bash\ncd build\nctest --output-on-failure -R XmlPersistence\n```\n\n#### Run UI Tests Only\n```bash\ncd build\nexport QT_QPA_PLATFORM=offscreen\nctest --output-on-failure -R \"MainWindowTests|NewRegistrationDialogTests|StatisticsDialogsTests\"\n\n# Or run individually\ncd tests/ui\n./mainwindow_test\n./newregistrationdialog_test\n./statistics_dialogs_test\n```\n\n#### Run Specific Tests\n```bash\n# Unit tests\n./unit_tests --gtest_filter=PersonTest.*\n./unit_tests --gtest_filter=RegistrationFactoryTest.CreateStandardRegistration*\n\n# Integration tests\ncd build/tests/integration\n./integration_tests --gtest_filter=XmlPersistenceTest.RoundTripStandardRegistration\n```\n\n#### Generate Code Coverage Report\n```bash\n# Build with coverage enabled\ncmake -S . -B build -DENABLE_COVERAGE=ON\ncd build\nmake\n\n# Run tests\nexport QT_QPA_PLATFORM=offscreen\nctest --output-on-failure\n\n# Generate coverage report\nmake coverage\n\n# View coverage summary\n../tools/coverage_summary.sh\n\n# View HTML report\nxdg-open coverage_report/index.html  # Linux\nopen coverage_report/index.html      # macOS\n```\n\n### CI Integration\n\nTests run automatically on every pull request via GitHub Actions, ensuring code changes don't introduce regressions. Unit, integration, and UI tests must all pass before merging. Code coverage reports are generated and uploaded as artifacts.\n\n**For detailed test documentation**, see:\n- Unit tests: [tests/README.md](tests/README.md)\n- Integration tests: [tests/integration/README.md](tests/integration/README.md)\n- UI tests: [tests/ui/README.md](tests/ui/README.md)\n- Test fixtures: [tests/fixtures/xml/README.md](tests/fixtures/xml/README.md)\n  \n\u003ca id=\"usage\"\u003e\u003c/a\u003e\n## 📖 Usage\n\nThe application allows users to manage different types of registrations. The main window provides options to view and filter existing registrations, add new registrations and view the total fees and number of registrations.\n\n### Adding a Registration\n\n1. Click on \"New Registration\"\n2. Fill in the required details (name, email, affiliation, booking date)\n3. Select the type of registration (Standard, Student, or Guest)\n4. Submit the registration\n\n### Viewing Total Fees and Registrations\n\n- Click on \"Total Fees\" to view the total registration fees\n- Click on \"Total Registrations\" to view the number of registrations per affiliation\n\n### Filtering Registrations\n\n- Begin typing the first or last name of an attendee in the search bar and the displayed results will update in real-time\n- Clear the filter by removing the text, or using the 'Clear Filter' button\n\n### Exporting Registrations\n1. Click on \"Export Registrations\" in the edit menu or toolbar\n2. Browse to the desired directory using the file dialog and provide a file name\n3. Click on \"Save\" and the registration list will be saved to file\n\n**Note:** Selecting an existing file will overwrite its contents.\n\n### Importing Registrations\n1. Click on \"Import Registrations\" in the edit menu or toolbar\n2. Browse for the XML file containing the registration list to be imported\n3. Once the file has been selected, the imported registrations will be appended to the existing registration list\n\n### Generating Test Registrations\n\nFor testing and demonstration purposes, a Python script is provided to generate sample registration data:\n\n1. **Navigate to the tools directory**:\n   ```bash\n   cd tools\n   ```\n\n2. **Run the registration generator**:\n   ```bash\n   python3 registrationgenerator.py\n   ```\n\n3. **Output**: The script will create a file named `registrationlist.xml` in the current directory containing 200 sample registrations with the following distribution:\n   - **Student registrations**: 67 registrations (fee: $50 each)\n   - **Standard registrations**: 67 registrations (fee: $100 each)\n   - **Guest registrations**: 66 registrations (fee: $10 each)\n\n4. **Import the generated file**: \n   - Launch the Conference Registration application\n   - Click \"Import Registrations\" from the File menu or toolbar\n   - Select the generated `registrationlist.xml` file\n   - The 200 test registrations will be appended to your current registration list\n\n**Note:** The generator creates sample data with placeholder names, emails, and affiliations for testing purposes. Each registration includes all required fields according to its type (qualification for students, category for guests).\n\n\u003ca id=\"what-i-learned\"\u003e\u003c/a\u003e\n## 💡 What I Learned\n\nBuilding this project provided hands-on experience with several important concepts:\n\n### Technical Growth\n- **Qt Framework Mastery**: Gained deep understanding of Qt's Model/View architecture, signal/slot mechanism, and widget system\n- **Design Pattern Implementation**: Learned to recognize when and how to apply Factory and Singleton patterns effectively\n- **Cross-Platform Development**: Understood the challenges and solutions for building applications that work across different operating systems\n- **XML Processing**: Implemented robust parsing and generation of XML data with proper error handling\n\n### Software Engineering Practices\n- **Clean Architecture**: Practiced separating concerns between UI, business logic, and data layers\n- **Code Organization**: Structured a medium-sized codebase with 40+ files in a maintainable way\n- **Unit Testing**: Developed 42 unit tests using GoogleTest to validate individual components in isolation, ensuring each class and method works correctly independently\n- **Integration Testing**: Created 16 integration tests to verify end-to-end workflows, particularly XML serialization/deserialization with round-trip validation and fixture-based testing\n- **UI Testing**: Implemented 38 UI test functions using Qt Test framework to validate graphical components, ensuring proper widget initialization, user interactions, and signal/slot connections work correctly in headless mode\n- **Code Coverage**: Integrated lcov/genhtml to track test coverage, achieving 81.5% line coverage and 78.8% function coverage, with HTML reports for detailed analysis\n- **CI/CD Integration**: Set up automated build pipelines to catch issues early\n- **Documentation**: Created comprehensive API documentation using Doxygen\n\n### Problem-Solving Skills\n- **Memory Management**: Handled Qt's parent-child object ownership model and avoided memory leaks\n- **Polymorphism in Practice**: Implemented abstract base classes with multiple derived types\n- **Real-time Data Filtering**: Developed efficient filtering without compromising user experience\n- **Error Handling**: Implemented robust error handling for file operations and user input\n\n\u003ca id=\"future-enhancements\"\u003e\u003c/a\u003e\n## 🚀 Future Enhancements\n\nPotential improvements to demonstrate continuous learning:\n\n- **Database Integration**: Replace XML with SQLite for better scalability and querying\n- **Export Formats**: Support for CSV, JSON, and PDF export\n- **Authentication**: User login system with different permission levels\n- **Email Notifications**: Automated confirmation emails upon registration\n- **Data Analytics**: Charts and graphs showing registration trends over time\n- **Internationalization**: Multi-language support using Qt's translation system\n- **Cloud Sync**: Optional cloud backup and synchronization across devices\n\n\u003ca id=\"api-documentation\"\u003e\u003c/a\u003e\n## 📚 API Documentation\n[View Full API Documentation](https://mitchcamza.github.io/ConferenceRegistration/)\n\n\u003ca id=\"about-me\"\u003e\u003c/a\u003e\n## 👨‍💻 About Me\n\nHi, I'm **Mitch Campbell**, a software engineer with a passion for building practical, well-architected applications. This project demonstrates my ability to:\n\n- Design and implement complete applications from scratch\n- Write clean, maintainable, and well-documented code\n- Apply software engineering principles and design patterns\n- Work with modern C++ and popular frameworks like Qt\n- Set up development workflows including build automation and CI/CD\n\nI'm actively seeking junior software engineering or programmer positions where I can contribute to meaningful projects while continuing to grow my skills.\n\n**Connect with me:**\n\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-mitch--campbell--93b18919b-blue?logo=linkedin)](https://www.linkedin.com/in/mitch-campbell-93b18919b/)\n[![GitHub](https://img.shields.io/badge/GitHub-@mitchcamza-181717?logo=github)](https://github.com/mitchcamza)\n\n\u003ca id=\"license\"\u003e\u003c/a\u003e\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n**⭐ If you found this project helpful or interesting, please consider starring the repository!**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitchcamza%2Fconferenceregistration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmitchcamza%2Fconferenceregistration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitchcamza%2Fconferenceregistration/lists"}