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

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

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

C++ консольное окно
консольное приложение C++
C++ Консольное приложение на С++
Консольное окно C++
C++ подскажите - консольное меню не реагирует на нажатие клавиш (case)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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() можно накодить всё что угодно...
Миниатюры
Консольное меню  
riv94
 Аватар для riv94
64 / 64 / 11
Регистрация: 13.02.2011
Сообщений: 390
17.11.2012, 12:58     Консольное меню #3
-=ЮрА=-, а меня вот такой вопрос интересует! если я собираюсь строит многоуровневое меню, я могу его реализовать через switch второй, к примеру, вложенный в один из case'ов switch'а первого?) так же с помощью бесконечного цикла и т.д.
!Андрей!
6 / 6 / 0
Регистрация: 31.01.2012
Сообщений: 134
17.11.2012, 13:33     Консольное меню #4
riv94, можно, почему нет? Я так в курсаче делал)
riv94
 Аватар для riv94
64 / 64 / 11
Регистрация: 13.02.2011
Сообщений: 390
17.11.2012, 13:53     Консольное меню #5
!Андрей!, дело в том, что я сейчас как раз пишу курсач на эту тему ну раз уж вы тут просвещены, то не подмкажете ли, можно ли здесь как-то прописать так, чтоб перемещаться по иерархической структуре меню и в обратном направлении... т.е. с нижнего уровня, ворачиваться на верхний!
-=ЮрА=-
Заблокирован
Автор FAQ
17.11.2012, 16:10     Консольное меню #6
riv94, думаю ты это ищешь Меню со вставкой
riv94
 Аватар для riv94
64 / 64 / 11
Регистрация: 13.02.2011
Сообщений: 390
20.11.2012, 01:47     Консольное меню #7
все уже реализовал как switch в switch
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;
}
-=ЮрА=-
20.11.2012, 13:14
  #9

Не по теме:

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

riv94
 Аватар для riv94
64 / 64 / 11
Регистрация: 13.02.2011
Сообщений: 390
23.11.2012, 21:46     Консольное меню #10
selo4404, вариант довольно хорош)) но тут такое дело, что если выбрал один пункт, то наверное уже вряд ли ты сможешь его снова выбрать, т.к. прога уже прошла этот шаг... да и вернуться в предыдущее меню невозможно))как сдам свой курсач - выброшу его сюда))
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 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 возврат в предыдущее меню
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2012, 23:17     Консольное меню
Еще ссылки по теме:

Консольное приложение C++
C++ Консольное меню MVC
C++ TextUserInterface меню(Консольное приложение)

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

Или воспользуйтесь поиском по форуму:
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)))))))))
Yandex
Объявления
23.11.2012, 23:17     Консольное меню
Ответ Создать тему
Опции темы

Текущее время: 06:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru