# Tablet Lending and Return Management System A simple SQLite-based system for managing tablet lending and returns. ## Features - **Tablet Management**: Add, track, and manage tablets in inventory - **User Management**: Register users who can borrow tablets - **Loan Tracking**: Track which tablets are loaned to which users - **Return Management**: Record when tablets are returned - **History Tracking**: Complete history of all loans and returns - **User Loans View**: See all tablets loaned to each user (demonstrates one-to-many relationship) - **Project Notes**: Markdown editor for development documentation ## Files - `minimal_app.py` - Interactive command-line application - `test_app.py` - Test script that demonstrates functionality - `tablets.db` - SQLite database (created automatically) - `simple_app.py` - Web-based version (requires Flask) - `app.py` - Alternative web version (requires Flask) ## Quick Start ### 1. Run the test to see it in action ```bash python3 test_app.py ``` This will: - Create the database - Add sample tablets and users - Demonstrate loan and return operations - Show the complete workflow ### 2. Run the interactive application ```bash python3 minimal_app.py ``` This provides a menu-driven interface for: - Adding tablets - Adding users - Loaning tablets - Returning tablets - Viewing inventory and loan status ### 3. Database Structure The system uses three main tables with a **many-to-many relationship** between users and tablets: **tablets** - `id`: Primary key - `brand`: Tablet brand - `model`: Tablet model - `serial_number`: Unique serial number - `status`: 'available' or 'loaned' **users** - `id`: Primary key - `name`: User's name - `identification`: Unique identification **loans** (junction table) - `id`: Primary key - `tablet_id`: Foreign key to tablets - `user_id`: Foreign key to users - `loan_date`: When the tablet was loaned - `return_date`: When the tablet was returned (NULL if still active) - `status`: 'active' or 'returned' > **Note**: The loans table enables a many-to-many relationship. One user can loan **multiple tablets** (one-to-many from user to loans), and each tablet can be loaned to different users over time. The `status` field on tablets ensures a device can only be loaned to one user at a time. ## Requirements - Python 3.x (built-in sqlite3 module) - No additional dependencies needed for the command-line version - Flask required for web versions (optional) ## Usage Examples ### Adding a tablet ``` python3 -c " import sqlite3 conn = sqlite3.connect('tablets.db') cursor = conn.cursor() cursor.execute('INSERT INTO tablets (brand, model, serial_number, status) VALUES (?, ?, ?, ?)', ('Microsoft', 'Surface Pro', 'SN004', 'available')) conn.commit() conn.close() print('Tablet added!') " ``` ### Adding a user ``` python3 -c " import sqlite3 conn = sqlite3.connect('tablets.db') cursor = conn.cursor() cursor.execute('INSERT INTO users (name, identification) VALUES (?, ?)', ('Alice Brown', 'ID004')) conn.commit() conn.close() print('User added!') " ``` ### Querying available tablets ``` python3 -c " import sqlite3 conn = sqlite3.connect('tablets.db') cursor = conn.cursor() cursor.execute('SELECT brand, model, serial_number FROM tablets WHERE status = ?', ('available',)) for row in cursor.fetchall(): print(f'{row[0]} {row[1]} ({row[2]})') conn.close() " ``` ## Web Version (Optional) If you want to use the web interface: 1. Install Flask: ```bash pip install flask ``` 2. Run the web application: ```bash python3 app.py ``` 3. Open your browser to: http://localhost:5000 ### Web Features - **Home**: View available tablets and active loans - **Loan Tablet**: Loan a tablet to a user (with search for large datasets) - **User Loans**: View all tablets loaned to each user - demonstrates the **one-to-many relationship** (one user, multiple tablets) - **Loan History**: Complete history of all loan and return transactions - **Project Management**: Markdown editor for development notes (saved to `notes_development/project_notes.md`) ## Database Backup To backup your data: ```bash cp tablets.db tablets_backup_$(date +%Y%m%d).db ``` ## License This is a simple educational project. Feel free to use and modify it as needed.