Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание меню на Си++ (консольное) есть наработки, Нужно создать меню 
:(
    Опции темы
Vadik4722
Дата 14.7.2019, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.7.2019
Где: Россия

Репутация: нет
Всего: нет



Нужно создать меню, допустим: 1. Выбрать действие: 1.1 ввести число или строку, потом результат ввода строки или числа записать в файл. Примерно так надо сделать. Задание ниже:

Я сделал заготовки, но не пойму, как реализовать само меню и самое сложное это записать потом результат в файл. Я искал в интернете примеры и не мог найти. И еще, очень желательно вместо массива использовать векторы, которые мы еще не проходили.

Разработать классы: "Пункт меню", "Меню". Меню содержит массив указателей на пункты меню (агрегация).
Необходимо создать несколько пунктов меню, разместить их в меню.
Вывести меню (позволяет выбрать пункт и выполнить).
Реализовать сохранение всей структуры объектов на диск и чтение всей структуры объектов с диска. При запуске программы считывать с диска - и создавать все объекты, и отображать получившееся меню.

Код

#include "pch.h"
#include <iostream>
#include <string>
#include <Windows.h>
#include <typeinfo>
#include <vector>
using namespace std;
const char n = '\n';
 
class menu_item;
class menu;
class user_int;
 
void act()
{
    cout << n << "hi" << n;
}
 
class user_int
{
public:
    user_int();
    ~user_int();
    void add(menu_item item);
    void addMenu1(menu_item item); 
    void showMenu1();
 
private:
    vector<menu_item> items;
    menu *m1, *m2;
 
};
 
class menu_item
{
public:
    menu_item(string title, void(*actoin)())
        :title(title), action(action) {}
    void print()
    {
        cout << title << n;
    }
 
    void execute()
    {
        action();
    }
 
private:
    string title;
    void(*action)();
};
 
class menu
{
public:
    menu(string titile)
        :title(title) {}
    void add(menu_item* item_ptr)
    {
        items.push_back(item_ptr); // чтобы добавить 
    }
 
    void show() // она не реализована
    {
        for (size_t i = 0; i < items.size(); i++)
        {
            cout << items[i] << n;
        }
    }
private:
    string title;
    vector<menu_item*> items;
};
 
user_int::user_int()
{
    // todo
 
}
 
user_int::~user_int()
{
    // todo
}
 
void user_int::add(menu_item item)
{
    items.push_back(item);
    
}
 
void user_int::showMenu1()
{
    // todo
}
 
int main()
{
    setlocale(0, "");
 
    user_int ui;
    ui.add(menu_item("item 1", act));
}

PM WWW ICQ Skype   Вверх
vol4ek
Дата 15.7.2019, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



меню в консольном приложении 
Код

#include <stdio.h> // для printf() и scanf()
#include <conio.h> // для _getch()
#include <windows.h>
HANDLE hConsole, hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

void add()
{return;}// объявляем нужные
void dif()
{return;}// нам функции

int m_pos = 0;            // позиция меню
int max_pos = 3;        // максимальная позиция меню
char s1[101];

enum ConsoleColor
{
    Black         = 0,
    Blue          = 1,
    Green         = 2,
    Cyan          = 3,
    Red           = 4,
    Magenta       = 5,
    Brown         = 6,
    LightGray     = 7,
    DarkGray      = 8,
    LightBlue     = 9,
    LightGreen    = 10,
    LightCyan     = 11,
    LightRed      = 12,
    LightMagenta  = 13,
    Yellow        = 14,
    White         = 15
};

char* ru(char* s) { AnsiToOem(s, s1);    return s1; } // вывод русским языком

void SetColor(int text, int background) // устанавливаем цвет
{
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}

void GotoXY(int X, int Y) // позиция курсора
{
    COORD coord = { X, Y };
    SetConsoleCursorPosition(hStdOut, coord);
}

void go(int x) // Если нажали Enter
{
    if(x==0) add();
    if(x==1) dif();
    printf(ru("\n   Нажмите любую\n      клавишу"));
    SetColor(0,0); 
    GotoXY(35,24);
    exit(0);
}

void choice();

void menu()
{
    system("cls"); // очистить экран
    if(m_pos==0) 
    { 
        SetColor(6,0); printf(ru(" + Прибавить матрицы\n")); SetColor(15,0);
        printf(ru("   Отнять матрицы\n"));
        printf(ru("   Выход\n")); 
        choice();
    }
    if(m_pos==1) 
    { 
        printf(ru("   Прибавить матрицы\n")); 
        SetColor(6,0); printf(ru(" + Отнять матрицы\n")); SetColor(15,0);
        printf(ru("   Выход\n")); 
        choice(); 
    }
    if(m_pos==2)
    { 
        printf(ru("   Прибавить матрицы\n"));
        printf(ru("   Отнять матрицы\n"));
        SetColor(6,0); printf(ru(" + Выход\n")); SetColor(15,0);
        choice();
    }
}

void choice() // функция выбора
{
l:
    int ch=_getch(); // считываем значение нажатой клавиши
    if(ch==224) // 224 - это стрелочки
    {
        switch(ch)
        {
        case 80: // вниз
            if(m_pos+1<max_pos) ++m_pos;
            menu();
            break;
        case 72: // вверх
            if(m_pos-1>=0) --m_pos;
            menu();
            break;
        case 13: // Enter
            go(m_pos);
            break;
        default:
            goto l;
        }
    }
    switch(ch)
    {
    case 80: // вниз
        if(m_pos+1<max_pos) ++m_pos;
        menu();
        break;
    case 72: // вверх
        if(m_pos-1>=0) --m_pos;
        menu();
        break;
    case 13: // Enter
        go(m_pos);
        break;
    default:
        goto l;
    }
}

void main()
{
    menu();
}

пишите что не получается
PM MAIL ICQ   Вверх
Vadik4722
Дата 18.7.2019, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 13.7.2019
Где: Россия

Репутация: нет
Всего: нет



Цитата(vol4ek @ 15.7.2019,  19:46)
меню в консольном приложении 
Код

#include <stdio.h> // для printf() и scanf()
#include <conio.h> // для _getch()
#include <windows.h>
HANDLE hConsole, hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

void add()
{return;}// объявляем нужные
void dif()
{return;}// нам функции

int m_pos = 0;            // позиция меню
int max_pos = 3;        // максимальная позиция меню
char s1[101];

enum ConsoleColor
{
    Black         = 0,
    Blue          = 1,
    Green         = 2,
    Cyan          = 3,
    Red           = 4,
    Magenta       = 5,
    Brown         = 6,
    LightGray     = 7,
    DarkGray      = 8,
    LightBlue     = 9,
    LightGreen    = 10,
    LightCyan     = 11,
    LightRed      = 12,
    LightMagenta  = 13,
    Yellow        = 14,
    White         = 15
};

char* ru(char* s) { AnsiToOem(s, s1);    return s1; } // вывод русским языком

void SetColor(int text, int background) // устанавливаем цвет
{
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}

void GotoXY(int X, int Y) // позиция курсора
{
    COORD coord = { X, Y };
    SetConsoleCursorPosition(hStdOut, coord);
}

void go(int x) // Если нажали Enter
{
    if(x==0) add();
    if(x==1) dif();
    printf(ru("\n   Нажмите любую\n      клавишу"));
    SetColor(0,0); 
    GotoXY(35,24);
    exit(0);
}

void choice();

void menu()
{
    system("cls"); // очистить экран
    if(m_pos==0) 
    { 
        SetColor(6,0); printf(ru(" + Прибавить матрицы\n")); SetColor(15,0);
        printf(ru("   Отнять матрицы\n"));
        printf(ru("   Выход\n")); 
        choice();
    }
    if(m_pos==1) 
    { 
        printf(ru("   Прибавить матрицы\n")); 
        SetColor(6,0); printf(ru(" + Отнять матрицы\n")); SetColor(15,0);
        printf(ru("   Выход\n")); 
        choice(); 
    }
    if(m_pos==2)
    { 
        printf(ru("   Прибавить матрицы\n"));
        printf(ru("   Отнять матрицы\n"));
        SetColor(6,0); printf(ru(" + Выход\n")); SetColor(15,0);
        choice();
    }
}

void choice() // функция выбора
{
l:
    int ch=_getch(); // считываем значение нажатой клавиши
    if(ch==224) // 224 - это стрелочки
    {
        switch(ch)
        {
        case 80: // вниз
            if(m_pos+1<max_pos) ++m_pos;
            menu();
            break;
        case 72: // вверх
            if(m_pos-1>=0) --m_pos;
            menu();
            break;
        case 13: // Enter
            go(m_pos);
            break;
        default:
            goto l;
        }
    }
    switch(ch)
    {
    case 80: // вниз
        if(m_pos+1<max_pos) ++m_pos;
        menu();
        break;
    case 72: // вверх
        if(m_pos-1>=0) --m_pos;
        menu();
        break;
    case 13: // Enter
        go(m_pos);
        break;
    default:
        goto l;
    }
}

void main()
{
    menu();
}

пишите что не получается

//Разработать классы : "Пункт меню", "Меню".Меню содержит массив указателей на пункты меню(агрегация).
//Необходимо создать несколько пунктов меню, разместить их в меню.
//Вывести меню(позволяет выбрать пункт и выполнить).
//Реализовать сохранение всей структуры объектов на диск и чтение всей структуры объектов с диска.
//При запуске программы считывать с диска - и создавать все объекты, и отображать получившееся меню.

Вот это не получается сделать. Только смог сделать заготовку.

Добавлено через 12 минут и 40 секунд
vol4ek
и язык не СИ а СИ++
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1130 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.