+1 (315) 557-6473 

Implement a simple Excel-like console application in Java assignment help

The assignment requires implementation (from scratch) of a Java console application that repeats some basic functionality of table editor (i.e. Microsoft Excel or Google tables).The program designed by our Java assignment help solver allows users to type commands, where they can manipulate cells of tables by setting values, clearing, and adding formulas that use other cell values. Between these commands, the user can show the current table state by showing the table in the console window.
Table Of Contents
  • Excel's Table Editor Implementation

Excel's Table Editor Implementation

Sources Cell.java import java.text.ParseException; /* Class representing Cell of the grid. Especially cell with double type */ public class Cell { /* Reference to parent grid object */ protected Grid grid; /* The input value of the cell */ private String value = ""; /* Cell constructor, using grid instance */ public Cell(Grid grid) { this.grid = grid; } /* Returns the double value of the current cell, if it is not empty In case it is empty, 0.0 is returned */ public double getValue() { if (value.isEmpty()) return 0.0; return Double.parseDouble(value); } /* Method for setting input value to the current cell */ public void setValue(String value) throws ParseException { this.value = value; } /* Getter method for the input value */ public String getInputString() { return value; } /* Override toString method for cell object. For Cell class, it returns "", if the cell is empty, and the String representation of the double value if it is not empty */ @Override public String toString() { if (value.isEmpty()) { return ""; } return "" + getValue(); } /* Factory static method for creating a cell of the appropriate type, according to the input string */ public static Cell parseCell(Grid grid, String value) throws ParseException { String[] tokens = value.split(" "); // Looking at the first token of the input string // If the first token is "("than it is a formula if (tokens[0].equals("(")) { FormulaCellformulaCell = new FormulaCell(grid); formulaCell.setValue(value); return formulated; } // If the first token is ", then it is text if (tokens[0].equals("\"")) { TextCelltextCell = new TextCell(grid); textCell.setValue(value); return textCell; } // If the first token contains "/" than it is the date if (tokens[0].contains("/")) { DateCelldateCell = new DateCell(grid); dateCell.setValue(value); return dateCell; } // Otherwise it is usual double-value set Cell cell = new Cell(grid); cell.setValue(value); return cell; } } DateCell.java import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /* Class inherited from cell object. Represents Date-type object */ public class DateCellextends Cell { // Default date format patterm public static final DateFormatdateFormat = new SimpleDateFormat("mm/dd/yyyy"); // Date of the cell private Date date; /* Default constructor with grid argument */ public DateCell(Grid grid) { super(grid); } /* Override setValue method */ @Override public void setValue(String value) throws ParseException { super.setValue(value); // To get value, we just parse value with a given format pattern date = dateFormat.parse(value); } // Overridden toString method. If not string returns text @Override public String toString() { if (getInputString().isEmpty()) { return ""; } return "" + dateFormat.format(date); } // Getter method for date field public Date getDate() { return date; } } FormulaCell.java import java.text.ParseException; import java.util.LinkedList; import java.util.List; /* Class inherited from cell object. Represents Formula-type object */ public class FormulaCellextends Cell { // Boolean value, showing if the current value is "Not-a-Number" private booleanisNan = false; // List of operations (+,-*,/) in formula private LinkedList operations = new LinkedList<>(); // List of expressions (literal, cells, sum, avg) in the formula private LinkedListexps = new LinkedList<>(); /* Default constructor with grid argument */ public FormulaCell(Grid grid) { super(grid); } /* Overridden getValue method. Tries to calculate the formula. Sets Nan to true, if it is not possible */ @Override public double getValue() { isNan = false; // Copying operations and exps lists LinkedListopCopy = new LinkedList<>(); for (String s: operations) { opCopy.addLast(s); } LinkedListexpCopy = new LinkedList<>(); for (Exp e: exps) { expCopy.addLast(e); } // Perform calculations until expCopy list contains only one object while (expCopy.size() >1) { // Extracting top expCopy expression Exp exp1 = expCopy.pop(); if (exp1.isNan()) { // If it is Nan returning 0.0 and setting Nan to true isNan = true; return 0.0; } // Extracting next top expCopy expression Exp exp2 = expCopy.pop(); if (exp2.isNan()) { // If it is Nan returning 0.0 and setting Nan to true isNan = true; return 0.0; } // Getting values of extracted expressions double val1 = exp1.getValue(grid); double val2 = exp2.getValue(grid); // Making calculations with the appropriate operation double newVal = 0.0; // This operation is obtained from the top of opCopy list String op = opCopy.pop(); if ("+".equals(op)) { newVal = val1 + val2; } else if ("-".equals(op)) { newVal = val1 - val2; } else if ("*".equals(op)) { newVal = val1 * val2; } else if ("/".equals(op)) { newVal = val1 / val2; } // PUshing result of the calculation on the top of expCopy list, as a literal expression expCopy.push(new LiteralExp(newVal)); } /* Static class for representing Range expression */ public static class RangeExp { // Fields, representing border indices of range in spreadsheet array private int topRow; private int bottom row; private int leftColumn; private int rightColumn; /* Constructor for creating an instance of RangeExp from to Cell expressions */ public RangeExp(FormulaCell.CellExp cell1, FormulaCell.CellExp cell2) { this.topRow = Math.min(cell1.getRow(), cell2.getRow()); this.bottomRow = Math.max(cell1.getRow(), cell2.getRow()); this.leftColumn = Math.min(cell1.getColumn(), cell2.getColumn()); this.rightColumn = Math.max(cell1.getColumn(), cell2.getColumn()); } } }