Алгоритм решения поставленной задачи, выполненный с помощью графического метода изображения алгоритмов – блок-схемой представлен ниже.
Для реализации моей задачи используется следующий алгоритм (рисунок 1.).
Описание алгоритма:
1. Ввод команды с клавиатуры
2. Индификация вводимой команды
3. Операции над параметрами команды
4. Выполнение команды
Моя программа интерпретирует команды 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 | Использование математических функций |
В данной курсовой работе были рассмотрены команды MS DOS, позволяющие копировать, удалять, переименовывать файлы. А также функции и системные вызовы языка С++, позволяющие организовывать копирование, удаление файлов и т.д. Данная работа позволила мне более углубленно изучить работу с строковыми функциями, различные тонкости языка и увидеть недостатки С++. В курсовой работе была создана и описана программа, позволяющая работать с файлами в среде MS DOS. Данная программа может быть использована студентами для изучения работы с файлами в среде MS DOS и частично с UNIX, на лабораторных занятиях по изучению теоретического материала и приобретения практических навыков по дисциплине «Системное Программное Обеспечение».
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.
#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]='\0'; устанавливаем переменые
zzx=strpbrk(sm,"\"); ишет "\"
if (zzx) { если есть
strcpy(kr,sm); копирует в kr путь без имени файла
strrev(kr); реверс строки
newfil = strstr(kr, "\"); отрезает до "\"
strrev(newfil); реверс строки
strcat(newfil,namf); добовляет имя файла в путь
strlwr(newfil); уменьшает символы
return newfil;
}
else return namf;
}
Функция для вырезки только путя
//ANY55----------------------------------------------------------------------
char *GIP(char *sm)
{ char *zzx,kr[254],*newfil; kr[0]='\0'; устанавливаем переменые
zzx=strpbrk(sm,"\"); ишет "\"
if (zzx) { если есть
strcpy(kr,sm); копирует в kr путь без имени файла
strrev(kr); реверс строки
newfil = strstr(kr, "\"); отрезает до "\"
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<<"\nError"; если путь неправельный- ошибка
while (!done) ишет пока не кончатся файлы
{
if (remove(GAD(sm,ffblk.ff_name)) == 0) удаление файла
cout<<"\n Delete 1 files"; вывод на экран текста
else
cout<<"\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, "\"); отрезает до "\"
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]='\0'; fss[0]='\0'; установка перемен
strcpy(kr,sm); копирует в kr путь без имени файла
strrev(kr); реверс строки
newfil = strstr(kr, "\"); отрезает до "\"
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]='\0'; реверс FSS
for (int q=0;q<strlen(fss);q++){ Разделение на путь и фаил
if (fss[q]!='\') nbb[q]=fss[q];else break; } копируем в NBB путь
strrev(fss);strrev(nbb); Реверсы
//cout<<"\n REEEEE--- "<<nbb;
}
//____________________________________________________________
char dt[254],dt2[254]; dt[0]='\0'; dt2[0]='\0'; int fll=0,ii=-2; уст перемен