Смекни!
smekni.com

Интерпретатор команд MS DOS (стр. 2 из 3)

2.2 Построение алгоритма решения задачи

Алгоритм решения поставленной задачи, выполненный с помощью графического метода изображения алгоритмов – блок-схемой представлен ниже.

Алгоритм программы

Для реализации моей задачи используется следующий алгоритм (рисунок 1.).

Описание алгоритма:

1. Ввод команды с клавиатуры

2. Индификация вводимой команды

3. Операции над параметрами команды

4. Выполнение команды



Рис. 1. Алгоритм программы.

2.3 Описание разработанной программы

Моя программа интерпретирует команды MS DOS

В программе можно пользоваться четырьмя командами:

1) Exit- программа завершается.

2) Copy – копирование файла или файлов.

3) Ren –переименование файла.

4) Del –Удаление файла.

В программе я использую встроенные библиотеки С++. Таб. 1

В основном программа работает со строковыми функциями. Эти функции нужны для обработки строк с клавиатуры, для устранения ошибок С++.

· strtok –для устранения ошибок в строке

· strncat -копирует определённое количество символов в переменную.

· strstr - для поиска слова в строке.

· strcpy –копирует строку в переменную.

· strcat –добавляет строку в переменную.

· Strrev- реверсирует строку.

· Strlen- определяет количество символов в строке

· Strlwr-все символы преобразовывает в строчные.

· Strpbrk- ищет определённые символы.

Почти в любой программе не обойдешься без собственных функций, они упрощают программирование, программа становится более понятна и удобна в изучении. В моей программе я использую шесть своих функций FILCOP, GAD, GIP, DELFILE, RENFILE, COPYES.

· Filcop - функция для копирования файлов.

· Gad – функция для выреза одного пути без имени файла из строки.

· Gip – функция для выреза одного имени файла из строки.

· Delete- функция удаления файлов.

· Renfile- функция переименования файлов.

· Copyes- функция обрабатывающая строку и вызова функции Filcop. Она разделяет строку на два параметра копирования- какой файл и куда копировать с учётов шаблонов (*?).

После загрузки программы появится меню с приглашением «>>>>». Теперь можно вводить команды. После ввода команды программа определяет её.

Если:

· EXIT - программа завершается.

· REN –оставляет в введённой строке только два параметра (какой файл, на какой переименовывать) и вызывает функцию Renfile.

· Copy- оставляет в введённой строке только два параметра (какой файл, куда копировать и что), вызывает функцию Copyes.

· Del- оставляет в введённой строке только один параметр (какой файл) и вызывает функцию Delete.

В программе в основном я работаю со строковыми переменными и функциями для вырезания путей с файлами, путей, и т.д. Это всё нужно, чтобы использовать шаблоны в некоторых командах (Copy,delete).

Название библиотеки Описание функции
Stdlib.h Преобразование данных, генерирование случайных чисел, получение и установка переменных среды SHELL
Time.h Организация имитационного процесса системного времени
Iostream.h Потоки ввода \ вывода
Conio.h Прототип функции задержки
Stdio.h Обозначение потоковых файлов
Sys\stat.h Системные вызовы для работы с файлами
Sys\types.h Системные вызовы для работы с файлами
Fstream.h Операции ввода \ вывода в файлах
String.h Обработка строк
Fcntl.h Флаги
Io.h Организация ввода \ вывода
Math.h Использование математических функций

Таблица 1. Библиотеки C++.

3. Заключение

В данной курсовой работе были рассмотрены команды MS DOS, позволяющие копировать, удалять, переименовывать файлы. А также функции и системные вызовы языка С++, позволяющие организовывать копирование, удаление файлов и т.д. Данная работа позволила мне более углубленно изучить работу с строковыми функциями, различные тонкости языка и увидеть недостатки С++. В курсовой работе была создана и описана программа, позволяющая работать с файлами в среде MS DOS. Данная программа может быть использована студентами для изучения работы с файлами в среде MS DOS и частично с UNIX, на лабораторных занятиях по изучению теоретического материала и приобретения практических навыков по дисциплине «Системное Программное Обеспечение».

4. СПИСОК ЛИТЕРАТУРЫ

1) Герхард Франкен, Сергей Молявко MS DOS для пользователя.- Киев, 1993.

2) С. Краковяк Основы организации и функционирования ОС ЭВМ.- М.: Мир, 1998.

3) С. Кейслер Проектирование операционных систем для малых ЭВМ. - М.: Мир, 1996.

4) Э. Немет, Г. Снайдер Unix. Руководство системного администратора. - Киев.: BHV, 1997.

5) Дегтярев Е.К. Введение в Unix.- М.: Память, 1992.

6) Свиридов С.В. Системные вызовы ОС UNIX.-М.:Память, 1992.

7) Дунаев С. UNIX-сервер. Настройка, конфигурирование, работа в операционной среде, Internet-возможности: в 2-х томах.Том 1.-М.:Диалог -МИФИ, 1999.

8) Дунаев С. UNIX-сервер. Настройка, конфигурирование, работа в операционной среде, Internet-возможности: в 2-х томах.Том 2.-М.:Диалог -МИФИ, 1999.

9) Шамер Л., Негус К. UNIX (серия «Без проблем»):Пер. с англ. -М.:Бином, 1998.

10) Кейлингерт П. Элементы операционных систем. Введение для пользователей. Пер. с англ.-М.:Мир,1995.

11) Персон Р. Windows 95 в подлиннике. Пер. с англ.-СПБ:BHV-Санкт -Петербург, 1996.

5. Приложение

#include <iostream.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <string.h>

#include <ctype.h>

#include <stdlib.h>

#include <dir.h>

//Процедура для копирования файла

//FILCOP----------------------------------------------------------------------

int FILCOP(char *sd,char *sf)

{

FILE *in, *out;

in = fopen(sd, "r"); открывает фаил и копирует в буфер содержимое

out = fopen(sf, "w"); открывает или создаёт фаил

while (!feof(in))

fputc(getc(in), out); заполняет новый фаил

fclose(in); fclose(out); закрывает фаил

return(0); возрашет функции значение 0

}

Функция для создания полного пути

//ANY----------------------------------------------------------------------

char *GAD(char *sm, char *namf)

{ char *zzx,kr[254],*newfil; kr[0]='&bsol;0'; устанавливаем переменые

zzx=strpbrk(sm,"&bsol;"); ишет "&bsol;"

if (zzx) { если есть

strcpy(kr,sm); копирует в kr путь без имени файла

strrev(kr); реверс строки

newfil = strstr(kr, "&bsol;"); отрезает до "&bsol;"

strrev(newfil); реверс строки

strcat(newfil,namf); добовляет имя файла в путь

strlwr(newfil); уменьшает символы

return newfil;

}

else return namf;

}

Функция для вырезки только путя

//ANY55----------------------------------------------------------------------

char *GIP(char *sm)

{ char *zzx,kr[254],*newfil; kr[0]='&bsol;0'; устанавливаем переменые

zzx=strpbrk(sm,"&bsol;"); ишет "&bsol;"

if (zzx) { если есть

strcpy(kr,sm); копирует в kr путь без имени файла

strrev(kr); реверс строки

newfil = strstr(kr, "&bsol;"); отрезает до "&bsol;"

strrev(newfil);реверс строки

strlwr(newfil);уменьшает символы

return newfil;

} else return sm;

}

Удаление фаил (а,ов)

//DELFILE----------------------------------------------------------------------

DELFILE(char *sm)

{ //char *newfil, kr[254]; устанавливаем переменые

struct ffblk ffblk; Структура о файле

int done;

done = findfirst(sm,&ffblk,0); ишет файлы

if (done==-1) cout<<"&bsol;nError"; если путь неправельный- ошибка

while (!done) ишет пока не кончатся файлы

{

if (remove(GAD(sm,ffblk.ff_name)) == 0) удаление файла

cout<<"&bsol;n Delete 1 files"; вывод на экран текста

else

cout<<"&bsol;n File do not delete "; вывод на экран текста

done = findnext(&ffblk); следующий файл

}

return (0);

}

Переименование фаила

//RENAME----------------------------------------------------------------------

RENFILE(char *sm,char *nm)

{

strcpy(kr,sm); копирует в kr путь без имени файла

strrev(kr); реверс строки

newfil = strstr(kr, "&bsol;"); отрезает до "&bsol;"

strrev(newfil);реверс строки

strlwr(newfil);уменьшает символы

if (rename(sm, nm) == 0) Фу Переименование фаила

cout<<"File renamed"; вывод на экран текста

else

cout<<"File do not renamed"; вывод на экран текста

return (0);

}

//COPY----------------------------------------------------------------------

COPYES(char *sm)

{

char *nnj,zt[254],zt2[254]; int ji=0,jiz=0; установка перемен

//ON>>>>TWO************************************************

char ff[254],fs[254],*ptr7,ffg[254],fss[254]; fs[0]='&bsol;0'; fss[0]='&bsol;0'; установка перемен

strcpy(kr,sm); копирует в kr путь без имени файла

strrev(kr); реверс строки

newfil = strstr(kr, "&bsol;"); отрезает до "&bsol;"

strrev(newfil);реверс строки

strlwr(newfil);уменьшает символы

Разделяем строку два параметра на первый

for (int i=0;i<strlen(sm);i++){ if (sm[i]==' ')break; ff[i]=sm[i];}

strncat(fs,ff,i); ptr7 = strstr(sm, " "); Чтобы ошибок небыло

Разделяем строку два параметра на первый

for (i=1;i<strlen(ptr7);i++){ if (ptr7[i]==' ')break; ffg[i-1]=ptr7[i];}

strncat(fss,ffg,i-1); Чтобы ошибок небыло

//******************************************************

char nbb[254]; уст перемен

Если есть *

if (strpbrk(fss,"*")){

strrev(fss); nbb[0]='&bsol;0'; реверс FSS

for (int q=0;q<strlen(fss);q++){ Разделение на путь и фаил

if (fss[q]!='&bsol;') nbb[q]=fss[q];else break; } копируем в NBB путь

strrev(fss);strrev(nbb); Реверсы

//cout<<"&bsol;n REEEEE--- "<<nbb;

}

//____________________________________________________________

char dt[254],dt2[254]; dt[0]='&bsol;0'; dt2[0]='&bsol;0'; int fll=0,ii=-2; уст перемен