Git Product home page Git Product logo

cse360-final-project's People

Contributors

johnmawoods avatar stefantwoods avatar williamliu12 avatar zakattack9 avatar

Watchers

 avatar  avatar

cse360-final-project's Issues

Write a loader that parses data from an attendance CSV file and prompts for a date (Add Attendance)

  • should first prompt user for file path from a modal
  • user should be prompted for file path after clicking "Add Attendance"; use an ActionListener for this
  • should prompt user for a date after prompting for the file; a date picker class should either be used from the Java library or manually created
  • load file from inputted file path using JFileChooser
  • be able to load and traverse the attendance data from the CSV and add it into a data structure (see this issue on the data structure)
  • the inputted date should be saved either in the data structure or somewhere later accessible (but not a global var)

Visualize the loaded data from the roster CSV

  • use JTable to display data as a table; don't forget to include a row for the headers of each column
  • the JTable should go in a JScrollPane with both horizontal and vertical scrollbars
  • simply create new DatabaseConverter() and call the method .getCurrentTableModel() to get the latest database data as a DefaultTableModel that can be used with JTable
  • ping Zak for questions

Create data structure to hold roster data from parsed CSV file

  • should be a class called RosterDatabase that extends off abstract Database class
  • uses a List/Array with HashMaps at each index
  • the HashMap should contain the following keys:
    • id
    • firstName
    • lastName
    • programPlan
    • academicLevel
    • asurite
  • the respective values of each key in the HashMap should contain the values parsed from a single row in the roster CSV file
  • methods such as add, get, etc. should be written as needed in the RosterDatabase class

Create an abstract Database class

  • should be an abstract class called Database
  • contains the following abstract methods:
    • abstract void add()
    • abstract String get()
  • other methods and variables that are used in both the RosterDatabase and AttendanceDatabase should be added to this abstract class

Create a data structure to holder attendance data from parsed CSV file

  • should be a class called AttendanceDatabase that extends off abstract Database class

  • uses a simple HashMap to store attendance data

  • the keys of the HashMap should be the ASURITE string parsed from the CSV file

  • the respective values of each key in the HashMap should contain an integer representing the total time that an ASURITE (key) spent connected to the meeting; again, this should be passed in from the parsed attendance CSV file

  • methods such as add, get, etc. should be written as needed in the AttendanceDatabase class

  • note: an ASURITE can appear multiple times in the attendance CSV, when added to the RosterDatabase it should increment the current total time at a given ASURITE key

Add to the table a new column with the attendance times

  • the attendance times should automatically be added after parsing the attendance CSV and loading it into a data structure
  • the new column will have the total time of attendance that corresponds to its ASURITE; the header of this column is the date entered when loading attendance data
  • if an ASURITE is not in the roster but appears in the attendance list, it is ignored and not added to the column
  • any additional ASURITE's that aren't in the roster should be reported to the user using the modal; the modal should include:
    • Data loaded for X users in the roster where X is the number of ASURITE's loaded from the attendance list that were in the roster
    • Y additional attendee was found: where Y is the number of ASURITE's loaded from the attendance list that were not in the roster; this string is succeeded by a list of all ASURITE's not in the roster
    • Firstname Lastname, connected for Z minutes where Z is the total time and Firstname/Lastname is the respective name of an ASURITE that wasn't in the roster; this string should be repeated for all ASURITE's that were loaded but not in the roster
  • note: multiple attendance files can be loaded for the same roster file, each time creating a new column with the date entered upon loading the attendance CSV

Implement save functionality

  • save all the data currently in the table to a CSV file
  • the headers for each column should also be saved to the CSV (first line of CSV)
  • if a row does not have a value for one of its columns, simply put a space in the CSV for that value
    • e.g. FirstName, LastName, , ASURITE

Implement About popup

  • when clicking "About" in the JMenu it should open a dialog box including our team information
  • recommend using either JDialog or JOptionPane

Refactor database data structure

  • not required for completion of project
  • current data structure implementation runs around O(n*m) for insertion where n is the number of Asurites in the loaded roster and m is the number of unique dates loaded to the attendance database
  • could eliminate DatabaseConverter by using a 2D String array instead of a nested hashmap data structure
    • 2D array data structure could offer slightly faster time complexity, but will likely require a higher space complexity
  • some variant of a tree data structure will likely offer a faster and more efficient time/space complexity

Implement plot data functionality

  • create a scatter plot using the attendance data for each student in the roster from the table; must use the JFreeChart library
  • add the scatter plot above the current JTable
  • the x-axis is the percentage of time out of the total length of a lecture (75 mins) that a student attended (0%, 10%, ..., 90%, 100%) where 0% is 0 minutes attended and 100% is 75 minutes or more attended
  • the y-axis is how many students (from 0 to total number of students in table) attended a lecture for a given x-axis value (e.g. 14 students attended 50% of the lecture)
  • each attendance column (date columns) represents a population of data in the scatter plot; i.e. for each date column, the plot should contain all of its values, but are plotted under a different color (e.g. Nov 10 data points should be blue, Nov 3 data points should be red, etc.)
  • simply put, you're creating a scatter plot displaying the amount of attending students at different intervals of a lecture for various lecture dates

Create class diagram

  • needed for project report
  • should match our source code with proper association, aggregation, composition, realization, generalization

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.