{"id":48698933,"url":"https://github.com/sendhello/student_library2","last_synced_at":"2026-04-11T09:13:44.989Z","repository":{"id":348697091,"uuid":"1199180699","full_name":"sendhello/student_library2","owner":"sendhello","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-02T13:38:18.000Z","size":204,"stargazers_count":0,"open_issues_count":14,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-03T00:59:07.959Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sendhello.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-02T05:43:08.000Z","updated_at":"2026-04-02T13:38:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sendhello/student_library2","commit_stats":null,"previous_names":["sendhello/student_library2"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/sendhello/student_library2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sendhello%2Fstudent_library2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sendhello%2Fstudent_library2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sendhello%2Fstudent_library2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sendhello%2Fstudent_library2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sendhello","download_url":"https://codeload.github.com/sendhello/student_library2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sendhello%2Fstudent_library2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31674719,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T08:18:19.405Z","status":"ssl_error","status_checked_at":"2026-04-11T08:17:08.892Z","response_time":54,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2026-04-11T09:13:44.366Z","updated_at":"2026-04-11T09:13:44.981Z","avatar_url":"https://github.com/sendhello.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Student Library — Membership \u0026 Resource Management System\n\n![Python](https://img.shields.io/badge/Python-3.x-blue) ![Subject](https://img.shields.io/badge/MIS501-Assessment%202-orange)\n\nA console-based library management system built in Python 3, developed as part of **MIS501 Principles of Programming — Assessment 2: Scalable Programming in Practice** (Torrens University Australia).\n\n---\n\n## Scenario\n\n\u003e **Assessment 1 (Modules 1–4):** A single library member needed a simple console assistant to track borrowed items — their personal details, due dates, and returns — built using only fundamental Python (variables, lists, dictionaries, `while` loops, no OOP).\n\n**Assessment 2 (Modules 1–8)** scales that prototype into a full multi-member system. The outdated single-user tool is redesigned using object-oriented programming principles — modularity, encapsulation, and abstraction — so the library can manage many members and items simultaneously, with data persisted to a JSON file.\n\n---\n\n## Features\n\n- Register and manage multiple library members (name, email, phone, birthdate)\n- Add items to the library catalogue (title, author)\n- Borrow and return items with due date tracking\n- View available items and member borrowing history\n- Group borrowed items by due date\n- Save and load all data from a JSON file\n- Input validation for all user-entered data\n- Formatted console output with tables and menus\n\n---\n\n## Architecture\n\nThe system is designed around five classes across three modules. See [`student_library_class_diagram.drawio`](student_library_class_diagram.drawio) for the editable source.\n\n![Class Diagram](student_library_class_diagram.png)\n\n| Class | File | Responsibility |\n| --- | --- | --- |\n| `Library` | `library.py` | Main controller — manages members and items, handles borrowing operations, JSON persistence |\n| `Member` | `member.py` | Stores member data; `borrow_item()`, `return_item()`, `get_borrowed_items()` |\n| `Item` | `item.py` | Stores item data; `borrow()`, `return_item()`, `is_available()` |\n| `Validator` | `utils/validator.py` | Static methods for validating name, email, phone, date inputs |\n| `Display` | `utils/display.py` | Static methods for printing menus, tables, and grouped due-date views |\n\n### Relationships\n\n```text\nLibrary  ──1:many──▶  Member\nLibrary  ──1:many──▶  Item\nMember   ─ borrows ─▶  Item\nLibrary  ─ uses ──────▶  Validator\nLibrary  ─ uses ──────▶  Display\n```\n\n---\n\n## Flowchart\n\n![Application Flowchart](Flowchart.png)\n\n---\n\n## Project Structure\n\n```text\nstudent-library2/\n├── main.py                              # Entry point\n├── library.py                           # Library class\n├── entities/\n│   ├── base.py                          # BaseEntity abstract class\n│   ├── member.py                        # Member class\n│   └── item.py                          # Item class\n├── utils/\n│   ├── validator.py                     # Validator utility class\n│   └── display.py                       # Display utility class\n├── data.json                            # JSON persistence file\n└── README.md\n```\n\n---\n\n## Setup \u0026 Run\n\n**Requirements:** Python 3.x\n\n```bash\n# 1. Clone the repository\ngit clone \u003crepo-url\u003e\ncd student-library2\n\n# 2. Create and activate virtual environment (optional)\npython3 -m venv .venv\nsource .venv/bin/activate      # macOS/Linux\n.venv\\Scripts\\activate         # Windows\n\n# 3. Run the application\npython main.py\n```\n\n---\n\n## Team\n\n| Name | GitHub |\n| --- | --- |\n| Ivan Bazhenov | [@sendhello](https://github.com/sendhello) |\n| Takunda Audrey Shelter | [@AudreyShelly3](https://github.com/AudreyShelly3) |\n| Renato Bustamante | |\n\n---\n\n## Assessment Context\n\n| Field | Detail |\n| --- | --- |\n| Subject | MIS501 Principles of Programming |\n| Assessment | Assessment 2 — Scalable Programming in Practice |\n| Institution | Torrens University Australia |\n| Language | Python 3 only |\n| Concepts applied | OOP (encapsulation, inheritance, abstraction), modular design, file I/O, input validation |\n| Modules covered | 1–8 |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsendhello%2Fstudent_library2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsendhello%2Fstudent_library2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsendhello%2Fstudent_library2/lists"}