Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
#1

Как реализовать многоуровневое меню? - C++

29.11.2013, 22:12. Просмотров 704. Ответов 9
Метки нет (Все метки)

Допустим есть в главном меню пункт 1, пункт 2,пункт 3. При переходе по любому из пунктов программа что то выполняет. Для каждого пункта есть своя функция. Но мне нужно перейти обратно в главное меню. Что делать? GOTO ругают за превращение программы в спагетти, а если в функции одного из пунктов для возвращения назад вызывать функцию главного меню выходит то же самое. Как реализуются такие задачи?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2013, 22:12     Как реализовать многоуровневое меню?
Посмотрите здесь:

Подскажите, как реализовать отрисовку своего меню в окне сторонней игры(cs 1.6)? - C++
Подскажите, как реализовать отрисовку своего меню в окне сторонней игры(cs 1.6) ? Так то понятно, хукать opengl функции, но в плане...

Реализовать управляемое стрелками меню - C++
Здравствуйте. Я не очень опытный в плюсах, вообщем такая тема. Есть менюшка, управляется через стрелки на клавиатуре. Мне нужно вызвать...

Реализовать табличное меню, для выбора метода решения уравнения - C++
Доброго времени суток! Мне очень помогли на форуме решив уравнения тремя способами. Помогите, пожалуйста, с таким заданием. Нужно...

5.1. Реализовать представление стека. Работу со структурами организовать в виде текстового меню - C++
#include <stdio.h> #include <stdlib.h> typedef struct Item* pItem; struct Item { int data; pItem next; ...

Реализовать меню, которое позволит запускать тот или иной код - C++
Нужно слепить две простейших программы в одну и сделать простую менюшку выбора, той программы, которую хочу использовать. Есть у кого...

5.2 Реализовать представление очереди. Работу со структурами организовать в виде текстового меню - C++
Реализовать представление очереди. Работу со структурами организовать в виде текстового меню.

Реализовать представление стека. Работу со структурами организовать в виде текстового меню. - C++
1. Реализовать представление стека. Работу со структурами организовать в виде текстового меню. 2. Дополнительно разработать следующие...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Liden
19 / 19 / 2
Регистрация: 19.11.2013
Сообщений: 83
29.11.2013, 22:18     Как реализовать многоуровневое меню? #2
ivan92, используй switch
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
29.11.2013, 22:56  [ТС]     Как реализовать многоуровневое меню? #3
Нет, switch пригодился бы для перехода по пунктам меню "вглубь". А мне надо наоборот, наружу.
Байт
Эксперт C
15830 / 10157 / 1522
Регистрация: 24.12.2010
Сообщений: 19,140
29.11.2013, 23:01     Как реализовать многоуровневое меню? #4
Цитата Сообщение от ivan92 Посмотреть сообщение
GOTO ругают
А ты не слушай
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
29.11.2013, 23:05  [ТС]     Как реализовать многоуровневое меню? #5
Байт, т.е. тут справедливо будет использовать goto? И как профессиональные в таких случаях поступают?
Liden
19 / 19 / 2
Регистрация: 19.11.2013
Сообщений: 83
29.11.2013, 23:12     Как реализовать многоуровневое меню? #6
ivan92, а что мешает сделать внешний и внутренний switch?
Байт
Эксперт C
15830 / 10157 / 1522
Регистрация: 24.12.2010
Сообщений: 19,140
29.11.2013, 23:15     Как реализовать многоуровневое меню? #7
Цитата Сообщение от ivan92 Посмотреть сообщение
тут справедливо будет использовать goto?
Если тебе это удобно и ты уверен, что потом разберешься в своей программе - почему бы нет?
Цитата Сообщение от ivan92 Посмотреть сообщение
как профессиональные в таких случаях поступают
Доказано, что без Гоуту всегда можно обойтись. Делает ли это код более внятным - вот в чем вопрос. Сделай, как получится - пусть заработает. Потом выложи свой код (без лишних деталей) сюды. Я уверен, что многие тебе помогут.
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,728
29.11.2013, 23:28     Как реализовать многоуровневое меню? #8
Цитата Сообщение от ivan92 Посмотреть сообщение
И как профессиональные в таких случаях поступают?
примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
int submenu1_1()
{
int i;
while(1)
{
cin>>i;
switch(i)
 {
   case 1:
    fnc1();
  break;
   case 2:
     fnc2();
   break;
   case 3: // return to mainMenu
     return 1;
   case 4: // return to submenu1
     return 0;  
 }
 
}
int submenu1_2()
{
int i=5;
while(i)
{
cin>>i;
switch(i)
 {
   case 1:
    fnc3();
  break;
   case 2:
     fnc4();
   break;
   case 3: // return to mainMenu
     return 1;
   case 4: // return to submenu1
     i=0;  
 }
return 0;
}
int submenu1()
{
int i;
do
{
cin>>i;
switch(i)
 {
   case 1:
     if(submenu1_1())
      return 0;
  break;
   case 2:
      if(submenu1_1())
      return 0;
   break;
   case 3: // return to mainMenu
      i=0;
 }while(i);
return 0;
}
int submenu2()
{
int i;
do
{
cin>>i;
switch(i)
 {
   case 1:
     fnc5();
      return 0;
  break;
   case 2: // return to mainMenu
      i=0;
 }while(i);
return 0;
}
 
int menu()
{
  int i;
cin>>i;
while(i)
{ 
switch(i)
{
  case 1:
   submenu1();
  break;
 case 2:
   submenu2(); 
}
cin>>i; 
 
}
 
}
можно еще сделать переменную пункт меню
например выбрали 1 в главном меню то 1
если выбрали 1 в субменю то 11
и в зависимости от значения рисовать то или иное меню и выполнять действия
mr_Eugene
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
29.11.2013, 23:31     Как реализовать многоуровневое меню? #9
Вот пример костяка менюЗдесь надо не забыть использовать system("cls") для очистки экрана от постоянного вывода менюшек.Поправьте ,если где ошибся.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "stdafx.h"
#include "iostream"
 
using namespace std;
void menu1(void);
void menu2(void);
int _tmain(int argc, _TCHAR* argv[])
{
    int pm1,pm2,pm3;
    do
    {
    menu1();  //первое меню
    cin>>pm1;
    switch(pm1)
          {
           case 1:  //входим в подменю
                  do
                    {
                     menu2();//вторая менюшка
                     cin>>pm2;
                     switch(pm2)
                           {
                            case 1:
                                   break;
                            case 2:
                                   break;
                            case 3: 
                                   pm2=0;  //выходим в над меню
                                   break;
                           }
                    }
                     while(pm2!=0);     
                 
           case 2: // и т.д.
                  break;
           case 3:
                  pm1=0;  //условие выхода из программы
                  break;
           }
    }
    while(pm1!=0);
    return 0;
}
 
void menu1(void)
{
  cout<<"первое меню";
}
void memu2(void)
{
  cout<<"второе меню";
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2013, 23:34     Как реализовать многоуровневое меню?
Еще ссылки по теме:

Меню в консольном режиме.Текстовую с вводом номера строки, которую надо реализовать - C++
Как написать? с чего начать? Где можно почитать об этом?

Реализовать меню выбора арифметического действия, которое будет применено ко всем элементам массива - C++
за 5 числами из массива при выборе операции показывает результат. (сумма, произведение . элементов массива).нужно найти ошибку и...

"Многоуровневое" наследование шаблонного класса - C++
template&lt;class T&gt; class SomeClassA { }; template&lt;class T&gt; class SomeClassB { static SomeClassA&lt;T&gt; m_a; ...

незнаю как вывести полное решение для задачки.смысл улавливаю, а как реализовать - туплю - C++
Задана окружность, с помощью координат центра и радиуса. Определить, лежит ли она полностью в первой четверти. 1вывожу окружность и ...

Как процедуру в Паскале реализовать, как функцию в с++? - C++
Здравствуйте! Есть код на Паскале. Нужно процедуру реализовать в С++ как функцию. Возможно ли в моем случае? Попробовал по-всякому, но у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DU
1481 / 1057 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.11.2013, 23:34     Как реализовать многоуровневое меню? #10
о каком меню вообще речь идет?
такие задачи как правило возникают в гуях. и люди как правило не пишут велосипеды, а используют
готовые библиотеки, в которых все довольно просто и более менее одинаково.
создается рутовое меню, в него добавляются пункты с командами (спец объекты, коллбеки или что-то подобное), которые выполняются при выборе пункта меню. так вот все что нужно сделать для программиста - это реализовать команду и пропихнуть ее в нужное место.
Если речь идет о самодельном консольном меню. Тут уже кто на что горазд. Никто не мешает реализовать вышеописанную схему:
Создается класс меню, в интерфейсе которого есть возожность добавлять пункты и подпункты менюшек. Этот класс отвечает за отображение добавленных пунктов (тексты, какой пункт меню сейчас поселекчен), за обработку нажатия на клавишы (перерисовывать меню при нажатии кнопок навигации, запускать на выполнения команды, которые приписаны к выбранному пункту).

Пункты в таком меню могут хранится в виде указателя на узел, который указывает на такой же указатель-родитель и имеет (опционально) список дочерних пунктов и еще команда. Имея указатель на родитель - можно легко переместится к нему, имея список чайлдов - можно легко перемечатся по ним и заходить вглубь, если выбранный чайд имеет своих чайлдов. Это первое что пришло в голову.
Вариантов на самом деле масса.
Yandex
Объявления
29.11.2013, 23:34     Как реализовать многоуровневое меню?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru