Title:
Vehicle Maintenance & Expense Tracker
Name:
Mehak Thakur
Reg No.:
24MCA0146
Faculty Name:
Dr. Kumaresan P
Problem Statement:
Managing a fleet or individual vehicle maintenance and expenses is often done manually or
without structure. This application aims to provide a simple desktop-based solution to track
vehicles, maintenance logs, expenses, reminders, and generate reports using a local SQLite
database.
Test Environment:
● Operating System: Windows 10 / Linux / macOS
● Python Version: Python 3.10+
● Libraries:
○ sqlite3
○ tabulate
○ datetime
○ csv
● Database: SQLite ([Link])
Code:
# python -m pip install --upgrade --user pip
import sqlite3
from tabulate import tabulate
from datetime import datetime
import csv
def init_db():
conn = [Link]("[Link]")
cursor = [Link]()
[Link]('''CREATE TABLE IF NOT EXISTS vehicles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
make TEXT, model TEXT, year INTEGER, vin TEXT, reg_number TEXT,
mileage INTEGER, fuel_efficiency REAL)''')
[Link]('''CREATE TABLE IF NOT EXISTS maintenance (
id INTEGER PRIMARY KEY AUTOINCREMENT,
vehicle_id INTEGER, service TEXT, cost REAL, date TEXT, mileage INTEGER,
FOREIGN KEY(vehicle_id) REFERENCES vehicles(id))''')
[Link]('''CREATE TABLE IF NOT EXISTS expenses (
id INTEGER PRIMARY KEY AUTOINCREMENT,
vehicle_id INTEGER, category TEXT, amount REAL, date TEXT,
FOREIGN KEY(vehicle_id) REFERENCES vehicles(id))''')
[Link]('''CREATE TABLE IF NOT EXISTS reminders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
vehicle_id INTEGER, description TEXT, due_date TEXT,
FOREIGN KEY(vehicle_id) REFERENCES vehicles(id))''')
[Link]()
[Link]()
def add_vehicle():
conn = [Link]("[Link]")
cursor = [Link]()
make = input("Enter Vehicle Make: ")
model = input("Enter Vehicle Model: ")
year = int(input("Enter Vehicle Year: "))
vin = input("Enter VIN: ")
reg_number = input("Enter Registration Number: ")
mileage = int(input("Enter Mileage: "))
fuel_efficiency = float(input("Enter Fuel Efficiency (km/l): "))
[Link]("INSERT INTO vehicles (make, model, year, vin, reg_number, mileage,
fuel_efficiency) VALUES (?, ?, ?, ?, ?, ?, ?)",
(make, model, year, vin, reg_number, mileage, fuel_efficiency))
[Link]()
[Link]()
print("Vehicle added successfully!")
def log_maintenance():
conn = [Link]("[Link]")
cursor = [Link]()
[Link]("SELECT id, make, model FROM vehicles;")
vehicles = [Link]()
print("\nAvailable Vehicles:")
print(tabulate(vehicles, headers=["ID", "Make", "Model"]))
vehicle_id = int(input("Enter Vehicle ID from the list: "))
service = input("Enter Service Description: ")
cost = float(input("Enter Service Cost: "))
date = [Link]().strftime('%Y-%m-%d')
mileage = int(input("Enter Current Mileage: "))
[Link]("INSERT INTO maintenance (vehicle_id, service, cost, date, mileage)
VALUES (?, ?, ?, ?, ?)",
(vehicle_id, service, cost, date, mileage))
[Link]()
[Link]()
print("Maintenance record added successfully!")
def log_expense():
conn = [Link]("[Link]")
cursor = [Link]()
vehicle_id = int(input("Enter Vehicle ID: "))
category = input("Enter Expense Category (Fuel, Repair, etc.): ")
amount = float(input("Enter Expense Amount: "))
date = [Link]().strftime('%Y-%m-%d')
[Link]("INSERT INTO expenses (vehicle_id, category, amount, date) VALUES (?, ?,
?, ?)",
(vehicle_id, category, amount, date))
[Link]()
[Link]()
print("Expense recorded successfully!")
def add_reminder():
conn = [Link]("[Link]")
cursor = [Link]()
vehicle_id = int(input("Enter Vehicle ID: "))
description = input("Enter Reminder Description: ")
due_date = input("Enter Due Date (YYYY-MM-DD): ")
[Link]("INSERT INTO reminders (vehicle_id, description, due_date) VALUES
(?, ?, ?)",
(vehicle_id, description, due_date))
[Link]()
[Link]()
print("Reminder added successfully!")
def view_reports():
conn = [Link]("[Link]")
cursor = [Link]()
print("\n--- Vehicle Summary Report ---")
[Link]("SELECT id, make, model, year, mileage, fuel_efficiency FROM vehicles")
print(tabulate([Link](), headers=["ID", "Make", "Model", "Year", "Mileage", "Fuel
Efficiency"]))
print("\n--- Maintenance History ---")
[Link]("SELECT vehicle_id, service, cost, date, mileage FROM maintenance
ORDER BY date DESC")
print(tabulate([Link](), headers=["Vehicle ID", "Service", "Cost", "Date", "Mileage"]))
print("\n--- Expense Report ---")
[Link]("SELECT category, SUM(amount) FROM expenses GROUP BY category")
print(tabulate([Link](), headers=["Category", "Total Amount"]))
[Link]()
def export_data():
conn = [Link]("[Link]")
cursor = [Link]()
with open("vehicle_data.csv", "w", newline="") as file:
writer = [Link](file)
[Link](["ID", "Make", "Model", "Year", "VIN", "Reg Number", "Mileage", "Fuel
Efficiency"])
[Link]("SELECT * FROM vehicles")
[Link]([Link]())
with open("maintenance_data.csv", "w", newline="") as file:
writer = [Link](file)
[Link](["ID", "Vehicle ID", "Service", "Cost", "Date", "Mileage"])
[Link]("SELECT * FROM maintenance")
[Link]([Link]())
with open("expense_data.csv", "w", newline="") as file:
writer = [Link](file)
[Link](["ID", "Vehicle ID", "Category", "Amount", "Date"])
[Link]("SELECT * FROM expenses")
[Link]([Link]())
print("Data exported successfully!")
[Link]()
def upcoming_maintenance():
conn = [Link]("[Link]")
cursor = [Link]()
[Link]("SELECT id, vehicle_id, description, due_date FROM reminders ORDER BY
due_date ASC")
reminders = [Link]()
if not reminders:
print("\nNo upcoming maintenance reminders.")
else:
print("\n--- Upcoming Maintenance & Reminders ---")
print(tabulate(reminders, headers=["ID", "Vehicle ID", "Description", "Due Date"]))
[Link]()
def main():
init_db()
while True:
print("\nVehicle Maintenance & Expense Tracker")
print("1. Add Vehicle")
print("2. Log Maintenance")
print("3. Log Expense")
print("4. Add Reminder")
print("5. View Reports")
print("6. Export Data")
print("7. View Upcoming Maintenance")
print("8. Exit")
choice = input("Enter choice: ")
if choice == '1':
add_vehicle()
elif choice == '2':
log_maintenance()
elif choice == '3':
log_expense()
elif choice == '4':
add_reminder()
elif choice == '5':
view_reports()
elif choice == '6':
export_data()
elif choice == '7':
upcoming_maintenance()
elif choice == '8':
print("Goodbye!")
break
else:
print("Invalid choice, try again.")
if __name__ == "__main__":
main()
Sample Input/Output:
Input Example:
● Add Vehicle:
○ Make: Toyota
○ Model: Corolla
○ Year: 2020
○ VIN: ABC123456XYZ7890
○ Reg Number: MH12AB1234
○ Mileage: 15000
○ Fuel Efficiency: 18.5
Output Example:
Vehicle added successfully!
Test Case Descriptions:
1. Test Case ID: TC001
● Description: Add new vehicle details to the system
● Preconditions: Application and database initialized
● Test Steps:
1. Run application
2. Select option to add a vehicle
3. Enter all required fields
● Expected Result: Vehicle should be added to the database
● Actual Result: Vehicle added successfully
● Status: Pass
2. Test Case ID: TC002
● Description: Log maintenance for a vehicle
● Preconditions: At least one vehicle exists in the system
● Test Steps:
1. Run application
2. Select log maintenance
3. Choose vehicle and enter service details
● Expected Result: Maintenance record saved
● Actual Result: Maintenance record added successfully
● Status: Pass
3. Test Case ID: TC003
● Description: Export all data to CSV files
● Preconditions: Vehicle, maintenance, and expense data exist
● Test Steps:
1. Run application
2. Select export option
● Expected Result: Data should be saved as CSV files
● Actual Result: Data exported successfully
● Status: Pass
Conclusion:
● Summary of test outcomes: All key features tested and passed successfully.
● Met Objective: Yes
● Further Improvement Required:
○ GUI integration for ease of use
○ Scheduling background alerts for reminders
○ Data backup and cloud sync support