package studentsystem

import std.convert.*
import std.env.*

// ═════════════════════════════════════════════════════════════════════════════
// 主函数
// ═════════════════════════════════════════════════════════════════════════════

/**
 * 主函数
 */
main() {
    // 初始化数据
    initData()
    // 清屏
    clear()

    // 死循环:获取并执行用户输入的命令
    while (true) {
        println("============================================")
        println("          学 生 信 息 管 理 系 统          ")
        println("============================================")
        println("请输入命令:")
        println("主动清屏【0】  学生管理模块【1】  课程管理模块【2】  成绩管理模块【3】  退出【4】")

        // 获取输入信息
        var input = getStdIn().readln() ?? ""
        // 获取命令代码
        if (let Some(value) <- Int32.tryParse(input)) {
            match (value) {
                // 【0】主动清屏
                case 0 => clear()
                // 【1】学生管理模块
                case 1 => manageStudents()
                // 【2】课程管理模块
                case 2 => manageCourses()
                // 【3】成绩管理模块
                case 3 => manageScores()
                // 【4】退出
                case 4 => break
                // 命令输入错误
                case _ => println("命令输入错误,请重新输入!")
            }
        } else {
            println("命令输入错误,请重新输入!")
        }
        pause()
    }
    return 0
}

// ═════════════════════════════════════════════════════════════════════════════
// 学生管理模块菜单
// ═════════════════════════════════════════════════════════════════════════════

/**
 * 学生管理模块
 */
func manageStudents() {
    // 学生管理器
    let mgr = StudentManager.propInstance

    while (true) {
        println("--------------------------------------------")
        println("              学  生  管  理                ")
        println("--------------------------------------------")
        println("请输入命令:")
        println("主动清屏【0】  显示所有学生【1】  添加学生【2】  查询学生【3】  删除学生【4】  修改学生【5】  退出【6】")

        // 获取输入信息
        var input = inputInfo<Int32>()

        // 获取命令代码
        match (input) {
            // 【0】主动清屏
            case 0 => clear()
            // 【1】显示所有学生信息
            case 1 => mgr.printStudents()
            // 【2】添加学生信息
            case 2 => mgr.inputStudent()
            // 【3】查询学生信息
            case 3 => mgr.queryStudent()
            // 【4】删除学生信息
            case 4 => mgr.deleteStudent()
            // 【5】修改学生信息
            case 5 => mgr.modifyStudent()
            // 【6】退出学生管理
            case 6 => break
            // 命令输入错误
            case _ => println("无效命令!")
        }
        pause()
    }
}

// ═════════════════════════════════════════════════════════════════════════════
// 课程管理模块菜单
// ═════════════════════════════════════════════════════════════════════════════

/**
 * 课程管理模块
 */
func manageCourses() {
    // 课程管理器
    let mgr = CourseManager.propInstance

    while (true) {
        println("--------------------------------------------")
        println("              课  程  管  理                ")
        println("--------------------------------------------")
        println("请输入命令:")
        println("主动清屏【0】  显示所有课程【1】  录入课程【2】  查询课程【3】  删除课程【4】  修改课程【5】  退出【6】")

        // 获取输入信息
        var input = inputInfo<Int32>()

        // 获取命令代码
        match (input) {
            // 【0】主动清屏
            case 0 => clear()
            // 【1】显示所有课程
            case 1 => mgr.printCourses()
            // 【2】录入课程
            case 2 => mgr.inputCourse()
            // 【3】查询课程
            case 3 => mgr.queryCourse()
            // 【4】删除课程
            case 4 => mgr.deleteCourse()
            // 【5】修改课程
            case 5 => mgr.modifyCourse()
            // 【6】退出课程管理
            case 6 => break
            // 命令输入错误
            case _ => println("无效命令!")
        }
        pause()
    }
}

// ═════════════════════════════════════════════════════════════════════════════
// 成绩管理模块菜单(拓展任务)
// ═════════════════════════════════════════════════════════════════════════════

/**
 * 成绩管理模块
 */
func manageScores() {
    // 成绩管理器
    let mgr = ScoreManager.propInstance

    while (true) {
        println("--------------------------------------------")
        println("              成  绩  管  理                ")
        println("--------------------------------------------")
        println("请输入命令:")
        println("主动清屏【0】  录入成绩【1】  查询成绩【2】  修改成绩【3】  删除成绩【4】  课程成绩单【5】  学生成绩单【6】  退出【7】")

        // 获取输入信息
        var input = inputInfo<Int32>()

        // 获取命令代码
        match (input) {
            // 【0】主动清屏
            case 0 => clear()
            // 【1】录入成绩
            case 1 => mgr.inputScore()
            // 【2】查询成绩
            case 2 => mgr.queryScore()
            // 【3】修改成绩
            case 3 => mgr.modifyScore()
            // 【4】删除成绩
            case 4 => mgr.deleteScore()
            // 【5】班级内某一课程成绩单显示
            case 5 => mgr.printCourseScores()
            // 【6】某学生所有课程成绩显示
            case 6 => mgr.printStudentScores()
            // 【7】退出成绩管理
            case 7 => break
            // 命令输入错误
            case _ => println("无效命令!")
        }
        pause()
    }
}