#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);
}
}