Міністерство освіти і науки України
Технічний коледж Тернопільського Національного
технічного університету ім. Івана Пулюя
Курсова работа
Тема: Текстовий редактор з обробкою математичних формул
Зміст
Зміст………………………………………………………………………………2
Вступ……………………………………………………………………………....3
1. Розрахункова частина………………………………………………………..4
1.1. Завдання на курсову роботу…………………………………………… 4
1.2. Вимоги до програми…………………………………………………….. 4
1.2.1. Вимоги до функціональних характеристик програми…………… 4
1.2.2. Вимоги до надійності…………………………………………………5
1.2.3. Вимоги до умов експлуатації…………………………………………5
1.2.4. Вимоги до сумісності…………………………………………………5
1.3. Вимоги до складу і параметрів технічних засобів ЕОМ………………. 5
1.4. Інформаційне забезпечення задачі………………………………………. 6
1.4.1. Опис вхідних даних……………………………………………………6
1.4.2. Опис нормативно-довідкових даних…………………………………6
1.4.3. Опис вихідних даних………………………………………………...6
1.5. Характеристика операційної системи……………………………………6
1.6. Характеристика мови програмування……………………………………7
2. Описова частина………………………………………………………………. 7
2.1. Алгоритм розв'язання задачі……………………………………………7
2.2. Керівництво програміста…………………………………………………7
2.2.1. Змінні, що застосовуються в програмі………………………………8
2.2.2. Процедури і функції програми………………………………………8
2.2.3. Схема взаємозв'язку програмних модулів…………………………9
2.3. Керівництво користувача………………………………………………10
2.4. Контрольний приклад……………………………………………………12
ВИСНОВОК………………………………………………………………….... 14
СПИСОК ЛІТЕРАТУРИ………………………………………………………. 15
Додаток 1. Текст програми…………………………………………………… 16
Вступ
В даний час для розробки програмних продуктів для платформи Windows застосовуються різні середовища розробки - як візуальні, так і невізуальні. Середовища візуальної розробки відрізняються більш швидким і наочним для програміста створенням інтерфейсної частини програми, обробників подій і т.д. У той же час програми, розроблені за допомогою невізуальних засобів мають менший обсяг, більшу швидкодію за рахунок відсутнього в них зайвого коду, створюваного засобами візуального програмування. Однак для розробки таких програм потрібні великі витрати часу на розробку і більш глибоке знання мови програмування і операційної системи програмістом, так як багато дій доводиться виконувати «вручну».
У зв'язку з цим вибір середовища розробки лежить на програмістові і залежить від вимог до розробляємого програмного продукту. Так як оптимізація по швидкодії і обсягом програми в даному випадку не є критичною, а більш важливою була простота і наочність розробки, то було обрано середовище візуального програмування Borland C ++ Builder 6. Даний вибір обумовлений тим, що мовою програмування в ньому є C++, яка є об'єктно-орієнтованою, що відповідає сучасним вимогам до мови розробки програмного продукту, а також є необхідні візуальні компоненти для побудови інтерфейсу і підтримує технологію зв'язування та впровадження об'єктів в інші документи (OLE).
1. Розрахункова частина
1.1. Завдання на курсову роботу
Найменування програми - «Текстовий редактор з обробкою математичних формул»
Підстава для розробки - виконання курсової роботи відповідно до навчального плану.
Призначення розробки - створення текстового редактора (аналогічного програмі «блокнот») з підтримкою введення і редагування математичних виразів (формул).
Вхідні дані для роботи програми. Програма повинна:
1. забезпечувати можливість введення і редагування тексту;
2. забезпечувати збереження і відкриття текстових файлів;
3. вести історію відкритих файлів;
4. забезпечувати введення і редагування математичних формул;
1.2. Вимоги до програми
1.2.1. Вимоги до функціональних характеристик програми.
Програма повинна забезпечувати підтримку наступних можливостей обробки інформації:
1. забезпечувати можливість введення і редагування тексту;
2. забезпечувати збереження і відкриття текстових файлів;
3. вести історію відкритих файлів;
4. забезпечувати введення і редагування математичних формул;
5. забезпечувати роботу з буфером обміну;
6. забезпечувати можливість вибору накреслення і розміру тексту.
Програма повинна підтримувати інтерфейс користувача на основі меню, орієнтованого на використання як миші, так і клавіатури.
1.2.2. Вимоги до надійності
Програма повинна надійно функціонувати при неправильних діях користувача.
Виникнення перерахованих помилок не повинно призводити до втрати інформації в редагованому файлі.
Програма повинна бути розрахована на експлуатацію користувачами, які не мають спеціальної підготовки в галузі програмного забезпечення ЕОМ.
1.2.3. Вимоги до умов експлуатації
Програма призначена для роботи одного користувача. У разі виявлення неполадок слід звертатися до розробника програми або системного адміністратора. Система повинна експлуатуватися в умовах прийнятих для експлуатації технічних засобів:
• температура навколишнього середовища (не вище 30 ° С);
• відстань між комп'ютерами (близько 3 м).
1.2.4. Вимоги до сумісності
Для роботи програми необхідна наявність операційної системи Windows версій XР / Vista / 7.
Для модифікації програми необхідне середовище розробки Borland
С ++ Builder 6 з встановленим пакетом додаткових компонентів RxLib весрсіі 2.75.
Для забезпечення роботи редактора формул необхідно наявність встановленого в системі редактора Microsoft Equation 3.0.
1.3. Вимоги до складу і параметрів технічних засобів ЕОМ
До складу технічних засобів повинен входити IВМ-сумісний персональний комп'ютер (ПЕОМ) з процесором тактовою частотою не нижче 1700 МГц, що має від 512 Мбайт оперативної пам'яті і операційну систему типу WINDOWS версій ХР /Vista / 7.
1.4. Інформаційне забезпечення задачі
1.4.1. Опис вхідних даних
Вхідними даними програми є інформація, що вводиться користувачем з клавіатури при створенні текстового документа.
1.4.2. Опис нормативно-довідкових даних
Нормативно-довідкові дані в програмі не передбачено.
1.4.3. Опис вихідних даних
Вихідними даними програми є документ у форматі Rich Text Format (RTF), що містить введену користувачем текстову інформацію з інтегрованими математичними виразами у форматі Microsoft Еquation 3.0.
1.5. Характеристика операційної системи
В якості операційної системи обрана Windows XP, так як дана ОС:
• має широке поширення;
• має зручний, інтуїтивно-зрозумілий інтерфейс;
• є однією з найбільш простих в установці і налаштуванні;
• володіє широкими графічними можливостями і зручним
інтерфейсом;
• має вбудовані засоби графічного друку і роботи з документами;
• підтримує великий набір офісних програм;
• дозволяє легко підключатися до локальної мережі, підтримує
поширені мережеві протоколи.
1.6. Характеристика мови програмування
При вирішенні поставленого завдання оптимально використовувати для подання інформаційних матеріалів мову C++ Builder, яка є мовою високого рівня і дозволяє швидко і ефективно створювати додатки.
Для реалізації бази даних була обрана система програмування Builder версії 6 фірми Borland, так як вона надає найбільш широкі можливості для програмування додатків ОС Windows.
Builder - це продукт Borland International для швидкого створення додатків. Високопродуктивний інструмент візуальної побудови додатків включає в себе справжній компілятор коду і надає засоби візуального програмування, дещо схожі на ті, що можна виявити в Microsoft Visual Basic або в інших інструментах візуального проектування. В основі лежить мова Object C++, яка є розширенням об'єктно-орієнтованої мови C. У Delphi також входять бібліотеки візуальних і невізуальних компонентів, необхідних при розробці даного редактора.
2. Описова частина
2.1. Алгоритм вирішення задачі
1. Ініціалізація
2. Створення нового документа або відкриття існуючого
3. Введення тексту
4. Відкриття редактора формул, введення формул
5. Збереження результату роботи
6. Вихід
2.2. Керівництво програміста
Для даної програми було вирішено використовувати 2 модуля - основний модуль редактора і модуль редактора формул.
Перший модуль (основна програма) містить всі процедури і функції обробки тексту (введення, редагування, робота з буфером обміну і т.д.) і роботи з файлами (відкрити, зберегти, історія файлів).
Другий модуль - робота з редактором формул, інтегрованим в програму у вигляді OLE-об'єкта.
При розробці програми застосовувався нестандартний компонент RxRichEdit з бібліотеки RxLib, тому для зміни програми потрібна установка даної бібліотеки.
2.2.1. Змінні, що застосовуються в програмі
Таблиця 1.Змінні програми
Імя змінної
Тип
Опис
FilesName
AnsiString[4]
Масив для зберігання історії відкритих файлів
2.2.2. Процедури і функції програми
Таблиця 2. Процедури і функції основного модуля
Імя
Вхідні параметри
Вихідні параметри
Опис
EditCutClick
TObject *Sender
Вирізання виділеного фрагмента в буфер обміну
EditCopyClick
TObject *Sender
Копіювання виділеного фрагмента в буфер обміну
EditPasteClick
TObject *Sender
Вставка з буфера обміну
EditSelectAllClick
TObject *Sender
Виділення всього тексту
FileNewClick
TObject *Sender
Створення нового файлу
FileOpenClick
TObject *Sender
Відкриття файлу і створення історії роботи з файлами
FileSaveClick
TObject *Sender
збереження файлу
FileSaveAsClick
TObject *Sender
Збереження файлу під новим ім'ям
EditUndoClick
TObject *Sender
Скасування дії при редагуванні
TObject *Sender
EditWordWrapClick
TObject *Sender
Включення / вимикання переносу слів
PrintButtonClick
TObject *Sender
Виклик діалогу друку
FontDClick
TObject *Sender
Виклик діалогу вибору шрифту
OnHint
TObject *Sender
Обробка спливаючих підказок
FormCreate
TObject *Sender
Обробка при створенні форми
F4Click
TObject *Sender
Відкриття файлів з "історії"
FormActivate
TObject *Sender
ініціалізація програми
FormClose
TObject *Sender, TCloseAction &Action
Вихід з програми
FormulaButtonClick
TObject *Sender
Виклик вікна редактора формул
HelpAboutClick
TObject *Sender
Вивід вікна «Про програму»
FormCloseQuery
TObject *Sender
FormCloseQuery
TObject *Sender, bool &CanClose
bool &CanClose
Запит при виході з програми
FileExitClick
TObject *Sender
Виклик виходу з програми
Таблиця 2. Процедури і функції модуля введення формул
BitBtn1Click
TObject *Sender
Підтвердження закінчення редагування формули
BitBtn2Click
TObject *Sender
Скасування редагування формули
FormActivate
TObject *Sender
ініціалізація форми
FormClose
TObject *Sender, TCloseAction &Action
Вихід з редагування
2.2.3. Схема взаємозв'язку програмних модулів
Дана програма складається з двох модулів, взаємозв'язок яких приведено на малюнку 1.
Мал. 1. Зв'язок модулів програми
2.3. Керівництво користувача
Програма «Блокнот» є текстовим редактором з підтримкою введення і редагування математичних формул.
Запуск програми здійснюється за допомогою файлу «Blocknot.exe».
При запуску програми відбувається відображення основного вікна програми, показаного на малюнку 2
Мал 2. Основне вікно програми
Основне вікно програми функціонально розділене на 3 частини - вікно введення тексту, блок командних клавіш, меню.
В основному вікні виробляється введення і редагування тексту, відображення введених формул і їх редагування (редагування викликається подвійним клацанням лівою кнопкою миші на формулі).
Меню програми має ієрархічну структуру і містить наступні пункти:
1. Файл
• Новий
• Відкрити
• Зберегти
• Зберегти як
• Останній відкритий файл 1
• Останній відкритий файл 2
• Останній відкритий файл 3
• Останній відкритий файл 4
• Вихід
2. Правка
• Скасувати
• Вирізати
• Копіювати
• Вставити
• Виділити все
• Шрифт
• Перенесення слів
3. Довідка
• Про програму
• Зміст
Блок командних клавіш частково дублює пункти меню і містить наступні пункти:
1. Створити документ
2. Відкрити документ
3. Зберегти документ
4. Зберегти документ як
5. Друк документа
6. Вирізати виділений фрагмент в буфер обміну
7. Копіювати виділений фрагмент в буфер обміну
8. Вставити фрагмент з буфера обміну
9. Виклик редактора формул
При виборі команди «Виклик редактора формул» відкривається вікно редактора, показане на малюнку 3.
Мал. 3. Вікно редактора формул
Вікно редактора формул призначене для введення і редагування формул. Як компонент для редагування використовується редактор Microsoft Equation 3.0 з використанням його панелі інструментів для введення математичних символів.
2.4. Контрольний приклад
В якості контрольного прикладу введемо текст і 2 формули. Результат введення контрольного прикладу показаний на малюнку 4.
Мал. 4. Результат введення контрольного прикладу
ВИСНОВОК
У процесі розробки даної програми була освоєна середовище розробки Borland С ++ Builder, вивчені прийоми роботи з візуальними і невізуальними компонентами цього середовища розробки, прийоми встановлення і використання нестандартних компонент, а також інтеграції об'єктів в розроблювану програму з використанням технології OLE.
Була розроблена програма «Блокнот», що має стандартний інтерфейс в стилі Windows, що дозволяє здійснювати введення, редагування як тексту, так і математічекіх виразів.
За результатами роботи над програмою написаний і оформлений звіт.
СПИСОК ЛІТЕРАТУРИ
Шамис В.А, Borland C++ Builder 6 Для профессионалов. СПб.: Питер, 2005. – 798 с.
Архангельский А.Я. Программирование в C++ Builder 6. М.:Бином, 2003. – 1152 с.
Додаток 1
Текст програмИ
Основний модуль програми
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#include <Clipbrd.hpp>
#include <IniFiles.hpp>
#pragma hdrstop
#include "BlMain.h"
#include "BlFormula.h"
#include "blAbout.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "RxRichEd"
#pragma resource "*.dfm"
TBlock *Block;
AnsiString FilesName[4];
TOleContainer *Formula[4];
//---------------------------------------------------------------------------
__fastcall TBlock::TBlock(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TBlock::EditCutClick(TObject *Sender)
{
Memo->CutToClipboard();
}
//---------------------------------------------------------------------------
void __fastcall TBlock::EditCopyClick(TObject *Sender)
{
Memo->CopyToClipboard();
}
//---------------------------------------------------------------------------
void __fastcall TBlock::EditPasteClick(TObject *Sender)
{
Memo->PasteFromClipboard();
}
//---------------------------------------------------------------------------
void __fastcall TBlock::EditSelectAllClick(TObject *Sender)
{
Memo->SelectAll();
}
//---------------------------------------------------------------------------
void __fastcall TBlock::FileNewClick(TObject *Sender)
{
if (Memo->Modified)
{
int Res = Application->MessageBox(
"Текущий файл изменен. Сохранить изменения?","Блокнот: Предупреждение", MB_YESNOCANCEL);
if (Res == IDCANCEL) return;
if (Res == IDYES) FileSaveClick(Sender);
}
if (Memo->Lines->Count > 0) Memo->Clear();
SaveDialog->FileName = "";
}
//---------------------------------------------------------------------------
void __fastcall TBlock::FileOpenClick(TObject *Sender)
{
if (Memo->Modified)
{
int Res = Application->MessageBox(
"Текущий файл изменен. Сохранить изменения?","Блокнот: Предупреждение", MB_YESNOCANCEL);
if (Res == IDCANCEL) return;
if (Res == IDYES) FileSaveClick(0);
}
OpenDialog->FileName = "";
OpenDialog->Title = "Открыть";
if (OpenDialog->Execute())
{
if (Memo->Lines->Count > 0) Memo->Clear();
Memo->Lines->LoadFromFile(OpenDialog->FileName);
SaveDialog->FileName = OpenDialog->FileName;
int i;
for (i = 0; i< 4; i++)
if (FilesName[i] == "<empty>")
{
FilesName[i] = OpenDialog->FileName;
break;
}
if (i == 4)
{
FilesName[3] = FilesName[2];
FilesName[2] = FilesName[1];
FilesName[1] = FilesName[0];
FilesName[0] = OpenDialog->FileName;
}
F1->Caption = FilesName[0];
F2->Caption = FilesName[1];
F3->Caption = FilesName[2];
F4->Caption = FilesName[3];
}
}
//---------------------------------------------------------------------------
void __fastcall TBlock::FileSaveClick(TObject *Sender)
{
SaveDialog->Title = "Сохранить";
if (SaveDialog->FileName != "")
{
Memo->Lines->SaveToFile(SaveDialog->FileName);
Memo->Modified = false;
}
else
FileSaveAsClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TBlock::FileSaveAsClick(TObject *Sender)
{
SaveDialog->Title = "Сохранить как";
if (SaveDialog->Execute())
{
Memo->Lines->SaveToFile(SaveDialog->FileName);
Memo->Modified = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TBlock::EditUndoClick(TObject *Sender)
{
SendMessage(Memo->Handle, WM_UNDO, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TBlock::EditWordWrapClick(TObject *Sender)
{
Memo->WordWrap = !Memo->WordWrap;
EditWordWrap->Checked = Memo->WordWrap;
if (Memo->WordWrap) Memo->ScrollBars = ssVertical;
else
Memo->ScrollBars = ssBoth;
}
//---------------------------------------------------------------------------
void __fastcall TBlock::PrintButtonClick(TObject *Sender)
{
if (PrintDialog1->Execute()) Memo->Print(Block->Caption);
}
//---------------------------------------------------------------------------
void __fastcall TBlock::FontDClick(TObject *Sender)
{
if (FontDialog1->Execute()) Memo->Font = FontDialog1->Font;
}
//---------------------------------------------------------------------------
void __fastcall TBlock::OnHint(TObject* Sender)
{
StatusBar->SimpleText = Application->Hint;
}
//---------------------------------------------------------------------------
void __fastcall TBlock::FormCreate(TObject *Sender)
{
Application->OnHint = OnHint;
}
//---------------------------------------------------------------------------
void __fastcall TBlock::F4Click(TObject *Sender)
{
int n;
if (Sender == F1) n = 0;
if (Sender == F2) n = 1;
if (Sender == F3) n = 2;
if (Sender == F4) n = 3;
if (FilesName[n] != "<empty>")
{
if (Memo->Modified)
{
int Res = Application->MessageBox(
"Текущий файл изменен. Сохранить изменения?","Блокнот: Предупреждение", MB_YESNOCANCEL);
if (Res == IDCANCEL) return;
if (Res == IDYES) FileSaveClick(0);
}
Memo->Lines->LoadFromFile(FilesName[n]);
}
}
//---------------------------------------------------------------------------
void __fastcall TBlock::FormActivate(TObject *Sender)
{
TIniFile *RegFile;
RegFile = new TIniFile(ExtractFilePath(Application->ExeName) + "prog.ini
FilesName[0] = RegFile->ReadString("Names", "1", "<empty>");
FilesName[1] = RegFile->ReadString("Names", "2", "<empty>");
FilesName[2] = RegFile->ReadString("Names", "3", "<empty>");
FilesName[3] = RegFile->ReadString("Names", "4", "<empty>");
RegFile->Free();
F1->Caption = FilesName[0];
F2->Caption = FilesName[1];
F3->Caption = FilesName[2];
F4->Caption = FilesName[3];
}
//---------------------------------------------------------------------------
void __fastcall TBlock::FormClose(TObject *Sender, TCloseAction &Action)
{
TIniFile *RegFile;
RegFile = new TIniFile(ExtractFilePath(Application->ExeName)+ "prog.ini");
RegFile->WriteString("Names", "1", FilesName[0]);
RegFile->WriteString("Names", "2", FilesName[1]);
RegFile->WriteString("Names", "3", FilesName[2]);
RegFile->WriteString("Names", "4", FilesName[3]);
RegFile->Free();
}
//---------------------------------------------------------------------------
void __fastcall TBlock::FormulaButtonClick(TObject *Sender)
{
if (FormulaForm->ShowModal() == mrOk) Memo->PasteFromClipboard();
}
//---------------------------------------------------------------------------
void __fastcall TBlock::HelpAboutClick(TObject *Sender)
{
AboutBox->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TBlock::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if (Memo->Modified)
{
int Res = Application->MessageBox(
"Текущий файл изменен. Сохранить изменения?", "Блокнот: Предупреждение", MB_YESNOCANCEL);
if (Res == IDCANCEL) {
CanClose = false;
return;
}
if (Res == IDYES) FileSaveClick(0);
}
}
//---------------------------------------------------------------------------
void __fastcall TBlock::FileExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "BlFormula.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormulaForm *FormulaForm;
//---------------------------------------------------------------------------
__fastcall TFormulaForm::TFormulaForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFormulaForm::BitBtn1Click(TObject *Sender)
{
OleContainer1->Copy();
ModalResult = mrOk;
}
//---------------------------------------------------------------------------
void __fastcall TFormulaForm::BitBtn2Click(TObject *Sender)
{
ModalResult = mrCancel;
}
//---------------------------------------------------------------------------
void __fastcall TFormulaForm::FormClose(TObject *Sender,
TCloseAction &Action)
{
OleContainer1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TFormulaForm::FormActivate(TObject *Sender)
{
OleContainer1->SetFocus();
}
//---------------------------------------------------------------------------