Файл: Курсовая работа 1 Вариант 22 по операционным системам и оболочкам Студент Богородцев Сергей Александрович.docx
Добавлен: 05.12.2023
Просмотров: 25
Скачиваний: 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