#659. 菜单系统进阶版

菜单系统进阶版

题目描述

在智能车中,菜单系统对于调车来说是十分重要的,它可以帮助我们快速调节参数,同时显示图像,为我们节省很多时间,提高我们的调车效率,现在需要实现一个智能车控制系统的菜单交互程序,支持多级菜单导航、参数调整和特定功能执行,具体要求如下:

菜单结构:

主菜单(Main Menu)包含 3 个子菜单:

LED Control
Image
PID

LED Control 菜单包含 3 个选项:

LED_Speed: X(X 为整数参数,初始值 0)
LED_Direction: Y(Y 为整数参数,初始值 0)
LED_Test(执行特定功能)

Image 菜单包含 1 个选项:

Show Triangle(显示由 * 组成的高度为 3 的等边三角形)


PID 菜单包含 3 个参数选项:

KP: P(P 为整数参数,初始值 0)
KI: I(I 为整数参数,初始值 0)
KD: D(D 为整数参数,初始值 0)

操作控制:

'W':指针上移(循环,如顶部项上移会到最底部)
'S':指针下移(循环,如底部项下移会到最顶部)
'A':进入选中项(子菜单则进入,参数项则进入编辑模式,在编辑模式中再次点击A可以退出编辑模式,功能项则执行功能)
'D':返回上一级菜单(在编辑模式中再次点击D可以退出编辑模式)
'+':参数值加 1(仅在编辑模式有效)
'-':参数值减 1(仅在编辑模式有效)
'0':退出程序

显示要求:

程序启动后立即显示主菜单初始状态
每次操作后更新并显示菜单状态
普通模式显示为 "[normal mode]"
编辑模式显示为 "[change mode]"
菜单标题格式:"=== 菜单名称 ==="
菜单项中,选中项前显示 "->",未选中项前显示 " "(三个空格)
参数项显示当前值,格式为 "参数名称:值" 特殊功能:
选择 LED_Test 后,输出 "LED OK" 并保持当前菜单状态
选择 Show Triangle 后,显示高度为 3 的等边三角形(由 * 组成),然后显示当前菜单

初始状态:主菜单(Main Menu),指针指向第一个选项 "LED Control"。

输入格式

每次输入一个字符,有效输入为
'W'、'S'、'A'、'D'、'+'、'-'、'0'。

输出格式

普通模式显示:
第一行:"[normal mode]"
第二行:菜单标题,格式为 "=== 菜单名称 ==="
后续行:菜单项,选中项前显示 "->",未选中项前显示 " " 参数项显示当前值,格式为 "参数名称:值"
编辑模式显示:
第一行:"[change mode]"
第二行:菜单标题,格式同上
后续行:菜单项显示格式同上
特殊输出:
选择 LED_Test 后,输出 "LED OK",然后显示当前菜单
选择 Show Triangle 后,显示 3 行等边三角形图案,然后显示当前菜单
输入无效字符时,输出 "Invalid input"
退出程序时,输出 "Program exited"

样例

A A + + - A D S A A 0
[normal mode]
=== Main Menu ===
-> LED Control
   Image
   PID
[normal mode]
=== LED Control ===
-> LED_Speed: 0
   LED_Direction: 0
   LED_Test
[change mode]
=== LED Control ===
-> LED_Speed: 0
   LED_Direction: 0
   LED_Test
[change mode]
=== LED Control ===
-> LED_Speed: 1
   LED_Direction: 0
   LED_Test
[change mode]
=== LED Control ===
-> LED_Speed: 2
   LED_Direction: 0
   LED_Test
[change mode]
=== LED Control ===
-> LED_Speed: 1
   LED_Direction: 0
   LED_Test
[normal mode]
=== LED Control ===
-> LED_Speed: 1
   LED_Direction: 0
   LED_Test
[normal mode]
=== Main Menu ===
-> LED Control
   Image
   PID
[normal mode]
=== Main Menu ===
   LED Control
-> Image
   PID
[normal mode]
=== Image ===
-> Show Triangle
  *
 ***
*****
[normal mode]
=== Image ===
-> Show Triangle
Program exited