Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/79: Рейтинг темы: голосов - 79, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 4
1

Консольное меню

27.03.2012, 00:55. Показов 15533. Ответов 11
Метки нет (Все метки)

Здравствуйте кто может помочь с консольным меню. Расклад таков.
Верхнее меню должно состоять из 6 пунктов.
1) --> Ауди
---
---
---
2) --> BMW
---
---
---
3)--> Лада
У каждого меню должно быть подменю. И чтоб можно было перемещаться по меню как посредством клавиш так и цифрами. Но ещё при нажатии Enter чтоб открывалось подменю, Esc выходило в меню. Спасибо большое)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2012, 00:55
Ответы с готовыми решениями:

Консольное меню MVC
С моего последнего проектика прошло не так уж много времени, а я вновь здесь и уже с новыми...

TextUserInterface меню(Консольное приложение)
Здравствуйте, есть меню в котором 5 пунктов. В пункте 1 есть есть аналогичное подменю с такой же...

Консольное меню (перемещение между функциями)
Здравствуйте. У меня есть код: #include "stdafx.h" #include <iostream> #include <stdio.h>...

Консольное меню: код отрабатывает дважды
подскажите почему мой код при вводе любого значения отрабатывает дважды int main() { char key;...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
11
Заблокирован
Автор FAQ
29.03.2012, 17:24 2
coleso, вот простенько на плюсах
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
#include <iostream>
#include <conio.h>
using namespace std;
 
void p1(){cout<<"You choose punk 1\n";}
void p2(){cout<<"You choose punk 2\n";}
void p3(){cout<<"You choose punk 3\n";}
void p4(){cout<<"You choose punk 4\n";}
void p5(){cout<<"You choose punk 5\n";}
void p6(){cout<<"You choose punk 6\n";}
 
int main()
{
    char ch_key;
    bool bMENU = true;
    while(bMENU)
    {
        cout<<"***MENU***\n";
        cout<<"1 - pynkt menu 1\n";
        cout<<"2 - pynkt menu 1\n";
        cout<<"3 - pynkt menu 1\n";
        cout<<"4 - pynkt menu 1\n";
        cout<<"5 - pynkt menu 1\n";
        cout<<"6 - pynkt menu 1\n";
        cout<<"ESC - vihod\n";
        //cout<<(ch_key = getch())<<endl;
        switch((ch_key = _getch()))
        {
        case '1':
            p1();
            break;
        case '2':
            p2();
            break;
        case '3':
            p3();
            break;
        case '4':
            p4();
            break;
        case '5':
            p5();
            break;
        case '6':
            p6();
            break;
        case 27:
            bMENU = false;
            cout<<"Exit from program\n";
            break;
        default:
            cout<<"Unsupported key was pressed\n";
            break;
        }
    }
    system("pause");
    return 0;
}
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
void p1(){cout<<"You choose punk 1\n";}
void p2(){cout<<"You choose punk 2\n";}
void p3(){cout<<"You choose punk 3\n";}
void p4(){cout<<"You choose punk 4\n";}
void p5(){cout<<"You choose punk 5\n";}
void p6(){cout<<"You choose punk 6\n";}
- это прототипы функций обработчиков соответствующих пунктов меню, в них можно писать все те команды которые предусмотрены для конкретного подпункта, я лишь ограничился выводом соответсвующей надписи, понятное дело в каждом p() можно накодить всё что угодно...
0
Миниатюры
Консольное меню  
66 / 66 / 29
Регистрация: 13.02.2011
Сообщений: 392
17.11.2012, 12:58 3
-=ЮрА=-, а меня вот такой вопрос интересует! если я собираюсь строит многоуровневое меню, я могу его реализовать через switch второй, к примеру, вложенный в один из case'ов switch'а первого?) так же с помощью бесконечного цикла и т.д.
0
6 / 6 / 1
Регистрация: 31.01.2012
Сообщений: 134
17.11.2012, 13:33 4
riv94, можно, почему нет? Я так в курсаче делал)
0
66 / 66 / 29
Регистрация: 13.02.2011
Сообщений: 392
17.11.2012, 13:53 5
!Андрей!, дело в том, что я сейчас как раз пишу курсач на эту тему ну раз уж вы тут просвещены, то не подмкажете ли, можно ли здесь как-то прописать так, чтоб перемещаться по иерархической структуре меню и в обратном направлении... т.е. с нижнего уровня, ворачиваться на верхний!
0
Заблокирован
Автор FAQ
17.11.2012, 16:10 6
riv94, думаю ты это ищешь Меню со вставкой
0
66 / 66 / 29
Регистрация: 13.02.2011
Сообщений: 392
20.11.2012, 01:47 7
все уже реализовал как switch в switch
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 13
20.11.2012, 04:47 8
Вот еще вариант

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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "conio.h"
#include "time.h"
 
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Rus");
    int i, i1;
    cout<<""<<endl;
    cout<<""<<endl;
    cout<<""<<endl;
    cout<<""<<endl;
    cout<<""<<endl;
    cout<<""<<endl;
    cin>>i;
    if (i==1)
    {
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cin>>i1;
        if (i1==1)
        {
 
        }
        if (i1==2)
        {
 
        }
    }
    if (i==2)
    {
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cin>>i1;
        if (i1==1)
        {
 
        }
        if (i1==2)
        {
 
        }
    }
    if (i==2)
    {
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cin>>i1;
        if (i1==1)
        {
 
        }
        if (i1==2)
        {
 
        }
    }
    if (i==3)
    {
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cin>>i1;
        if (i1==1)
        {
 
        }
        if (i1==2)
        {
 
        }
    }
    if (i==4)
    {
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cin>>i1;
        if (i1==1)
        {
 
        }
        if (i1==2)
        {
 
        }
    }
    if (i==5)
    {
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cin>>i1;
        if (i1==1)
        {
 
        }
        if (i1==2)
        {
 
        }
    }
    if (i==6)
    {
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cout<<""<<endl;
        cin>>i1;
        if (i1==1)
        {
 
        }
        if (i1==2)
        {
 
        }
    }
    return 0;
}
0
-=ЮрА=-
20.11.2012, 13:14
  #9

Не по теме:

selo4404, вариант не плох для начинающего, а так тихий ужастик...

0
66 / 66 / 29
Регистрация: 13.02.2011
Сообщений: 392
23.11.2012, 21:46 10
selo4404, вариант довольно хорош)) но тут такое дело, что если выбрал один пункт, то наверное уже вряд ли ты сможешь его снова выбрать, т.к. прога уже прошла этот шаг... да и вернуться в предыдущее меню невозможно))как сдам свой курсач - выброшу его сюда))
0
Эксперт С++
8359 / 6097 / 610
Регистрация: 10.12.2010
Сообщений: 28,416
Записей в блоге: 30
23.11.2012, 22:58 11
Исходники : https://www.cyberforum.ru/post3009892.html

Класс расположенный в отдельном юните
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
#include <string>
#include <vector>
#include <iostream>
//-----------------------------------------------------------------------------
namespace my
{
struct console_menu
{
  console_menu* parent;
  std::string name;
  std::vector<console_menu*> items;
  //---------------------------------
  console_menu(std::string name,console_menu* parent=NULL)
    {
    this->name=name;
    this->parent=parent;
    }
  //---------------------------------
  ~console_menu()
    {
    std::cout<<"destroy  "<<name<<std::endl;
    for(unsigned i=0;i<items.size();i++)
       if(items[i]) delete items[i];
    }
  //---------------------------------
  console_menu* add_item(std::string item_name)
   {
   console_menu* new_item= new console_menu(item_name,this);
   items.push_back(new_item);
   return  new_item;
   }
  //---------------------------------
  void show()
   {
    for(unsigned i=0;i<items.size();i++)   std::cout<<items[i]->name<<std::endl;
   }
 //---------------------------------
  std::string path()
   {
   std::string s=name;
   console_menu* pos=parent;
   for(;pos;) { s.insert(0,pos->name+"\/"); pos=pos->parent;}
   return s;
   }
};
};
//---------------------------------------------------------------------------
Использование

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
using namespace std;
using namespace my;
//-------------------------------------------------
int main()
{
 console_menu* main_menu= new console_menu("main_menu");
 
 main_menu->add_item("0. item0");
 main_menu->add_item("1. item1");
 main_menu->add_item("2. item2");
 main_menu->add_item("3. item3");
 
 main_menu->items[1]->add_item("0 sub item 1.1");
 
    main_menu->items[1]->items[0]->add_item("0 sub sub item 1.1.1");
 
 main_menu->items[1]->add_item("1 subitem 1.2");
 
 console_menu* current_menu;
 
 current_menu= main_menu;
 cout<<"\/"<<current_menu->path()<<endl;
 current_menu->show();
 
 char key;
 unsigned index;
 string str;
 
 for(;;)
   {
    cin>>str;
    key=str[0];
 
    if(isdigit(key))
     {
     index= atoi(str.c_str());
 
     if(index<current_menu->items.size())
        {
        current_menu= current_menu->items[index];
        cout<<"\/"<<current_menu->path()<<endl;
        current_menu->show();
        }
     else cerr<<"error"<<endl;
     }
    else
     if(str=="exit"||str=="quit")  break;
     else
          if(str=="back" && current_menu->parent)
            {
            current_menu= current_menu->parent;
            cout<<current_menu->path()<<endl;
            current_menu->show();
            }
   }
delete  main_menu;
system("pause");
}
//---------------------------------------------------------------------------
Добавлено через 17 минут
back возврат в предыдущее меню
0
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 13
23.11.2012, 23:17 12
Цитата Сообщение от riv94 Посмотреть сообщение
вариант довольно хорош)) но тут такое дело, что если выбрал один пункт, то наверное уже вряд ли ты сможешь его снова выбрать, т.к. прога уже прошла этот шаг... да и вернуться в предыдущее меню невозможно))как сдам свой курсач - выброшу его сюда))
а в чем проблема между 14 и 15 строчкой задаем еще 1 for который будет выполнять действие, например: "сколько примеров надо решить... получается примерно такая вещь
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
 #include "stdafx.h"
#include "iostream"
#include "math.h"
#include "conio.h"
#include "time.h"
 
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Rus");
    double a, c=1, n, z;
    int i=1, ik=1;
    cout<<"Умножение."<<endl<<endl;
    cout<<"Введите колличество примеров: ";
    cin>>z;
    cout<<endl<<endl;
    for (ik; ik<z+1; ik++)
    {
    cout<<"Введите колличество множителей"<<endl;
    cout<<"Колличество = ";
    cin>>n;
    cout<<endl;
    for (i; i<n+1; i++)
    {
        cout<<"Введите "<<i<<" множитель"<<endl;
        cout<<"Множитель равен ";
        cin>>a;
        if (a==0)
        {
            cout<<"Вы ввели 0. При умножении на результат всегда будет 0"<<endl<<endl;
            system("CLS");
            break;
        }
        cout<<endl;
        c=c*a;
    
        cout<<"После "<<i<<" множителя мы имеем результат: "<<c<<endl;
    }
    }
    if (c!=0)
    {
    cout<<endl<<endl<<"Ответ: "<<c<<endl<<endl<<"Для выхода из программы нажмите 'Enter'";
    }
    if (c==0)
        {
            cout<<"Вы ввели 0. При умножении на результат всегда будет 0"<<endl<<endl<<"Для выхода из программы нажмите 'Enter'";
        }
    
    _getch();
    return 0;
}
все в твоих руках, но главное фантазия и Великий FOR)))))))))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2012, 23:17

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Создать консольное меню с более чем 10-ю пунктами
Есть такая проблема, нужно создать меню в консоле, где более 10 пунктов. Когда вводишь числа с 1-9...

подскажите - консольное меню не реагирует на нажатие клавиш (case)
вот код, mv 2008 компилируется без ошибок, но при выборе 1, 2, 3 или 4 в меню ничего происходит...

Консольное приложение на С++
Задание такое: 1. Розробити функцію, що повертає абсолютне значення частки від ділення першого ...

Консольное приложение
Здравствуйте! Имеется консольное приложение, которое при наборе команды &quot;start&quot; выполняет запуск...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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