Файл: Курсовая работа 1 Вариант 22 по операционным системам и оболочкам Студент Богородцев Сергей Александрович.docx

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 05.12.2023

Просмотров: 27

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Поволжский государственный университет телекоммуникаций и

информатики

Заочный факультет
РЕГИСТРАЦИОННЫЙ № ______
Курсовая работа №_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. Язык программирования можно выбрать любой.
Таблица вариантов заданий

№ № вар

Ключи команды Dir

Остальные команды, подлежащие реализации

Реализуемые ключи дополнитель­ных команд

Перенапра вление вывода для команды dir

1

2

3

4

5

22

/o:d /a:-d /a:d

Cls, time, echo








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