21xrx.com
2024-09-19 10:06:24 Thursday
登录
文章检索 我的文章 写文章
C++ 多级菜单总结
2023-07-09 17:56:47 深夜i     --     --
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 表示返回上一级菜单)。根据当前菜单的编号和层数,显示相应的菜单并等待用户输入,根据用户输入的选项,判断当前菜单的状态,进入下一级菜单或者重新显示当前菜单。

总结:

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复