Технические требования для использования
⇐ ПредыдущаяСтр 2 из 2 Для запуска данной программы необходимо наличие персонального компьютера 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|