Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
| 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 |
Ну или хотя бы объясните как пишутся такие процедуры как: textcolor; Window; 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 |
Моё меню хотя бы работает
Сообщение отредактировал 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, Спасибо.
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) не закрывался после результатов? |
![]() ![]() |
|
Текстовая версия | Сейчас: 23.5.2012, 4:15 |