I need someone to finish writing my program for me based on the attached ruberic
spring_19_oop_term_project COMSC 1351 Object Oriented Programming Term Project Spring 2019 Dr. Carlos Monroy Title: Up to you and be creative! Due Date: See below for details Learning Objectives: In this project, students will: a) Implement an end-to-end programming application in Java encompassing the main topics covered throughout the semester. The project is heavily based on the Object-Oriented Programming, Events/Listeners and Java Swing. b) Apply the main concepts of Object-Oriented Programming: a) encapsulation, b) inheritance and c) polymorphism. c) Work in teams of two and use GitHub functionalities for version control when developing software in teams. One team member will be designated as team manager. d) Document the modules/functions (guidelines will be provided) e) Experience the process of Conceptualization, Design, Implementation and Testing of a software application. f) Become familiar on the use of the Java API, how to find classes, methods, etc. and how to use them in your application. Deliverables: a) Three progress reports and a final peer-evaluation form. b) A repository in GitHub named S19-oop-project-userid (only the team manager has to click and accept the following link https://classroom.github.com/a/Y3QxXnFk (in class we will set access for the other team member). If you want to browse the code, here's the link https://github.com/computingcelts/S19-oop-project (don't clone it) c) A Power Point presentation converted to a pdf document, to be submitted via Blackboard, and to be used for Tuesday May. 14th presentations (presentations will take place from 8:30AM to 11:00 in the classroom). Due Dates (no extensions, no exceptions): Date Deliverable Description Friday 4/26/2019 Progress report 1 Detailed progress report Wednesday 5/1/2019 Progress report 2 Detailed progress report Monday 5/6/2019 Progress report 3 Detailed progress report Thursday 5/09/2019 midnight Central Time Java code Java code submitted via GitHub by creating a release named v.0.5.0 Peer-review evaluation submitted via Blackboard Friday 10/10/2019 Code discussion Walkthrough code discussion. A signup link will be provided for each team to schedule a 30 minutes slot for walkthrough your code and explain the high-level solution (location Math House 206). This is mandatory and impacts the grade. Thursday 5/09/2019 midnight Central Time Slides pdf slides for the final presentation, submitted via Blackboard Tuesday 5/14/2019 8:30AM Final presentation In class presentations Instructions: The application is intended to gather information about players from different sports (Basketball, Baseball and Soccer); compute statistics and store them in containers; save some of that information into a text file on disk (columns tab separated). For all the classes, use the documentation/comments format in the file main/main/Player.java on how to separate the different sections of your class. Finally, some options will be triggered by clicking and interacting with the GUI (Graphical User Interface) provided by Java Swing. The code will be structured in packages following this naming convention celts.sports including the following contents: - gui: graphical user interface using Java Swing classes [35 points] - io: read/write from/to a file on disk, save stats to a text file, and load saved stats from a text file [15 points] - main: the main entry point to your application and main classes, where functionality will be invoked, you can create more classes under this package if needed. [10 points] - parser: code for reading input text, break it down into tokens and populate containers [15 points] - stats: compute statistics about players [25 points] More info about Java packages: https://docs.oracle.com/javase/tutorial/java/package/index.html gui: classes for implementing all the Tabs, Panes, Buttons, Text lists and Event/Listener infrastructure. Here are some official Java resources online to learn more about how these components work. https://docs.oracle.com/javase/tutorial/uiswing/components/index.html https://docs.oracle.com/javase/tutorial/uiswing/components/frame.html https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html https://docs.oracle.com/javase/tutorial/uiswing/events/index.html The table below shows the different Swing components for each tab and their corresponding behavior. You will have to add events and listeners and modify the code to properly work upon clicking and selecting different options. GUI Object Name/behavior JFrame (this is the top level container) JTabbedPane JComboBox JComboBox JButton JButton JButton mainTab: has main buttons and components sportsList: lists the three sports from a Vector
container {"Baseball", "Basketball", "Soccer" teamsList: lists teams names from a Vector container, changes depending on the sport selected loadDataButton: reads data from the input file for the sports and team selected only and updates the teamTab accordingly. If data for that team has been loaded don't load it again computeStatsButton: compute stats for the sports and team selected only and updates the statsTab accordingly. If stats for that team have been computed, don't compute again saveDataButton: saves to the output file, the information and stats for the team and sport selected. Re-writes the previous file if it was already generated JTabbedPane JList JTextArea teamTab: has information about players per team, is updated based on the team and player selected in and playerDataList: lists the names of the players, when a name of a player is selected it updates the playerInfo JTextArea playerInfo: displays every variable: value pair for the player that is selected in the playerDataList JTabbedPane JList JTextArea statsTab: has information about players stats per team, is updated based on the team and player selected. It is populated when the button in the mainTab is clicked and only for the team selected. playerStatsList: lists the names of the players, when a name of a player is selected it updates the playerStatsInfo JTextArea playerStatsInfo: displays every variable: value pair for the player stats that is selected in the playerStatsList io: this package has classes and methods for reading from the input text files and also for saving into text files the computed statistics. The correct output files will be posted on GitHub so you can ensure that your computations work as expected. The output files should be stored in the data/output directory with the following names (presently the files already exist and are empty): baseball_out.txt basketball_out.txt soccer_out.txt main: This package has the main classes to represent players and the Main class. Creating an instance and launching the GUI JFrame should be done here, although defining the JFrame and all Java Swing components and their functionality must be done in the GUI package. parser: a parser is a collection of functions that take a stream of text as input, splits the stream into tokens (words), and populates containers (ArrayList and others). It also properly handles input types (Strings, ints, doubles, etc.). Input: players' information will be provided in text files separated by tab ("\t") found in the data/input directory (baseball.txt, basketball.txt and soccer.txt). Output: Correctly populated containers (ArrayList and others). You can reuse, modify and improve the code used in past homework. Important: Do not use full path names (e.g. C:\Desktop\name\comsc\oop\project\data\input), rather use relative paths, e.g. ../data/input. Become familiar with the concept of relative paths and using the cd command. The input files contain information about players one per line, and each column is separated by the tab character. stats: this package holds classes and methods for computing statistics for each player, notice that the statistics are different for each sport and they rely on variables defined in the different classes; they derive from Player and each one has its own Stats member variable. Statistic Computation Basketball fieldGoalsPct fieldGoalsAtt / fieldGoals threePtsPct threePts / threePtsAtt twoPtsPct twoPts / twoPtsAtt freeThrowPct freeThrows / freeThrowsAtt totalRebounds offensiveReb + defensiveReb totalPoints freeThrows + twoPts + threePts fieldGoals twoPts + threePts Soccer minsXGame minsPlayed / games goalsXGame goals / (minsPlayed / 90) goalsAssistsXGame (goals + assists) / (minsPlayed / 90) shotsOnGoalsXGame shotsOnTarget / (minsPlayed / 90) foulsXGame fouls / (minsPlayed / 90) Baseball totalBases hits + (2*doubles) + (3*triples) + (4*homeRuns) hitsPct hits / atBatt slugg (hits + (2*doubles) + (3*triples) + (4*homeRuns)) / atBatt Structure of your project. Below is a screen shot showing the structure of your directories and files. If you have to add new classes in their own file, make sure to place them in their correct directory. The red arrows show exactly how you have to compile your source code and generate the *.class bytecode files. You have to: • Compile from the root directory of your project (in this example is code): javac -d bin @source_code.txt • Include the @source_code.txt argument, this is a text file that has a list of all source files for your application, if you add new files, you have to add an entry to this file, following the directory path convention, e.g. src/celts/sports/ • Include the -d bin flag, so all your *.class files will be generated under the bin directory, no *.class files should ever be in the src directory tree! To execute your code, type: java -cp bin celts.sports.main.Main We will learn about java packages, but in short, it allows you to group code by functionality and separates code in a hierarchical structure in different directories, it also prevents name conflicts of classes and methods. In the previous screen shot you can see a Window with a button being displayed on the screen, that is a Java Swing Window, which will in the end have several components to allow graphical interaction and interface with your application. At the very end of the project you will also learn how to create a jar file (Java Archive), which is a mechanism for bundling numerous *.class