Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФГБОУ ВПО «СЫКТЫВКАРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
ИНСТИТУТ ТОЧНЫХ НАУК И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ
УТВЕРЖДАЮ
Зав. кафедрой, профессор
___________ В.Л. Никитенков
.09.2012
ОТЧЕТ
об учебной практике
в СыктГУ
в период с 6.07 по 19.07 2012 года
Тема: «Реализация текстового редактора»
Научный руководитель ______________ Н.К.Попова
к.ф.-м.н., доцент 7.09.2012
Исполнитель, студент ______________ Г.О.Стеблецов
гр. 7.09.2012
Сыктывкар 2012
1. ВЫБОР ТЕМЫ 2
2. НАУЧНЫЙ ОБЗОР ЛИТЕРАТУРЫ 2
3. ПОСТРОЕНИЕ МОДЕЛИ 3
4. ВЫБОР И АНАЛИЗ МЕТОДА МОДЕЛИРОВАНИЯ 3
5. ПОСТРОЕНИЕ АЛГОРИТМА 4
6. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ 5
7. АНАЛИЗ И ИНТЕРПРЕТАЦИЯ РЕЗУЛЬТАТОВ 5
8. СПИСОК ЛИТЕРАТУРЫ и ИНТЕРНЕТ ИСТОЧНИКИ 7
9. ПРИЛОЖЕНИЕ 7
Для прохождения учебной практики была выбрана тема «Реализация текстового редактора». Данная тема была выбрана не случайно, так как мне она более интересна и увлекательна, также я захотел более детально разобраться в построении текстового редактора.
Для решения данной задачи я пользовался книгой "Программирование в среде Delphi", авторы Д. Дантеманн, Д. Мишел и Д. Тейлор[1]. Практическое знакомство с Delphi начинается буквально с первой страницы книги, в отличие от других изданий, сопровождаемых обширными введениями. Не вдаваясь слишком глубоко в дебри программирования, очень подробно расписано, где что надо взять, куда поставить, что нажать, а где дописать, чтобы получить на выходе желаемый результат. Изложение построено таким образом, что практические занятия перемежаются с теоретическими выкладками по основам Паскаля. От простых примеров авторы переходят к более сложным. В книге рассмотрены практически все основные направления программирования в Delphi, начиная от простого приложения типа редактора текстовых файлов и кончая базами данных.
Зато книга А. Федорова "Создание Windows-приложений в среде Delphi"[2] как раз претендует на роль справочного руководства. Кратко описывается среда разработки. Дана характеристика компонентов, их свойств, а также основных событий, управляемых ими. Рассмотрено создание прикладных программ, использование графики, принтера, средств обмена данными и т.д.
А также мне очень помог Интернет сайт Delphiexpert.ru.[3] На этом сайте очень хорошо рассматриваются различные примеры решений задач, подробные уроки по тем или иным компонентам Delphi. Также на сайте есть форум, где любой пользователь подскажет как что нужно сделать, как легче реализовать ту или иную задачу, разобраться во многих непонятных моментах.
Задача практической работы состоит в разработке на языке программирования Object Pascal программы текстового редактора, которая должна осуществлять следующие функции:
) Ввод исходного текста в заданный файл;
) Вывод содержимого файла на экран;
) Обработка файла:
a) Создание нового файла;
b) Открытие имеющегося файла;
c) Сохранение файла;
d) Печать документа;
4)Параметры для форматирования:
а) Вырезание;
b) Копирование;
c) Вставка;
d) Выделение содержимого;
e) Изменение шрифтов;
5) Поиск заданной в тексте введённой подстроки;
6) Имена всех файлов задаются пользователем в диалоговом режиме.
Для решения данной задачи я считаю, что необходимо применить метод многофункционального программирования - этот метод основан на разбиении программы на отдельные функциональные модули, которые вызываются из основной программы в процессе её работы.
В основе разработки такой программы лежит нисходящее программирование - т.е. сначала разрабатывается основная программа - в данном случае программа ввода текста на экран, обработки функциональных клавиш и меню, с помощью выбора пунктов которого будет в дальнейшем организовываться её работа. При выборе того или иного пункта меню или нажатии функциональной клавиши будет вызываться одна или несколько подпрограмм, но на начальном этапе разработки программы методом нисходящего программирования вместо этих подпрограмм ставятся "заглушки" - пустые подпрограммы, которые в процессе разработки будут заменяться программами, выполняющими определённую функцию.
1.Открытие программы;
2. Если не выбрано действие, ждем действий пользователя;
. Меню:
3.1. ЕСЛИ выбран пункт «Файл», то предоставляем подменю:
ИНАЧЕ ждем действий пользователя.
ЕСЛИ в подменю выбрали:
а) Создать то создаем новый файл;
б) Открыть то вызываем диалоговое окно открытия файла;
в) Сохранить то сохраняем файл;
г) Сохранить как то вызываем диалоговое окно сохранения;
файла
д) Печать то вызываем диалоговое окно настройки печати;
е) Выход то закрываем программу;
ИНАЧЕ ждем действий пользователя;
3.2. ЕСЛИ выбран пункт «Правка», то предоставляем подменю:
ИНАЧЕ ждем действий пользователя;
ЕСЛИ в подменю выбрали:
а) Вырезать то вырезаем выбранный фрагмент;
б) Копировать то копируем выбранный фрагмент;
г) Вставить то вставляем выбранный фрагмент;
д) Найти то вызываем диалоговое окно поиска и ищем нужное слово;
е) Выделить все то выделяем всё содержимое файла;
ИНАЧЕ ждем действий пользователя;
3.3. ЕСЛИ выбран пункт «Формат» предоставляем подменю «Шрифт», если
выбрано подменю «Шрифт», то вызываем диалоговое окно для изменения
шрифта:
ИНАЧЕ ждем действий пользователя;
4. ЕСЛИ нажата клавиша с буквой, то выводим её в поле текстового редактора, иначе ждем действий пользователя.
5. Закрытие программы.
Программная реализация построенного алгоритма осуществлялась на языке
программирования Object Pascal в среде программирования Borland Delphi.
Так как это наиболее выгодный вариант. Компонент Memo обладает всеми основными качествами текстового редактора.
После запуска программы появляется окно «Новый документ.txt».
Так выглядит внешний вид программы:
Меню «Файл» имеет следующие пункты: Создать, Открыть, Сохранить, Сохранить как, Печать, Выход.
Меню «Правка» имеет следующие пункты: Вырезать, Копировать, Вставить, Найти, Выделить все.
Выбрав подменю «Найти» можно вызвать окно поиска, куда нужно ввести искомое слово и нажать кнопку «Найти».
Результат поиска:
Меню «Справка» содержит информацию о программе.
В ходе выполнения практической работы предоставленная программа была выполнена и работала. Конечно это простой текстовый редактор и у него мало функций по сравнению с MS WORD. Он чем-то похож на простой блокнот.
Единственное его отличие, что он был написан на языке Object Pascal. Язык Object Pascal работал без наладок, был прост в обращении, возникающие ошибки при программировании легко исправлялись. Для меня Object Pascal зарекомендовал себя с лучшей стороны, и я бы порекомендовал его как для начинающих программистов, так и для профессионалов.
. Федоров А. Г. Создание Windows-приложений в среде Delphi. М.: ТОО "Компьютер Пресс", 1995. 287 с.
2. Программирование в среде Delphi: Пер. С англ. /Джефф Дантеманн, Джим Мишел, Дон Тейлор. К.: НИПФ «ДиаСофт Лтд. », 1995. с.
. http://www.delphiexpert.ru/ - Сайт где вы найдете уроки программирования, компоненты и примеры программ написанных на языке программирования Delphi.
Исходный код программы состоит из 4-х частей!
Note.dpr: - файл самого проекта
program Note;
uses
Forms,
NoteForm in 'NoteForm.pas' {Form1},
Spravka in 'Spravka.pas' {Form2},
Find in 'Find.pas' {Form3};
{$R *.res}
begin
Application.Initialize;
Application.Title := 'Текстовый редактор';
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.Run;
end.
NoteForm.pas Файл главной формы
unit NoteForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ToolWin, ComCtrls, Printers;
type
TForm1 = class(TForm)
Menu: TMainMenu;
File1: TMenuItem;
Pravka: TMenuItem;
Format: TMenuItem;
Spravka: TMenuItem;
New: TMenuItem;
Open: TMenuItem;
Save: TMenuItem;
Save_as: TMenuItem;
Print: TMenuItem;
Exit: TMenuItem;
Cut: TMenuItem;
Copy: TMenuItem;
Paste: TMenuItem;
Shrift: TMenuItem;
O_progam: TMenuItem;
Memo: TMemo;
dlgOpen1: TOpenDialog;
dlgSave1: TSaveDialog;
dlgFont1: TFontDialog;
Select_all: TMenuItem;
dlgPnt1: TPrintDialog;
N1: TMenuItem;
procedure O_progamClick(Sender: TObject);
procedure OpenClick(Sender: TObject);
procedure NewClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SaveClick(Sender: TObject);
procedure ShriftClick(Sender: TObject);
procedure ExitClick(Sender: TObject);
procedure CutClick(Sender: TObject);
procedure CopyClick(Sender: TObject);
procedure PasteClick(Sender: TObject);
procedure PrintClick(Sender: TObject);
procedure Save_asClick(Sender: TObject);
procedure Select_allClick(Sender: TObject);
procedure N1Click(Sender: TObject);
private
filename: string;
modified: bool;
public
end;
var
Form1: TForm1;
implementation
uses Spravka, Find;
{$R *.dfm}
procedure TForm1.O_progamClick(Sender: TObject); // вывод информации о программе
begin
form2.show;
end;
procedure TForm1.OpenClick(Sender: TObject); //Открытие документа
begin
dlgOpen1.Execute;
Memo.Lines.LoadFromFile(dlgOpen1.FileName);
Form1.Caption:= dlgOpen1.FileName;
end;
procedure TForm1.NewClick(Sender: TObject); //Создание нового документа
begin
Memo.Text := '';
end;
procedure TForm1.FormCreate(Sender: TObject); //Параметры при старте программы
begin
dlgOpen1.Filter := 'Текстовый документ (*.txt)|*.txt';
dlgOpen1.DefaultExt := '.txt';
Form1.Caption:='Новый документ.txt';
end;
procedure TForm1.SaveClick(Sender: TObject); // Кнопка Сохранение
begin
filename := Form1.Caption;
Memo.Lines.SaveToFile(filename);
end;
procedure TForm1.ShriftClick(Sender: TObject); //Кнопка Шрифт
begin
dlgFont1.Execute;
Memo.Font := dlgFont1.Font;
end;
procedure TForm1.ExitClick(Sender: TObject); //Кнопка Выход
begin
Close;
end;
procedure TForm1.CutClick(Sender: TObject); //Кнопка Вырезать
begin
Memo.CutToClipboard;
end;
procedure TForm1.CopyClick(Sender: TObject); //Кнопка Копировать
begin
Memo.CopyToClipboard;
end;
procedure TForm1.PasteClick(Sender: TObject); //Кнопка Вставить
begin
Memo.PasteFromClipboard;
end;
procedure TForm1.PrintClick(Sender: TObject); //Кнопка Печать
var
sMemo : String;
filename : TextFile;
x : Integer;
begin
dlgPnt1.Execute;
printer.canvas.font := Memo.font;
AssignPrn(filename);
Rewrite(filename);
for x := 0 to Memo.Lines.Count - 1 do
Writeln(filename, Memo.Lines[x]);
CloseFile(filename);
end;
procedure TForm1.Save_asClick(Sender: TObject); //Кнопка Сохранить как
begin
if dlgSave1.Execute then
begin
filename := dlgSave1.FileName;
Case Form1.dlgSave1.FilterIndex of
: filename:=ChangeFileExt(filename,'.txt');
end;
end;
Memo.Lines.SaveToFile(filename);
end;
procedure TForm1.Select_allClick(Sender: TObject); //Кнопка Выделить Все
begin
Memo.SelectAll;
end;
procedure TForm1.N1Click(Sender: TObject); //Кнопка Найти
begin
Form3.Show;
end;
end.
Find.pas Дополнительная форма окна поиска
unit Find;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
btn1: TButton;
edt1: TEdit;
lbl1: TLabel;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses
NoteForm;
{$R *.dfm}
procedure TForm3.btn1Click(Sender: TObject);
var // Объявляем переменные
Find:string; // Искомая строка
i:integer; // Счетчик для цикла
begin
find:=Edt1.Text; // Записываем в find текст из Edit
For i:=0 to Form1.Memo.Lines.Count-1 do // Запускаем цикл поиска строки
If Pos(FIND, Form1.Memo.Lines.Text)<>0
Then
Begin
Form1.Memo.SetFocus();
Form1.Memo.SelStart:=Pos(FIND,Form1.Memo.Lines.Text)-1;
Form1.Memo.SelLength:=Length(FIND);
End;
Close;
end;
end.
Spravka.pas дополнительная форма вывода информации о программе
unit Spravka;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
lbl1: TLabel;
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses
NoteForm;
{$R *.dfm}
procedure TForm2.btn1Click(Sender: TObject);
begin
Close;
end;
end.