Project 1, CSC 2001
Great news!
You’ve been hired to help Cal Poly improve the training and mentorship programs for students.
As part of this effort, you’re in charge of building a mock-up of a small application that will help organizers create and manage mentorship sessions, in order to help students connect with the resources that they need.
This application will keep track of a list of mentorship sessions. Each session will have an ID, a title, a mentor, a date, a location, and a count of the current number of participants and the maximum number of participants.
The application will allow the following operations:
Add Session : this button adds a new session to the list of all sessions, using the text currently in the input fields.
Display : This button will print information about all sessions to a scrollable panel, ordered by date.
Search : This button uses information in the ID and/or Mentor fields to search for sessions. Specifically, if the ID field is nonempty, then the session with that ID is displayed, if one is present. If the ID field is empty, and the mentor field is nonempty, then all sessions associated with that mentor are displayed, in chronological order. If both of these fields are blank, no sessions are displayed.
Remove : This button removes a session by ID, if one is present with the ID given in the ID input field.
Register : This button increments the number of participants associated with the session whose ID is given in the ID field, unless that session is already full, in which case it doesn’t.
Exit : This button closes the window and ends the program, and destroys all of the sessions you entered. Oh no!
1 Starter Code
Start your work by cloning the repository at https://github.com/cp-csc2001/csc2001-project-1-template .
This code should run "out of the box", and running the "MainGUI" file should show a window with a graphical user interface. None of the buttons do anything useful, except for the "Exit" button. Your job is to make them all work correctly.
You will have to formulate representations for a session, and for a linked list of sessions.
You will also need to write methods that implement the required functionality. Remember to choose good method names!
2 Helpful functionality hints
Your dates should be strings in the ISO 8601 format, for instance "2026-09-08" . That is: year, month, day. Month and day should always be two digits long. If you adhere to this practice, then comparing two dates can be done by comparing the strings that represent them. So, for instance, in Java, the string "2024-12-31" is less than the string "2025-01-01".
You should keep the session list sorted by date. Specifically, every time you add a session, you should add it in the right location, after things with an earlier date and before things with a later date. The ordering of items with the same date doesn’t matter.
You will also need to check, when adding an element, that the newly specified ID doesn’t already occur in the schedule. You might be able to re-use an existing function for this! (Also, you might reasonably ask whether there’s a faster way to do this search; there is, but it’s out of scope for this project, hold on until later in the course.)
Whenever an operation fails (for instance, because there’s no session with the given ID), you should display some kind of helpful error message to the output area.
3 Collaboration
Git has incredibly sophisticated mechanisms for collaborating on code. And when I say sophisticated, I mean incredibly complicated and easy to mess up. Nearly none of these are unrecoverable, but by and large they can be quite painful to fix. I strongly recommend working together, or if that’s absolutely impossible, working only one at a time and pulling before every edit session and pushing at the end of each edit session. I have seen the fantastically complex binds that students in this course can get themselves into. I do not need to see them again. Smiley!
4 Process Journal
This project requires you and your partner to construct a "Process Journal." This journal should include a brief entry for each time period that you or your partner (or, ideally, the two of you together) worked on the project. This entry should record when you started working, what you worked on, and when you stopped. I strongly recommend setting a 20-minute timer that goes off periodically while you work, to make sure you don’t forget to write down what you’re working on, and to help you step back periodically and make sure that you’re going in the right direction, and making good progress. If you’re not making good progress, don’t stumble forward in the dark. Ask for help! We are here for you, on EdStem and at the tutoring center and in office hours.
Keep this process journal in a text file in your repository; create it using IntelliJ, at the top level of your repository, and call it "process-journal.txt"
5 Deliverables, Handin
You will be submitting a bundle containing the contents of your repository,
We will be handing in this file using Gradescope.
More details to follow!