IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Как написать меню программы в C++
Anarkus
сообщение 3.5.2009, 8:00
Сообщение #1


Пользователь


Группа: Пользователи
Сообщений: 27
Регистрация: 29.11.2008
Из: Украина
Пользователь №: 21 060



В общем требуется написать меню в С++. Меню может быть любым.
Знаю как написать меню в Паскале, но проделать приблизительно такое же в Си не могу, так как многие функции и процедуры которые используются в Паскале, не знаю как пишутся в Си.
Если можете, киньте ссылку или готовое меню если есть. Ну или хотя бы объясните как пишутся такие процедуры как: textcolor; Window; TextBackground; gotoxy;
Заранее спасибо


--------------------
Каждому программисту ЭВМ выдает то, что он заслужил.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PolPoll
сообщение 3.5.2009, 15:19
Сообщение #2


:)


Группа: Главные администраторы
Сообщений: 5 858
Регистрация: 24.11.2005
Из: Москва
Пользователь №: 5 327



Цитата(Anarkus @ 3.5.2009, 12:00) *

Ну или хотя бы объясните как пишутся такие процедуры как: textcolor; Window; TextBackground; gotoxy;
Заранее спасибо
так и пушутся... маленькими буквами textcolor, textbackground, gotoxy
вот тут пример, но еще и с классами http://www.opeople.ru/topic9762.html


--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Anarkus
сообщение 14.5.2009, 20:24
Сообщение #3


Пользователь


Группа: Пользователи
Сообщений: 27
Регистрация: 29.11.2008
Из: Украина
Пользователь №: 21 060



Меню написал (для Borland C++ 3.1).
Думаю код пригодится:
Код
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int i,n;
char ch;

int menu (int v)
{
   const k=3;
   char *m[k];
   m[0]=" Knopka 1 ";
   m[1]=" Knopka 2 ";
   m[2]="   Exit   ";
   for (i=0; i<3; i++)
   {
      textcolor (WHITE);
      window ((i-1)*11+34,1,i*11+34,2);
      if (i==v)
     textbackground (RED);
      else
     textbackground (BLUE);
      cprintf ("%s",m[i]);
   }
   n=v;
   textbackground (BLUE);
   window (1,3,80,50);
   clrscr ();
   return 0;
}
int knopka1 ()
{
   textbackground (BLUE);
   window (2,3,80,50);
   clrscr ();
   textcolor (WHITE);
   printf (" Hello!");
   getch ();
   return 0;
}
int knopka2 ()
{
   textbackground (BLUE);
   window (2,3,80,50);
   clrscr ();
   textcolor (WHITE);
   printf (" Hello!");
   getch ();
   return 0;
}
int main ()
{
   n=0;
   do
   {
      window (1,1,80,25);
      textbackground (BLACK);
      clrscr ();
      menu (n);
      ch=getch ();
      switch (ch)
      {
     case 77:
     {
        if (n<2)
           menu (n+1);
        else
           menu (0);
     }
     break;
     case 75:
     {
        if (n>0)
           menu (n-1);
        else
           menu (2);
     }
     break;
     case 13:
     {
        switch (n)
        {
           case 0:
          knopka1 ();
           break;
           case 1:
          knopka2 ();
           break;
           case 2:
          abort ();
           break;
           default:
          continue;
        }
     }
     break;
     default:
        continue;
      }
   }
   while (ch!=27);
   return 0;
}

Меню легко изменяется, и думаю весьма простое и понятное. Нужные программы пишутся в процедурах knopka1 и knopka2. При желании можно увеличить количество кнопок или наоборот уменьшить. Для этого надо изменить пару строчек в программе.

Сообщение отредактировал Anarkus - 14.5.2009, 20:30


--------------------
Каждому программисту ЭВМ выдает то, что он заслужил.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
denizk
сообщение 15.5.2009, 23:39
Сообщение #4


Пользователь


Группа: Активисты
Сообщений: 654
Регистрация: 31.10.2007
Пользователь №: 18 005



Вот самая простая реализация меню:
Код

#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

vivodstr(char * begin,int x,int y,int n)
   { int i;
     gotoxy(x,y);
     for (i=0;i<n;i++) putch(*(begin+i));
   };

vivodstrok(char *str[],int k,int x1,int y1)
{
int s;
for (s=0;s<k;s++)
{
  vivodstr(str[s],x1,y1+s,strlen(str[s]));
}
}
int viborpunktamenu(int xx1,int yy1,int l)
{
int punkt=1;
char ch;
int shetchik=yy1;
gotoxy(xx1-1,shetchik); cout<<'*';
    for(;
     {
      switch(ch=getch())
      {
case 'u':  if (shetchik>yy1)
     {
      gotoxy(xx1-1,shetchik);cout<<' ';
      shetchik=shetchik-1;
      gotoxy(xx1-1,shetchik);cout<<'*'; punkt=punkt-1;break;
      } else
     {gotoxy(xx1-1,shetchik);cout<<' ';
      shetchik=yy1+l-1;gotoxy(xx1-1,shetchik);
      cout<<'*';punkt=punkt+l-1; break;
     }

case 'd':break;
case ' ':return punkt;

      }

     }
return punkt;
}
void main()
{ int s1,t1;
  clrscr();
  char* menu[5]={"prosmotr basy",
   "Add",
   "Delete",
   "Find",
   "Exit"};

  s1=5; t1=15;
  for(;
  {
     vivodstrok(menu,5,s1,t1);
     switch(viborpunktamenu(s1,t1,5))
    {
     case 1: cout<<"1111111";break;
     case 2:cout<<"22222";break;
     case 3:cout<<"33333";break;break;
     case 4:cout<<"44444";break;break;
     case 5:goto end;
    }

}
end:
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Anarkus
сообщение 17.5.2009, 8:22
Сообщение #5


Пользователь


Группа: Пользователи
Сообщений: 27
Регистрация: 29.11.2008
Из: Украина
Пользователь №: 21 060



Моё меню хотя бы работает smile.gif

Сообщение отредактировал Anarkus - 17.5.2009, 8:23


--------------------
Каждому программисту ЭВМ выдает то, что он заслужил.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
PolPoll
сообщение 17.5.2009, 12:09
Сообщение #6


:)


Группа: Главные администраторы
Сообщений: 5 858
Регистрация: 24.11.2005
Из: Москва
Пользователь №: 5 327



Подправленное слегка меню denizk
Код
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

vivodstr(char * begin,int x,int y,int n)
   { int i;
     gotoxy(x,y);
     for (i=0;i<n;i++) putch(*(begin+i));
   };

vivodstrok(char *str[],int k,int x1,int y1)
{
int s;
for (s=0;s<k;s++)
{
  vivodstr(str[s],x1,y1+s,strlen(str[s]));
}
}
int viborpunktamenu(int xx1,int yy1,int l, int punkt)
{
char ch;
int shetchik=yy1+punkt-1;
gotoxy(xx1-1,shetchik); cout<<'*';
    for(;;)
     {
      switch(ch=getch())
      {
case 72:  if (punkt>1)
     {
      gotoxy(xx1-1,shetchik);cout<<' ';
      shetchik=shetchik-1;
      gotoxy(xx1-1,shetchik);cout<<'*'; punkt=punkt-1;break;
      } else
     {gotoxy(xx1-1,shetchik);cout<<' ';
      shetchik=yy1+l-1;
      gotoxy(xx1-1,shetchik);cout<<'*';punkt=l; break;
     }

case 80:if (punkt<l)
     {
      gotoxy(xx1-1,shetchik);cout<<' ';
      shetchik=shetchik+1;
      gotoxy(xx1-1,shetchik);cout<<'*'; punkt=punkt+1;break;
      } else
     {gotoxy(xx1-1,shetchik);cout<<' ';
      shetchik=yy1;gotoxy(xx1-1,shetchik); cout<<'*';punkt=1; break;
     }
case 13:return punkt;
case 27:return l;
      }
     }
return 0;
}
void main()
{ int s1,t1,punkt;
  clrscr();
  char* menu[5]={"prosmotr basy",
   "Add",
   "Delete",
   "Find",
   "Exit"};

  s1=5; t1=15; punkt=1;
  for(;;)
  {  clrscr();
     vivodstrok(menu,5,s1,t1);
     switch(punkt=viborpunktamenu(s1,t1,5,punkt))
    {
     case 1: clrscr(); cout<<"11111"; break;
     case 2: clrscr(); cout<<"22222"; break;
     case 3: clrscr(); cout<<"33333"; break;
     case 4: clrscr(); cout<<"44444"; break;
     case 5: goto end;
    }
    getch();
}
end:
}


--------------------
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
denizk
сообщение 18.5.2009, 7:47
Сообщение #7


Пользователь


Группа: Активисты
Сообщений: 654
Регистрация: 31.10.2007
Пользователь №: 18 005



PolPoll, Спасибо. smile.gif

Anarkus, Моё тоже рабочее)) Просто два файла с меню лежало не из того копипастнул.((
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
CePryH
сообщение 21.5.2009, 16:55
Сообщение #8


Пользователь


Группа: Пользователи
Сообщений: 1
Регистрация: 21.5.2009
Пользователь №: 21 726



Реально ли написать такое же меню... до 40 строчек текста программы... если ничего не заносить в include
Если знаете как расскажите хотя бы идею..))
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
antoniio
сообщение 3.8.2009, 13:20
Сообщение #9


Пользователь


Группа: Пользователи
Сообщений: 2
Регистрация: 3.8.2009
Пользователь №: 21 898



Всем привет! Подскажите,плз.
Вопрос: если писать на чистом Си, в нем есть аналог функции C++ system ("PAUSE") ? Или может какой-то другой способ для того, чтобы экран (.exe) не закрывался после результатов?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 23.5.2012, 4:15