21xrx.com
2025-06-20 17:40:20 Friday
登录
文章检索 我的文章 写文章
C++ 多级菜单总结
2023-07-09 17:56:47 深夜i     27     0
C++ 多级菜单 总结 编程语言 用户界面设计

C++ 多级菜单是编程中常见的一种交互方式,通过多级菜单的设计,可以使用户更加方便、快捷地使用程序,提高用户体验度。多级菜单的设计也是很有技巧的,需要考虑到用户操作习惯、菜单的结构和逻辑等方面,下面就来总结一下 C++ 多级菜单的相关技巧。

1. 菜单结构设计

多级菜单的结构设计应当具有清晰的层次,以方便用户理解和操作。对于一个简单的菜单,可以采用以下基本结构:

1. 选项 1
2. 选项 2
3. 选项 3
4. 退出

其中,数字表示编号,后面是选项名称,一般每个选项名称不会过长,一行就可以显示。同时,菜单还需要一个“退出”选项,用来退出当前菜单或程序。对于一个多级菜单,可以采用以下结构:

1. 选项 1
  1.1 子选项 1
    1.1.1 孙子选项 1
    1.1.2 孙子选项 2
  1.2 子选项 2
    1.2.1 孙子选项 1
    1.2.2 孙子选项 2
2. 选项 2
  2.1 子选项 1
    2.1.1 孙子选项 1
    2.1.2 孙子选项 2
  2.2 子选项 2
    2.2.1 孙子选项 1
    2.2.2 孙子选项 2
3. 退出

在这个例子中,数字表示编号,每个选项名称后面的数字表示下一级菜单的编号。2 级菜单的编号为 1.xx, 3 级菜单的编号为 1.xx.xx。这种结构可以清晰地表示多级菜单之间的层级关系,方便用户操作。

2. 菜单的逻辑设计

菜单的逻辑设计是多级菜单设计的重要方面,需要考虑到以下几点:

(1)在设计多级菜单的时候,应尽可能减少用户的操作次数,让用户尽快完成操作。

(2)在菜单中设置一个「退出」选项,可以让用户随时离开当前菜单,回到上一层或程序主界面。

(3)子菜单和父菜单之间的切换应该便捷,可以通过键盘快捷键或者鼠标点击来实现,让用户可以快速切换到指定的菜单。

3. 代码实现

使用 C++ 实现多级菜单,可以采用递归调用的方式实现。每次进入下一级菜单时,可以传递当前菜单的编号和当前菜单层数作为参数,以便在下一级菜单中使用。同时,在编写程序时,还需要注意异常处理,比如当用户输入错误时,需要给出提示并重新输入。

#include<iostream>
using namespace std;
struct MenuItem
  string name;
  int subMenuIndex;  // 下一级菜单的编号
;
MenuItem topMenuList[] = {
   1 ,
   "Option 2",
   3 ,
   "Exit" // -1 表示退出
};
MenuItem subMenuList1[] = {
   11 ,
   "Sub Option 1-2",
   "Back" // -2 表示返回上一级菜单
};
MenuItem subMenuList2[] = {
   "Sub Option 2-1",
   "Sub Option 2-2",
   "Back" // -2 表示返回上一级菜单
};
MenuItem subMenuList3[] = {
   31 ,
   "Sub Option 3-2",
   -2  // -2 表示返回上一级菜单
};
string getMenuName(int menuIndex) {
  if (menuIndex == -1)
    return "top menu";
  
  if (menuIndex == 1)
    return "menu 1";
  
  if (menuIndex == 2)
    return "menu 2";
  
  if (menuIndex == 3)
    return "menu 3";
  
}
void showMenu(int menuIndex, int menuLevel) {
  MenuItem* menuList;
  int menuCount;
  if (menuIndex == -1) {
    // 顶级菜单
    menuList = topMenuList;
    menuCount = sizeof(topMenuList) / sizeof(MenuItem);
    cout << "==== " << getMenuName(menuIndex) << " ====" << endl;
  }
  else if (menuIndex == 1) {
    menuList = subMenuList1;
    menuCount = sizeof(subMenuList1) / sizeof(MenuItem);
    cout << "==== " << getMenuName(menuIndex) << " / level " << menuLevel << " ====" << endl;
  }
  else if (menuIndex == 2) {
    menuList = subMenuList2;
    menuCount = sizeof(subMenuList2) / sizeof(MenuItem);
    cout << "==== " << getMenuName(menuIndex) << " / level " << menuLevel << " ====" << endl;
  }
  else if (menuIndex == 3) {
    menuList = subMenuList3;
    menuCount = sizeof(subMenuList3) / sizeof(MenuItem);
    cout << "==== " << getMenuName(menuIndex) << " / level " << menuLevel << " ====" << endl;
  }
  for (int i = 0; i < menuCount; i++) {
    cout << i + 1 << ". " << menuList[i].name << endl;
  }
  cout << "=======================" << endl;
  int opt;
  cout << "Select an option: ";
  cin >> opt;
  if (opt >= 1 && opt <= menuCount) {
    int subMenuIndex = menuList[opt - 1].subMenuIndex;
    if (subMenuIndex == -1)
      cout << "Goodbye!" << endl;
      return;
    
    else if (subMenuIndex == -2) {
      // 返回上一级菜单
      showMenu(menuIndex, menuLevel - 1);
    }
    else {
      // 进入下一级菜单
      showMenu(subMenuIndex, menuLevel + 1);
    }
  }
  else {
    cout << "Invalid option, please try again." << endl;
    showMenu(menuIndex, menuLevel);
  }
}
int main() {
  showMenu(-1, 1);
  return 0;
}

在这个示例代码中,使用了结构体 MenuItem 来表示菜单项,其中包含菜单项名称和下一级菜单的编号(-1 表示退出,-2 表示返回上一级菜单)。根据当前菜单的编号和层数,显示相应的菜单并等待用户输入,根据用户输入的选项,判断当前菜单的状态,进入下一级菜单或者重新显示当前菜单。

总结:

多级菜单是编程中常见的一种交互方式,通过多级菜单的设计,可以使用户更加方便、快捷地使用程序,提高用户体验度。在多级菜单设计中,需要考虑到菜单结构的清晰性、菜单的逻辑设计和代码的实现细节等。编写好多级菜单程序,可以让程序更加易用和人性化,体现出编程的高效性和专业性。

  
  

评论区