# phani05040/myvelib_bike_sharing_system architecture

> Architecture diagram of the GitHub repository phani05040/myvelib_bike_sharing_system, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/phani05040/myvelib_bike_sharing_system
- Repository: https://github.com/phani05040/myvelib_bike_sharing_system

## Overview

MyVelib is an in-memory Java bike-rental fleet manager with command-line and Swing command interfaces. The principal workflow is to configure a network, register riders, rent and return bikes, then calculate ride charges. Its domain includes station availability and bike/slot inventory, user and registration-card state, ride pricing strategies, and station planning/sorting. The graph follows calls visible in sampled excerpts; directory-level nodes represent relevant subsystems whose implementation was not sampled, so uncertain wiring is omitted.

Main entry points: [`src/fr/cs/group06/myVelib/userInterface/MyVelibCLUI.java`](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/userInterface/MyVelibCLUI.java) (Command interface), [`src/fr/cs/group06/myVelib/dockingStation/DockingStation.java`](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/dockingStation/DockingStation.java) (Docking stations), [`src/fr/cs/group06/myVelib/user/User.java`](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/user/User.java) (Rider accounts), [`src/fr/cs/group06/myVelib/myvelib/MyVelib.java`](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/myvelib/MyVelib.java) (Network manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_cli["Command interface<br/>[MyVelibCLUI.java]"]
  node_gui["Swing interface<br/>[MyVelibGUI.java]"]
end

subgraph group_network["Network and users"]
  node_networkmgr["Network manager<br/>[MyVelib.java]"]
  node_users["Rider accounts<br/>[User.java]"]
  node_cards["Cards"]
  node_location["Locations<br/>[Location.java]"]
end

subgraph group_fleet["Fleet operations"]
  node_stations["Docking stations"]
  node_slots["Parking slots<br/>[ParkingSlot.java]"]
  node_bikes["Bike types"]
  node_bikefactory["Bike factory<br/>[BikeFactory.java]"]
  node_planning["Station planning"]
  node_startplanning["Nearest station"]
  node_comparators["Station ranking"]
end

subgraph group_rides["Ride and pricing"]
  node_ride["Ride<br/>[Ride.java]"]
  node_strategies["Cost strategies"]
end

node_operator(("Operator"))

node_operator -->|"enters commands"| node_cli
node_operator -->|"enters commands"| node_gui
node_gui -->|"dispatches commands"| node_cli
node_cli -->|"configures network"| node_networkmgr
node_cli -->|"creates riders"| node_users
node_cli -->|"creates ride"| node_ride
node_networkmgr -->|"creates stations"| node_stations
node_networkmgr -->|"stores riders"| node_users
node_stations -->|"manages slots"| node_slots
node_stations -->|"rents bikes"| node_bikes
node_bikes -->|"updates rental"| node_users
node_bikes -->|"updates ratios"| node_stations
node_ride -->|"selects pricing"| node_strategies
node_ride -->|"updates charges"| node_users
node_startplanning -->|"checks availability"| node_stations
node_startplanning -->|"compares distance"| node_location

click node_cli "https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/userInterface/MyVelibCLUI.java"
click node_gui "https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/userInterface/MyVelibGUI.java"
click node_networkmgr "https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/myvelib/MyVelib.java"
click node_users "https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/user/User.java"
click node_cards "https://github.com/phani05040/myvelib_bike_sharing_system/tree/main/src/fr/cs/group06/myVelib/cards"
click node_location "https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/location/Location.java"
click node_stations "https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/dockingStation/DockingStation.java"
click node_slots "https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/dockingStation/ParkingSlot.java"
click node_bikes "https://github.com/phani05040/myvelib_bike_sharing_system/tree/main/src/fr/cs/group06/myVelib/bike"
click node_bikefactory "https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/bike/BikeFactory.java"
click node_planning "https://github.com/phani05040/myvelib_bike_sharing_system/tree/main/src/fr/cs/group06/myVelib/dockingStation"
click node_ride "https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/ride/Ride.java"
click node_strategies "https://github.com/phani05040/myvelib_bike_sharing_system/tree/main/src/fr/cs/group06/myVelib/ride"
click node_startplanning "https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/dockingStation/StartDockingStation.java"
click node_comparators "https://github.com/phani05040/myvelib_bike_sharing_system/tree/main/src/fr/cs/group06/myVelib/dockingStation"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_gui toneBlue
class node_networkmgr,node_users,node_cards,node_location toneAmber
class node_stations,node_slots,node_bikes,node_bikefactory,node_planning,node_startplanning,node_comparators toneMint
class node_ride,node_strategies toneRose
class node_operator toneIndigo
```

## Components

### User interfaces

- [Command interface](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/userInterface/MyVelibCLUI.java): `src/fr/cs/group06/myVelib/userInterface/MyVelibCLUI.java`
- [Swing interface](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/userInterface/MyVelibGUI.java): `src/fr/cs/group06/myVelib/userInterface/MyVelibGUI.java`

### Network and users

- [Network manager](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/myvelib/MyVelib.java): `src/fr/cs/group06/myVelib/myvelib/MyVelib.java`
- [Rider accounts](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/user/User.java): `src/fr/cs/group06/myVelib/user/User.java`
- [Cards](https://github.com/phani05040/myvelib_bike_sharing_system/tree/main/src/fr/cs/group06/myVelib/cards): `src/fr/cs/group06/myVelib/cards`
- [Locations](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/location/Location.java): `src/fr/cs/group06/myVelib/location/Location.java`

### Fleet operations

- [Docking stations](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/dockingStation/DockingStation.java): `src/fr/cs/group06/myVelib/dockingStation/DockingStation.java`
- [Parking slots](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/dockingStation/ParkingSlot.java): `src/fr/cs/group06/myVelib/dockingStation/ParkingSlot.java`
- [Bike types](https://github.com/phani05040/myvelib_bike_sharing_system/tree/main/src/fr/cs/group06/myVelib/bike): `src/fr/cs/group06/myVelib/bike`
- [Bike factory](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/bike/BikeFactory.java): `src/fr/cs/group06/myVelib/bike/BikeFactory.java`
- [Station planning](https://github.com/phani05040/myvelib_bike_sharing_system/tree/main/src/fr/cs/group06/myVelib/dockingStation): `src/fr/cs/group06/myVelib/dockingStation`
- [Nearest station](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/dockingStation/StartDockingStation.java): `src/fr/cs/group06/myVelib/dockingStation/StartDockingStation.java`
- [Station ranking](https://github.com/phani05040/myvelib_bike_sharing_system/tree/main/src/fr/cs/group06/myVelib/dockingStation): `src/fr/cs/group06/myVelib/dockingStation`

### Ride and pricing

- [Ride](https://github.com/phani05040/myvelib_bike_sharing_system/blob/main/src/fr/cs/group06/myVelib/ride/Ride.java): `src/fr/cs/group06/myVelib/ride/Ride.java`
- [Cost strategies](https://github.com/phani05040/myvelib_bike_sharing_system/tree/main/src/fr/cs/group06/myVelib/ride): `src/fr/cs/group06/myVelib/ride`

### Other components

- **Operator**

## Connections

- Operator → Command interface: enters commands
- Operator → Swing interface: enters commands
- Swing interface → Command interface: dispatches commands
- Command interface → Network manager: configures network
- Command interface → Rider accounts: creates riders
- Command interface → Ride: creates ride
- Network manager → Docking stations: creates stations
- Network manager → Rider accounts: stores riders
- Docking stations → Parking slots: manages slots
- Docking stations → Bike types: rents bikes
- Bike types → Rider accounts: updates rental
- Bike types → Docking stations: updates ratios
- Ride → Cost strategies: selects pricing
- Ride → Rider accounts: updates charges
- Nearest station → Docking stations: checks availability
- Nearest station → Locations: compares distance
