Guidelines for Final Project

Deadlines: Initial Design (2%): Due 7/23, Final Project (6%): Due 7/30

This is a group project (maximum 3 member teams)


Objective:

Design, develop and implement a working software system in Java. All code must be maintained on GitHub (See instructions on Canvas)


Problem Statement – Movie Booking

Congrats! You’re hired to create a project that mimics a movie booking app. There will be two perspectives for the app; the user and the admin. The user should be able to view movies, book tickets, view tickets and rate watched movies. The admin should be able to post details of new movies along with the show timings and other information which will be visible to the users. The project should have two perspectives as follows:

1. Admin’s Perspective:

Log in to the app with admin credentials (no registration required, can hardcode)

Admin is presented with main-menu style options after logging in, containing items like:

Post new movie

Edit details of existing movie

Sign out

Post new movie:

■ This should contain basic information about the movie (genre, title and release date is mandatory)

Based on current system date and release date provided in the movie description, the status of the movie should be assigned as “upcoming/currently running” as required

After creation, this post should become visible to all regular users

Edit details of existing movie:

Should be able to see a list of all movies available

Should be able to select one movie and edit its details (apart from the rating)

○ Should also be able to delete it altogether

Should be able to see names of the users who bought tickets for the respective movie

2. User’s Perspective:

● User should be able to register to the app by specifying username and password. Usernames should be unique

User should be able to log in to the app with his/her own credentials (store these in a file for persistence)

User is presented with main-menu style options after logging in, containing items like:

View my history

Browse movies

View tickets

Sign out

Delete account

Browse through movies:

○ User is presented with a list of movies as a landing page

■ Search feature: In this section, user can search for movies via title and/or genre. This will yield a similar list of movies but filtered according to search keyword(s)

User should have the ability to view details of any one of them (show timings, location, cast, genre, avg. rating etc.) and book tickets for the same

■ Average rating should be calculated based on the ratings given by users who have watched the movie

User should be able to book tickets only for movies that are running currently. The search results can also include upcoming movies which are not yet released.

While booking, the user can specify number of tickets, show timing, seats etc.

After a payment portal screen and successful payment, the confirmed ticket should show up in View tickets option (payment flow can be mocked up/hard-coded)

Ability to go back to the list of movies

View tickets:

○ User should be able to view details of tickets for upcoming shows (past movies do not count). (How will you check if they actually went to see the movie? If needed, you could ask the user themselves whether they have watched the movie or not (user input). Or any other logic is okay for this.)

View my history:

○ User should be able to see a list of movies for which he/she has bought tickets for in the past (shouldn’t count shows to which he/she has a ticket currently)

○ User should be able to give a rating to those movies (not to unwatched movies)

Sign out:

○ User should be redirected back to log-in page

● Delete account:

○ If a user chooses this option, he/she should not be able to log in again

○ Details of his/her tickets should be removed from the system

3. Optional Features

● Summary statistics

○ Admin should be able to see statistics such as number of tickets bought/cancelled per movie, best movie of last week (based on rating), most booked theatre/show times etc

● Suggested movies

○ Show recommended movies to the user based on his/her history (suggest based on the genre of movies watched in the past, movie theatres visited often etc.)

Note: For all features, you are free to use your creativity and any logic to implement the same. You are encouraged to add more features to make it as realistic as possible.

The software development cycle includes requirement specification, design and analysis, coding and testing phases. You will also prepare a report documenting each step used in the software design cycle and will use UML diagrams to properly represent all classes used in your design. (You may use free software called StarUML which can be downloaded from http://staruml.sourceforge.net/en/download.php)


System Features:

The System that you are designing offers a variety of design choices. You are encouraged to design the software system that provides the most realistic user experience. Here are some of the required functionalities:

Users should be able to register and login to their accounts using their unique credentials.

Admin should be able to login into the system using his ID and password to add / edit / delete movies.

Admin should be able to see all movies listed and should be able to edit existing movies/post new movies.

Users should be able to view all the movies and browse movies based on movie name. If you would like to add more fields to browse movies, you could implement that as well.

Users should be shown details (show timings, address of theater) of the movie ticket on booking.

Users should be able to view their history and be able to give rating to movies. This rating field should be updated for the same movie on the landing page as well.

See features mentioned in each perspective above for detailed requirements

Make your system user friendly by providing enough guidelines and help to use the system (For example: if your system is expecting any input in a specific format, be sure to specify that in the instructions as well as the Testing part of your report)

Note: Your booking system must have state persistence by saving the necessary data to files. State persistence allows your system to outlive the process that created it. For example, if you add a few movies to the system when you initially run it and then stop the program before running the system again, the system must be able to remember the previous movies and its state. This will allow you to use the previously entered information without having to create accounts and information, etc. again and again. You can complete the entire project by storing data in files or any other persistent storage medium.

You have tremendous amount of freedom in designing this application. You are welcome to add any additional functionality to your system. Just imagine that you are an actual developer of the application.

Note: The design of a Graphical User Interface (GUI) is optional. You can also develop a command-line based system.


System Design &Development:

The final project includes two major components: Project Design and Implementation.

Design (2%): The design component will consist of the software design for the project and will include the list of all classes (member variables and functions) to be used, their relationships & collaboration, as well as databases/files. The initial design must precede any implementation. You will start by analyzing the requirements of the project and by identifying the classes required along with attributes and functionalities. A doc/docx document listing the design along with UML diagrams (Class diagrams, activity diagrams, etc.) must be submitted by the deadline. Please include the following:

Skeleton Code with all classes (with member attributes and member functions)

What are class hierarchies and relationships? (in your report)

All other data structures or files to be used (in your report)

Group Peer evaluation is REQUIRED and it counts towards your individual final grade. Each member is ideally required to put in equal amount of effort

Also setup a private repository for your source code on github and add all instructors as collaborators (See instructions on Canvas).

It would be beneficial for you to analyze your system thoroughly and provide detailed UML diagrams. Here are some of the questions, answering those will help put you on the right path:

How many classes will you have and how will they interact?

How will you store user/admin ID, passwords, menu options?

How will you represent the selection options and the menu?

How will you deal with adding multiple users to the system?

How will the rating system be implemented?

Implementation (6%): Once you complete the initial design, setup a private github repository and start implementing the admin, and user functionalities separately. Test these separately with individual drivers. Be sure to add the appropriate user-friendly menu options that would allow the user to select various actions easily. Ensure that the menu options only work when correct input is provided by the user. Test each option individually to ensure that all available functionality is properly implemented. All source code must be shared amongst team members and instructors via GitHub.

Now imagine yourself as the user of the system (as User, Admin) and observe the behavior of the system (and see how it changes). Reflect on the efficiency of your choices. Review your initial design and make the necessary changes to remove any unnecessary attributes and functions. You may have to add some more functionality that you might have missed in your initial design. Implement the updated design and report the updates to the initial design along with a discussion regarding the efficiency of your choices. A doc/docx document listing the final design including UML diagrams must be submitted along with working Source Code and video demo by the deadline. See the checklist given below and also refer the rubric on canvas.

Testing: Develop and build unit tests for each operation. Create different drivers for testing each component of the system as a user/admin separately and then integrate the entire system and test with a separate main driver. Please ensure that the complete system is properly tested before submission.


Deliverables:

The following items must be submitted:

All source and header files related to the system implementation (on Canvas as well as GitHub).

All drivers that are part of the testing from all perspectives separated in different folders

A README file with any information regarding compilation and testing I need to know in order to successfully compile and run your system. Include any other files needed to compile or test (input text files etc)

Source code must be properly organized, readable, and must use proper best coding practices.

The report file with the final design with discussion, and details of testing activities. Feel free to show additional testing you performed in the report

Video Demo (10 minutes long max) showing all features of your working system. Voice over is optional.

Group Peer evaluation is REQUIRED and it counts towards your individual final grade. Each member is ideally required to put in equal amount of effort


Project Checklist:

You can use the following checklist to ensure that you have submitted everything required for the project:

• Did you submit evidence of successful compilation or testing (video/screen captures)?

• Did you submit the instructions required to compile your code?

Did you add all instructors as collaborators to your private GitHub repository?

Did you submit all files including any new header files used for compilation on Canvas (compressed as one file)?

Peer evaluation document?

Did you implementuser’s features: password, unique ID, ratings etc.?

Did you submit a report with your designs (and UML diagrams), evidence of successful testing of all features?