Разработка программы, представляющей собой систему вложенных меню

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

Структура системы меню

Вариант ПМ1206


Программа и ее краткая характеристика

Разработанная программа представляет собой систему вложенных меню. Уровень вложенности может достигать 2. Заголовки меню моделируют меню некоторой абстрактной программы, но могут быть легко изменены в случае надобности. Отметим большое преимущество программы: вся структура меню может быть изменена посредством редактирования файла menu.dat. В данном файле структура меню записана со следующим синтаксисом:

<заголовок1>

(<элемент1>[(<элемент1.1>,<элемент1.2>[(<элемент1.2.1>)], ...)], ...)

<заголовок2>

(<элемент1>[(<элемент1.1>,<элемент1.2>[(<элемент1.2.1>)], ...)], ...)

...

то есть вложенность обозначается круглыми скобками.

Навигация по системе меню осуществляется с помощью клавиатуры.

Краткое руководство пользователя.

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

Для перехода в некоторое подменю перейдите к нему (сделайте его активным) и нажмите Enter. Если элемент меню содержит подменю оно откроется, иначе элемент меню будет выполнен, о чем вы узнаете по сообщению.

Из текущего меню можно выйти и перейти в вышестоящее (на дереве структуры) с помощью клавиши Esc. В главном меню Esc – выход из программы.

В программе действуют горячие клавиши: нажатие Alt-W вызовет выполнение элемента Clear.


Внешний вид программы


Строка основного меню программы:


Внешний вид программы с открытыми  подменю:


Исходный текст программы на языке Си

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<graphics.h>

#include<string.h>

#include<io.h>

#define BACK_COL 7

#define FRONT_COL1 1

#define FRONT_COL2 15

#define ACTIVE_COL 4

#define MENU_NUM 5

#define MENU_HEIGHT 20

#define MAX_X 639

#define MAX_Y 479

//-------------------------------------------------

struct menutree{

int numitem;

char caption[10][20];

menutree *submenu[10];

} mainmenu;

//-------------------------------------------------

void draw_main_menu(){

setcolor(FRONT_COL2);

setfillstyle(1,FRONT_COL1);

bar(0,0,MAX_X,MENU_HEIGHT);

rectangle(0,0,MAX_X,MENU_HEIGHT);

for(int i=0;i<MENU_NUM+1;i++)

line(i*(MAX_X/(MENU_NUM*1.0)),0,i*(MAX_X/(MENU_NUM*1.0)),MENU_HEIGHT);

for(i=0;i<MENU_NUM;i++)

    outtextxy(i*(MAX_X/(MENU_NUM*1.0))+5,6,mainmenu.caption[i]);

}

//-------------------------------------------------

void fill_tree(menutree *t,char *str){

int num=0;

for(int i=0;i<(*t).numitem;i++)(*t).submenu[i]=NULL;//consider no submenu

strcpy((*t).caption[num],"");

while(*str!=')'){

    if(*str=='('){

      (*t).submenu[num]=new menutree;

      fill_tree((*t).submenu[num],++str);

      str=strchr(str,')');

      //utilite block

      str++;

      continue;

    }

    if(*str==','){

      num++;

      strcpy((*t).caption[num],"");

      str++;

    }

    strncat((*t).caption[num],str,1);

    str++;

}

(*t).numitem=num+1;

}

//-------------------------------------------------

void input(){

FILE *in;

int num=0;

char str[255];

in=fopen("menu.dat","r");

while(!feof(in)){

    fscanf(in,"%s",str);//input main menu caption

    strcpy(mainmenu.caption[num],str);

    fscanf(in,"%s",str);//input submenu's tree string

    mainmenu.submenu[num]=new menutree;

    fill_tree(mainmenu.submenu[num],&str[1]);

    num++;

}

mainmenu.numitem=num;

fclose(in);

}

//-------------------------------------------------

void move_active(int a,int b){

setcolor(FRONT_COL2);

outtextxy(a*(MAX_X/(MENU_NUM*1.0))+5,6,mainmenu.caption[a]);

setcolor(ACTIVE_COL);

outtextxy(b*(MAX_X/(MENU_NUM*1.0))+5,6,mainmenu.caption[b]);

}

//-------------------------------------------------

void move_active1(menutree *t,int x,int y1,int i1,int y2,int i2){

setcolor(FRONT_COL2);

outtextxy(x+5,y1+6,(*t).caption[i1]);

setcolor(ACTIVE_COL);

outtextxy(x+5,y2+6,(*t).caption[i2]);

}

//-------------------------------------------------

void execute(char *str){

setfillstyle(1,FRONT_COL1);

bar(MAX_X/2-MAX_X/(MENU_NUM*1.0)/2,MAX_Y/2,MAX_X/2+MAX_X/(MENU_NUM*1.0)/2,MAX_Y/2+2*MENU_HEIGHT);

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.