package studentsystem
import std.convert.*
import std.env.*
/**
* 将输入信息转换为指定类型的值;如输入信息有误,则重新输入
*
* @return 指定 T 类型的值
*/
func inputInfo<T>(): T where T <: Parsable<T> {
var retryNum = 3
while (retryNum != 0) {
var input = getStdIn().readln() ?? ""
var value = T.tryParse(input)
if (value.isSome()) {
return value.getOrThrow()
} else {
print("输入错误,请重新输入(还有${retryNum}次机会):")
}
retryNum--
}
throw Exception("输入错误超过 3 次,取消录入!")
}
/**
* 将输入信息转换为指定类型的值;如输入信息有误,则重新输入(带范围校验)
*
* @param min 数值最小值
* @param max 数值最大值
* @return 指定 T 类型的值
*/
func inputInfo<T>(min: T, max: T): T where T <: Parsable<T> & Comparable<T> {
var retryNum = 3
while (retryNum != 0) {
var input = getStdIn().readln() ?? ""
var value = T.tryParse(input)
if (value.isSome()) {
// 检查是否在范围之内
if (value.getOrThrow() < min || value.getOrThrow() > max) {
print("数值范围超限,请重新输入:")
retryNum--
continue
}
return value.getOrThrow()
} else {
print("输入错误,请重新输入(还有${retryNum}次机会):")
retryNum--
}
}
throw Exception("输入错误超过 3 次,取消录入!")
}
/**
* 清除控制台屏幕并复位光标
*/
func clear() {
// 使用 print 而非 println,避免清屏后多出一个换行
print("\u{001b}[2J\u{001b}[H")
}
/**
* 暂停函数
*/
func pause() {
println("点击回车键继续...")
getStdIn().readln()
// clear()
}