package studentsystem
import std.collection.*
import std.env.*
/**
* 课程 管理类(单例模式)
*/
public class CourseManager {
// 单例模式:无法从外部访问构造函数
private CourseManager(
var courses!: ArrayList<Course> = ArrayList<Course>() // 课程列表
) {}
// 单例对象
private static let instance: CourseManager = CourseManager()
// 通过属性获取单例对象
static prop propInstance: CourseManager {
get() {
instance
}
}
// ─────────────────────────────────────────────────────────────────────────
// 查:显示所有课程信息
// ─────────────────────────────────────────────────────────────────────────
/**
* 显示课程信息
*/
func printCourses() {
for (course in courses) {
println(course.toString())
}
println("课程总数: ${courses.size}!")
}
// ─────────────────────────────────────────────────────────────────────────
// 增:录入课程信息
// ─────────────────────────────────────────────────────────────────────────
/**
* 录入课程信息
*/
func inputCourse() {
println("开始录入课程信息:")
try {
// 获取用户输入的基本信息
print("请输入课程编号:")
let id = inputInfo<UInt32>()
print("请输入课程名称:")
let name = getStdIn().readln() ?? ""
print("请输入课程性质(必修【1】,选修【2】):")
let electivity = if (inputInfo<Int64>(1, 2) == 1) {
Compulsory
} else {
Elective
}
print("请输入课程学分:")
let credit = inputInfo<Float16>(0.0, 10.0)
// 创建课程类对象
let course = Course(id, name, credit, electivity: electivity)
// 将 course 添加到 courses 中
courses.add(course)
println("录入完毕!")
} catch (e: Exception) {
println(e.message)
}
}
// ─────────────────────────────────────────────────────────────────────────
// 查:查询课程信息
// ─────────────────────────────────────────────────────────────────────────
/**
* 查询课程信息
*/
func queryCourse() {
print("请输入课程号:")
let courseId = inputInfo<UInt32>()
// 查找课程
for (course in courses) {
// 查找到课程
if (courseId == course.propId) {
println("查询成功,信息如下:")
println(course.toString())
return
}
}
println("未找到课程!")
}
// ─────────────────────────────────────────────────────────────────────────
// 删:删除课程信息
// ─────────────────────────────────────────────────────────────────────────
/**
* 删除课程信息
*/
func deleteCourse() {
print("请输入课程号:")
let courseId = inputInfo<UInt32>()
// 查找课程
for (i in 0..courses.size) {
// 查找到课程
if (courseId == courses[i].propId) {
courses.remove(at: i)
println("编号${courseId}课程删除成功!")
return
}
}
println("未找到课程!")
}
// ─────────────────────────────────────────────────────────────────────────
// 改:修改课程信息
// ─────────────────────────────────────────────────────────────────────────
/**
* 修改课程信息
*/
func modifyCourse() {
print("请输入课程号:")
let courseId = inputInfo<UInt32>()
// 查找课程
for (course in courses) {
// 查找到课程
if (courseId == course.propId) {
println("查询成功,信息如下:")
println(course.toString())
// 修改信息
print("是否修改课程名称?(是【1】 否【2】):")
if (inputInfo<Int64>(1, 2) == 1) {
print("请输入课程名称:")
course.propName = getStdIn().readln() ?? ""
}
print("是否修改课程性质?(是【1】 否【2】):")
if (inputInfo<Int64>(1, 2) == 1) {
print("请输入课程性质(必修【1】,选修【2】):")
course.propElectivity = if (inputInfo<Int64>(1, 2) == 1) {
Compulsory
} else {
Elective
}
}
print("是否修改课程学分?(是【1】 否【2】):")
if (inputInfo<Int64>(1, 2) == 1) {
print("请输入课程学分:")
course.propCredit = inputInfo<Float16>(0.0, 10.0)
}
println("修改成功!")
return
}
}
println("未找到课程!")
}
// ─────────────────────────────────────────────────────────────────────────
// 工具:通过课程 ID 查找课程对象(供 ScoreManager 调用)
// ─────────────────────────────────────────────────────────────────────────
/**
* 根据课程 ID 查找课程,找不到返回 None
*/
func findById(courseId: UInt32): Option<Course> {
for (course in courses) {
if (course.propId == courseId) {
return Some(course)
}
}
return None
}
}