Background
Solent Cinemas is an independent company who runs one cinema located in a large town in the south of England. The company wishes to create a new dynamic website to replace its existing static, HTML-only website. The existing website has the problem that it must be edited by hand, for example, when the film schedule changes.
There is also no way for customers to reserve tickets for films online, an often-requested feature. The cinema would ideally like to extend this feature so that a user can sign up for an account, to allow them to view and cancel their own bookings.
The new website aims to use database-driven server-side scripts to provide a more interactive experience for both the user and the company website administrator.
You need to design and implement a simple, prototype system which allows users to book films and administrators to add new films to the schedule.
Database design
Database tables will be created for you on the Technology web server. The schema will be as follows. Please note that this is a simplified database structure, designed to make it straightforward to implement the assignment on a basic level; you can modify this or add additional tables if you wish. Only the first two tables are absolutely essential to implement a bare pass solution.
sc_users table
Records users in the system, and whether they are an administrator or a regular user.
ID INT PRIMARY KEY
isadmin TINYINT
name VARCHAR(255)
username VARCHAR(255)
password VARCHAR (255)
dayofbirth INT
monthofbirth INT
yearofbirth INT
filmshowings
Records the current film showings.
ID INT PRIMARY KEY
film VARCHAR(255)
date VARCHAR(255)
time VARCHAR(255)
screen INT
maxtickets INT
certificate VARCHAR(5)
mybookings
A table which can be used if you wish to implement code to allow users to view, change and cancel their bookings. Not required for a bare pass answer but useful for more advanced answers.
username varchar(255)
showingID INT
ntickets INT
Deliverables
The tasks you need to complete are presented below. For each task, you must produce:
- an analysis and design (see "Analysis and Design report", below the tasks, for details);
- an implementation in PHP.
For a pass, it is essential to complete tasks a), b) and c). Please see the marking scheme for details on what mark you are likely to receive for completing a given number of the tasks.
Please complete the tasks in the order in which they are presented, or you will not receive the full credit. For example, you will not receive the credit for task f) if you do not complete tasks a) to e) successfully.
Note that you also need a login facility, but you can use, more or less unchanged, the HitTastic! code that we developed in class for this. Consequently, your login script will not be counted towards your grade.
Analysis and design report
You are required to produce a report describing the process of analysing the specification and designing your scripts, in addition to the coding itself. For each task from a) to i) that you propose to complete, identify the PHP scripts (or, in the case of AJAX, JavaScript functions) necessary to implement that task, and for each script or JavaScript function, do the following:
i) In one or two paragraphs, describe the general role of the script, and discuss what the script needs to do in terms of database queries, gathering input from the user (e.g. from a form, or from a query string), linking to other scripts or performing calculations. If appropriate, details of techniques to maintain state (sessions, query strings, cookies), and of which security measures are to be implemented and why must be included.
ii) Design each script using pseudocode.
Implementation
For a Grade D, it is necessary to…
a) Allow an administrator to add a new showing. An administrator should provide the film name, screen, date, time and certificate. The certificate should be one of: "U" (can be seen by anyone), "12" (can only be seen if you are at least 12 years old), "15" (at least 15 years old) or "18" (at least 18 years old) - note that this is slightly different to the current UK certification system.
This should add a record to the showings table, containing the information the administrator entered. For a basic pass it is not necessary to check that the user is an administrator.
b) Allow a user to search for a film showing by film name. A user should be able to enter a film name (e.g. "Avatar"); once they have entered the film name, all showings of that film should appear. Each search result should contain a hyperlink, allowing the user to book that film showing.
c) Allow a user to book a film showing once they've chosen one from the search results. For a basic pass, you do not have to implement the facility to allow a user to book more than one ticket: you can assume that they are only booking one ticket. However, the site must reduce the number of available tickets for that showing and record the showing ID and current user's username in the mybookings table.
For a Grade C, it is necessary in addition to…
d) Allow a user to book more than one ticket.
e) Add appropriate error checking to tasks a) to d). It should not be possible to book tickets for a showing which is sold out; only logged-in users should be able to book a showing; and only administrators should be able to add new showings. You will need to modify your login system to check that the user logging in is an administrator.
For a Grade B, it is necessary in addition to…
f) Allow a user to view and cancel their own bookings. The "view bookings" page should list the film name and time of each film showing that they have booked; beside each event there must be a "Cancel" link allowing the user to cancel that booking. Cancelling the booking should behave in a realistic manner.
For a Grade A4 it is necessary in addition to…
g) Prevent users from being able to book a film which they are not old enough to see.
For a Grade A3 it is necessary in addition to…
h) Implement an AJAX interface. Users should be able to search for and book films using AJAX (it is not possible to get an A3 with just a basic AJAX search, and no AJAX should be attempted unless you have completed tasks a) to g) ). In other words, a user should enter a film name, all the showings should be displayed (using AJAX) and then a user should be able to book a particular showing by clicking on a button (the communication with the booking script must again be done using AJAX).
For a Grade A1 or A2, it is necessary in addition to…
i) Develop a seating plan, which should show unbooked seats in green, and booked seats in red (or a similar scheme). You will need an additional table for this to record booked seats. This will need three columns:
id INT - the primary key
showingid INT - the showing that this booked seat relates to
seatnum INT - the seat number of this booked seat
Assume that all showings have 100 seats. For a very advanced (A1) answer, allow users to book a free seat by clicking on it; for an A2, it will be sufficient to allow the user to input the seat number separately.