scala学习之一个很low的成绩分析小系统

就当练习一下scala的基础知识吧,菜勿喷

package scala.system

import scala.collection.mutable.ListBuffer
import scala.io.StdIn
import util.control.Breaks._

class Student(var name:String,var id:String,var gender:String,var ChineseScore:Double,var MathScore:Double,var EnglishScore:Double) {
}

object Test{
  def main(args: Array[String]): Unit = {
    val student1 = new Student("张三","110","male",92,95,87)
    val student2 = new Student("李四","111","male",89,93,90)
    val student3 = new Student("小翠","112","female",95,93,99)
    val student4 = new Student("小芳","113","female",93,96,98)
    val student5 = new Student("王二","114","male",89,78,66.5)
    val student6 = new Student("燕双鹰","115","male",97,98,80)
    val student7 = new Student("小兰","116","female",96,99,98)


    var chineseScore = ListBuffer[Double]()
    chineseScore.append(student1.ChineseScore)
    chineseScore.append(student2.ChineseScore)
    chineseScore.append(student3.ChineseScore)
    chineseScore.append(student4.ChineseScore)
    chineseScore.append(student5.ChineseScore)
    chineseScore.append(student6.ChineseScore)
    chineseScore.append(student7.ChineseScore)
//    println(chineseScore)
//    println("语文成绩从小到大排序:"+sortScore(chineseScore).mkString(","))
//    println("语文成绩从大到小排序:"+sortScore(chineseScore).reverse.mkString(","))
//    println("语文成绩最高分:"+maxScore(chineseScore))
//    println("语文成绩最低分:"+minScore(chineseScore))
//    println("语文成绩平均分:"+averageScore(chineseScore))
//    println()

    var mathScore = ListBuffer[Double]()
    mathScore.append(student1.MathScore)
    mathScore.append(student2.MathScore)
    mathScore.append(student3.MathScore)
    mathScore.append(student4.MathScore)
    mathScore.append(student5.MathScore)
    mathScore.append(student6.MathScore)
    mathScore.append(student7.MathScore)
//    println("数学成绩从小到大排序:"+sortScore(mathScore).mkString(","))
//    println("数学成绩从大到小排序:"+sortScore(mathScore).reverse.mkString(","))
//    println("数学成绩最高分:"+maxScore(mathScore))
//    println("数学成绩最低分:"+minScore(mathScore))
//    println("数学成绩平均分:"+averageScore(mathScore))     //不知道为什么用.formatted("%.2f")保留两位小数会报错
//    println()

    var englishScore = ListBuffer[Double]()
    englishScore.append(student1.EnglishScore)
    englishScore.append(student2.EnglishScore)
    englishScore.append(student3.EnglishScore)
    englishScore.append(student4.EnglishScore)
    englishScore.append(student5.EnglishScore)
    englishScore.append(student6.EnglishScore)
    englishScore.append(student7.EnglishScore)
//    println("英语成绩从小到大排序:"+sortScore(englishScore).mkString(","))
//    println("英语成绩从大到小排序:"+sortScore(englishScore).reverse.mkString(","))
//    println("英语成绩最高分:"+maxScore(englishScore))
//    println("英语成绩最低分:"+minScore(englishScore))
//    println("英语成绩平均分:"+averageScore(englishScore))
//    println()

    val name:List[String] = List(student1.name,student2.name,student3.name,student4.name,student5.name,student6.name,student7.name)
//    for (i <- 0 to chineseScore.length-1){
//      println(name(i)+"的总成绩为:"+ (chineseScore(i)+mathScore(i)+englishScore(i)))
//    }
//    println()
//    for (i <- 0 to chineseScore.length-1){
//      println(name(i)+"的平均成绩为:"+ ((chineseScore(i)+mathScore(i)+englishScore(i))/3))
//    }

    val gender:List[String] = List("male","male","female","female","male","male","female")
    var m_cSum: Double = 0
    var m_mSum: Double = 0
    var m_eSum: Double = 0
    var f_cSum: Double = 0
    var f_mSum: Double = 0
    var f_eSum: Double = 0
    var m_count = 0
    var f_count = 0
    for (j <- 0 to gender.length-1 ){
      if (gender(j) == "male"){
        m_count = m_count + 1
        m_cSum = chineseScore(j) + m_cSum
        m_mSum = mathScore(j) + m_mSum
        m_eSum = englishScore(j) + m_eSum

      }
      else if (gender(j) == "female"){
        f_count = f_count + 1
        f_cSum = chineseScore(j) + f_cSum
        f_mSum = mathScore(j) + f_mSum
        f_eSum = englishScore(j) + f_eSum
      }
    }
//    println("男生语文平均成绩:"+m_cSum/m_count)
//    println("男生数学平均成绩:"+m_mSum/m_count)
//    println("男生英语平均成绩:"+m_eSum/m_count)
//    println("女生语文平均成绩:"+f_cSum/f_count)
//    println("女生数学平均成绩:"+f_mSum/f_count)
//    println("女生英语平均成绩:"+f_eSum/f_count)


    println("----------------------------------------学生成绩分析系统-----------------------------------------")
    println("请输入以下内容查询: 0(班级语文成绩信息) 1(班级数学成绩信息) 2(班级英语成绩信息) 3(个人成绩信息) 4(男女生各科平均成绩对比信息) 10(退出)")
    breakable {
      while (true) {
        var num: Int = StdIn.readInt()
        num match {
          case 0 =>
            println("语文成绩从小到大排序:" + sortScore(chineseScore).mkString(","))
            println("语文成绩从大到小排序:" + sortScore(chineseScore).reverse.mkString(","))
            println("语文成绩最高分:" + maxScore(chineseScore))
            println("语文成绩最低分:" + minScore(chineseScore))
            println("语文成绩平均分:" + averageScore(chineseScore))
          case 1 =>
            println("数学成绩从小到大排序:" + sortScore(mathScore).mkString(","))
            println("数学成绩从大到小排序:" + sortScore(mathScore).reverse.mkString(","))
            println("数学成绩最高分:" + maxScore(mathScore))
            println("数学成绩最低分:" + minScore(mathScore))
            println("数学成绩平均分:" + averageScore(mathScore)) //不知道为什么用.formatted("%.2f")保留两位小数会报错
          case 2 =>
            println("英语成绩从小到大排序:" + sortScore(englishScore).mkString(","))
            println("英语成绩从大到小排序:" + sortScore(englishScore).reverse.mkString(","))
            println("英语成绩最高分:" + maxScore(englishScore))
            println("英语成绩最低分:" + minScore(englishScore))
            println("英语成绩平均分:" + averageScore(englishScore))
          case 3 =>
            for (i <- 0 to chineseScore.length - 1) {
              println(name(i) + "的总成绩为:" + (chineseScore(i) + mathScore(i) + englishScore(i)))
            }
            println()
            for (i <- 0 to chineseScore.length - 1) {
              println(name(i) + "的平均成绩为:" + ((chineseScore(i) + mathScore(i) + englishScore(i)) / 3))
            }
          case 4 =>
            println("男生语文平均成绩:" + m_cSum / m_count)
            println("男生数学平均成绩:" + m_mSum / m_count)
            println("男生英语平均成绩:" + m_eSum / m_count)
            println("女生语文平均成绩:" + f_cSum / f_count)
            println("女生数学平均成绩:" + f_mSum / f_count)
            println("女生英语平均成绩:" + f_eSum / f_count)
          case 10 => println("正在退出系统 ending...")
          case _ => println("请按提示正确输入!")
        }
        if (num == 10) {
          break()
        }
      }
    }
  }

  //将成绩从小到大排序
  def sortScore(score:ListBuffer[Double]): ListBuffer[Double] ={
    return score.sortWith((x, y) => x < y)

  }
  //求最大成绩
  def maxScore(score:ListBuffer[Double]): Double ={
    return score.max
  }
  //求最小成绩
  def minScore(score:ListBuffer[Double]): Double ={
    return score.min
  }
  //成绩求和
  def sumScore(score:ListBuffer[Double]): Double ={
    return score.sum
  }
  //求成绩平均值
  def averageScore(score:ListBuffer[Double]): Double ={
    return score.sum /score.length
  }
}


/*
个人感觉可改进地方:
  学生成绩等信息从外部输入,通过File类读取进来,通过创建对象来添加学生信息太死板
  写了一些排序计算方法,但Test里一些操作可应该以封装成函数来调用,代码看起来会更清晰
  正是因为采用创建对象来添加学生信息,想统计一些学生名字或id对应的其他信息时也不好调用,本来想使用map键值对来表示他们的映射关系的,但在对象里面也只能手动一个个创建map对象来填入数据
  那些重复的append()方法也应该可以用for循环替代,但因为是对象所以无法解决
  name和gender定义时候也是手动把对象里对应的数据插入,就感觉很low
 */


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值