Разработка простого резидентного текстового редактора в режиме командной строки(C++)

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование
  • 41 41 страница
  • 4 + 4 источника
  • Добавлена 05.05.2024
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
Ввежение 3
1. Теоретическая часть 5
1.1 Обзор существующих текстовых редакторов в командной строке 5
1.2. Основные принципы работы в режиме командной строки 9
1.3. Тестирование приложения 11
2. Практическая часть 13
2.1. Анализ задачи 13
2.2 Описание логической структуры 13
2.2.1 Алгоритм программы 14
2.2.2 Составные части программы и связи между ними 16
2.3 Разработка программы для работы 18
2.3.1 Входные и выходные данные 18
2.3.2 Используемые методы 19
2.3.3 Тестирование 22
2.3.4 Эксплуатационные документы – руководство пользователя 27
2.4 Сравнительная характеристика работы (сравнение с аналогами, если скрипт и пакетные файл, то сравнение сложности реализации и работы) 30
Заключение 32
Список использованных источников 33
Приложение А 34
Приложение Б 35
Фрагмент для ознакомления

Программа запрашивает у пользователя имя файла, в который нужно сохранить текст.После ввода имени файла программа сохраняет введенный текст в указанный файл.Выходизпрограммы:Пользователь выбирает опцию "Exit" из главного меню.Программа завершает свою работу, выходя из основного цикла.Таким образом, пользователь может взаимодействовать с программой, выполняя различные действия с текстовыми файлами через консольное окно.2.4 Сравнительная характеристика работы (сравнение с аналогами, если скрипт и пакетные файл, то сравнение сложности реализации и работы)Основные аспекты и параметры сравнения представлены в сводной таблице, в которой помимо разработанного приложения указываются и схожие приложения (такие же редакторы текста в командной строке) Аспекты Программа Vim Nano Emacs Интерфейс пользователя Простой и интуитивно понятный Сложный для новичков Простой и интуитивный Сложный для новичков Функциональность Ограниченный базовый набор функций Обширный набор функций Базовый набор функций Обширный набор функций Настройка и расширяемость Ограниченная Высокая Низкая Высокая Зависимости и внешние библиотеки Минимальные Могут быть сложными для управления Минимальные Могут быть сложными для управления Документация и обучение Простая и понятная Многословная и техническая Простая и понятная Многословная и техническая Сложность установки Простая Может быть сложной, особенно для новичков Простая Может быть сложной, требует настройки Ресурсы системы Низкое потребление ресурсов В зависимости от режима работы и плагинов Низкое потребление ресурсов Высокое потребление ресурсов Расширяемость Ограничена возможностями пользовательских плагинов Высокая, существует множество плагинов и расширений Ограничена функциональностью Высокая, с множеством плагинов и расширений Программирование макросов Не поддерживается Поддерживается, мощные возможности Не поддерживается Поддерживается, много возможностей Использование ресурсов Малое использование ресурсов Может быть высоким, особенно для больших файлов Малое использование ресурсов Может быть высоким, особенно для больших файлов Поддержка языков программирования Ограниченная Поддерживает множество языков программирования Ограниченная Поддерживает множество языков программирования Удобство для начинающих Высокое Низкое, требует времени для освоения Высокое Низкое, требует времени для освоения Таблица 9 – Сравнительная характеристика разработанной программыСравнительная характеристика работы с аналогами показывает, что разработанная программа, может быть привлекательным выбором для тех пользователей, которым требуется простой и удобный текстовый редактор с базовым набором функций. В то время как Vim, Nano и Emacs предоставляют более широкие возможности и гибкость настройки, они также требуют больше времени на освоение и могут быть сложными для новичков.ЗаключениеВ ходе выполнения курсового проекта был разработан резидентный текстовый редактор в режиме командной строки на языке программирования C++. Целью проекта было создание простого и эффективного инструмента для работы с текстовыми данными в операционной системе Windows.Разработанный текстовый редактор обладает базовым набором функций, таких как создание, открытие, редактирование и сохранение текстовых файлов. Ключевой особенностью редактора является его способность оставаться активным в системе даже после сворачивания окна, что обеспечивает пользователю удобство и быстроту доступа к редактированию текста.В ходе разработки были изучены существующие методы работы с текстовыми данными в командной строке, спроектирована архитектура и функциональность редактора, разработан программный код, проведено тестирование и оптимизация работы приложения, а также подготовлена пользовательская документация.В результате выполнения поставленных задач был создан простой, но функциональный текстовый редактор, который может быть использован пользователями для эффективного редактирования текстовых данных в командной строке операционной системы Windows. Дальнейшее развитие проекта может включать в себя расширение функциональности редактора, улучшение интерфейса и добавление новых возможностей для удобства пользователей.Список использованных источниковRobbins A., Hannah E., Lamb L. Learning the vi and Vim Editors. – " O'Reilly Media, Inc.", 2008. – URL: https://books.google.com/books?hl=ru&lr=&id=KUvMAQAAQBAJ&oi=fnd&pg=PR7&dq=Vim+text+editor&ots=t_Ai1BhSTj&sig=477K3RVyggKf6u1SZ-Bshif7N9k (датаобращения: 01.04.2024). - Текст: электронный.Finseth C. A. The craft of text editing: Emacs for the modern world. – Springer Science & Business Media, 2012.– URL: https://academic.oup.com/bioinformatics/article-pdf/21/2/257/48961915/bioinformatics_21_2_257.pdf (датаобращения: 01.04.2024). - Текст: электронный.Kumar A., Verma V. An Easy Console-Based Text Editor for Nano Linux Commander's Built-in Editor for Complex Security Systems //2022 International Interdisciplinary Humanitarian Conference for Sustainability (IIHC). – IEEE, 2022. – С. 450-454.– URL: https://www.researchgate.net/profile/Vikas-Verma-17/publication/369349672_An_Easy_Console-Based_Text_Editor_for_Nano_Linux_Commander's_Built-in_Editor_for_Complex_Security_Systems/links/651f8f38d717ef1293cf2ba7/An-Easy-Console-Based-Text-Editor-for-Nano-Linux-Commanders-Built-in-Editor-for-Complex-Security-Systems.pdf (датаобращения: 01.04.2024). - Текст: электронный.Рыбалко М. А., Иванова Е. А. Тестирование программного обеспечения, методы тестирования //Информационное общество: современное состояние и перспективы развития. – 2017. – С. 320-322.– URL: https://elibrary.ru/item.asp?id=28172890(датаобращения: 01.04.2024). - Текст: электронный.Приложение Аmain-head.h#ifndef FUNCTIONS_H#define FUNCTIONS_H#include // Прототипыфункцийvoid displayMenu();void createFile();void openFile();void editFile(const std::string& fileName);void saveFile();bool isF6Pressed();void consoleThread();#endifПриложение Бmain.cpp#define NOMINMAX#include "../text_editor/text_editor/main-head.h"#include #include #include #include #include #include using namespace std;void setConsoleForeground() { HWND consoleWindow = GetConsoleWindow();SetForegroundWindow(consoleWindow);}int main() { // Создаемпотокдляотслеживаниянажатия F6 thread t(consoleThread);t.detach(); // Отделяемпоток bool isEditorRunning = false; // Основнойциклпрограммы while (true) {// Ожидаем, пока не будет нажата клавиша F6 или программа не запущенаwhile(!isF6Pressed() && !isEditorRunning) { // Если программа работает в фоновом режиме и не была активирована F6, ждем некоторое времяthis_thread::sleep_for(chrono::milliseconds(100));} // Если F6 была нажата, устанавливаем флаг, что редактор запущенif (isF6Pressed()) {isEditorRunning = true;cout << "Editor running." << endl;setConsoleForeground();ShowWindow(GetConsoleWindow(), SW_RESTORE); // Развернутьокноконсоли} // Показываем меню и выполняем действия пользователя, если редактор запущенif (isEditorRunning) {displayMenu(); int choice;cout << "Enter choice: ";cin >> choice; switch (choice) { case 1:createFile(); break; case 2:openFile(); break; case 3: { string filename;cout << "Enter filename to edit: ";cin >> filename;editFile(filename); break; } case 4:saveFile(); break; case 5:cout << "Program is now running in background." << endl; // СвернутьокноконсолиShowWindow(GetConsoleWindow(), SW_MINIMIZE);// Сбрасываем флаг редактора, чтобы продолжить отслеживать нажатие F6isEditorRunning = false; break; default:cout << "Incorrect input. Please select a valid option." << endl; break; } } // Возвращаемсякотслеживаниюнажатия F6, еслиредакторзапущен if (isEditorRunning) {continue; } }return 0;}// Функция для проверки нажатия клавиши F6bool isF6Pressed() { return GetKeyState(VK_F6) & 0x8000;}// Функция для вывода менюvoiddisplayMenu() {cout << "======================" << endl;cout << "Text editor neo" << endl;cout << "======================" << endl;cout << "1. Create new file" << endl;cout << "2. Open existing file" << endl;cout << "3. Edit file" << endl;cout << "4. Save file" << endl;cout << "5. Exit" << endl;cout<< "======================" << endl;}// Функция для создания нового файлаvoid createFile() { string fileName, content; bool isValidFilename = false; do {cout << "Enter new filename: ";cin >> fileName;cin.ignore(numeric_limits::max(), '\n'); // Очисткабуфераввода// Проверка на корректность имени файлаif (fileName.find_first_of("\\/:*?\"<>|") != string::npos || fileName.find(".txt") == string::npos) {cout << "Invalid filename. Please enter a valid filename with .txt extension." << endl; } else {isValidFilename = true; } } while (!isValidFilename);ofstreamfile(fileName.c_str());cout << "File " << fileName << " created successfully." << endl;file.close(); // Предложить редактировать новый файлcout << "Do you want to edit the new file? (yes/no): "; string response;cin >> response;cin.ignore(numeric_limits::max(), '\n'); // Очисткабуфераввода if (response == "yes") {editFile(fileName); // ПередаемимяфайлавфункциюeditFile()}else { // Успешно создан файл, возвращаемся к основному циклуreturn; }}// Функция для открытия существующего файлаvoid openFile() { string fileName, content, line;cout << "Enter filename: ";cin >> fileName;cin.ignore(numeric_limits::max(), '\n'); // Очисткабуферавводаifstreamfile(fileName.c_str()); if (file.is_open()) { while (getline(file, line)) { content += line + "\n"; }cout << "Source " << fileName << ":\n" << content << endl;file.close(); } else {cout << "Cannot open file " << fileName << endl; }}// Функциядляредактированияфайлаvoid editFile(const string& fileName) { string content;ifstreamfile(fileName.c_str()); if (file.is_open()) { string line;cout << "Current content of the file " << fileName << ":\n"; while (getline(file, line)) { content += line + "\n"; }file.close();cout << content << endl;cout << "Enter text (enter 'exit' to quit or 'save' to save changes):" << endl;cin.ignore(numeric_limits::max(), '\n'); // Очисткабуфераввода while (true) { string line;getline(cin, line); if (line == "exit") { break; } else if (line == "save") {ofstreamsavefile(fileName.c_str());savefile << content;savefile.close();cout << "Changes saved." << endl; } else { content += line + "\n"; } } } else {cout << "Cannot open file " << fileName << endl;}}// Функция для сохранения файлаvoidsaveFile() {string fileName, content;cout << "Enter filename to save: ";cin >> fileName;cin.ignore(numeric_limits::max(), '\n'); // Очисткабуфераввода if (fileName.empty()) {cout << "Invalid filename." << endl; return; }cout << "Enter text to save: ";getline(cin, content);ofstreamfile(fileName.c_str()); file << content;cout << "File " << fileName << " saved successfully." << endl;file.close();}// Поток для отслеживания нажатия F6voidconsoleThread() { // Ожидаем нажатия клавиши F6while(!isF6Pressed()) { // Если F6 не нажата, ждем некоторое времяthis_thread::sleep_for(chrono::milliseconds(100));} // Если F6 нажата, создаем консольное окноAllocConsole();}

1.Robbins A., Hannah E., Lamb L. Learning the vi and Vim Editors. – " O'Reilly Media, Inc.", 2008. – URL: https://books.google.com/books?hl=ru&lr=&id=KUvMAQAAQBAJ&oi=fnd&pg=PR7&dq=Vim+text+editor&ots=t_Ai1BhSTj&sig=477K3RVyggKf6u1SZ-Bshif7N9k (дата обращения: 01.04.2024). - Текст: электронный.
2.Finseth C. A. The craft of text editing: Emacs for the modern world. – Springer Science & Business Media, 2012. – URL: https://academic.oup.com/bioinformatics/article-pdf/21/2/257/48961915/bioinformatics_21_2_257.pdf (дата обращения: 01.04.2024). - Текст: электронный.
3.Kumar A., Verma V. An Easy Console-Based Text Editor for Nano Linux Commander's Built-in Editor for Complex Security Systems //2022 International Interdisciplinary Humanitarian Conference for Sustainability (IIHC). – IEEE, 2022. – С. 450-454. – URL: https://www.researchgate.net/profile/Vikas-Verma-17/publication/369349672_An_Easy_Console-Based_Text_Editor_for_Nano_Linux_Commander's_Built-in_Editor_for_Complex_Security_Systems/links/651f8f38d717ef1293cf2ba7/An-Easy-Console-Based-Text-Editor-for-Nano-Linux-Commanders-Built-in-Editor-for-Complex-Security-Systems.pdf (дата обращения: 01.04.2024). - Текст: электронный.
4.Рыбалко М. А., Иванова Е. А. Тестирование программного обеспечения, методы тестирования //Информационное общество: современное состояние и перспективы развития. – 2017. – С. 320-322. – URL: https://elibrary.ru/item.asp?id=28172890 (дата обращения: 01.04.2024). - Текст: электронный.