Information Technology
Maintenance Billing and Amenity Booking System for a 120-Flat Apartment Society (Flask + MySQL)
Monthly dues, receipts, penalty ageing and clubhouse slots for a residents' welfare association
- Python 3.12
- Flask 3
- Jinja2
- +4
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 5CanBill 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.
Syllabus alignment
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.
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.
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.
In scope
Out of scope (v1)
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.
| Phase | Weeks | Activities | Deliverable |
|---|---|---|---|
| Requirement analysis | 1–2 | Interview one real local supplier; list workflow steps, forms in the register, and pain points; write functional requirements | SRS (dissertation ch. 3) |
| System design | 3–4 | ER diagram, DFD level 0/1, use-case diagram (StarUML), database schema, page wireframes | Design document (ch. 4) |
| Increment 1 | 5–6 | Project skeleton on Tomcat, schema creation script, login with jBCrypt, auth filter, customer CRUD | Working customer master |
| Increment 2 | 7–8 | Daily delivery screen, standing-order pre-fill, empties tracking, edit-only-today rule | Working delivery log |
| Increment 3 | 9–10 | Month-end bill generation, payments with UPI reference, bill printing, dues/empties reports | Complete workflow |
| Testing & documentation | 11–12 | Unit and black-box test cases per screen; UAT with two weeks of a real supplier's data; final report and PPT | Test 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.
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 --> BPresentation 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.
Module 01
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.
Module 02
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.
Module 03
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.
Module 04
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.
Module 05
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.
Slide 1
CanBill — Water-Can Delivery & Billing System
Slide 2
The supplier's day today
Slide 3
Problem statement
Slide 4
Proposed system
Slide 5
Technology stack
Slide 6
Architecture (MVC)
Slide 7
Database design
Slide 8
Modules & team split
Slide 9
Demo
Slide 10
Testing
Slide 11
Limitations & future scope
Slide 12
Conclusion
Bullets, speaker notes and the .pptx · ₹2,000
Read each answer, close it, and say it in your own words. Your viva will ask. Now you'll know.
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.
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.
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
Unlocks with the project · ₹2,000
Unlock for ₹2,000What to change before it goes anywhere near a submission. Skipping it is how the demo fails live.
Unlocks with the project · ₹2,000
Unlock for ₹2,000How to study it, adapt it and walk your examiner through it, step by step.
Unlocks with the project · ₹2,000
Unlock for ₹2,000OnlyProjects. (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
Keep browsing
Same degree, same syllabus slot, different idea. Pick the one your guide will actually approve.
Information Technology
Monthly dues, receipts, penalty ageing and clubhouse slots for a residents' welfare association
Information Technology
Conflict-free exam schedules from DSATUR and simulated annealing, measured on realistic college instances
Agriculture
Cattle-dung blends with paddy straw, leaf litter and market waste, benchmarked against FCO Schedule IV specifications
Biochemistry
A p-nitrophenyl phosphate assay read at 405 nm, non-linear Michaelis-Menten fitting, and competitive inhibition by inorganic phosphate
Biotechnology
Four disinfestation protocols, 144 nodal explants on MS medium, and chi-square tests that decide which protocol actually wins
Botany
Frequency, density, abundance and IVI from 20 nested quadrats, with Shannon, Simpson and Jaccard comparisons of a protected and a disturbed plot