Java GUI to create schedules for UNCG students
git clone git://
Log | Files | Refs | README

commit c292ecdf0e642d58ee935362a48ee3d51db73bf8
parent 0ebbfd8938c94078a09abb18db97fbea4548e323
Author: wrycode <>
Date:   Mon,  4 May 2020 16:59:50 -0400

Nick/srd (#78)

* Add Software Requirements Documentation.

* Update readme.

* Fix some spelling errors

* Remove obsolete gitignore entries
M.gitignore | 2-- | 8--------
MScheduleCreator/API/ | 2+-
MScheduleCreator/API/ | 2+-
MScheduleCreator/API/ | 2+-
AScheduleCreator/docs/ | 186+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AScheduleCreator/docs/SRD.pdf | 0
MScheduleCreator/resources/views/user_updated_DB.fxml | 6+++---
8 files changed, 192 insertions(+), 16 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,5 +1,3 @@ -ScheduleCreator/resources/raw/user_selected_courses.txt -ScheduleCreator/resources/DB/ *.html *.js /ScheduleCreator/JavaDoc/ diff --git a/ b/ @@ -6,14 +6,6 @@ registration. ![screenshot](screenshot.png) -### Usage - -TODO - -## License - -TODO - ### Authors - [@cloud0x9]( - [@jamisonv93]( diff --git a/ScheduleCreator/API/ b/ScheduleCreator/API/ @@ -13,7 +13,7 @@ import com.mailjet.client.errors.MailjetSocketTimeoutException; public interface APIInterface { /** - * Send email's using an API. + * Send emails using an API. * * @param _email The email that is being sent to, this comes from the user. * @param _message This is what is being sent in the email. diff --git a/ScheduleCreator/API/ b/ScheduleCreator/API/ @@ -28,7 +28,7 @@ public class EmailAPI implements APIInterface { public static final Pattern validEmail = Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE); /** - * Send email's using an API. + * Send emails using an API. * * @param _email The email address that is being sent to, this comes from * the user. diff --git a/ScheduleCreator/API/ b/ScheduleCreator/API/ @@ -15,7 +15,7 @@ public class EmailAdapter implements APIInterface { protected static final APIInterface thisApi = new EmailAPI(); /** - * Send email's using an API. + * Send emails using an API. * * @param _email The email that is being sent to, this comes from the user. * @param _message This is what is being sent in the email. diff --git a/ScheduleCreator/docs/ b/ScheduleCreator/docs/ @@ -0,0 +1,186 @@ +#+TITLE: UNCG Schedule Creator: Software Requirements Documentation +#+AUTHOR: Ilyass Sfar, Jamison Valentine, Nick Econopouly, and Nathan Tolodzieki +#+OPTIONS: date:t toc:t num:t +We have abided by the UNCG Academic Integrity Policy on this project. +* Introduction +** Purpose +The purpose of the Schedule Creator project is to create a tool to help UNCG students visualize class schedules in preparation for class registration. UNCG's current student portal at provides a schedule view, but it's only available for classes that have already been registered. Schedule Creator allows students to experiment and view possible schedules without committing to anything. +** Document Conventions +Sections are numbered and summarized for quick navigation in the Table of Contents. Definitions and Jargon are described below for convenience. All external links are written out in full to allow for printing. + +** Intended Audience +This document is a reference for current and future stakeholders in the project, including Mr. Ike Quigley (UNCG lecturer and software engineer). +** Definitions/Jargon +| Term | Meaning | Notes/Additional Explanation | +|---------+----------------------------------------------+---------------------------------------| +| DB | Database | | +| JRE | Java Runtime Environment | | +| CRN | Course Registration Number | 5-digit section UIDs assigned by UNCG | +| MVC | Model-View-Controller | | +| API | Application programming interface | | +| HTTPS | Hypertext Transfer Protocol Secure | | +| section | Individual course unit, with unique schedule | each section has its own CRN | +| GUI | Graphical User Interface | | +| UNCG | University of North Carolina at Greensboro | | + +** Project Scope +The Schedule Creator is a single-user, local desktop application, and we (the company) will not provide any cloud services. Schedule Creator will: +- allow students to create and visualize real UNCG schedules as described in the overall description (section 2). +- consist of a GUI +- be intuitive enough for most casual computer users to understand +- integrate an external API +- save the user's work automatically via persistent storage + +Schedule Creator will /not/: +- provide applications for platforms other than Windows, macOS, and Linux +- integrate with UNCG's registration systems to allow students to register from the application +- provide guidance or recommendations +- maintain a personalized profile of the user other than the saved workspace for each semester (e.g. no record of the user's major or minor) + +** Technical Challenges +Schedule Creator posed a number of technical challenges, and each feature described in section 2.1 could be considered a technical challenge. However, the three overarching technical challenges are: +- Cross-platform GUI application development (overcome with the cross-platform JRE and the JavaFX GUI library) +- parsing and translation of UNCG's course data (overcome with regex-based parsing and Java classes) +- calendar-like schedule display (overcome with a custom calendar coded in a JavaFX grid) + + +** References +- JavaFX Documentation: +- UNCG Registration Guide: +- Java Regex Documentation: + + +* Overall Description + +** Product Features +- access and switch between multiple UNCG semesters +- search for courses by name, number, or course abbreviation +- view all available sections for each course +- view all possible schedules for the chosen sections in a graphical weekly calendar +- view all CRNs (and associated sections) for the currently displayed schedule +- email CRNs to yourself or your adviser from within the application +- automatically resume work on any semester, even after closing and reopening the program +- toggle a "dark mode" theme for night viewing +- view UNCG's registration and catalog system from an in-app browser +- [Experimental] manually add new semesters to the program's database when UNCG releases course information for that semester + + +** User Characteristics +All users of the program are current students at UNCG who need to register for classes for an upcoming semester. As users of UNCG's current registration system, they already know how to browse the web, copy/paste, and generally use a computer. Schedule Creator is designed to be straightforward to use for this computer-literate demographic. + +** Operating Environment +Schedule Creator is a desktop application that must run on all popular desktop operating systems, because the operating environment is personal computers of UNCG students. + +** Design and Implementation Constraints +- the program must integrate an external API +- the program must include a persistent data store +- the program must follow the MVC architecture style when appropriate + +Additional considerations: +- the program must be fast enough to run smoothly on a low-end consumer PC + + +** Assumptions and Dependencies +The user must have the JRE installed on their machine. Additionally, the program includes library dependencies (which will be bundled with the application). + + +* Functional Requirements + +** Primary +Schedule Creator must allow users to search for UNCG courses, select sections, and view their selections in a weekly calendar. Users must be able to switch to other available semesters. Upon finding a satisfactory schedule, Schedule Creator must include a way to save the CRNs for later use. The program should also include a way to add new semesters when UNCG releases course information. + +** Secondary +To search and select courses, the program must include a search bar, selectable lists of courses and sections, and buttons to add and remove courses or sections. To view the multiple possible schedules, there must be buttons for switching weeks. To allow the user to look up classes, and to facilitate the experimental "Add New Semesters" feature, there should be an in-app browser that displays UNCG's registration and catalog system. + + +* Technical Requirements + +** Operating Systems Compatibility +The program should support every major operating system run by UNCG students, including Windows, macOS, and Linux. + +** Interface Requirements + +*** User Interface +The GUI should support the common UI paradigm of pointing and clicking on buttons and dropdowns with a mouse pointer. This is the most accessible UI style for most users. In addition to the mouse-based navigation, the program should support keyboard navigation for most operations, based on keyboard shortcuts common to web applications (Tab to move to the next field, enter to "click" the current button, Shift+Tab to move to the previous field). + +*** Hardware Interface +There is no hardware interface for this project. + +*** Software Interface +Since Schedule Creator is written entirely in Java, no additional OS-level software interaction is necessary to get full functionality (including reading/writing files, making network calls, and drawing graphics). + + + +*** Communication Interface +Schedule Creator must communicate with the Mailjet API in order to send CRNs to the user. This functionality is described in the APIInterface, which is implemented in the EmailAPI. + +** Non-functional Requirements + +*** Performance Requirements +Schedule Creator should be able to run smoothly on a low-end consumer PC to accommodate all UNCG students. + +*** Safety/Recovery Requirements +There are multiple failsafes where the user has open ended prompts, to prevent the user from entering or doing something they are not supposed to be doing, and potentially causing problems with the functionally of the program. +Emailing CRNs: +- The user is not allowed to access the email portion of the program unless they have a semester and course(s) selected, otherwise there would be nothing to email. +- Once the user has selected a semester and course(s), they are prompted for their email, which is validated, to prevent faulty API calls. + +Drag and Drop Database addition: +- The name of the text file that the user drags and drops is validated before its added to the database, to ensure its a valid semester and will be compatible with the database naming conventions. +- The content of the file is checked before it's added to the database, to ensure that there is valid course content in the file. +- The textfiles location is validated, to ensure it was moved from its original location, into the programs resources file, which is necessary to add it to the database. + +*** Security Requirements +There are no user accounts and the information being used and given is not sensitive, the only time a user would be inputting sensitive information is if they choose to register within the application. Which is done through a safe HTTPS website that has its own security and procedures that extend to the application. +Therefore there is no implementation of strict security outside of using adequate variable and method access modifiers. + +*** Policy Requirements +Users are expected to not spam the "Email CRNs" feature in order to keep the API-based feature available for all users. + +*** Software Quality Attributes + +**** Availability +The application, other than the API and registration website which aren't central to the applications function of making schedules, can work offline. Therefore the availability is extremely high for the user as there are no internet connection requirements to use the base function of the application. + + +**** Correctness +The use of Unit Testing will ensure that parts of the program such as the EmailAPI don't have unexpected error cases in production. + +**** Reusability +The core functionality of the application is designed to be infinitely reusable. The user has the ability to add to the semester database used to make schedules. Based on this the user could use the program indefinitely for future semesters to make schedules, up until UNCG changes its format for course information if ever. It would simply require a few new regular expressions to adapt if that change ever happened. + +**** Portability +Since the application was written in Java, any platform that is supported by the JRE is capable of running the application, which makes the application very portable, since the JRE supports most (if not all). + +*** Process Requirements + +**** Methodology/Development Process +In order to coordinate the work of four software developers, we set up a central version control repository and gave every developer write access. In order to control the flow of new contributions, we only gave implicit write access to the main "branch" to one developer, who coordinated the various code contributions. For communication, we used email and the comment/topic systems provided by Github (such as Github Issues). + +To prevent editor incompatibilities, all developers used the Netbeans IDE to prepare code for submission to the main branch. + +**** Time Constraints +This project was constrained to an approximately three month time period, with time available outside of class to coordinate and work on the software. + +**** Cost and Delivery Date +The final presentation of the project to shareholders is scheduled for May 7, 2020 at 7:00 PM. + + + + + + + + + + + + + + + + + + + + diff --git a/ScheduleCreator/docs/SRD.pdf b/ScheduleCreator/docs/SRD.pdf Binary files differ. diff --git a/ScheduleCreator/resources/views/user_updated_DB.fxml b/ScheduleCreator/resources/views/user_updated_DB.fxml @@ -28,12 +28,12 @@ <Font size="18.0" /> </font> </Text> - <Text layoutX="100.0" layoutY="241.0" strokeType="OUTSIDE" strokeWidth="0.0" text="4. Copy the enitre page" wrappingWidth="457.20605850219727"> + <Text layoutX="100.0" layoutY="241.0" strokeType="OUTSIDE" strokeWidth="0.0" text="4. Copy the entire page" wrappingWidth="457.20605850219727"> <font> <Font size="18.0" /> </font> </Text> - <Text layoutX="99.0" layoutY="330.0" strokeType="OUTSIDE" strokeWidth="0.0" text="5. Create a new text file, paste everything copied in the pervious step, name* and save the file." wrappingWidth="636.2802734375"> + <Text layoutX="99.0" layoutY="330.0" strokeType="OUTSIDE" strokeWidth="0.0" text="5. Create a new text file, paste everything copied in the previous step, name* and save the file." wrappingWidth="636.2802734375"> <font> <Font size="18.0" /> </font> @@ -53,7 +53,7 @@ <Font size="15.0" /> </font> </Text> - <Text layoutX="99.0" layoutY="419.0" strokeType="OUTSIDE" strokeWidth="0.0" text="6. If all pervious steps were done correctly, you can drag and drop your text file on the current screen and it will be added to the database!" wrappingWidth="658.91796875"> + <Text layoutX="99.0" layoutY="419.0" strokeType="OUTSIDE" strokeWidth="0.0" text="6. If all previous steps were done correctly, you can drag and drop your text file on the current screen and it will be added to the database!" wrappingWidth="658.91796875"> <font> <Font name="System Bold" size="18.0" /> </font>