include conio include stdlib include stdio include string объявление г

  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
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//объявление глобальнных переменных
//еще может быть еще массив направлений
char menu[7][5]={"help","lab1","lab2","lab3","lab4","lab5","lab6"}; // названия кнопок
int pos=0, coord[7]={4, 6, 8, 10, 12, 14, 16};// pos=(позиция выделеного элемента) coord=(так как у меня все в столбик, то это координаты только по У )
//объявление функций
void bg_window(); //вывод рамочки
void print_menu(); // вывод меню
void select_menu(); // переход по кноке
void help(); // вывод help
void main(int argc, char *argv[]) // int argc, char *argv[] для вывода по ключу
{
int key;
if(strcmp(argv[1], "/help")==0 || strcmp(argv[1], "/h")==0) // если есть ключи вывести help
{
bg_window();
select_menu();
}
else // вывод нормальной программы
{
bg_window(); // рамочка
for(;;)
{
print_menu(); // меню
key=getch();
if(key!=0) // проверяем нажатые клавиши
{
if(key==27) //Esc
{
break;
}
else if(key==13) // Enter
{
select_menu(); // переход в выбранный пункт
}
else
{
continue;
}
}
else // если не Enter, Esc, пробел
{
key=getch();
if(key==80 || key==77) // если стрелки вниз или лево
{
if(pos!=6) // прверяем достигнут ли конец
pos++; // корректируем позицию
}
else if(key==72 || key==75) // если стрелки вверх или низ
{
if(pos!=0) // прверяем достигнуто ли начало
pos--; // корректируем позицию
}
else
{
continue;
}
}
}
}
}
void bg_window() // вывод рамки я просто так решил ее в отдельную функцию вынести
{
int i;
window(2,2,79,24);
textbackground(BLUE);
textcolor(GREEN);
clrscr();
puts(" ╔══════════════════════════════════════════════════════════════════════════╗ ");
for(i=0;i<=20;i++)
puts(" ║ ║ ");
puts(" ╚══════════════════════════════════════════════════════════════════════════╝ ");
}
void print_menu() // вывод меню
{
int i;
window(5,3,76,23);
textbackground(BLUE);
clrscr();
for(i=0;i<7;i++)
{
window(8,coord[i]+3,15,coord[i]+3);
textcolor(i==pos?LIGHTRED:YELLOW); //меняется цвет в завизимости от позициии
textbackground(i==pos?GREEN:RED); //меняется цвет в завизимости от позициии
clrscr();
gotoxy(3,1); // выравнивание надписи на кнопке
cprintf("%s", menu[i]); //вывод надписи
}
}
void select_menu() //переход по нажанию кнопки
{
int key;
window(5,3,76,23);
textbackground(BLUE);
textcolor(YELLOW);
clrscr();
switch(pos)
{
case 0:
help(); // если позиция была на help то мвывести хелп
break;
case 1: case 2: case 3: case 4: case 5: case 6:
cprintf("Лабораторная работа номер %d", pos); // остальные кнопки
break;
}
for(;;)
{
if(getch()==27) // проверяем нажатие Esc
break;
}
}
void help()
{
FILE *f;
char *c;
int y=2;
if((f=fopen("HELP", "rt"))==NULL)
{
cprintf("\nОшибка открытия файла!\n");
}
else
{
while(!feof(f)) // пока не достигнут конец файла
{
c=fgetc(f); // читаем один символ
if(c=='\n') // проверяем переход на новую строку
{
gotoxy(1,y++); //корректиркем позицию если был достигрут конец строки
}
else
{
cprintf("%c", c); //выводим символ
}
}
fclose(f);
}
}