Программирование и комп-ры

Создание текстового редактора в Turbo Pascal


                         Министерство энергетики РФ
                       Уфимский Энергетический Колледж



                                       Специальность 2202



                               Курсовая работа

                по Основам алгоритмизации и программирования
                   на тему “Создание текстового редактора”



Выполнил:    студент группы  2 – АС – 3   ____________ Тимофеев Т.П.
Проверил:
____________ Ганиев А.Э.



                                Уфа – 2001г.

                                 Содержание


1. Задание ……………………………………………………… стр. 3
2. Описание программы ………………………………………. стр. 4
3. Листинг ……………………………………………………… стр. 5
   1. Исходный текст программы .…………………………. стр. 5
   2. Текст модуля ……………….………………………….. стр.10
4. Заключение ………………………………………………….. стр.18
5. Список использованной литературы ……………………… стр.19
                                  Задание.

       Создать программу, обеспечивающую:
1. Cоздание файлов.
2. Переименование файлов.
3. Удаление файлов.
4. Копирование файла в другой файл.
5. Открытие файла для просмотра.
       Программа должна быть написана на Turbo Pascal в текстовом  режиме  с
использованием  любых  модулей,  которые  необходимы   для   её   реализации
(допускаются также модули пользователя).
                             Описание программы.

       Timofeev Word v.1.0 – это  программа  для  работы  с  текстом.  С  её
помощью можно создавать,  удалять,  переименовывать,  открывать,  копировать
файлы друг в друга.  Конечно,  всё  это  можно  проделать  и  в  MS-DOS,  но
преимущество этой программы в том, что все эти  команды  тщательно  спрятаны
под красивым и дружественным интерфейсом моей программы.
       Так как в программе Timofeev Word  v.1.0  много  процедур,  я  создал
собственный модуль Tim.tpu, куда их (процедуры) и отправил.
       Процедуры:
1. Table – рисует оболочку программы.
2. Enter_Sandman – происходит проигрывание музыки на песню группы  Metallica
   - “Enter Sandman”. Я не стал делать так,  чтобы  при  нажатии  какой-либо
   клавиши она прекращала играть, потому что  для  меня  (не  знаю  как  для
   других) это свято.
3.  Menu  –  эта  процедура  вызывает  меню,  где  содержится  информация  о
   программе и помощь (если её так можно назвать).
4. Keys – процедура, считывающая код нажатой клавиши.
       В этой программе, конечно много недоработок, но я надеюсь, что вскоре
появятся дополненные версии 1.2, 1.3, 2.0,2.1,……, n.m.
       Эта  программа  может  использоваться  в  о-о-о-о-о-очень   маленьких
офисах, которые не имеют возможности  приобрести  качественный  лицензионный
продукт, к примеру Microsoft Office’9x, ’2000 (если кто-то имеет на  примете
такой  офис,  я  с  удовольствием  продам,  за  символическую   цену,   свой
программный  продукт). Также программа  может  использоваться  для  обучения
детей в детских садах работе на персональных  компьютерах.  И,  наконец,  ей
могут воспользоваться студенты I курса для сдачи её как Курсовой  работы  на
следующем курсе.
                                  Листинг.
                          Исходный текст программы.
Program Redaktor;
  Uses Crt,Tim; {использовать модули Crt и Tim}
  Label b; {метка}
  Var  {тело}
    Programname,Cmdline:string;
    nn,i,x,y:integer;
    f1,f1_new:text;
    Name,New_name:string[12];
    txt,text:string;
    ch:char;
begin
  i:=1;
  textbackground(red);
  clrscr;
 textcolor(yellow);
 gotoxy(22,10);
 writeln('Текстовый процессор Timofeev Word');
 gotoxy(22,11);
 writeln('      Версия 1.0 (2001 год)');
 gotoxy(40,15);
 writeln('Составил Тимофеев Тимур (2-АС-3)');
 textcolor(green);
 gotoxy(40,16);
 writeln('Все права защищены.');
 gotoxy(40,17);
 writeln('Незаконное копирование');
 gotoxy(40,18);
 writeln('или подделка без согласия автора');
 gotoxy(40,19);
 writeln('преследуется по понятиям !!!');
 delay(5000);
 textcolor(yellow);
 table;
 gotoxy(2,21);
 write('Введите имя:');
 readln(name);
 assign(f1,name);
 rewrite(f1);
 gotoxy(2,21);
 write('Вводите текст !!!          ');
 gotoxy(1,2);
      repeat
      write(chr(179),':>');
      readln(txt);
      writeln(f1,txt);
    until txt='';
  close(f1);
  gotoxy(2,21);
  writeln('Ввод окончен, нажмите чего-нибудь ...');
    repeat
      readkey;
      keys(nn);
      case nn of {определяет нажатие функциональных клавиш}
        59:menu; {F1}
        60:begin {F2}
    table;
    gotoxy(2,21);
    write('                                      ');
    gotoxy(2,21);
    write('Введите имя:');
    readln(name);
    assign(f1,name);
    rewrite(f1);
    gotoxy(2,21);
    write('Вводите текст !!!          ');
    gotoxy(1,2);
          repeat
       write(chr(179),':>');
       readln(txt);
       writeln(f1,txt);
      until txt='';
        close(f1);
        gotoxy(2,21);
        writeln('Ввод окончен, нажмите чего-нибудь ...');
        end;
    61:begin  {F3}
    gotoxy(2,21);
    write('Введите имя файла, в который копир-я файл ',name,'->');
    readln(new_name);
    reset(f1);
    assign(f1_new,new_name);
    append(f1_new);
      while not eof(f1) do
        begin
          readln(f1,txt);
          writeln(f1_new,txt);
        end;
    close(f1);
    close(f1_new);
    gotoxy(2,21);
    writeln('Файл ',name,' скопирован в ',new_name,' нажмите
    чего-нибудь ...');
    end;
    62:begin {F4}
    gotoxy(2,21);
    write('                                       ');
    gotoxy(2,21);
    write('Введите новое имя файла:');
    readln(new_name);
    assign(f1,name);
    rename(f1,new_name);
    gotoxy(2,21);
    writeln('Файл ',name,' перименован в ',new_name,' нажмите
    чего-нибудь ... ');
    end;
    63:begin  {F5}
    erase(f1);
    gotoxy(2,21);
    writeln('Файл ',name,' удалён с диска, нажмите чего-нибудь ...');
    end;
    64:begin     {F6}
    {$I-}
          repeat
        gotoxy(2,21);
        write('Введите имя файла для считывания текста ->');
        readln(name);
        assign(f1,name);
        reset(f1);
              if ioresult<>0 then
          begin
          gotoxy(2,21);
          writeln('Файл не найден ...                       ');
          close(f1);
          end;
          until ioresult=0;
    {$I+}
    table;
    gotoxy(1,2);
      while not eof(f1) do
        begin
        readln(f1,txt);
        writeln(chr(179),txt);
        end;
    close(f1);
    gotoxy(2,21);
    write('Файл считан, нажмите чего-нибудь ...             ');
    end;
    68:goto b;   {F10} {Происходит выход на метку}
    end;
  until i<0;   {считывай функциональные клавиши пока i<0,
                      а т.к. i=1 и не изменяется, то этот процесс
бесконечен}
b:end.

                                Текст модуля.
Unit Tim;

Interface

Uses Crt,Dos;
Procedure keys(var n:integer);
Procedure table;
Procedure Enter_sandman;
Procedure menu;

Implementation

Procedure keys(var n:integer);{процедура нажатия клавиши}
var c:char;
begin
  if keypressed then
    begin
    c:=readkey;
       if c=#0 then c:=readkey;
    n:=ord(c);
    end;
end;

Procedure Enter_sandman; {музыка}
Const
  m:array [1..6] of integer=(165,330,392,233,220,330);
  t:array [1..6] of integer=(1100,600,600,600,1100,600);
  e:array [1..7] of integer=(165,165,165,165,165,165,170);
  r:array [1..7] of integer=(600,600,600,600,600,600,1100);
  w:array [1..5] of integer=(167,167,167,294,233);
  q:array [1..5] of integer=(1100,600,600,600,1100);
  o:array [1..9] of integer=(165,182,165,182,165,196,165,182,165);
  b:array [1..9] of integer=(600,1100,600,600,600,600,600,600,3000);
  var a,u,z,x:integer; i:byte;
begin
  for a:=1 to 4 do
    begin
       for i:=1 to 6 do
          begin
         sound(m[i]);
         delay(t[i]);
         nosound;
       end;
   end;
     for u:=1 to 3 do
        begin
           for i:=1 to 7 do
              begin
          sound(e[i]);
          delay(r[i]);
          nosound;
          end;
        end;
     for z:=1 to 3 do
        begin
           for i:=1 to 5 do
              begin
          sound(w[i]);
          delay(q[i]);
          nosound;
          end;
       end;
     for i:=1 to 9 do
        begin
      sound(o[i]);
      delay(b[i]);
      nosound;
      end;
end;

Procedure table; {рисует таблицу}
  var
  w,h:integer;
  c1,c2,c3,c4,c7,c5,c6,c8,c9,c10:char;
begin
  textbackground(blue);
  clrscr;
  textcolor(yellow);
 w:=1;
 h:=1;
 c1:=chr(218);
 c2:=chr(196);
 c3:=chr(191);
 c4:=chr(179);
 c5:=chr(192);
 c6:=chr(217);
 c7:=chr(195);
 c8:=chr(180);
 c9:=chr(193);
 c10:=chr(194);
      for h:=2 to 25 do
         begin
      gotoxy(w,h);
      write(c4);
      end;
 gotoxy(w,h);
 write(c5);
   for w:=2 to 79 do
      begin
      gotoxy(w,h);
      write(c2);
      end;
 gotoxy(w,h);
 write(c6);
   for h:=24 downto 1 do
      begin
      gotoxy(w,h);
      write(c4);
      end;
 gotoxy(w,h);
 write(c3);
   for w:=78 downto 1 do
      begin
      gotoxy(w,h);
      write(c2);
      end;
 gotoxy(w,h);
 write(c1);
 gotoxy(1,20);
 write(c7);
   for w:=2 to 59 do
      begin
      gotoxy(w,20);
      write(c2);
      end;
 gotoxy(w,1);
 write(c10);
   for h:=2 to 24 do
      begin
      gotoxy(w,h);
      write(chr(179));
      end;
 gotoxy(w,20);
 write(c8);
 gotoxy(59,25);
 write(c9);
 gotoxy(62,4);
 writeln('F1-Помошь');
 gotoxy(62,5);
 writeln('F2-Новый');
 gotoxy(62,6);
 writeln('F3-Копировать');
 gotoxy(62,7);
 writeln('F4-Переименовать');
 gotoxy(62,8);
 writeln('F5-Удалить');
 gotoxy(62,9);
 writeln('F6-Просмотреть');
 gotoxy(62,10);
 writeln('F10-Выход');
end;

Procedure menu;
Const
     NORM=$17;{ цвет невыделеного пункта }
     SEL=$70;{ цвет выделенного пункта }
     N=3;
var
     menu:array[1..N] of string[12];{ названия пунктов меню }
     punkt:integer;{ номер выделенного пункта }
     ch:char;{ введенный символ }
     x,y,i:integer;{ координаты первой строки меню }

Procedure punkt1;
begin
     ClrScr;
     writeln('Выполнил студент гр. 2-АС-3 Тимофеев Т.П. (2001 г.)');
     writeln('Курсовая работа-а-а-а-а-а-а-а !!!!!!!!!!!!!!!!!');
     readln;
end;

Procedure punkt2;
begin
     ClrScr;
     writeln('Тута всё понятно даже ребёнку.');
     readln;
end;


Procedure MenuToScr;{ вывод меню на экран }
var i:integer;
begin
     ClrScr;
     for i:=1 to N do begin
          GoToXY(x,y+i-1);
          write(menu[i]);
     end;
     TextAttr:=SEL;
     GoToXY(x,y+punkt-1);
     write(menu[punkt]);{ выделим строку меню }
     TextAttr:=NORM;
end;
begin
     menu[1]:=' О программе ';
     menu[2]:=' Помощь      ';
     menu[3]:=' Выход       ';
     punkt:=1;
     x:=5;
     y:=5; TextAttr:=NORM;
     MenuToScr;
     repeat
          ch:=ReadKey;
          if ch=char(0) then begin
               ch:=ReadKey;
               case ch of
                    chr(80):{ стрелка вниз }
                         if punkt1 then begin
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              punkt:=punkt-1;
                              TextAttr:=SEl;
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              TextAttr:=NORM;
                         end;
                 end;
              end
          else
               if ch=chr(13) then begin { нажата клавиша  }
                    case punkt of
                         1:punkt1;
                         2:punkt2;
                         3:i:=2;{ выход }
                    end;
                    MenuToScr;
               end;
     until i=2;
end;
end.
                                 Заключение.



       В результате проделанной работы я написал прекрасную программу  за  4
часа свободного от учёбы времени практически без помощи литературы и  других
источников.

Программа основана на стандартных процедурах и функциях модуля Crt: Rename,
Erase, Append, Rewrite, Reset, Assign и др.

                      Список использованной литературы.


1. Попов В.Б. “Turbo Pascal для школьников”:
          Учеб.пособие. – 3-е доп. изд. – М.: Финансы и статистика, 2001г.
2. Вирт Н. “Алгоритмы и структуры данных”:
          Пер. с англ. – М.: Мир, 1989г.
3. Прайс Д. “Программирование на языке Паскаль: Практическое руководство”.
          Пер. с англ. – М.: Мир, 1987г.




смотреть на рефераты похожие на "Создание текстового редактора в Turbo Pascal "