SpreadsheetWriter Lets write a program that will produce a f
SpreadsheetWriter Let\'s write a program that will produce a file that can be opened by Excel or LibreOffice Calc. Go to Getting Started and look up the grading weights used for this course. As an example, we\'ll use the following table, but you should use the values you find in Getting Started. Activity Weighting % Labs 20 Reading Quizzes 10 Group Work 10 Midterm 20 Project 15 Final 20 Instructor Discretion 5 Write a class SSRow. Objects of this class should keep track of String name, int score, int weight, String calc. SSRow also has a toString method that returns this data in order, separated by commas. name + \",\" + score + \",\" + weight + \",\" + calc Further design of the SSRow class is left to you. Add what you need, but don\'t get carried away. Write a class SSWriter that has a main method. For each of the grading categories (Lab, Reading Quizzes, Group Work, Midterm, Project, Final, Instructor Discretion), query the user for a score, and create the following SSRow objects: \"Lab\", , 20, \"=B1*C1/100\" \"Reading Quizzes\", , 10, \"=B2*C2/100\" \"Group Work\", , 10, \"=B3*C3/100\" \"Midterm\", , 20, \"=B4*C4/100\" \"Project\", , 15, \"=B5*C5/100\" \"Final\", , 20, \"=B6*C6/100\" \"Instructor Discretion\", , 5, \"=B7*C7/100\" Open a file for output with a file type of csv (say MyGrades.csv, for example). Write the toString value for each SSRow to the file. Finally, write a row \"average\",=(D1+D2+D3+D4+D5+D6+D7) Open MyGrades.csv with Excel or LibreOffice Calc. Hint: You can simplify writing this program greatly by using the tools we\'ve covered.
Solution
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Map;
class SSRow{
String name1;
int score1;
int weight1;
String cal1;
public String getName() {
return name1;
}
public void setName1(String name1) {
this.name1 = name1;
}
public int getScore1() {
return score1;
}
public void setScore(int score1) {
this.score1 = score1;
}
public int getWeight1() {
return weight1;
}
public void setWeight1(int weight1) {
this.weight1 = weight1;
}
public String getCal1() {
return cal1;
}
public void setCal1(String cal1) {
this.cal1 = cal1;
}
@Override
public String toString() {
return \"\\\"\" + name1 + \"\\\", \\\"\" + score1 + \"\\\", \\\"\" + weight1 + \"\\\", \\\"\" + cal1 + \"\\\"\";
}
}
public class SSWriter {
// To maintain a static map between worktype and the weights.
private static final Map<String, Integer> WORK_TYPE_TO_WEIGHT_MAP = new LinkedHashMap<>();
static {
WORK_TYPE_TO_WEIGHT_MAP.put(\"LAB\", 20);
WORK_TYPE_TO_WEIGHT_MAP.put(\"READING QUIZZES\", 10);
WORK_TYPE_TO_WEIGHT_MAP.put(\"GROUP MAP\", 10);
WORK_TYPE_TO_WEIGHT_MAP.put(\"MIDTERM\", 20);
WORK_TYPE_TO_WEIGHT_MAP.put(\"PROJECT\", 15);
WORK_TYPE_TO_WEIGHT_MAP.put(\"FINAL\", 20);
WORK_TYPE_TO_WEIGHT_MAP.put(\"INSTRUCTOR DISCRETION1\", 5);
}
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
ArrayList<SSRow> list = new ArrayList<>(); // List to maintain the rows
int index = 1;
String avgString = \"\";
for(String workType : WORK_TYPE_TO_WEIGHT_MAP.keySet()){
System.out.println(\"Please enter the score for \"+workType+\": \");
int score = scanner.nextInt();
//To create SSRow and set the parameters
SSRow ssRow = new SSRow();
ssRow.setName1(workType);
ssRow.setScore1(score1);
ssRow.setWeight(WORK_TYPE_TO_WEIGHT_MAP.get(workType));
ssRow.setCal(\"=B\"+index +\"*C\"+index+\"/100\");
list.add(ssRow);
if(index == 1) avgString +=\"=D\"+index;
else avgString+= \"+D\"+index;
index++;
}
avgString = \"\\\"\"+avgString+\"\\\"\";
PrintWriter printer = new PrintWriter(new FileWriter(\"/home/ann/Documents/MyGrades.csv\"), true);
for(SSRow ssRow : list){
printer.println(ssRow); // used to write one row at a time
}
printer.println(\"\\\"average\\\", \"+avgString); // to append average row
scanner.close(); // resources to be closed after using
printer.close();
System.out.println(\"Program execution has been completed.\");
}
}


