каталог статей |
РџРѕРёСЃРє:
пример: сотовые телефоны расширенный поиск
Наука и образование » Информатика » Программа "текстовый редактор"

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

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

Выполнил : студент гр. 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/




Похожие статьи

Путешествуя по TObject. Или как оно работает
Максим ИгнатьевКаждый класс в Delphi является наследником TObject, и, соответственно, обладает всеми его свойствами и методами. Это, несомненно, полезный факт, но каковы его методы и свойства, како...

Вероятностные или статистические законы
Реферат: студента СГЭА факультета  систем управления группы М.О.-1 1 курса Манагарова Р.И. Министерство образования РФСамарская государственная экономическая академияСамара 2002Свое название эти за...

Пополнение знаний интеллектуальных систем на основе казуально-зависимых рассуждений
Важным свойством интеллектуальных систем (ИС) является способность к целенаправленному функционированию в недоопределенных проблемных средах (ПС).Для этого система должна обладать возможностью попо...



Copyright В© 2006-2007 ExcelioN
Правовая информация
Все права защищены
.
Время генерации страницы: 0.040060997009277 сек.