600.107 Introduction to Programming in Java
Project 1 - Due 11:30pm on Friday, 10/20 - 60 points
(Recommended completion date is Monday 10/16!)

Overview

This is your first graded project! It will count for 10% of your course grade and must be treated like an individual take-home exam. That means you absolutely must not discuss it with or get help from anyone other than the course teaching staff (Joanne + TAs). Even then, we will help you minimally since the goal is for you to show us what you have learned in the prior class exercises and homework assignments by applying the concepts to this somewhat complex problem.

You'll need to apply the following programming skills and concepts to solving this problem: solution design, method writing & calling, variables, operators, decisions statements, loops, proper docuamentation and other style guidelines. Download our posted P1start.zip file to get the file(s) necessary to start this assignment. This includes java skeleton P1start.java (you must rename) with required methods headers, and also an extensive sample run (sampleRun.txt) to further demonstrate how each menu option should work.

Reflection: In addition to the code itself, we want some insights as to how you have approached the problem, your design and thought processes in developing your solution, and particular problems you were or were not able to solve. Therefore, you must submit a short (2-5 min) video recording of yourself explaining your approach and code to us. Please refer to your code specifically as you do this (on screen or on paper). If you do not submit a reflection you will receive a 0 on the entire project. The video submission is due 12 hours after the actual code. (A secondary purpose of the reflection is to make sure you are accountable for the code you submit.)

If you don't have the equipment (cell phone or laptop) to make a brief recording, please let us know immediately so we can help you with this part of the assignment. You can ask a friend to help with the recording, as long as that person is not in this course. Please keep this reflection in mind as you develop your code and make some notes as you proceed so that you remember what to say in the video. The file type should be standard enough for us to view with any common video player.

Deliverables: Your main program solution should be a java program called P1a.java. You must submit your program code (actual project solution) in a zip file called P1-jhedLID.zip, substituting your actual JHED login as the second part of the file name, to P1a on Blackboard. Your video reflection must be a file called P1reflect-jhed and submitted separately to P1b on Blackboard. Ideally you would submit them both by the main deadline, but you will have an extra 12 hours to submit the reflection without penalty -- due by 11:30am on Saturday 10/21.

Submission: Remember that you can submit multiple times on Blackboard; just make sure that your final submission includes all parts! Also remember that your Java code must compile (no syntax errors) or you will receive a 0 grade (seriously). You can check your submission by downloading from MyGrades on Blackboard after submitting and making sure all was included in the zip file, and everything still compiles as submitted. Late submissions will not be accepted, so plan to submit by 11pm even though the deadline is 11:30.


The Problem

For this first project you will write a menu-driven program to encrypt text messages. We will provide you with a sample run (file "run.txt" in the provided zip) to ensure that you understand the overall operation of the program. DISCLAIMER: we will be using very, very simplified encryption techniques that are easy to decode and should never be used in practice! The first two approaches are known as substitution cyphers where we substitute the alphabet letters of a message with different letters. The third encryption scheme is an interval-based scramble of the original message. Name your program P1a.java and remember to make it checkstyle compliant for full credit!

The overall operation of your program will be a menu-driven approach to encrypting various messages based on user input. Throughout your program the encryption choices will be operating on a current message, that can also be changed by the program user. The initial message (before the user gives the program any input) should be "This is the original message." Then the program should repeatedly display the menu, get user input, and execute the requested operation until the user decides to quit. The displayed menu and all input/output must exactly match the format in the provided sample run. Users must be able to choose any of the operations, in any order that they want, as many times as they want, until they decide to quit.

Here are the menu operations:

Implementation Details & Hints: There are several key features of this program solution that are required and/or will make your development job much easier. Here is a list of requirements and implementation hints:


Grading

The 60 total points for this assignment will be broken down into expected functionality (how well the code works), how well the code is written, including style and documentation, and the video reflection. You are not required to submit pseudocode or extra tests for any parts of this project, but you are strongly encouraged to write them as part of the solution process.

Deadline & Time Management: We strongly recommend completing this project (along with the video reflection) by Monday 10/16. This is your best preparation for the midterm on Wednesday 10/18 and avoids having to finish the project on Fall Break Day (10/20). We will probably have reduced office hours over fall break (10/20-10/22), so plan to get help before then! Also remember to account for any travel plans you may have when planning your work schedule. Minimally you should start all aspects of the assignment by Monday 10/16.


General assignment requirements, style and submission details: