{"id":25655463,"url":"https://github.com/mitchcamza/bookshelf","last_synced_at":"2026-02-25T15:12:46.118Z","repository":{"id":278844661,"uuid":"831487442","full_name":"mitchcamza/BookShelf","owner":"mitchcamza","description":"A Book Management Application","archived":false,"fork":false,"pushed_at":"2025-02-22T02:26:25.000Z","size":662,"stargazers_count":1,"open_issues_count":17,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-22T03:23:01.278Z","etag":null,"topics":["automated-testing","factory-pattern","model-view","oo-design","oop-principles","qt6-gui","qttest","serialization","singleton-pattern"],"latest_commit_sha":null,"homepage":"https://mitchcamza.github.io/COS3711-03/","language":"HTML","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-07-20T17:38:56.000Z","updated_at":"2025-02-22T02:26:28.000Z","dependencies_parsed_at":"2025-02-22T03:23:05.203Z","dependency_job_id":"a637d893-d651-4e48-b815-4f245f25567c","html_url":"https://github.com/mitchcamza/BookShelf","commit_stats":null,"previous_names":["mitchcamza/bookshelf"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcamza%2FBookShelf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcamza%2FBookShelf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcamza%2FBookShelf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitchcamza%2FBookShelf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mitchcamza","download_url":"https://codeload.github.com/mitchcamza/BookShelf/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240383846,"owners_count":19792878,"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":["automated-testing","factory-pattern","model-view","oo-design","oop-principles","qt6-gui","qttest","serialization","singleton-pattern"],"created_at":"2025-02-23T21:29:20.524Z","updated_at":"2025-10-29T13:12:04.837Z","avatar_url":"https://github.com/mitchcamza.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BookShelf\nA Book Management Application\n\n[![Build](https://github.com/mitchcamza/COS3711-03/actions/workflows/build.yml/badge.svg)](https://github.com/mitchcamza/COS3711-03/actions/workflows/build.yml)\n[![Test](https://github.com/mitchcamza/BookShelf/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/mitchcamza/BookShelf/actions/workflows/test.yml)\n[![Deploy Docs](https://github.com/mitchcamza/BookShelf/actions/workflows/jekyll-gh-pages.yml/badge.svg)](https://github.com/mitchcamza/BookShelf/actions/workflows/jekyll-gh-pages.yml)\n\n## Project Overview\n\n- **Book Management**: Classes for representing and managing books (`Book`, `Author`, etc.) and functionality to read from and write to XML files.\n- **Graphical User Interface**: A Qt Widgets-based GUI to interact with the book data.\n- **CMake Build System**: The project uses CMake to manage the build process.\n\n## Features\n\n- **Book Management**: Add, view, and manage a collection of books.\n- **User Interface**: Intuitive GUI for interacting with the book collection.\n- **Book Factory**: The `BookFactory` class utilizes the factory pattern for managaing the creation of books.\n- **Custom Models**: The application uses `BookTableModel` to represent book data and `BookProxyModel` to filter and sort the data.\n- **XML Serialization**: Export book data to an XML file using the `BookWriter` class.\n- **Filter Books**: Filter books based on author name or book title.\n\n![alt text](\u003cScreenshot 2024-09-08 at 16.04.51.png\u003e)\n\n## Getting Started\n\n### Prerequisites\n\n- **Qt**: Ensure you have Qt installed (version 5 or 6).\n- **CMake**: Version 3.5 or higher.\n- **C++ Compiler**: Ensure you have a C++17 compatible compiler.\n\n### Getting the Source Code\n\n#### Option 1: Download the Release\n1. **Download the Release**: Navigate to the [Releases](https://github.com/mitchcamza/COS3711-03-01/releases) page of this repository.\n2. **Select the Latest Release**: Download the release with the version number formatted as `yyyy.mm.dd.\u003cquestion_number\u003e`.\n3. **Extract the Files**: Extract the downloaded archive to your desired location.\n\n#### Option 2: Clone the Repository\n1. **Clone the Repository**:\n    ```bash\n    git clone https://github.com/mitchcamza/COS3711-03-01\n    cd COS3711-03-01\n    ```\n2. **Checkout the COS3711-03-01 branch**\n   ```bash\n   git checkout COS3711-03-01\n\n## Building the Project\n\n### Option 1: Using Qt Creator\n1. Open the top-level CMakeLists.txt file in Qt Creator.\n2. Configure the project.\n3. Build and run the project.\n\n### Option 2: Using the command line (on Linux)\n1.\t**Navigate to the Project Directory**: Open a terminal or command prompt and navigate to the extracted project directory.\n2.\t**Make sure the build script is executable**: On Linux:\n    ```bash \n    sudo chmod +x ./build_and_run.sh\n    ```\n3. **Run the build script**:\n    ```bash\n    sudo ./build_and_run.sh\n    ```\n\n## Project Structure\n```\nMyProject/\n├── CMakeLists.txt        # Root CMake file for the entire project\n├── src/                  # Source directory\n│   ├── CMakeLists.txt    # CMake file for source code\n│   ├── main.cpp\n│   ├── author.h\n│   ├── author.cpp\n│   ├── book.h\n│   ├── book.cpp\n│   ├── bookfactory.h\n│   ├── bookfactory.cpp\n│   ├── bookinput.h\n│   ├── bookinput.cpp\n│   ├── bookproxymodel.h\n│   ├── bookproxymodel.cpp\n│   ├── booktablemodel.h\n│   ├── booktablemodel.cpp\n│   ├── bookwriter.h\n│   ├── bookwriter.cpp\n│   ├── filewriter.h\n│   ├── filewriter.cpp\n│   ├── mainwindow.h\n│   └── mainwindow.cpp\n\n├── tests/                # Tests directory\n│   ├── CMakeLists.txt    # CMake file for tests\n│   ├── testauthor.h\n│   ├── testauthor.cpp\n│   ├── testbook.h\n│   ├── testbook.cpp\n│   ├── testbookfactory.h\n│   ├── testbookfactory.cpp\n│   ├── testbookproxymodel.h\n│   ├── testbookproxymodel.cpp\n│   ├── testbooktablemodel.h\n│   ├── testbooktablemodel.cpp\n│   ├── testbookwriter.h\n│   ├── testbookwriter.cpp\n│   ├── testfilewriter.h\n│   └── testfilewriter.cpp\n```\n\n## Usage\nThe application allows users to manage a collection of books, including adding new books, filtering the list, and exporting or importing the collection as an XML file.\n\n### Adding a Book\n\n\t1.\tOpen the application.\n\t2.\tUse the “New Book” button to add a new book.\n\t3.\tEnter the book’s title, authors, publication date, and ISBN.\n\t4.\tSave the book to add it to the collection.\n\n### Filtering Books\n\n    - Use the search bar to filter books by title or author name. The displayed results will update as you type.\n\n### Exporting Books\n\n\t1.\tClick on “Export Book List” in the file menu.\n\t2.\tChoose a destination and file name for the XML file.\n\t3.\tSave the file to export the current book list.\n\n## Author\nMitch Campbell\n\n[LinkedIn](https://www.linkedin.com/in/mitch-campbell-93b18919b/)\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitchcamza%2Fbookshelf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmitchcamza%2Fbookshelf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitchcamza%2Fbookshelf/lists"}