Курсовая работа №1 Вариант 22 по операционным системам и оболочк. Курсовая работа 1 Вариант 22 по операционным системам и оболочкам Студент Богородцев Сергей Александрович
Скачать 292.58 Kb.
|
Поволжский государственный университет телекоммуникаций и информатики Заочный факультет РЕГИСТРАЦИОННЫЙ № ______ Курсовая работа №_1_____ Вариант __22____ по операционным системам и оболочкам Студент Богородцев Сергей Александрович Факультет ЗО курс 3 шифр _193097____ гр. ИСТ-3К Работа выслана «» 2022г. Оценка _______________ Дата _______________20___г. Подпись преподавателя ___________________ Курсовая работа вместе с рецензией предъявляется экзаменатору при сдаче экзамена ОГЛАВЛЕНИЕТекст варианта задания 3 Описание назначения, ключей и параметров команд, подлежащих реализации согласно заданию 6 Описание алгоритмов реализации команд и алгоритма работы командного процессора (КП) 8 Исходные тексты процедур на языке программирования 9 Тестовые задания для проверки работы КП 11 Скриншоты выполнения команд реализованного КП (введенная команда и результат ее выполнения) 12 Текст варианта задания1. Должна быть реализована команда DIR с возможностью использования ключей. Ключи команды заданы во втором столбце таблицы. Все ключи могут использоваться в любых комбинациях или отсутствовать. 2. Список остальных команд, подлежащих реализации, расположен в третьем столбце. 3. Для всех команд должен быть реализован ключ /? - вывод справочной информации по данной команде в виде текста на русском языке. Информацию по командам получить в командном процессоре cmd с помощью ключа /? и записать в текстовые файлы. 4. В четвертом столбце указаны ключи для некоторых дополнительных команд 5. В пятом столбце указан знак >, указывающий на необходимость реализации в данном варианте возможности перенаправления вывода информации (в команде DIR) 6. Команда Dir должна выводить итоговую информацию - количество файлов и каталогов и суммарный объем файлов. 7. При вводе неверной команды должно выводиться сообщение об ошибке — неверная команда - и неверное с точки зрения командного процессора название введенной команды. 8. Язык программирования можно выбрать любой. Таблица вариантов заданий
1. Титульный лист. 2. Текст варианта задания. 3. Описание назначения, ключей и параметров команд, подлежащих реализации согласно заданию. 4. Описание алгоритмов реализации команд и алгоритма работы командного процессора (КП). 5. Исходные тексты процедур на языке программирования. 6. Тестовые задания для проверки работы КП. 7. Скриншоты выполнения команд реализованного КП (введенная команда и результат ее выполнения) 8. Список использованной литературы Описание назначения, ключей и параметров команд, подлежащих реализации согласно заданиюКоманда DIR – вывод списка файлов и подкаталогов в указанном каталоге. Синтаксис: DIR [drive:][path][filename] [/A[[:]attributes]] [/O[[:]sortorder]] Параметры команды: [drive:][path][filename] - диск, каталог или имена файлов для включения в список. Ключи: /A - отображение файлов с указанными атрибутами. attributes: D - Каталоги. - префикс "-" имеет значение НЕ. /O - сортировка списка отображаемых файлов. sortorder: D По дате и времени (начиная с самого старого) - префикс "-" обратный порядок. Команда CLS – очищает содержимое экрана. Синтаксис: CLS Параметры и ключи команды отсутствуют. Команда TIME – вывод или изменение времени. Синтаксис: TIME [/T | время] Введите TIME без параметров для вывода текущего времени и запроса на ввод нового времени. Нажмите клавишу ENTER для сохранения текущего времени. Параметры команды: время – установить новое системное время, вводится в формате ЧЧ[:ММ[:СС]]. Если СС не указаны – секунды устанавливаются в 0. Если ММ не указаны – минуты устанавливаются в 0. Ключи: /Т - вывод текущего значения времени без запроса нового времени. Команда ECHO – вывод сообщений и переключение режима отображения команд на экране. Синтаксис: ECHO [ON | OFF] ECHO [message] Введите ECHO без параметров для отображения текущего значения этой команды. Параметры команды: ON – установить режим отображения команд на экране. OFF – отменить режим отображения команд на экране. message – вывод на экран указанное сообщение. Для выхода из программы используется команда EXIT. Описание алгоритмов реализации команд и алгоритма работы командного процессора (КП)Для реализации заданного варианта используем язык программирования С++ и среда разработки Visual Studio 2022. Алгоритм реализации команд основан на анализе строки, вводимой пользователем (например: ECHO ON). Этап 1. Данная строка разбивается на слова, между которыми присутствует символ «пробел». В результате, мы получим массив слов (например: ECHO, ON). Первым словом всегда должно быть название команды, реализуемой вариантом задания. Этап 2. Осуществляется анализ первого слова на допустимые команды (DIR, CLS, TIME, ECHO, EXIT). В случае указания пользователем слова, отличного от списка допустимых команд, программа выводит сообщение «Неверная команда…». Этап 3. Проводится анализ следующих слов на наличие допустимых ключей («/?», «/A», «/O», «ON», «OFF» и т.д.). В случае указания пользователем не допустимых ключей, программа выводит сообщение «Недопустимый ключ…». Этап 4. Осуществляется исполнение команды, введенной пользователем. Алгоритм реализации командного процессора выполнен двумя разными способами: выполнение команды, заданной пользователем (ECHO) и вызов системной функции, встроенной в С++ (DIR, CLS, TIME). Исходные тексты процедур на языке программирования#include #include #include #include #include #include #include using namespace std; #define MAX_DIR 100 #define MAX_COMMAND 100 void dir(); void echo(); void time(); void cls(); int split(string str, string delim, vector<string>* arr); boolean dir_check(vector<string>* arrWords); string StrUpper(string str); vector<string> Words{}; boolean FlagHelp; boolean EchoStatus = TRUE; TCHAR CurrentDirectory[MAX_DIR]; string BufferCommand; void main() { int CommandPos; setlocale(LC_ALL, "russian"); SetConsoleCP(1251); SetConsoleOutputCP(1251); GetCurrentDirectory(sizeof(CurrentDirectory), CurrentDirectory); const string Commands[] = { "DIR", "CLS", "TIME", "ECHO", "EXIT" }; while (true) { if (EchoStatus) { wprintf(L"\n%s>", CurrentDirectory); } getline(cin, BufferCommand); //for (int i=0;i // BufferCommand[i] = toupper(BufferCommand[i]); //} int sWords = split(BufferCommand, " ", &Words); CommandPos = 0; for (int i = 0; i < 5; i++) { if (StrUpper(Words[0]) == Commands[i]) { CommandPos = i + 1; break; } } FlagHelp = FALSE; for (int i = 1; i < Words.size(); i++) { if (Words[i] == "/?") { FlagHelp = TRUE; break; } } switch (CommandPos) { case 1: //"dir" dir(); break; case 2: //"cls" cls(); break; case 3: //"time" time(); break; case 4: //"echo" echo(); break; case 5: //"exit" return; default: cout << endl << "Неверная команда..." << endl << endl; break; } } return; } void echo() { if (FlagHelp) { cout << endl << "Вывод сообщений и переключение режима отображения команд на экране." << endl << endl; cout << "ECHO [ON|OFF]" << endl; cout << "ECHO[message]" << endl << endl; cout << "Введите ECHO без параметров для отображения текущего значения этой команды." << endl << endl; return; } if (Words.size() == 1) { if (EchoStatus) { cout << "Режим вывода команд на экран (ECHO) включен." << endl << endl; } else { cout << "Режим вывода команд на экран (ECHO) отключен." << endl << endl; } return; } if (StrUpper(Words[1]) == "ON") { EchoStatus = TRUE; } else { if (StrUpper(Words[1]) == "OFF") { EchoStatus = FALSE; } else { cout << Words[1].c_str() << endl; } } return; } void cls() { if (FlagHelp) { cout << endl << "Очищает содержимое экрана." << endl << endl; cout << "CLS" << endl << endl; return; } system("cls"); return; } void time() { if (FlagHelp) { cout << endl << "Вывод или изменение времени." << endl << endl; cout << "TIME [/T|время]" << endl << endl; cout << "Введите TIME без параметров для вывода текущего времени и запроса на ввод" << endl; cout << "нового времени.Нажмите клавишу ENTER для сохранения текущего времени." << endl << endl; cout << "Когда расширенная обработка команд включена, команда TIME поддерживает" << endl; cout << "ключ /T, позволяющий просто вывести текущее значение времени без запроса" << endl; cout << "нового времени." << endl << endl; return; } const char *p; p = BufferCommand.c_str(); system(p); } void dir() { if (FlagHelp) { cout << endl << "Вывод списка файлов и подкаталогов в указанном каталоге." << endl << endl; cout << "DIR [drive:][path][filename] [/A[[:]attributes]]" << endl; cout << " [/O[[:]sortorder] ]" << endl << endl; cout << " [drive:][path][filename]" << endl; cout << "\tДиск, каталог или имена файлов для включения в список." << endl << endl; cout << " /A Отображение файлов с указанными атрибутами." << endl; cout << " атрибуты D Каталоги." << endl; cout << "\t- Префикс \" - \" имеет значение НЕ" << endl; cout << " /O Сортировка списка отображаемых файлов." << endl; cout << "\tsortorder D По дате и времени(начиная с самого старого)" << endl << endl; return; } if (dir_check(&Words)) { cout << "Недопустимый ключ..." << endl << endl; return; } const char* p; p = BufferCommand.c_str(); system(p); } int split(string str, string delimiter, vector<string>* arr) { size_t pos_last = 0; size_t pos_next; size_t width = delimiter.length(); (*arr).clear(); while ((pos_next = str.find(delimiter, pos_last)) != string::npos) { (*arr).push_back(str.substr(pos_last, pos_next - pos_last)); pos_last = pos_next + width; } (*arr).push_back(str.substr(pos_last)); return (int)(*arr).size(); } boolean dir_check(vector<string>* arrWords) { boolean FlagShow = FALSE; boolean FlagSort = FALSE; boolean FlagError = FALSE; string Key; string KeyValue; for (int i = 1; i < (*arrWords).size(); i++) { Key = StrUpper((*arrWords)[i].substr(0, 2)); KeyValue = ""; if (Key.substr(0,1) == "/") { // Проверка ключей if ((*arrWords)[i].length() >= 4) { KeyValue = StrUpper((*arrWords)[i].substr(3, 2)); } if (Key != "/A" && Key != "/O") { FlagError = TRUE; break; } if (Key == "/A") { // Ключ отображения FlagShow = TRUE; if (KeyValue != "D" && KeyValue != "-D") { FlagError = TRUE; } break; } if (Key == "/O") { // Ключ сортировки FlagSort = TRUE; if ((KeyValue != "D" && KeyValue != "-D") || KeyValue == "") { FlagError = TRUE; } break; } } } return(FlagError); } string StrUpper(string str) { for (int i = 0; i < str.length(); i++) { str[i] = toupper(str[i]); } return(str); } Тестовые задания для проверки работы КПДля проверки правильности работы команды DIR выполним следующие команды: Тест 1: Dir Тест 2: Dir /a:d Тест 3: Dir /a:-d Тест 4: Dir /o:d Тест 5: Dir /o:-d Тест 6: Dir /o Для проверки правильности работы команды CLS выполним следующие команды: Тест 7: Cls Для проверки правильности работы команды TIME выполним следующие команды: Тест 8: Time Тест 9: Time /t Тест 10: Time 23:18 Для проверки правильности работы команды ECHO выполним следующие команды: Тест 11: Echo Тест 12: Echo off Тест 13: Echo on Тест 14: Echo ПРИВЕТ! Скриншоты выполнения команд реализованного КП (введенная команда и результат ее выполнения)Рис.1 Результат выполнения команды Dir Рис.2 Результат выполнения команды Dir /a:d Рис.3 Результат выполнения команды Dir /a:-d Рис.4 Результат выполнения команды Dir /o:d Рис.5 Результат выполнения команды Dir /o:-d Рис.6 Результат выполнения неверной команды Dir /o Рис.7 Скриншот экрана до выполнения команды Cls Рис.8 Результат выполнения команды Cls Рис.9 Результат выполнения команды Time Рис.10 Результат выполнения команды Time /t Рис.11 Результат выполнения команды Time 23:18 Рис.12 Результат выполнения команды Echo Рис.13 Результат выполнения команды Echo off Рис.14 Результат выполнения команды Echo on Рис.15 Результат выполнения команды Echo ПРИВЕТ! Список использованных источников: 1 Список команд Windows (Windows CMD) с описанием и примерами. [Электронный ресурс] // Режим доступа: https://ab57.ru/cmdlist.html |