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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.81
coleso
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 4
#1

Консольное меню - C++

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

Здравствуйте кто может помочь с консольным меню. Расклад таков.
Верхнее меню должно состоять из 6 пунктов.
1) --> Ауди
---
---
---
2) --> BMW
---
---
---
3)--> Лада
У каждого меню должно быть подменю. И чтоб можно было перемещаться по меню как посредством клавиш так и цифрами. Но ещё при нажатии Enter чтоб открывалось подменю, Esc выходило в меню. Спасибо большое)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2012, 00:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Консольное меню (C++):

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

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

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

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

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

Консольное приложение - C++
как можно поставить обработчики на нажатие клавишь ctrl+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
Миниатюры
Консольное меню  
riv94
64 / 64 / 11
Регистрация: 13.02.2011
Сообщений: 390
17.11.2012, 12:58 #3
-=ЮрА=-, а меня вот такой вопрос интересует! если я собираюсь строит многоуровневое меню, я могу его реализовать через switch второй, к примеру, вложенный в один из case'ов switch'а первого?) так же с помощью бесконечного цикла и т.д.
0
!Андрей!
6 / 6 / 0
Регистрация: 31.01.2012
Сообщений: 134
17.11.2012, 13:33 #4
riv94, можно, почему нет? Я так в курсаче делал)
0
riv94
64 / 64 / 11
Регистрация: 13.02.2011
Сообщений: 390
17.11.2012, 13:53 #5
!Андрей!, дело в том, что я сейчас как раз пишу курсач на эту тему ну раз уж вы тут просвещены, то не подмкажете ли, можно ли здесь как-то прописать так, чтоб перемещаться по иерархической структуре меню и в обратном направлении... т.е. с нижнего уровня, ворачиваться на верхний!
0
-=ЮрА=-
Заблокирован
Автор FAQ
17.11.2012, 16:10 #6
riv94, думаю ты это ищешь Меню со вставкой
0
riv94
64 / 64 / 11
Регистрация: 13.02.2011
Сообщений: 390
20.11.2012, 01:47 #7
все уже реализовал как switch в switch
0
selo4404
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 11
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
riv94
64 / 64 / 11
Регистрация: 13.02.2011
Сообщений: 390
23.11.2012, 21:46 #10
selo4404, вариант довольно хорош)) но тут такое дело, что если выбрал один пункт, то наверное уже вряд ли ты сможешь его снова выбрать, т.к. прога уже прошла этот шаг... да и вернуться в предыдущее меню невозможно))как сдам свой курсач - выброшу его сюда))
0
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,947
Записей в блоге: 17
23.11.2012, 22:58 #11
Исходники : Вывод дерева в виде иерархий папок

Класс расположенный в отдельном юните
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
selo4404
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 11
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
23.11.2012, 23:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2012, 23:17
Привет! Вот еще темы с ответами:

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

консольное окно - C++
Заранее извеняюсь за то что задаю тупой вопрос, как надо изменить размеры (т.е. высоту и ширину) консольного окна?? Если можно приведите...

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

Консольное окно - C++
STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &amp;si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &amp;pi, sizeof(pi)...


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

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

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