БлогNot. Простейшее меню для консольной программы на С++

Простейшее меню для консольной программы на С++

Мда, оказалось актуальны такие интерфейсики-то при изучении Си, ведь разбирать что-то из этих исходников - попросту долго и не нужно сегодня... а если классов и визуальных сред ещё не учили, но обходиться голой командной строкой уже не хочется (скажем, в курсовом), то как-то так:

Пришлось потратить традиционные "полчаса для себя" вот на что :(

 Подробнее и скачать - на странице статьи

Ну а без нестандартной conio.h и цветовых излишеств можно сделать, например, так:

/* Создать пустой проект C++, меню Проект - Добавить новый элемент,
выбрать "Файл C++ (.cpp)" */
#include <iostream>
#include <cstdlib>
#include <windows.h>

typedef void (*Menu_Processing_Function_Pointer)(void);

struct Menu_Option {
 char choice;
 char const* p_selection_text;
 Menu_Processing_Function_Pointer p_processing_function;
};

void Process_Selection_One() {
 std::cout << "Выполнено действие 1";
}
void Process_Selection_Two() {
 std::cout << "Выполнено действие 2";
}
void Process_Selection_Three() {
 exit(0);
}

static const Menu_Option main_menu[] = {
  {'1', "Пункт 1", Process_Selection_One},
  {'2', "Пункт 2", Process_Selection_Two},
  {'3', "Выход", Process_Selection_Three},
};
static const size_t quantity_selections =
 sizeof(main_menu) / sizeof(main_menu[0]);

int main() {
 SetConsoleCP(1251); SetConsoleOutputCP(1251);
 static const char* menu_title =
  (const char*)"\n\
------------------------------\n\
         Главное меню\n\
------------------------------\n";
 do {
  std::cout << menu_title;
  for (size_t i = 0; i < quantity_selections; i++) {
   std::cout << main_menu[i].choice << ". " << 
    main_menu[i].p_selection_text << "\n";
  }
  std::cout << "Выберите действие: ";
  char choice;
  std::cin >> choice;
  std::cin.clear();
  std::cin.ignore(100, '\n');
  for (size_t i = 0; i < quantity_selections; ++i) {
   if (choice == main_menu[i].choice) {
    Menu_Processing_Function_Pointer p_function = main_menu[i].p_processing_function;
    (p_function)();
    break;
   }
  }
 } while (1);
}

28.10.2012, 22:08 [12603 просмотра]


теги: c++ программирование учебное

К этой статье пока нет комментариев, Ваш будет первым