- •Приложение 1. Некоторые полезные примеры и иллюстрации к разделам конспекта
- •Примеры к разделу 5 Вычисление факториала числа
- •Быстрое возведение чисел в целую степень
- •Нахождение наибольшего общего делителя (алгоритм Евклида)
- •Примеры к разделу 7 Библиотека функций случайных чисел
- •Библиотека функций по работе с массивами общего назначения
- •Библиотека функций сортировки массивов
- •Библиотека функций поиска в массивах
- •Приложение 2. Функции стандартного ввода/вывода в стиле c (printf, scanf) Автор: Бардин п.Б. Введение
- •Функция стандартного вывода printf()
- •Int printf(char *управляющая строка, ...);
- •Примеры программ.
- •Функция стандартного ввода scanf()
- •Int scanf(char *управляющая строка);
- •Int scanf(char *управляющая строка);
- •Примеры программ.
- •Приложение 3. Библиотека консольного ввода-вывода
- •Приложение 4. Библиотека управления консолью (MyCrt.H)
- •Приложение 5. Библиотека Menu.H и пример ее использования Библиотека Menu.H
- •Пример использования библиотеки Menu.H
Приложение 5. Библиотека Menu.H и пример ее использования Библиотека Menu.H
#include "MyCrt.h"
#include <string.h>
using namespace std;
#pragma once;
struct sMenu {
// Количество команд NumberComands <= 20; Текст команды <= 60 символов
int NormAttr; // Цвет не выбранного элемента меню
int ActiveAttr; // Цвет выбранного элемента меню
int SelectedComand; // Номер выбранного элемента меню (от 1 до NumberComands)
int NumberComands; // Количество элементов меню
wchar_t Comands[20][61]; // Тексты элементов меню
int X; // Положение меню на экране
int Y; // Положение меню на экране
};
int ComandMaxLen(sMenu &M)
// Возвращает длину самой длинной команды меню
{
size_t Max = wcslen(M.Comands[0]);
for (int i = 1; i < M.NumberComands; ++i)
if (wcslen(M.Comands[i]) > Max)
Max = wcslen(M.Comands[i]);
return Max;
}
void SetActiveComand(sMenu &M, short ActCom)
// Выделяет в меню выбранную команду
{
int CL = ComandMaxLen(M);
ChangeTextAttribute(M.NormAttr, M.X, M.Y + M.SelectedComand - 1, CL);
ChangeTextAttribute(M.ActiveAttr, M.X, M.Y + ActCom - 1, CL);
GoToXY(M.X + CL, M.Y + ActCom - 1);
M.SelectedComand = ActCom;
}
void DisplayMenu(sMenu &M, int X, int Y )
// Выводит меню на экран
{
M.X = X;
M.Y = Y;
for (int i = 0; i < M.NumberComands; ++i)
{
GoToXY(X, Y + i);
wcout << M.Comands[i] << endl;
}
SetActiveComand(M, M.SelectedComand);
}
int MenuNavigator(sMenu &M, int X, int Y, wchar_t &c)
// Осуществляет перемещение по меню и возвращает номер выбранной команды.
// Параметр "с" соответствует коду клавиши, с помощью которой была выбрана команда
{
CursorVisible(false);
DisplayMenu(M, X, Y);
do
{
if (!ReadKey(c))
{
if (c == 72) // Up
if (M.SelectedComand > 1)
SetActiveComand(M, M.SelectedComand - 1);
else
SetActiveComand(M, M.NumberComands);
if (c == 80) // Dn
if (M.SelectedComand < M.NumberComands)
SetActiveComand(M, M.SelectedComand + 1);
else
SetActiveComand(M, 1);
}
}
while (c != 27 && c != 13);
CursorVisible(true);
return M.SelectedComand;
}
int MenuChoice(sMenu &M, int X, int Y, wchar_t &c)
// Чистит экран и выводит меню в точку (X, Y)
{
ClrScr();
return MenuNavigator(M, X, Y, c);
}
int MenuChoice(sMenu &M, wchar_t &c)
{
// Экран не чистится. Выводит меню в точку, где находится курсор
return MenuNavigator(M, WhereX(), WhereY(), c);
}
Пример использования библиотеки Menu.H
// MenuExample.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <MyCrt.h>
#include <Menu.h>
using namespace std;
void InitMenu(sMenu &M)
{
sMenu B = {
0x9F, // Цвет не выбранного элемента меню
0x70, // Цвет выбранного элемента меню
1, // Начальный номер выбранного элемента меню
7, // Количество элементов меню
// Тексты элементов меню:
L" Команда 1 ",
L" Команда 2 ",
L" Команда 3 ",
L" Команда 4 ",
L" Команда 5 ",
L" Команда 6 ",
L" Выход "
};
M = B;
}
void InitMenu1(sMenu &M)
{
sMenu B = {
0x9F, // Цвет не выбранного элемента меню
0x70, // Цвет выбранного элемента меню
1, // Начальный номер выбранного элемента меню
2, // Количество элементов меню
// Тексты элементов меню:
L" Команда 31 ",
L" Команда 32 ",
};
M = B;
}
void ComandExecute1(int Com, wchar_t c)
{
switch (Com)
{
case 1: ;
case 2: ;
ClrScr();
cout << 3 << Com << " " << c << endl;
_getwch();
break;
}
}
void ComandExecute(int Com, wchar_t c)
{
switch (Com)
{
case 1: ;
case 2: ;
case 4: ;
case 5: ;
case 6: ;
case 7:
ClrScr();
cout << Com << " " << c << endl;
_getwch();
break;
case 3:
sMenu M1;
InitMenu1(M1);
cout << "->";
Com = MenuChoice(M1, c);
if (c != 27)
ComandExecute1(Com, c);
break;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale (LC_ALL, ".866");
ConSize(80, 25);
ScrSize(80, 25);
TextColor(0x9F);
ClrScr();
sMenu M;
InitMenu(M);
wchar_t c;
int Key;
do
{
Key = MenuChoice(M, 20, 5, c);
if (c != 27)
ComandExecute(Key, c);
}
while (Key != 7);
return 0;
}