Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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




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

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

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

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

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

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

Описание работы программы

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

Тестирование программы

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

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

 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 <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <string.h>

#include <iostream.h>

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

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;

  ot++;

  n--;

}

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

if (*ot==13) {

  cout<<(char) 13<<(char) 10;

  ot++;

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

} else {

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

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

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

}

y++;

} else {

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

cout<<(char) 13<<(char) 10;

ot++;

y++;

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

}

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

 } while (y<23);

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

 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<lng;n++) cprintf(" ");

 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<(lng-1)) {

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

  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<lng+1;n++) cprintf(" ");

}

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

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<32767)&&((*pr!=13)||(*(pr+1)!=13))) {

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<n;m++) *(a+m)=13;

}

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

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<num;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<20;m++) cprintf("%c",*(pt++));

}

textbackground(3);

textcolor(1);

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

c=getch();

if (!c) c=getch();

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

if (((c-'1')>=0)&&((c-'1')<num)) {

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

k=c-'1';

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

ungetch(13);

} else {

// Анализ

switch(c) {

  // Вверх

  case (72):

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

break;

  // Вниз

  case (80):

if (k<(num-1)) k++; else k=0;

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<(st+32767))&&(*a!=13)) a++;

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

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

n--;

 }

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

 n=0;

 while ((*(a+n)!=13)&&((a+n)<(st+32767))) n++;

 if (n<x) {

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

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<(st+32767))&&(*a!=13)) a++;

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

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

n--;

 }

 n=0;

 while ((*(a+n)!=13)&&((a+n)<(st+32767))) 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<(st+32767))&&(*a!=13)) a++;

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

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

n--;

 }

 n=0;

 while ((*(a+n)!=13)&&((a+n)<(st+32767))) n++;

 if (n<x) x=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<(st+32767))&&(*a!=13)) a++;

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

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

n--;

 }

 n=0;

 while ((*(a+n)!=13)&&((a+n)<(st+32767))) n++;

 if (n<*x) *x=n;

 a+=*x;

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

 do {

a++;

k=1;

for (n=0;n<strlen(b);n++)

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

 } while ((k!=1)&&(a<(st+32767)));

 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<15;n++) cprintf(" ");

 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<14) {

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

  if ((c>='0')&&(c<='9')) {

    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<15;n++) cprintf(" ");

 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<(st+32767))&&(*a!=13)) 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)<(st+32767))) n++;

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

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

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

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

 for (n=0;n<d;n++) add(st,a,0,0,' ');

}

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

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<22) y++;

        else scrs=down(text,scrs);

      break;

    case (77):

      if (x<32767) 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<22) y++; else down(text,scrs);

  x=0;

  break;

// BackSpace

case (8):

  if (x>0) {

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

    x--;

  }

  break;

// Tab

case (9):

  for (n=0;n<(5-(x-x/5));n++) add(text,scrs,x,y,' ');

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

  break;

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

default:

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

  x++;

}

 }

}

ПРИЛОЖЕНИЕ 2

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

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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...