scala学生信息管理系统计算平均分
时间: 2023-09-20 07:08:43 浏览: 55
假设你已经将学生的信息存储在了一个数组中,每个学生的信息包括姓名、年龄和考试成绩。你可以使用 Scala 的高阶函数 `map` 和 `reduce` 来计算平均分。
首先,使用 `map` 函数将每个学生的成绩提取出来,组成一个新的数组。然后,使用 `reduce` 函数计算这个数组中所有成绩的总和,最后除以学生人数即可得到平均分。
下面是示例代码:
```scala
case class Student(name: String, age: Int, score: Double)
val students = Array(
Student("Alice", 20, 85.0),
Student("Bob", 21, 90.0),
Student("Charlie", 19, 75.0),
Student("David", 22, 80.0)
)
val scores = students.map(_.score)
val totalScore = scores.reduce(_ + _)
val averageScore = totalScore / students.length
println(s"The average score is $averageScore")
```
输出结果为:
```
The average score is 82.5
```
相关问题
scala学生信息管理系统
Scala 学生信息管理系统可以分为以下模块:
1. 学生信息录入模块:包括学生基本信息的录入,如姓名、性别、年龄、班级等;
2. 学生信息查询模块:可以按照学生的姓名、学号、班级等信息进行查询,同时支持模糊查询;
3. 学生成绩录入模块:包括学生的各项考试成绩的录入,如数学、英语、物理等;
4. 学生成绩查询模块:可以按照学生的姓名、学号、班级、科目等信息进行查询,同时支持成绩范围的筛选;
5. 数据库管理模块:对学生信息和成绩信息进行增、删、改、查等操作,同时支持数据备份和还原;
6. 用户管理模块:对系统用户进行管理,包括添加、删除、修改等操作,同时支持用户权限分级。
以下是一个简单的 Scala 学生信息管理系统实现:
```scala
import scala.io.StdIn
// 定义学生类
case class Student(name: String, id: Int, age: Int, gender: String, grade: String)
// 定义成绩类
case class Score(id: Int, math: Double, english: Double, physics: Double)
object StudentSystem {
// 存储学生信息和成绩信息的两个 Map
var students = Map[Int, Student]()
var scores = Map[Int, Score]()
// 显示菜单
def showMenu(): Unit = {
println("=============================")
println("| 1. 添加学生信息 |")
println("| 2. 添加学生成绩 |")
println("| 3. 查看学生信息 |")
println("| 4. 查看学生成绩 |")
println("| 5. 修改学生信息 |")
println("| 6. 修改学生成绩 |")
println("| 7. 删除学生信息 |")
println("| 8. 删除学生成绩 |")
println("| 9. 数据备份 |")
println("| 10. 数据还原 |")
println("| 11. 退出系统 |")
println("=============================")
}
// 添加学生信息
def addStudent(): Unit = {
print("请输入学生姓名:")
val name = StdIn.readLine()
print("请输入学生学号:")
val id = StdIn.readInt()
print("请输入学生年龄:")
val age = StdIn.readInt()
print("请输入学生性别:")
val gender = StdIn.readLine()
print("请输入学生班级:")
val grade = StdIn.readLine()
val student = Student(name, id, age, gender, grade)
students += (id -> student)
println("学生信息添加成功!")
}
// 添加学生成绩
def addScore(): Unit = {
print("请输入学生学号:")
val id = StdIn.readInt()
print("请输入数学成绩:")
val math = StdIn.readDouble()
print("请输入英语成绩:")
val english = StdIn.readDouble()
print("请输入物理成绩:")
val physics = StdIn.readDouble()
val score = Score(id, math, english, physics)
scores += (id -> score)
println("学生成绩添加成功!")
}
// 查看学生信息
def viewStudent(): Unit = {
print("请输入要查看的学生学号:")
val id = StdIn.readInt()
students.get(id) match {
case Some(student) => println(student)
case None => println("没有找到该学生!")
}
}
// 查看学生成绩
def viewScore(): Unit = {
print("请输入要查看的学生学号:")
val id = StdIn.readInt()
scores.get(id) match {
case Some(score) => println(score)
case None => println("没有找到该学生成绩!")
}
}
// 修改学生信息
def modifyStudent(): Unit = {
print("请输入要修改的学生学号:")
val id = StdIn.readInt()
students.get(id) match {
case Some(student) =>
print("请输入学生姓名:")
val name = StdIn.readLine()
print("请输入学生年龄:")
val age = StdIn.readInt()
print("请输入学生性别:")
val gender = StdIn.readLine()
print("请输入学生班级:")
val grade = StdIn.readLine()
val newStudent = student.copy(name = name, age = age, gender = gender, grade = grade)
students += (id -> newStudent)
println("学生信息修改成功!")
case None => println("没有找到该学生!")
}
}
// 修改学生成绩
def modifyScore(): Unit = {
print("请输入要修改的学生学号:")
val id = StdIn.readInt()
scores.get(id) match {
case Some(score) =>
print("请输入数学成绩:")
val math = StdIn.readDouble()
print("请输入英语成绩:")
val english = StdIn.readDouble()
print("请输入物理成绩:")
val physics = StdIn.readDouble()
val newScore = score.copy(math = math, english = english, physics = physics)
scores += (id -> newScore)
println("学生成绩修改成功!")
case None => println("没有找到该学生成绩!")
}
}
// 删除学生信息
def deleteStudent(): Unit = {
print("请输入要删除的学生学号:")
val id = StdIn.readInt()
students.get(id) match {
case Some(student) =>
students -= id
scores -= id
println("学生信息删除成功!")
case None => println("没有找到该学生!")
}
}
// 删除学生成绩
def deleteScore(): Unit = {
print("请输入要删除的学生学号:")
val id = StdIn.readInt()
scores.get(id) match {
case Some(score) =>
scores -= id
println("学生成绩删除成功!")
case None => println("没有找到该学生成绩!")
}
}
// 数据备份
def backup(): Unit = {
val backupStudents = students
val backupScores = scores
println("数据备份成功!")
}
// 数据还原
def restore(): Unit = {
students = backupStudents
scores = backupScores
println("数据还原成功!")
}
// 主函数
def main(args: Array[String]): Unit = {
var flag = true
while (flag) {
showMenu()
print("请选择操作:")
val choice = StdIn.readInt()
choice match {
case 1 => addStudent()
case 2 => addScore()
case 3 => viewStudent()
case 4 => viewScore()
case 5 => modifyStudent()
case 6 => modifyScore()
case 7 => deleteStudent()
case 8 => deleteScore()
case 9 => backup()
case 10 => restore()
case 11 => flag = false
case _ => println("输入有误,请重新输入!")
}
}
}
}
```
以上代码只是一个简单的实现,可以根据实际需求进行扩展和优化。
在scala里面spark计算每部电影的平均分
假设你有一个包含电影评分的RDD,其中每个元素都是一个包含电影ID和评分的元组,可以按照以下方式计算每部电影的平均分:
```scala
val ratings: RDD[(Int, Double)] = ... // 电影ID和评分的元组RDD
val movieRatings: RDD[(Int, Iterable[Double])] = ratings.groupByKey() // 按电影ID进行分组
val movieAvgRatings: RDD[(Int, Double)] = movieRatings.mapValues(ratings => ratings.sum / ratings.size) // 计算每部电影的平均分
```
首先,通过 `groupByKey()` 将所有具有相同电影ID的评分分组在一起,生成一个包含电影ID和评分迭代器的元组RDD。然后,通过 `mapValues()` 对每个电影的评分计算平均值,并生成一个包含电影ID和平均评分的新元组RDD。注意,这里使用了 `mapValues()` 而不是 `map()`,因为我们只需要更新评分值,而不需要改变电影ID。