// // preliminary/sketch program to compute letter grade based on input // from file, where each line contains the following, separated by spaces: // name of assignment // perfect score // student score // // many improvements are possible // import scala.io.StdIn._ // each GradeComponent represents one assignment case class GradeComponent(name:String, perfectScore:Double, studentScore:Double) // get input from file (in the form of a list of strings, one per line) println("enter file name with grades") val filename = readLine val src = scala.io.Source.fromFile(filename) val lines = src.getLines.toList src.close // convert each line to a GradeComponent and print val gradeComponents = lines.map(processLine(_)) println("input:") gradeComponents.foreach(g => println(g.name + " " + g.studentScore + " out of " + g.perfectScore) ) // compute average val studentTotal = gradeComponents.map(_.studentScore).sum val perfectTotal = gradeComponents.map(_.perfectScore).sum val average = studentTotal / perfectTotal // print println() println("your total points = " + studentTotal) println("perfect total points = " + perfectTotal) println("average = " + average) if (average >= .90) { println("A- or better") } else if (average >= .80) { println("B- or better") } else if (average >= .70) { println("C- or better") } else if (average >= .60) { println("D- or better") } else { println("sorry, F") } // convert input line to a GradeComponent def processLine(line:String) : GradeComponent = { // get name (string) and two scores (Double) from 'line' val inputFields = line.split(" ") val grade = GradeComponent(inputFields(0), inputFields(1).toDouble, inputFields(2).toDouble) grade }