Although you can probably do all the bandwidth monitoring you need with a Linux box, if you are looking for an off-the shelf solution, look at http://www.packeteer.com/

One of my Uni lecturers covered how to bill users when they are using their own laptops in airport/cafe/hotel situations. His solution was to get the user to go to a webpage on the local network where they fill in a form with their account/table/room number. When that is submitted to the server, the source IP (which would be DHCP allocated) and the account number are stored and any activity on that IP address is monitored for later billing. Before they fill in this form, they are limited to only accessing the login server. It's not infallable, but it is easy to set up.