Skip to content
OnlyProjects
B.Sc · Information TechnologyFor educational purposes only
Code included

Water-Can Delivery and Billing System for a Neighbourhood Supplier (Java Servlets/JSP + MySQL)

From the bahi-khata register to a browser: daily can deliveries, monthly bills and dues for a 20-litre jar supplier

Mapped to your syllabusMumbai University B.Sc IT 2022-23 (autonomous-college mirror) · Project Dissertation · Semester 5

Overview

1 min read

CanBill is a small but complete web application for the 20-litre drinking-water can supplier every Indian neighbourhood depends on — the one who still runs the business from a bahi-khata register, a ballpoint pen and a wall of returned empties. Every morning the supplier's staff deliver jars to regular customers, collect used cans, note everything in the register, and at month-end the whole book gets totalled by hand into bills that are disputed, lost and re-written.

CanBill replaces that register with three screens backed by one database. The owner (admin) manages customers — name, phone, area, monthly rate, security deposit and the standing daily order ("2 cans every day"). The delivery staff open a mobile-friendly delivery page each morning where every active customer's standing order is pre-filled; they tap to confirm cans delivered and empties returned. At month-end the system generates each customer's bill automatically from the delivery log (cans delivered × rate + adjustments), records part or full payments with a UPI reference, and prints a clean bill. Reports answer the supplier's daily questions: who owes money, which customers are holding empties beyond their deposit, and what today's route looks like.

The application is built exactly as the B.Sc IT syllabus teaches a small system: Java Servlets as controllers, JSP views, plain DAO classes with JDBC PreparedStatements, and MySQL — a textbook MVC three-tier design on Apache Tomcat. It is deliberately dependency-light, so every layer of it can be explained, modified and defended by a beginner in the viva.

Relevant for
Maharashtra
Level
Beginner · 12 weeks · team of 3
Common at
University of Mumbai, Bengaluru City University / Bangalore University, University of Calcutta
Updated
Nov 2026

Syllabus alignment

Mumbai University · B.Sc IT 2022-23 (autonomous-college mirror)

Project Dissertation · Semester 5

Subjects this project applies
  • MySQL (USCS204)
  • Enterprise Java (Servlets/JSP/Hibernate)
  • Java programming core
  • Software Engineering with StarUML (SPM)
  • Open-source tools (Git, Linux administration)
How it is evaluated

See your department's project guidelines.

Also fits: BCU / Bangalore University SEP 2024, University of Calcutta CCF 2022 (4-year).

What's in the box

11 parts · 5 free · 2 previewed · 4 unlock for ₹2,000

Problem & synopsis

5 min read

Problem statement

Local drinking-water can suppliers manage hundreds of daily deliveries, refundable deposits and monthly collections entirely through a paper register and memory. Because deliveries, empties and payments are interleaved in one book with no dates or totals, month-end billing takes a full day of manual arithmetic, deposit disputes are common (customers frequently hold more empties than their deposit covers), dues are tracked from recollection, and payment history is lost when bill copies go missing. The owner cannot produce a trustworthy dues list, and staff changes wipe out operational knowledge. There is a need for a small, role-based web application that records every delivery and empty-can movement by date, computes monthly bills automatically from the delivery log, tracks payments against bills, keeps deposit liability accurate, and gives the owner a one-screen answer to "who owes what, and who is holding how many cans" — built with the basic Java web stack a B.Sc IT student is expected to master.

Synopsis

Abstract

Neighbourhood drinking-water suppliers run a surprisingly complex micro-business — daily standing orders, per-customer rates, refundable deposits, empty-can exchange and month-end billing — entirely on paper. CanBill is a Java Servlets/JSP web application with a MySQL database that digitises this workflow end to end: customer master with deposits and standing orders, a daily delivery log, automatic monthly bill generation, payment tracking and dues reports. It follows the MVC pattern on Apache Tomcat and uses only techniques from the B.Sc IT syllabus.

Introduction

In most Indian localities, the water-can supplier serves 100–500 households and offices. Customers place a standing order ("two cans daily"), get jars on a fixed rate, and pay a refundable deposit per can held. Deliveries, empties and payments are recorded in a register; bills are written by hand once a month; and when the register does not tally, both parties lose. Summer months make it worse — demand doubles, staff change, and disputes over "how many cans are pending" are routine.

Existing system

  • The register records deliveries against customer names, with no dates in many entries.
  • Deposits are remembered, not computed — disputes arise when a customer holds more cans than paid for.
  • Month-end billing takes the owner a full day of manual totalling, with arithmetic errors.
  • Payments (cash and UPI) are noted on bill copies that get lost; dues are tracked from memory.
  • Limitations: no history, no totals, no accountability, and the owner cannot answer "what does customer X owe?" without flipping pages.

Proposed system

  • A customer master with area, rate, deposit per can and a standing daily order; inactive customers are kept but never billed.
  • A daily delivery log: staff confirm pre-filled standing orders with one tap, record cans delivered and empties returned, per date — the single source of truth for everything downstream.
  • Automatic monthly billing: for each active customer, cans delivered in the month × rate + adjustments; bills marked Unpaid, Partial or Paid as payments (cash/UPI with reference number) are recorded.
  • Reports: dues report, empties-pending report (cans held vs deposit), daily delivery sheet, and a printable bill per customer.
  • Two roles — admin (owner) and staff — enforced by a server-side authentication filter, so staff can mark deliveries but never touch rates or delete bills.

Feasibility

  • Technical: Servlets/JSP, JDBC and MySQL are taught in the programme; Tomcat runs on any laptop. No frameworks beyond Bootstrap and jBCrypt, so debugging is within a beginner's reach.
  • Economic: zero licence cost; the supplier scenario needs no hosting — the owner's laptop or a low-cost VPS suffices.
  • Operational: the delivery screen is one thumb-tap per customer on a phone; the owner needs a 15-minute walkthrough. Data entry is less work than the register it replaces, which is the real adoption test for a small-business system.

Objectives

  1. 01Model the supplier's workflow as a normalised MySQL schema (customers, delivery log, bills, payments, users) in third normal form.
  2. 02Implement login with jBCrypt-hashed passwords and two roles (admin, staff) enforced by a server-side authentication filter, not by hiding links.
  3. 03Build a mobile-friendly daily delivery screen with pre-filled standing orders, recording cans delivered and empties returned per customer per date.
  4. 04Generate monthly bills automatically from the delivery log (cans × rate + adjustments) and maintain bill status (Unpaid/Partial/Paid) as payments arrive.
  5. 05Record payments with mode and UPI reference number, keeping a complete payment history per bill.
  6. 06Provide owner reports: dues, empties pending versus deposit, daily delivery sheet, and printable bills.
  7. 07Follow the MVC pattern strictly — servlets as controllers, JSP views, DAO classes with JDBC PreparedStatements for all database access.

Scope

In scope

  • Single supplier business; two roles (admin/owner, delivery staff).
  • Customer master with rate, deposit and standing order; customer activate/deactivate.
  • Daily delivery log with cans delivered and empties returned; edit allowed only for the current date.
  • Monthly bill generation, payment recording (cash/UPI with reference), bill printing.
  • Reports: dues, empties pending vs deposit, daily sheet, customer ledger.

Out of scope (v1)

  • Customer-facing app or login — customers receive printed/SMS bills; a read-only customer page is future scope.
  • Online payment gateway — payments are recorded with a UPI reference, not collected in-app.
  • Automatic SMS/WhatsApp notifications and route optimisation for delivery staff.
  • Multi-supplier (SaaS) deployment and accounting/GST integration.

Methodology

The project follows the Incremental SDLC model: the system is built and demonstrated in three working increments, each adding a layer over the previous one. This suits a 12-week student timeline and the Mumbai two-phase project pattern, because the Sem-5 dissertation documents design while Sem-6 delivers the implementation.

PhaseWeeksActivitiesDeliverable
Requirement analysis1–2Interview one real local supplier; list workflow steps, forms in the register, and pain points; write functional requirementsSRS (dissertation ch. 3)
System design3–4ER diagram, DFD level 0/1, use-case diagram (StarUML), database schema, page wireframesDesign document (ch. 4)
Increment 15–6Project skeleton on Tomcat, schema creation script, login with jBCrypt, auth filter, customer CRUDWorking customer master
Increment 27–8Daily delivery screen, standing-order pre-fill, empties tracking, edit-only-today ruleWorking delivery log
Increment 39–10Month-end bill generation, payments with UPI reference, bill printing, dues/empties reportsComplete workflow
Testing & documentation11–12Unit and black-box test cases per screen; UAT with two weeks of a real supplier's data; final report and PPTTest report + submission

Testing approach: JUnit tests for business rules (bill amount calculation, empties-pending computation, deposit comparison); manual black-box test cases in a table (test ID, input, expected, actual, status) for every screen; and role-based security checks — every protected URL tested while logged out and as the wrong role.

Architecture & tech stack

2 diagrams · 8 technologies · 2 min read

  • Java 17 (Servlets/JSP)
  • MySQL
  • JDBC (PreparedStatements)
  • Apache Tomcat 10.1
  • jBCrypt (industry-standard password hashing)
  • HTML/CSS
  • Bootstrap
  • Git

CanBill is a classic MVC three-tier web application, deliberately free of frameworks so that every request's path can be traced on a whiteboard in the viva.

flowchart LR
  B["Browser: owner or delivery staff"] -->|HTTPS| F["AuthFilter: session and role check"]
  F --> S["Servlet controllers:<br/>CustomerServlet, DeliveryServlet, BillServlet"]
  S --> V["Server-side validation"]
  V --> D["DAO classes with<br/>JDBC PreparedStatements"]
  D --> DB[("MySQL: customers,<br/>delivery_log, bills, payments, users")]
  S --> R["Request attributes"]
  R --> J["JSP + JSTL views<br/>Bootstrap pages"]
  J --> B

Presentation tier: JSP pages with JSTL tags render lists and forms; Bootstrap keeps the delivery screen usable on a staff member's phone. No business logic sits in JSPs — they only display what the servlet placed in request scope.

Application tier: each feature has one servlet that parses input, validates it server-side, calls the relevant DAO methods inside a transaction where needed (bill generation touches delivery_log, bills and payments atomically), and forwards to a JSP. A single AuthFilter guards every URL under /admin/* and /staff/*, checking the session and role before any servlet runs.

Data tier: five tables — USER, CUSTOMER, DELIVERY_LOG, BILL, PAYMENT — with foreign keys and a unique constraint on (customer, bill_month). All access uses JDBC PreparedStatement with parameter binding, which both prevents SQL injection and lets prepared plans be reused. The ER model:

erDiagram
  CUSTOMER ||--o{ DELIVERY_LOG : receives
  CUSTOMER ||--o{ BILL : "is billed"
  BILL ||--o{ PAYMENT : "is settled by"
  USER ||--o{ DELIVERY_LOG : "marks deliveries"

  CUSTOMER {
    int id PK
    string name
    string phone UK
    string area
    decimal monthly_rate
    int standing_cans
    decimal deposit
    string status
  }
  DELIVERY_LOG {
    int id PK
    int customer_id FK
    date delivery_date
    int cans_delivered
    int empties_returned
    int entered_by FK
  }
  BILL {
    int id PK
    int customer_id FK
    string bill_month
    int cans_total
    decimal amount
    decimal adjustments
    string status
  }
  PAYMENT {
    int id PK
    int bill_id FK
    decimal amount
    date paid_on
    string mode
    string reference_no
  }
  USER {
    int id PK
    string username UK
    string password_hash
    string role
  }

The empties position is never stored — it is computed as SUM(cans_delivered) − SUM(empties_returned) per customer, so it can never contradict the delivery log, and the deposit comparison in the empties report is a single query.

Modules

5 modules

  1. Module 01

    Authentication, Roles and Customer Master (Member A)

    Login page backed by jBCrypt-hashed passwords in the USER table; an AuthFilter that enforces admin/staff roles on every protected URL; and the customer CRUD screens — name, phone, area, monthly rate, deposit per can and standing daily order — including activate/deactivate so old customers stay in history without being billed.

  2. Module 02

    Daily Delivery Log (Member B)

    The staff's mobile-first screen: every active customer listed with standing order pre-filled, one tap to confirm, fields for cans delivered and empties returned, defaulting to today's date. Enforces the business rules — no delivery to inactive customers, no negative counts, and edits permitted only for the current date — and logs which user entered each row.

  3. Module 03

    Monthly Billing and Payments (Member C)

    Month-end job that sums each active customer's deliveries, computes amount = cans × rate + adjustments, and inserts BILL rows inside a transaction with a unique (customer, bill_month) constraint so bills are never duplicated. Payment screens record cash/UPI amounts with reference numbers, and bill status flips between Unpaid, Partial and Paid based on cumulative payments.

  4. Module 04

    Reports, Dashboard and Printing (Member C with A and B)

    Owner dashboard with today's delivery progress and total dues; the dues report listing unpaid and partial bills with days outstanding; the empties report comparing cans held against deposit so the owner knows who must return or pay before more cans go out; the daily delivery sheet for the route; and print-friendly bill pages.

  5. Module 05

    Database, Seed Data and Tests (Member A with B)

    The 3NF schema creation script with foreign keys and constraints, seed data for a realistic supplier (about 120 customers, three months of deliveries, sample bills and payments), JUnit tests for the bill calculation and empties logic, and the black-box test-case table used in the demonstration.

Slides

12 slides · titles free · bullets, notes and the .pptx unlock

  1. Slide 1

    CanBill — Water-Can Delivery & Billing System

  2. Slide 2

    The supplier's day today

  3. Slide 3

    Problem statement

  4. Slide 4

    Proposed system

  5. Slide 5

    Technology stack

  6. Slide 6

    Architecture (MVC)

  7. Slide 7

    Database design

  8. Slide 8

    Modules & team split

  9. Slide 9

    Demo

  10. Slide 10

    Testing

  11. Slide 11

    Limitations & future scope

  12. Slide 12

    Conclusion

Bullets, speaker notes and the .pptx · ₹2,000

The titles above are the real outline. The rest is what you present from.

Unlock for ₹2,000

Viva questions & answers

3 of 16 answered free · 13 unlock

Read each answer, close it, and say it in your own words. Your viva will ask. Now you'll know.

  1. 01Concept

    Which reference books, specifications or papers did you actually consult while building this?

    Head First Servlets & JSP (Basham, Sierra, Bates) for the MVC request-response flow, the Jakarta Servlet specification pages for filter and session behaviour, the Oracle JDBC Basics tutorial for PreparedStatement and transaction patterns, the MySQL 8.0 reference manual for constraints and storage engine details, and the OWASP SQL Injection Prevention Cheat Sheet and OWASP Top 10 for the security checklist. The original MVC idea we cited is Krasner and Pope's 1988 Smalltalk-80 paper.

  2. 02Concept

    Explain the MVC pattern as implemented in your project, with one concrete request.

    Model-View-Controller separates data, presentation and control flow. When staff submit the delivery screen, the DeliveryServlet (controller) reads and validates the form, calls DeliveryLogDAO (model) which runs an INSERT through a PreparedStatement, and then forwards to delivery-list.jsp (view) with results in request scope. The JSP only renders; the DAO only persists; the servlet only coordinates — which is why a UI change never touches business rules.

  3. 03Concept

    Why did you choose Servlets/JSP over Spring Boot or an ASP.NET stack?

    Three reasons: the B.Sc IT syllabus explicitly teaches Enterprise Java with Servlets/JSP and MySQL, so this demonstrates exactly the expected competencies; the framework-free stack has no hidden magic, which matters at beginner level because we can explain every object from request to row; and the application is small enough that a framework's benefits (dependency injection, annotations) would add vocabulary without adding value.

+13 more questions, with answers

Try the free ones out loud first. Your examiner will not accept “it's in the PPT”.

Source code & how to run

6 steps · complete source code · unlocks with the project

Unlocks with the project · ₹2,000

6 steps · source code zip

Prerequisites, install, seed data and tests, written for demo day. Plus the complete source.

Unlock for ₹2,000

READMEFIRST

274 words · unlocks with the project

What to change before it goes anywhere near a submission. Skipping it is how the demo fails live.

Unlocks with the project · ₹2,000

274 words · ~1 min read

The checklist of things to rename, re-seed and re-think so the project reads as yours.

Unlock for ₹2,000

Instructions

357 words · unlocks with the project

How to study it, adapt it and walk your examiner through it, step by step.

Unlocks with the project · ₹2,000

357 words · ~2 min read

Report structure, formatting rules and the submission checklist your department will grade.

Unlock for ₹2,000

References

8 sources

  1. Apache Tomcat 10.1 Documentation
  2. Jakarta Servlet Specification (Jakarta EE)
  3. The Java™ Tutorials — Lesson: JDBC Basics, Oracle
  4. MySQL 8.0 Reference Manual
  5. OWASP Top 10 — Web Application Security Risks
  6. OWASP SQL Injection Prevention Cheat Sheet
  7. Krasner, G. E. & Pope, S. T. (1988), "A Cookbook for Using the Model-View-Controller User Interface Paradigm in Smalltalk-80", Journal of Object-Oriented Programming, 1(3), 26–49
  8. Basham, B., Sierra, K. & Bates, B., Head First Servlets & JSP, 2nd ed., O'Reilly

Cite this bundle

OnlyProjects. (2026). Water-Can Delivery and Billing System for a Neighbourhood Supplier (Java Servlets/JSP + MySQL): B.Sc Information Technology project bundle [Educational resource]. https://onlyprojects.online/projects/bsc-it-water-can-delivery-billing-system

Future scope

1 min read

  • A read-only customer page: enter registered phone number, see current month's deliveries, bill and dues — no passwords needed since nothing personal beyond the owner's own bill is shown.
  • UPI deep-link on printed bills and payment-gateway reconciliation against reference numbers.
  • SMS/WhatsApp delivery confirmations and a route sheet ordered by area to cut the staff's travel.
  • Deposit management upgrades: per-can deposit receipts and automatic deposit deduction when a customer exits with cans outstanding.
  • A lightweight accounting view for the owner: monthly revenue, cans sold per area, and staff-wise delivery counts.

Keep browsing

Same degree, same syllabus slot, different idea. Pick the one your guide will actually approve.