NOTE: YOU CANNOT IMPLEMENT THE SNAKE GAME OR YAHTZEE. MINE SWEEPER MAY BE ALLOWED WITH SIGNIFICANT VARIATIONS

CANNOT BE A SIMPLE THREE-TIER CRUD (Create Read Update Delete) SYSTEM

Java Final Project

Welcome to the Java Final Project.

This will be a final project of your own design. Conceptually, you’ve learned all about Java syntax, data types and structures, and how inheritance and interfaces work. In this part of the course, you’re learning about GUIs, Threads, Networking, and Databases. There are other aspects of Java, like the REST API Servers for Java, and the Spring Framework which allow you to develop other powerful applications.

The deadline for the proposal is in April 1st and due on May 10th giving you almost 6 weeks to complete it. But the intelligent thing to do is put together your proposal thoughts sooner rather than later so you have as much time as possible to dedicate to the final project. Also you will have assignments due, but you’ll still have plenty of time to concentrate entirely on the final project.

Requirements

The requirement of the final project is that you incorporate at least 3 “advanced concepts”, either from the lectures or from reading on your own, and apply them to your project. For example, an early project was to create a three-tiered data system from scratch:


This implementation had a UI, network communication between a client and a server, a server that was multi-threaded to receive and handle multiple connections at once, and a DB where results could be stored and retrieved. You need to do more than that, such as accounting for multi-user concurrency and transactional atomicity.

A few points:

Any UI development should be in Java. People have made previous requests about building a web-based UI in React and making a Java-based back end. With rare exceptions, I will not be allowing this anymore. I want you to concentrate on your Java skills so you can only use a Java-based UI. You are free to use any UI framework you want, but it has to be in Java.

You can use the Spring Framework, but it has to complement Java code, not replace it. Spring Boot is great for dependency injection and creating objects and handling settings. However, your database queries and network connections should ultimately be written in Java. I don’t want to put any kind of code-minimum on these projects, but if your project has 10 lines of Java code interfacing with a bunch of SpringBoot configuration files, you’re doing it wrong.

Group Size: You may do this in a group of 2-3 people, but the more people, the larger the project needs to be. The following project examples are suitable for a single person. Group projects will have to double or triple the amount of work, and we will evaluate this based on what you put in your proposal (see below).

Other example projects:

Yahtzee (NOT ALLOWED TO BE SUBMITTED BUT YOU CAN LOOK AT THIS TO GET AN IDEA)

Yahtzee is a dice game. To implement this, you need to create a UI and graphics to depict the dice (and rolling of the dice). Other additional features can be a network server to save the game and/or maintain top scorers. Alternately you could write a multiplayer game where different players connect to a server and play the same game. This is primarily a UI-based game.


Graphics-based games: The Snake Game (NOT ACTUALLY ALLOWED BUT YOU MIGHT WANT TO LOOK AT THIS)


This is a graphics and animation-oriented game that has to take inputs from a keyboard or mouse to move a “snake” that eats apples or eggs and lengthens with each item it eats. The goal is for the snake to avoid eating itself even as it gets longer and longer. For more info and examples, see here.

Online Scheduling/Reservation System

Here you have a database that stores calendars and appointments, and the user accesses this scheduling data by connecting to a remote server. You should be able to make an appointment and reserve a time slot. If the time slot is reserved by someone else, it will be unavailable.

Data Visualization/Analysis

Download sample log data (such as someplace like https://datasetsearch.research.google.com/), such as HTTP to network traffic data and either in files or stored in a database. Have some kind of interface that allows you to select one of several different log files. The user will select one and then Java will do various forms of analytics, such as a traffic histogram or visualization of traffic destinations. This will require good facility with Java graphics as well as Java analytics. In addition, there should be some kind of remote load/save functions. See if you could multithread the analytic process.

Multithreaded Web Crawler

This would require you to learn a bit about Java’s URL and HTTP classes (see this Oracle tutorial and these explanations on StackOverflow). Then select a starting URL, download the initial page, and get all the http links and download all of those links, and repeat up to a given depth. Each of those links should be sent to a separate thread which does the download. Keep a log of the URLs and information about the data in those links (like how big they are, what the path to that link is, and so on). Create some kind of browsable index of all of the links and associated data.


Guide to finding ideas:

If you have research work you’re already working on, use Java to create an interface to it or solve other problems.

Browse the web for other projects or sources of data. 

Leverage your research interests and see how you can use java to present them in a compelling way. See how you can take repetitious code and parallelize it using Java threads.

What you need to do:
First, come up with a proposal and give it to us. This should outline what you plan to do, what Java features it will use, and what your design will be. This is to make sure you’re doing good work and to give you a chance to talk with us about your project and to help put your thoughts together. It shouldn’t need to be more than 2 pages. This will be due November 1st.

The project is due May 10th. There are a lot of you and we need the time to grade your project to get your grades in on time.

NOTES ON PLAGIARISM—DON’T DO IT AND HOW TO AVOID IT

The final projects are vulnerable to plagiarism. Sometimes it’s on purpose, sometimes it’s because people don’t understand the requirements. You are expected to do your own original work. Submitting a previous Java project you have done is not allowed. Downloading another Java project and modifying it is not allowed.

As a reminder from the beginning of the semester, here is a guide as it relates to the final project:


Scenario    Allowed?
Google how to implement a problem, see the solution on Stack Overflow, and implement it yourself    Yes! This is how most of us solve our problems!
Discuss with a classmate how to solve a problem, the classmate describes the answer, and you use that to write the code    Yes! Collaboration and discussion are encouraged
Using the Eclipse or other IDE code-generation tools for getters/setters, toString, etc. based on code you’ve written.    Yes! This makes things easier and is not a violation.
For your final project, use a project you did from a previous class or other independent work and turn it in, either wholly or with some modification     Plagiarizing from yourself is also plagiarism. You are supposed to do your own work. Even if you wrote code yourself in a previous class, you can’t do that in this one.
Use code you wrote in another language and re-implement it in Java.    This may be allowed and is not necessarily plagiarism, and we would like you to discuss it with us, and we can come to an accommodation.
Using external libraries to use a functionality.    Yes!  External libraries are allowed and encouraged
Using external source code to take advantage of a functionality.    This may be allowed, as long as it is serving a purpose of what an external library would. You must mention the source of where you acquired the code, and the bulk of the submission should have your own work.
Downloading a project on github or zetcode and adding personalization or new functions.    Not allowed. This is always plagiarism. 
Looking at code and other projects as guidance and inspiration    Probably allowed. You have to write your own code, but understanding how other work is done and getting new ideas is perfectly fine. Cite these sources as part of your submission.

Good luck and we are looking forward to seeing your proposals!

请加QQ:99515681  邮箱:99515681@qq.com   WX:codinghelp