以下是根据需求分析的Scala代码实现:

import scala.util.Random
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._

// 人物类
class Person {
  private var name: String = _
  private var age: Int = _
  private var idCard: String = _
  private var marry: Boolean = _
  private var hasHouse: Boolean = _
  private var monthlyIncome: Double = _

  def getName: String = name
  def setName(value: String): Unit = name = value

  def getAge: Int = age
  def setAge(value: Int): Unit = age = value

  def getIdCard: String = idCard
  def setIdCard(value: String): Unit = idCard = value

  def isMarry: Boolean = marry
  def setMarry(value: Boolean): Unit = marry = value

  def hasHouse: Boolean = hasHouse
  def setHasHouse(value: Boolean): Unit = hasHouse = value

  def getMonthlyIncome: Double = monthlyIncome
  def setMonthlyIncome(value: Double): Unit = monthlyIncome = value
}

// 人类
class PersonOne extends Person

// 审批方法条件的接口
trait PersonDao {
  def ageYesOrNo(age: Int): Boolean
  def moneyYesOrNo(money: Double): Boolean
  def houseYesOrNo(hasHouse: Boolean): Boolean
  def carYesOrNo(hasCar: Boolean): Boolean
}

// 具体方法实现的类
class DaoImpl extends PersonDao {
  override def ageYesOrNo(age: Int): Boolean = age >= 18

  override def moneyYesOrNo(money: Double): Boolean = money < 3000

  override def houseYesOrNo(hasHouse: Boolean): Boolean = !hasHouse

  override def carYesOrNo(hasCar: Boolean): Boolean = !hasCar
}

// 创建类,实现对象人的创建
object Create {
  def createPerson(): Person = {
    val person = new PersonOne()

    println("请输入申请人姓名:")
    person.setName(scala.io.StdIn.readLine())

    println("请输入申请人年龄:")
    person.setAge(scala.io.StdIn.readInt())

    println("请输入申请人身份证号码:")
    person.setIdCard(scala.io.StdIn.readLine())

    println("请输入申请人是否婚配(true/false):")
    person.setMarry(scala.io.StdIn.readBoolean())

    println("请输入申请人家庭成员是否有住房(true/false):")
    person.setHasHouse(scala.io.StdIn.readBoolean())

    println("请输入申请人月收入:")
    person.setMonthlyIncome(scala.io.StdIn.readDouble())

    person
  }
}

// 测试类
object Test {
  def main(args: Array[String]): Unit = {
    startApproval()
  }

  def startApproval(): Unit = {
    val dao = new DaoImpl()

    var continue = true
    while (continue) {
      val person = Create.createPerson()
      val isQualified = dao.ageYesOrNo(person.getAge) && dao.moneyYesOrNo(person.getMonthlyIncome) &&
        dao.houseYesOrNo(person.hasHouse) && dao.carYesOrNo(person.hasCar)
      
      if (isQualified) {
        println("申请人符合申请标准,开始摇号...")
        countdown(person)
      } else {
        println("申请人不符合申请标准,无法入住。")
        continue = continueApproval()
      }
    }
  }

  def countdown(person: Person): Unit = {
    println("摇号开始...")
    val countdown = 10

    val countdownTask = scala.concurrent.Future {
      for (i <- countdown to 1 by -1) {
        println(s"倒计时:$i 秒")
        Thread.sleep(1000)
      }
    }

    countdownTask.onComplete { _ =>
      val isLotterySuccessful = lotteryDraw()
      if (isLotterySuccessful) {
        println("恭喜摇号成功,可以入住。")
      } else {
        println("很遗憾摇号失败,不能入住。")
      }

      continueApproval()
    }
  }

  def lotteryDraw(): Boolean = {
    val random = new Random()
    random.nextInt(10) == 0
  }

  def continueApproval(): Boolean = {
    println("是否继续审批?(Y/N)")
    val input = scala.io.StdIn.readLine()
    input.equalsIgnoreCase("Y")
  }
}

使用控制台进行测试时,可以运行Test类的main方法开始程序。根据提示输入申请人的相关信息,程序会根据条件判断是否符合申请标准,并进行摇号。摇号结束后会提示是否继续审批。根据输入决定是否继续审批


原文地址: https://www.cveoy.top/t/topic/hPPx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录