Реферат по предмету "Программирование"


Программа "текстовый редактор"

Программа "текстовый редактор"

Пояснительная записка к курсовой работе по дисциплине
“Основы алгоритмизации и программирования”

Выполнил : студент гр. 96-ВВ3 Курапов А.В.

Пензенский 
государственный технический университет, кафедра   “Вычислительная Техника”

Пенза 1997
Введение

С момента появления первых образцов персональных  компьютеров прошло не так уж и много
времени,но сейчас без них  уже  немыслимо огромное количество областей
человеческой деятельности - экономика , управление , наука , инженерное дело ,
издательское дело , образование , культура и т.д.

Интерес к персональным компьютерам постоянно
растет,а  круг их пользователей
непрерывно  расширяется.В  число 
пользователей ПЭВМ вовлекаются как новички в компьютерном деле,так  и 
специалисты по другим классам ЭВМ.   


Язык С++ - универсальный язык общего назначения,
область приложений которого - программирование систем в самом широком смысле.
Кроме этого, С++ успешно используется как во 
многих  приложениях, так и в
мощных операционных системах. Реализация С++ 
осуществлена для машин в диапазоне от самых простых персональных
компьютеров  до  самых мощных суперкомпьютеров и для  всех операционных систем.
1 Постановка задачи

Задача курсовой работы 
состоит в разработки на языке программирования С++ программы текстового
редактора , которая должна осуществлять следующие функции:

1) Ввод исходного текста в заданный файл;

2) Вывод содержимого файла на экран;

3) Обработка файла: форматирование  текста по заданному образцу методом
центрирования.

Парамерты для форматирования:

а) левый отступ;

b) количество символов в строке;

c) красная строка.

4) Поиск заданной в тексте введённой подстроки , после
поиска выдать запрос : "продолжить или закончить".

5) Cохранение результатов обработки данных.

Имена фсех файлов задаются пользователем в диалоговом
режиме.
2 Метод решения задачи

Анализируя постановку задачи становится ясно , что для
её решения необходимо применить метод многофункционального программирования -
этот метод основан на разбиении программы на отдельные функциональные модули ,
которые вызываются из основной программы в процессе её работы.

В основе разработки такой программы лежит низходящее
программирование - т.е. сначала разрабатывается основная программа - в данном
случае программа ввода текста на экран , обработки функциональных клавиш и меню
, с помощью выбора пунктов которого будет в дальнейшем организовываться её
работа. При выборе того или иного пункта меню или нажатии функциональной
клавиши будет вызываться одна или несколько подпрограмм , но на начальном этапе
разработки программы методом нисходящего программирования вместо этих
подпрограмм ставяться "заглушки" - пустые подпрограммы , которые в
процессе разработки будут заменяться программами , выполняющими определённую
функцию.
3 Описание логического представления данных

Входными данными в программе являются:

Уже существующий текстовый файл - хранится на диске ,
может быть под любым именем , при загрузки имя файла запрашивается программой в
диалоговом режиме , при загрузке имя файла записывается в локальную переменную
типа char - fname (25 символов) , уаказатель на начало текста записывается в
переменную *text , а длина текста в переменную len типа int;

Параметры текста (левый отступ , количество символов в
строке) - можно изменить в процессе работы программы , начальные значения при
загрузки : левый отступ=0 , количество символов=60; Данные хранятся в
переменных основной программы - left , right (int).

Текст , вводимый с клавиатуры хранится в переменной
text типа char , которая в конце работы может быть сохранена в файле , имя
которого задаётся пользователем в диалоговом режиме , имя файла записывается в
локальную переменную типа char - fname (25 символов).

Шаблон для поиска , который вводится пользователем с
клавиатуры хранится в меременной типа char - mascs длинной в 40 символов

Выходными данными в программе являются:

Текст , вводимый с клавиатуры хранится в переменной
text типа char , которая в сохраняется в файле , имя которого задаётся пользователем
с клавиатуры в диалоговом режиме , имя файла записывается в локальную
переменную типа char - fname (25 символов).

Результат поиска по шаблону - координаты курсора x,y
(int) записываются как координаты первого символа найденного по шаблону слова ,
если слово не найденно , то x=0 , y=0.

6 Спецификация на функциональные модули

6.1 Функция output




Строка вызова:





output(scrs,x,y);







Назначение:





Осуществляет вывод на экран
текста и строки подсказки и курсора







Функции:





Вывод текста , указатель на
которого передаётся в строке параметров , вывод нижней строки подсказки ,
вычисление координат курсора на экране и вывод курсора на экран.







Логические


переменные:





*a (char) - указатель на
начало верхней строки


x,ky (int) - позиция
курсора в тексте







Внутренние


переменные:





np (int) - Количество
непечатаемых символов


rx (int) - Реальная
координата курсора на экране


y (int) - Координата Y
вывода


* ot (char) - Временный
указатель


n (int) - Временная
переменная , необходима для вывода строки







Вызывает функции:





нет







Вызывается из:





основной программы.






6.2 Функция sinput




Строка вызова:





SInput(fname,20,21,25); -
Вызывается из load


SInput(fname,20,21,25); -
Вызывается из save


SInput(masks,40,30,25); -
Вызывается из основной программы







Назначение:





Осуществляет ввод строки.







Функции:





Вывод пустой строки ,
установка координат , вывод строки запроса, считывание строки посимвольно с
клавиатуры , выход , если нажата клавиша Enter или Esc , если нажата Esc то
строка не записывается.







Логические


переменные:





*s (char) - указатель на
строку


lng (int) - максимальная
длина


x,y - координаты ввода







Внутренние


переменные:





rs[100] (char) - Временная
строка


n (int) - Счетчик


c (char) - Введённый с
клавиатуры символ







Вызывает функции:





нет







Вызывается из:





load,save,основной
программы.






6.3 Функция load




Строка вызова:





load(text); - Вызывается из
основной программы







Назначение:





Осуществляет загрузку
текста из файла.







Функции:





Запрос имени файла ,
открытие файла с данным именем , чтение в переменную , указатель которой
передаётся в строке параметров , закрытие файла.







Логические


переменные:





*p (char) - указатель на
текст







Внутренние


переменные:





fname[25] (char) - Имя
файла


*f (file) - указатель на
файл







Вызывает функции:





sinput







Вызывается из:





основной программы.






6.4 Функция save




Строка вызова:





save(text); - Вызывается из
основной программы







Назначение:





Осуществляет запись текста
в файл.







Функции:





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







Логические


переменные:





*p (char) - указатель на
текст







Внутренние


переменные:





fname[25] (char) - Имя
файла


*f (file) - указатель на
файл


*pr (char) - временный
указатель







Вызывает функции:





sinput







Вызывается из:





основной программы.






6.5 Функция reset




Строка вызова:





reset(text,32767); -
Вызывается из основной программы







Назначение:





Осуществляет уничтожение
информации.







Функции:





Заполнение кодом перевод
строки переменной , указанной в сторке параметров , на длинну , указанную в
строке параметров.







Логические


переменные:





*a (char) - указатель на
текст


n (int) - количество
символов в тексте







Внутренние


переменные:





m (int) - счётчик







Вызывает функции:





нет







Вызывается из:





основной программы.






6.6 Функция up




Строка вызова:





else scrs=up(text,scrs); -
Вызывается из основной программы







Назначение:





Осуществляет передвижение
указателя на одну строку вверх.







Функции:





Возвращает указатель на
строку , которая выше на одну позицию, чем исходная.







Логические


переменные:





*a (char) - указатель на
текст


*b (char) - указатель на
текущую строку







Внутренние


переменные:





нет







Вызывает функции:





нет







Вызывается из:





основной программы.






6.7 Функция down




Строка вызова:





else scrs=down(text,scrs);
- Вызывается из основной программы







Назначение:





Осуществляет передвижение
указателя на одну строку вниз.







Функции:





Возвращает указатель на
строку , которая ниже на одну позицию, чем исходная.







Логические


переменные:





*a (char) - указатель на
текст


*b (char) - указатель на
текущую строку







Внутренние


переменные:





нет







Вызывает функции:





нет







Вызывается из:





основной программы.






6.8 Функция menu




Строка вызова:





switch (menu(30,5,"
Сохранить файл     "


                         " Считать
файл       "


                         " Ввод
шаблона       "


                         "
Параметры          "


                         " Выход из
программы "


                         "x0"))


Вызывается из основной
программы







Назначение:





Осуществляет вывод и
обработку меню.







Функции:





Вывод меню на экран , опрос
клавиатуры , при нажатии клавиш иправления курсором (вверх , вниз)
перемещение цветового курсора по пунктам меню , выбор определённого пункта
меню при нажатии клавиши с номером пункта меню , при нажатии клавиши Enter
возвращается номер выбранного пункта меню , при нажатии клавиши Esc
возвращается -1.







Логические


переменные:





x,y (int) - координаты
вывода меню на экран.


*сapt (char) - указатель на
текст меню







Внутренние


переменные:





n,m (int) - Счетчики


num (int) - Количество
пунктов


k (int) - Выбранный пункт


pt (char) - Временный
указатель на символ


c (char) - Считанный с
клавиатуры символ







Вызывает функции:





нет







Вызывается из:





основной программы.






6.8 Функция add




Строка вызова:





add(st,a,0,0,' '); -
Вызывается из centr


add(text,scrs,x,y,10);  


add(text,scrs,x,y,13);     Вызывается из основной программы


add(text,scrs,x,y,' ');     


add(text,scrs,x,y,c);     







Назначение:





Осуществляет добавление
символа в текст.







Функции:





Помещение указателя на
начало строки , подсчёт символов в строке , вставка символа в строку.







Логические


переменные:





*st (char) - указатель на
текст


*a (char) - указатель на
текущую строку


x,y (int) - координаты


c (char) - добавляемай
символ







Внутренние


переменные:





n (int) - число символов в
строке


d (int) - счётчик


*p (char) - временный
указатель







Вызывает функции:





нет







Вызывается из:





centr , основной программы.






6.9 Функция end




Строка вызова:





x=end(text,scrs,x,y); -
Вызывается из основной программы.







Назначение:





Осуществляет поиск конца
сироки.







Функции:





Возвращает длину строки.







Логические


переменные:





*st (char) - указатель на
текст


*a (char) - указатель на
текущую строку


x,y (int) - координаты







Внутренние


переменные:





n (int) - число символов в
строке


*p (char) - временный
указатель







Вызывает функции:





нет







Вызывается из:





основной программы.






6.10 Функция del




Строка вызова:





del(st,a,0,0); - Вызывается
из centr.


del(text,scrs,x,y); -
Вызывается из основной программы.


del(text,scrs,x-1,y); -
Вызывается из основной программы.







Назначение:





Осуществляет удаление
символа из текста.







Функции:





Поиск необходимого места в
тексте , удаление символа , если был удалён "перевод строки" и
остался "возврат коретки" либо наоюорот , то удаляется ещё один
символ.







Логические


переменные:





*st (char) - указатель на
текст


*a (char) - указатель на
текущую строку


x,y (int) - координаты







Внутренние


переменные:





n (int) - число символов в
строке


d (int) - счётчик


*p (char) - временный
указатель







Вызывает функции:





нет







Вызывается из:





centr , основной программы.






6.11 Функция find




Строка вызова:





find(text,&scrs,&x,&y,masks);
- Вызывается из основной программы.







Назначение:





Осуществляет поиск
фрагмента в тексте , начиная с текущего положения курсора.







Функции:





Поиск текущего места в
тексте , поиск фрагмента , если фрагмент найден - перемещение курсора.







Логические


переменные:





*st (char) - указатель на
текст


*scrs (char) - указатель на
текущую строку


*x , *y (int) - указатель
на координаты







Внутренние


переменные:





n (int) - число символов в
строке


d (int) - счётчик


k (int) - счётчик


*p (char) - временный
указатель







Вызывает функции:





нет







Вызывается из:





основной программы.






6.12 Функция dinput




Строка вызова:





left=DInput(30,25); -
Вызывается из основной программы.


right=DInput(30,25); -
Вызывается из основной программы.







Назначение:





Осуществляет ввод числа.







Функции:





Вывод строки запроса ,
считывание цифр с клавиатуры , выход , если нажата клавиша Enter или Esc ,
если нажата Esc то число не записывается не записывается. Возвращает
считанное число в формате long.







Логические


переменные:





x , y (int) - координаты
ввода







Внутренние


переменные:





s[100] (char) - временная
строка


rz (long) - cчитанное число


n (int) - счётчик


c (char) - символ







Вызывает функции:





нет







Вызывается из:





основной программы.






6.13 Функция centr




Строка вызова:





centr(text,scrs,y,left,right);
- Вызывается из основной программы.







Назначение:





Осуществляет центровку
текущей строки.







Функции:





Поиск текущего
местоположения , удаление пробелов в начале строки , подсчёт длины строки ,
определение количесва добавляемых пробелов , добавление пробелов.







Логические


переменные:





*st (char) - указатель на
текст


*scrs (char) - указатель на
текущую строку


x , y (int) - координаты


left (int) - левый отступ


right (int) - число
символов в строке







Внутренние


переменные:





n (int) - число символов в
строке


d (int) - счётчик







Вызывает функции:





add , del







Вызывается из:





основной программы.






6.14 Основная программа




Назначение:





Осуществляет опрос
клавиатуры , редактирование текста , вывод меню на экран , обработку пунктов
меню , и функциональных клавиш , вызов функций в соответствии с выбранным
действием.







Функции:





Выделение памяти под текст
, вывод текста на экран , считывание кода нажатой клавиши , анализ
полученного кода и вызов соответствующей функции или выполнение действия.







Внутренние


переменные:





left (int) - левый отступ


right (int) - число
символов в строке


masks (char) - маска для
поиска


*scrs (char) - указатель на
текущую строку


x , y (int) - координаты
курсора


c (char) - введённый с
клавиатуры символ


n (int) - счётчик







Вызывает функции:





output , sinput , load , save , reset , up , down , menu , add , end ,
del , find , dinput , centr .





7 Технические требования для использования

Для запуска данной программы необходимо наличие  персонального компьютера IBM PC/XT c
операционной системой MS-DOS.

Необходимый объем оперативной памяти - 400 Кбайт.

Дла запуска программы необходимо сделать текущем
каталог с программой tr.exe и вызвать её на выполнение.

Программа работает в текстовом режиме 80х25 символов.

Файлы программы , если не указывать дополнительный
путь , будут записываться и считываться из текущего каталога текущего диска.

Управление программой усуществляется с клавиатуры.
8 Описание работы программы

После своей загрузки программа осуществляет оформление
экрана  , вывод в нижнюю часть экрана
строки подсказки , в которой содержется информация о функциональных клавишах.
Пользователь может вводить и редактировать текст , задавать формат текста
(левый отступ , число символов в строке) , центровать нужную строку ,
осуществлять поиск нужной фразы по шаблону , считать необходимый файл с диска ,
записать текст в файл на диске , выйти из прграммы.
9 Тестирование программы

Для полной проверки работоспособности программы
необходимо её протестировать.

План тестирования программы "Текстовый
редактор" состоит в следующем:

 1) Создание
отдельно от программы файла с исходным текстом.

 2) Загрузка
программы tr.exe.

 3) Загрузка
файла test.in.

 4)
Редактирование текста.

5) Изменение параметров строки и центрирование
отдельных строк текста.

6) Создание шаблона для поиска и поиск фразы в
тексте  по этому шаблону.

7) Запись отредактированного текста в файл test.out.

8) Выход из программы.

Исходный тестовый файл test.in содержит в себе
следующий текст:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования
текста
Тестирование программы

Далее в пункте "Результаты работы программы"
приводится распечатка тестирования программы по пунктам плана тестирования и
результатов тестирования.

10 Результаты работы программы

1) Создание отдельно от программы файла с исходным
текстом:

Файл test.in содержит в себе следующий текст:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования
текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

2) Загрузка программы tr.exe:

   ESC - Меню,
F4 - Поиск, Alt-C - центровка       
0     0

3) Загрузка файла test.in:

                            1)  Сохранить файл

                            2)  Считать файл

                            3)  Ввод шаблона

                            4)  Параметры

                            5)  Выход из программы

Введите имя файла: test.in                 а        0    
0

4) Редактирование текста:

Файл для тестирования программы tr.exe

  Эта программа
предназначена для ввода и редактирования текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

   ESC - Меню,
F4 - Поиск, Alt-C - центровка       
0     0

5) Изменение параметров строки и центрирование
отдельных строк текста:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования
текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

                            1)  Сохранить файл

                            2)  Считать файл

                            3)  Ввод шаблона

                            4)  Параметры

                            5)  Выход из программы

Введите левый отступ: иск, A5              а        0    
0

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования
текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

                            1)  Сохранить файл

                            2)  Считать файл

                            3)  Ввод шаблона

                            4)  Параметры

                            5)  Выход из программы

Введите количество символов 40             а        0    
0

Центровка 3 строки:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования
текста

         
ТЕСТИРОВАНИЕ ПРОГРАММЫ

   ESC - Меню,
F4 - Поиск, Alt-C - центровка       
0     3

6) Создание шаблона для поиска и поиск фразы в
тексте  по этому шаблону:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования
текста

         
ТЕСТИРОВАНИЕ ПРОГРАММЫ

                            1)  Сохранить файл

                            2)  Считать файл

                            3)  Ввод шаблона

                            4)  Параметры

                            5)  Выход из программы

Введите шаблон для поиска: текст

эта программа предназначена для ввода и редактирования
текста

         
ТЕСТИРОВАНИЕ ПРОГРАММЫ

   ESC - Меню,
F4 - Поиск, Alt-C - центровка       56    
0

7) Запись отредактированного текста в файл test.out:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования
текста

         
ТЕСТИРОВАНИЕ ПРОГРАММЫ

                            1)  Сохранить файл

                            2)  Считать файл

                            3)  Ввод шаблона

                            4)  Параметры

                            5)  Выход из программы

Введите имя файла: test.out                а        0    
0

8) Выход из программы:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования
текста

         
ТЕСТИРОВАНИЕ ПРОГРАММЫ

                            1)  Сохранить файл

                            2)  Считать файл

                            3)  Ввод шаблона

                            4)  Параметры

                            5)  Выход из программы

   ESC - Меню,
F4 - Поиск, Alt-C - центровка       
0     0
Список литературы

1.Бьярн Страуструп. Язык программирования С++.в двух
частях.  Пер. с англ.
Киев:"ДиаСофт",1993.-296 с.,ил.

2.Корриган Джон Компьютерная графика: Секреты и
решения: Пер с англ. -М.:Энтроп, 1995. - 352 с., ил.

ПРИЛОЖЕНИЕ 1

Распечатка программы

#include

#include


#include


#include


#include


// Указатель на начало текста

char * text;

// Длинна текста

long len;

// Вывод на экран

// Входные данные:

//   Адрес
начала верхней строки

//   Позиция
курсора на ~бесконечном~ по ширине экране (x,y)

void output(char *
a,int x,int ky) {

// Количество непечатаемых символов

 int
np=(x/80)*80;

// Реальная координата курсора на экране

 int rx=x-np;

// Координата Y вывода

 int y;

 char * ot=a;

 clrscr();

 int n;

 y=0;

 do {

// Пропуск непечатаемых символов

   n=np;

   while
((n>0)&&(*ot!=13)) {

     ot++;

     n--;

   }

// Если есть, что печатать на этой строке - печать

   if (*ot!=13)
{

 // Печать
строки

     n=80;

     while
((n>0)&&(*ot!=13)) {

       cout

       ot++;

       n--;

     }

 // Если строка
окнчилась раньше края экрана - перевести строку

     if (*ot==13) {

       cout

       ot++;

       if (*ot==10) ot++;

     } else {

       while (*ot!=13) ot++;

       if (*ot==13) ot++;

       if (*ot==10) ot++;

     }

     y++;

   } else {

 // Если
печатать нечего - перевод строки

    
cout

     ot++;

     y++;

     if
(*ot==10) ot++;

   }

// Пока не распечатаны все строки

 } while
(y

// Вывод подсказки и курсора

 gotoxy(5,25);

 textcolor(14);

 cprintf(

 "ESC -
Меню, F4 - Поиск, Alt-C - центровка    
%4d  %4d     ",x,ky);

 textcolor(15);

 gotoxy(rx+1,ky+1);

}

// Ввод строки

// s - указатель на строку

// lng - Максимальная длинна

// x,y - координаты

void SInput(char *
s,int lng,int x,int y) {

 lng--;

 char
rs[100];         // Временная строка

 strcpy(rs,s);         // Копирование резерва строки

 int n;                // Счетчик

 char c;               // Символ

// Вывод пустой строки

 textbackground(2);

 textcolor(15);

 gotoxy(x,y);

 for (n=0;n

 n=strlen(s);          // Положение курсора

 do {

 // Вывод строки

   gotoxy(x,y);

   cprintf("%s  ",s);

   gotoxy(x+n,y);

   c=getch();          // Считывание символа с клавиатуры

   if
((c!=13)&&(c!=27)&&(c!=8)) {

   // Нажата
символьная клавиша

     if (n

     //
Добавление символа

       s[n+1]=0;

       s[n]=c;

       n++;

     }

   } else {

     if (c==8) {

     // Нажата клавиша BackSpace

       if (n>0) {

         n--;

         s[n]=0;

       }

     }

   }

// Выход, если ESC или ENTER

 } while
((c!=27)&&(c!=13));

 if(c==27)
strcpy(s,rs);       // Восстановление
строки

// Стирание строки

 textbackground(0);

 textcolor(7);

 gotoxy(x,y);

 for (n=0;n

}

// Чтение файла

void load(char * p)
{

 char fname[25];

 fname[0]=0;

 FILE * f;

 gotoxy(1,25);

 printf(" Введите имя файла:                         ");

 SInput(fname,20,21,25);

 f=fopen(fname,"rb");

 len=fread(p,32767,1,f);

 fclose(f);

}

// Запись в файл

void save(char * p)
{

 char fname[25];

 fname[0]=0;

 char * pr;

 pr=p;

 len=0;

 while((len

   len++;

   pr++;

 }

 FILE * f;

 gotoxy(1,25);

 printf(" Введите имя файла:                         ");

 SInput(fname,20,21,25);

 f=fopen(fname,"wb");

 fwrite(p,len,1,f);

 fclose(f);

}

// Уничтожение информации - заполнение кодом
"Перевод строки"

void reset(char *
a,int n) {

 for (int m=0;m

}

// Вверх на строку

char * up(char *
a,char * b) {

 if (a==b) return b;

 b--;

 while ((a!=b)&&(*b!=13)) b--;

 if (a==b) return b;

 if (*b==13) b--;

 if (a==b) return b;

 while ((a!=b)&&(*b!=13)) b--;

 if (*b==13) b++;

 if (*b==10) b++;

 return b;

}

// Вниз на строку

char * down(char *
a,char * b) {

 while (((a+32767)>=b)&&(*b!=13))
b++;

 if (*b==13) b++;

 if (*b==10) b++;

 return b;

}

// Обработка меню

int menu(int x,int
y,char * capt) {

 int n,m;
// Счетчики

 int num; //
Количество пунктов

 int k; //
Выбранный пункт

 char * pt; //
Временный указатель на символ

 char c; //
Считанный с клавиатуры символ

// Вычисляем количество пунктов

 num=strlen(capt)/20;

// Курсор на нулевой элемент

 k=0;

// Бесконечный цикл обработки

 for (;;) {

// Вывод меню

   pt=capt;

   for (n=0;n

     gotoxy(x,y+n);

 // Закраска
пункта, на который указывает курсор

     if (n==k) {

     // Закраска

textbackground(12);

textcolor(14);

     } else {

     // Нормальный

textbackground(3);

textcolor(1);

     }

     cprintf("%d) ",n+1);

     for (m=0;m

   }

   textbackground(3);

   textcolor(1);

 // Опрос клавиатуры

   c=getch();

   if
(!c) c=getch();

 // Проверка, не
нажата ли клавиша с цифрой

   if
(((c-'1')>=0)&&((c-'1')

 //
Установка указателя в зависимости от нажатой цифры

     k=c-'1';

 // Запись в
буфер клавиатуры символа ENTER

     ungetch(13);

   } else {

   // Анализ

     switch(c) {

       // Вверх

       case (72):

  if (k>0) k--; else k=num-1;

  break;

       // Вниз

       case (80):

  if (k

  break;

       // Выход
по ESC - возвращается -1

       case
(27):

  return -1;

       // Выход
по ENTER - возвращается номер пункта

       case
(13): return k;

     }

   }

 }

}

// Добавление символа в текст

void add(char *
st,char * a,int x,int y,char c) {

 int n;

 int d;

 n=y;

 char *
p;

// Перемещение указателя к началу строки

 while (n>0) {

   while ((a

   if (*a==13) a++;

   if (*a==10) a++;

   n--;

 }

// Подсчет символов в строке

 n=0;

 while
((*(a+n)!=13)&&((a+n)

 if
(n

// Если производится вставка в строку

   a=a+n;

   d=x-n;

   p=st+32767;

   while ((p-d)!=a) {

     *p=*(p-d-1);

     p--;

   }

   p=a;

   while (d!=0) {

     *p=' ';

     d--;

     p++;

   }

   *p=c;

 } else {

 // Если
производится добавление к строке не только символа,

 // но и
пробелов до него

   a=a+x;

   p=st+32767;

   while (p!=a) {

     *p=*(p-1);

     p--;

   }

   *a=c;

 }

}

// Поиск конца строки - фактически возвращает длину
строки

int end(char *
st,char * a,int,int y) {

 int n;

 n=y;

 char * p;

 while (n>0) {

   while ((a

   if (*a==13) a++;

   if (*a==10) a++;

   n--;

 }

 n=0;

 while
((*(a+n)!=13)&&((a+n)

 return n;

}

// Удаление символа

void del(char
*st,char * a,int x,int y) {

 int n;

 int d;

 n=y;

 char *
p;

// Поиск необходимого места в тексте

 while (n>0) {

   while ((a

   if (*a==13) a++;

   if (*a==10) a++;

   n--;

 }

 n=0;

 while
((*(a+n)!=13)&&((a+n)

 if (n

 a+=x;

 p=a;

 n=*p;

// Удаление символа

 while (a!=(st+32767))
{

   *a=*(a+1);

   a++;

 }

// Если был удален "Перевод строки" и
остался

// "Возврат каретки" либо наоборот, то
удаляется еще один символ

 if
((*p==13)&&(n==10)||(*p==10)&&(n==13)) {

   while (p!=(st+32767)) {

     *p=*(p+1);

     p++;

   }

 }

}

// Поиск фрагмента в тексте, начиная с текущего
положения курсора

void find(char *
st,char * * scrs,int * x,int * y,char * b) {

 char * a=*scrs;

 int n;

 int k;

 int d;

 n=*y;

 char *
p;

// Поиск текущего места

 while (n>0)
{

   while
((a

   if (*a==13) a++;

   if (*a==10) a++;

   n--;

 }

 n=0;

 while
((*(a+n)!=13)&&((a+n)

 if
(n

 a+=*x;

// Поиск фрагмента

 do {

   a++;

   k=1;

   for (n=0;n

     if (a[n]!=b[n]) k=0;

 } while ((k!=1)&&(a

 if
(k==1) {

 // Если
фрагмент найден - перемещение курсора

   *x=0;

   *y=0;

   while ((*a!=13)&&(a!=st)) {

     a--;

     (*x)++;

   }

   if (*a==13) {

     a++;

     (*x)--;

   }

   if (*a==10) {

     a++;

     (*x)--;

   }

   *scrs=a;

 }

}

// Ввод числа

// x,y - координаты

long DInput(int
x,int y) {

 char
s[100];         // Временная строка

 char *stpe;

 long rz;

 s[0]=0;

 int n;                // Счетчик

 char
c;               // Символ

// Вывод пустой строки

 textbackground(2);

 textcolor(15);

 gotoxy(x,y);

 for (n=0;n

 n=strlen(s);          // Положение курсора

 do {

 // Вывод строки

   gotoxy(x,y);

   cprintf("%s  ",s);

   gotoxy(x+n,y);

   c=getch();          // Считывание символа с клавиатуры

   if
((c!=13)&&(c!=27)&&(c!=8)) {

   // Нажата
символьная клавиша

     if
(n

     //
Добавление цифры

       if
((c>='0')&&(c

         s[n+1]=0;

         s[n]=c;

         n++;

       }

     }

   } else {

     if (c==8) {

     // Нажата клавиша BackSpace

       if (n>0) {

         n--;

         s[n]=0;

       }

     }

   }

// Выход, если ESC или ENTER

 } while ((c!=27)&&(c!=13));

 if(c==27) return 0;

// Стирание строки

 textbackground(0);

 textcolor(7);

 gotoxy(x,y);

 for (n=0;n

 sscanf(s,"%ld",&rz);

 return rz;

}

// Центровка текущей строки

void centr(char
*st,char * a,int y,int left,int right) {

 int n;

 int d;

 n=y;

// Поиск текущего местоположения

 while (n>0)
{

   while
((a

   if (*a==13)
a++;

   if (*a==10)
a++;

   n--;

 }

// Удаление пробелов в начале строки

 while
((*a==32)&&(!((*a==13)||(a==(st+32767))))) del(st,a,0,0);

// Подсчет длины строки

 n=0;

 while
((*(a+n)!=13)&&((a+n)

// Определение количества добавляемых пробелов

 if
((n>(right-left))||(n==0)) return;

 d=left+((right-left)-n)/2;

// Добавление пробелов

 for
(n=0;n

}

// Основная программа

void main() {

// Границы текста

 int left=0;

 int
right=60;

// Маска для поиска

 char masks[40];

 masks[0]=0;

// Положение курсора

 char * scrs;

 int x,y;

 char c;

 int n;

// Выделение памяти под текст

 text=new
char[32767];

 len=0;

 reset(text,32767);

 scrs=text;

 x=0;y=0;

// Цикл обработки данных

 for (;;) {

   textbackground(1);

   textcolor(15);

 // Вывод данных на экран

   output(scrs,x,y);

 //
Считывание символа

   c=getch();

 // Обработка

   switch (c) {

     case (27):

   // Вывод меню

       switch
(menu(30,5," Сохранить файл    
"

                         " Считать файл       "

                         " Ввод
шаблона       "

                         " Параметры          "

                         " Выход из
программы "

                         "x0")) {

         case
(0):

           save(text);

           break;

         case (1):

           reset(text,32767);

           load(text);

           break;

         case (2):

           gotoxy(1,25);

           printf("
Введите шаблон для поиска: ");

           SInput(masks,40,30,25);

           break;

         case (3):

           gotoxy(1,25);

           printf("
Введите левый отступ: ");

          
left=DInput(30,25);

          
gotoxy(1,25);

          
printf(" Введите количество символов в строке: ");

           right=DInput(30,25);

           break;

         case (4):

           textbackground(0);

           textcolor(7);

           clrscr();

           return;

       }

       break;

     case (0):

   //
Расширенный код - считывание значащей части

      
c=getch();

     // обработка

       switch(c) {

       // Alt-C

         case (46):

           centr(text,scrs,y,left,right);

           break;

       // F4

         case (62):

          
find(text,&scrs,&x,&y,masks);

           break;

       // Home

         case (71):

           x=0;

           break;

       // End

         case (79):

           x=end(text,scrs,x,y);

           break;

       // Delete

         case (83):

           del(text,scrs,x,y);

           break;

       //
Стрелки перемещения курсора

         case
(72):

           if (y>0) y--;

             else scrs=up(text,scrs);

           break;

         case (80):

           if (y

             else scrs=down(text,scrs);

           break;

         case (77):

           if (x

           break;

         case (75):

           if (x>0) x--;

           break;

       }

       break;

   // Enter

     case (13):

       add(text,scrs,x,y,10);

       add(text,scrs,x,y,13);

       if (y

       x=0;

       break;

   // BackSpace

     case (8):

       if (x>0) {

         del(text,scrs,x-1,y);

         x--;

       }

       break;

   // Tab

     case (9):

       for (n=0;n

       x=x+(5-(x-x/5));

       break;

   // Остальные символы

     default:

       add(text,scrs,x,y,c);

       x++;

   }

 }

}

ПРИЛОЖЕНИЕ 2

Алгоритм работы программы

Для подготовки данной работы были использованы
материалы с сайта http://kurslab.chat.ru/


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат William James Essay Research Paper William James
Реферат Маркетинговое исследование предприятия автосервиса в условиях усиления конкуренции
Реферат Inferno By Dante Essay Research Paper Although
Реферат Women Pioneers Essay Research Paper A Journey
Реферат педагогічний досвід роботи по проведенню і підготовці свят в спеціальних установах для дітей з порушеним слухом
Реферат Структура і склад по САПР
Реферат Технико-экономическое обоснование совершенствования информационной системы бюджетной организации
Реферат Товароведная характеристика ассортимента и потребительских свойств мясных консервов
Реферат Пословицы советского народа
Реферат О недостатках правового регулирования отношений по финансовой аренде лизингу
Реферат Возможности радиолокационного тренажера NMS-90 и его использование для решения задач расхождения
Реферат Проблема учета и аудита операций по ценнам бумагам ( в Азербайджане)
Реферат Професійна підтримка супервізія в соціальній роботі
Реферат Михаил Константинович Сидоров - видный общественный деятель Сибири
Реферат Поддержание пластового давления на примере Западно-Лениногорской площади Ромашкинского месторождения