按需求写scala代码:需求分析 21 功能需求根据申请人的姓名年龄身份证号码是否婚配家庭成员是否有住房月收入等判断是否可以获得公共租赁房房的使用权。申请人的所有信息使用控制台进行录入并判断是否符合申请标准没车没房年满18岁且工资水平低于3000元月符合申请标准的申请人则可摇号选房若摇号成功则入可以住反之则暂时不能入住。一个审批结束后提示输入Y或y 进行下一个的审批否则结束退出程序使用线程继承接口
以下是根据需求分析的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 著作权归作者所有。请勿转载和采集!