A comprehensive Java-based delivery management system designed to handle orders, packages, addresses, and users with role-based access control.
Speedy is a delivery system that allows users to manage orders and packages for delivery. The system supports user authentication, role-based permissions, order tracking, and package management with different delivery sizes and pricing.
-
User Management
- User registration and login
- Role-based access control (Administrator, User)
- Secure authentication system
-
Order Management
- Create and manage delivery orders
- Track order status (CREATED, DELIVERING, DELIVERED)
- Add multiple packages to a single order
-
Package Management
- Support for different package sizes (S, M, L, XL)
- Automatic delivery price calculation based on package size
- Unique package identification
-
Address Management
- Store and manage delivery addresses
- Associate addresses with orders
-
Delivery Operations
- Assign random orders for delivery
- Retrieve specific orders for delivery
- Calculate total delivery costs per order
Speedy/
├── src/
│ ├── main/
│ │ └── java/
│ │ ├── Main.java # Main entry point with CLI interface
│ │ ├── DeliverySystem/
│ │ │ └── DeliverySystem.java # Core delivery system logic
│ │ ├── Order/
│ │ │ ├── Order.java # Order model
│ │ │ └── Status.java # Order status enum
│ │ ├── Package/
│ │ │ ├── Package.java # Package model
│ │ │ └── Size.java # Package size enum
│ │ └── UserInfo/
│ │ ├── User.java # User model
│ │ ├── UserDetails.java # User details
│ │ ├── Role.java # User role enum
│ │ └── Address.java # Address model
│ └── test/
│ └── java/
│ └── DeliverySystemTest.java # Unit tests
└── README.md
- Java JDK 11 or higher
- IntelliJ IDEA (or any Java IDE)
- Open the project in your Java IDE
- Navigate to
Main.java - Run the
Mainclass
The application will display a menu with the following options:
- 1. Login/Logout - Authenticate or log out from the system
- 2. Register - Create a new user account (Admin only)
- 3. Add address - Register a new delivery address
- 4. Add order - Create a new delivery order
- 5. Add package to order - Add packages to an existing order
- 6. Get random order to deliver - Retrieve a random order for delivery
- 7. Get order to deliver - Retrieve a specific order for delivery
- 0. Exit - Close the application
The system comes with a default administrator account:
- Username: Admin
- Password: Admin123
The core system class that manages:
- User authentication and registration
- Order creation and retrieval
- Package management
- Address management
- Delivery operations
Represents a delivery order containing:
- Unique order ID
- Associated address ID
- Collection of packages
- Current delivery status
- Method to calculate total delivery price
Represents a deliverable package with:
- Unique package ID
- Package size (S, M, L, XL)
- Delivery price based on size
Represents a system user with:
- Username and password
- Role (Administrator or User)
- Associated addresses and details
Orders can have the following statuses:
- CREATED - Order has been created but not yet dispatched
- DELIVERING - Order is currently being delivered
- DELIVERED - Order has been successfully delivered
The system supports four package sizes:
- S - Small
- M - Medium
- L - Large
- XL - Extra Large
Each size has an associated delivery price.
The application provides informative error messages when:
- Invalid credentials are provided
- Unauthorized operations are attempted
- Invalid data is entered
- System constraints are violated
The application continues running even when errors occur and does not terminate unexpectedly.
- All operations require an authenticated user (except login and registration)
- Only administrators can register new users
- The system validates all input to ensure data integrity
- The system is designed to support CSV file storage for persistence (future implementation)
This project is provided as-is for educational purposes.