Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有C类和x2B类的控制台应用程序菜单+; 我现在正在做一个C++个人项目,我学习很有意思。我刚刚学习了一些关于使用继承和虚拟函数的想法。我决定创建一个预算跟踪控制台应用程序!当然,我可以使用控制语句和开关;然而,我想尝试使用类来解决这个问题。以下是我目前的代码:_C++_Oop_Menu_Console_Composite - Fatal编程技术网

带有C类和x2B类的控制台应用程序菜单+; 我现在正在做一个C++个人项目,我学习很有意思。我刚刚学习了一些关于使用继承和虚拟函数的想法。我决定创建一个预算跟踪控制台应用程序!当然,我可以使用控制语句和开关;然而,我想尝试使用类来解决这个问题。以下是我目前的代码:

带有C类和x2B类的控制台应用程序菜单+; 我现在正在做一个C++个人项目,我学习很有意思。我刚刚学习了一些关于使用继承和虚拟函数的想法。我决定创建一个预算跟踪控制台应用程序!当然,我可以使用控制语句和开关;然而,我想尝试使用类来解决这个问题。以下是我目前的代码:,c++,oop,menu,console,composite,C++,Oop,Menu,Console,Composite,Main.cpp #include <iostream> #include "MainMenu.h" #include "Menu.h" int main() { std::cout << "Welcome to BudgetTracker!\n" << "Let's get started!\n\n"; Menu *menu = new MainMenu; int mainInput; menu->displayMenu

Main.cpp

#include <iostream>
#include "MainMenu.h"
#include "Menu.h"

int main() {

std::cout << "Welcome to BudgetTracker!\n" <<
            "Let's get started!\n\n";

Menu *menu = new MainMenu;
int mainInput;

menu->displayMenu();
std::cin >> mainInput;
menu->input(mainInput);

//Somehow switch my menu to a sub menu
//Add a loop without terminating entirely
#include "MainMenu.h"

MainMenu::MainMenu(){}
MainMenu::~MainMenu(){}


void MainMenu::displayMenu() {
std::cout   <<  "Welcome to the MainMenu! \n" <<
                "Select an option from the following: \n" <<
                "1.....Overall View\n" <<
                "2.....Accounts\n" <<
                "3.....Spending\n" <<
                "4.....Statistics\n" <<
                "5.....Budgeting\n" <<
                "0.....Close Program\n\n";
}

void MainMenu::input(int userInput) {
    m_input = userInput;
    std::cout << "You have entered " << m_input << ".\n\n";
    //some code to enter a different submenu
}
#包括
#包括“MainMenu.h”
#包括“Menu.h”
int main(){
std::cout>main输入;
菜单->输入(主输入);
//以某种方式将我的菜单切换到子菜单
//添加循环而不完全终止
}

主菜单.cpp

#include <iostream>
#include "MainMenu.h"
#include "Menu.h"

int main() {

std::cout << "Welcome to BudgetTracker!\n" <<
            "Let's get started!\n\n";

Menu *menu = new MainMenu;
int mainInput;

menu->displayMenu();
std::cin >> mainInput;
menu->input(mainInput);

//Somehow switch my menu to a sub menu
//Add a loop without terminating entirely
#include "MainMenu.h"

MainMenu::MainMenu(){}
MainMenu::~MainMenu(){}


void MainMenu::displayMenu() {
std::cout   <<  "Welcome to the MainMenu! \n" <<
                "Select an option from the following: \n" <<
                "1.....Overall View\n" <<
                "2.....Accounts\n" <<
                "3.....Spending\n" <<
                "4.....Statistics\n" <<
                "5.....Budgeting\n" <<
                "0.....Close Program\n\n";
}

void MainMenu::input(int userInput) {
    m_input = userInput;
    std::cout << "You have entered " << m_input << ".\n\n";
    //some code to enter a different submenu
}
#包括“main menu.h”
MainMenu::MainMenu(){}
MainMenu::~MainMenu(){}
void MainMenu::displayMenu(){

std::cout在我看来,您需要的是状态模式:

对于菜单,我建议使用状态表(数据驱动软件):

给定上述菜单项结构,您可以创建一个处理{any}菜单的通用引擎。菜单将是
菜单项
的数组

void Menu_Engine(Menu_Item * p_menu, unsigned int item_quantity)
{
  // Display the menu
  for (unsigned int i = 0; i < item_quantity; ++i)
  {
    std::cout << p_menu[i].number
              << ". "
              << p_menu[i].text
              << "\n";
  }
  std::cout << "Enter selection: ";
  unsigned int selection;
  std::cin >> selection;
  for (unsigned int i = 0; i < item_quantity; ++i)
  {
     if (selection == p_menu[i].number)
     {
        // Execute the processing function for the selection.
        (p_menu[i].p_processing_function)();
        break;
     }
  }
  if (i >= item_quantity)
  {
     std::cout << "invalid selection\n";
  }
}
用法示例:

int main()
{
   // Process the menu
   Menu_Engine(&first_menu[0]);

   // Pause.
   std::cout << "Paused. Press ENTER to continue.";
   std::cin.ignore(1000000, '\n');

   return 0;
}
intmain()
{
//处理菜单
菜单引擎(&第一个菜单[0]);
//暂停。
std::cout选择;
尝试
{
菜单项属性=菜单.at(选择);
(attributes.p_processing_function)();
}
捕获(标准:超出范围和e)
{

std::cout您的问题到底是什么?您是否尝试全面实现您的想法?感谢您的快速响应!我目前正忙于主菜单中的输入功能。如何使用该功能将其更改为子菜单?
struct Menu_Item_Attributes
{
  const char * text;
  Menu_Processing_Function_Ptr p_processing_function;
};
typedef std::map<unsigned int, Menu_Item_Attributes> Menu_Item_Container;
unsigned int selection;
std::cout << "Enter selection: ";
std::cin >> selection;
try
{
   Menu_Item_Attributes attributes = menu.at(selection);
   (attributes.p_processing_function)();
}
catch (std::out_of_range& e)
{
  std::cout << "Invalid selection";
}