Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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

 

Моя программа интерпретирует команды 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++.


Заключение

 

В данной курсовой работе были рассмотрены команды 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; уст перемен

Разделяем строку фаил на наз и расширение

for (int q=0;q<strlen(nbb);q++){ цикл

if (nbb[q]=='.') fll=1; Если точка то флаг 1

if (fll==0) {dt[q]=nbb[q]; } Если 0 копируем в DT

if (fll==1) {ii++;dt2[ii]=nbb[q]; } Если 1 копируем в DT2

 }

//____________________________________________________________

 

//cout<<"\n REEEEE111--- "<<dt;

//cout<<"\n REEEEE222--- "<<dt2;

 

//---------------------------------------------------------------------------

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

    int done;

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

    if (done==-1) cout<<"\nError"; если нет то ошибка

    while (!done) начало поиска

    {

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    zt[0]='\0'; zt2[0]='\0'; fll=0;ii=-2;nnj=ffblk.ff_name; ji=0;jiz=0; Установка перемен

 

Разделение первого пар файла на имя и расширение      

for (q=0;q<strlen(nnj);q++){ цикл

    if (nnj[q]=='.') fll=1; если точка то флаг 1

    if (fll==0) {ji++;zt[q]=nnj[q]; } Если 0 копируем в ZT

    if (fll==1) {jiz++;ii++;zt2[ii]=nnj[q]; } } Если 1 копируем в ZT2

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

              zt[ji]='\0'; zt2[jiz-1]='\0'; char *rrr; rrr=NULL; Обнулить перем

              char *path2,bpn[254]; установка перем

path2=GIP(fss); Обработка моей функции      

 

bpn[0]='\0'; strcpy(bpn,path2); копир в BPN

Если во втором параметре есть звёздочки то из первого парам заменяется второй

 

Замена у второго параметра имени именем первого параметра        

if (dt[0]!='*'){ strcat(bpn,dt); strcat(bpn,"."); } else

 

              { strcat(bpn,zt); strcat(bpn,".");  }

 

              if (dt2[0]!='*') strcat(bpn,dt2); else strcat(bpn,zt2);

 

Замена у второго параметра расширения расширением первого параметра

              strlwr(bpn); уменьшение символов

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

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

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

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

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

 

 FILCOP(GAD(fs,ffblk.ff_name),bpn); Обработка моей функции и копирование

 

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

    }

 

//---------------------------------------------------------------------------

 return (0);

     }

 

//MAIN----------------------------------------------------------------------

void main()

{

char s[254],*ptr,*lptr; установка переменных

 

gotoxy(16,0); установка текста в опред. части экрана

 

cout<<"Interpretator commands DOS (COPY,DEL,REN)"; вывод на экран текста

 

gotoxy(0,23); установка текста в опред. части экрана

Enter: метка

cout<<"\n>>>"; вывод на экран текста

gets(s); strlwr(s); чтение с клавиатуры и уменшение символов

 

//++++++++++++++++DEL==================

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

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

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

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

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

ptr = strstr(s, "del "); ишет "del "

if (strlen(ptr)!=0) { если есть

strcpy(s, ptr); копирует строку в S

 

int i,vb=-1; char sg[254]; установка переменных

for (i=4;i<strlen(s);i++){ Удаляет "del "

vb++;

sg[vb]=s[i]; заносит в sg

}

lptr=NULL; обнуляет lptr

 

lptr=strtok(sg,""); Чтобы ошибок не было

DELFILE(lptr); Собственная функция

 

    }

//++++++++++++++++REN==================

ptr = strstr(s, "ren "); ищет "ren "

if (strlen(ptr)!=0) { если есть

 

strcpy(s, ptr); копирут строку в S

int i,vb=-1; char sg[254]; установка переменных

for (i=4;i<strlen(s);i++){ удаляет "ren "

vb++;

sg[vb]=s[i]; заносит в SG

}

lptr=NULL; обнуляет lptr

lptr=strtok(sg,""); Чтобы ошибок не было

 

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

char ff[254],fs[254],*ptr7,ffg[254],fss[254]; устовка переменных

fs[0]='\0'; fss[0]='\0'; обнуление

 

for (i=0;i<strlen(lptr);i++){ Разделение сткоки на два параметра

if (lptr[i]==' ')break; Копирование в ff до пробела

ff[i]=lptr[i];}

strncat(fs,ff,i); Чтобы ошибок не было

 

ptr7 = strstr(lptr, " "); ишет пробел

 

for (i=1;i<strlen(ptr7);i++){ Удаляет пробел и копирует в FFG

if (ptr7[i]==' ')break;

ffg[i-1]=ptr7[i];}

 

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

 

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

RENFILE(fs,fss); Собственная функция

 

                                           }

//++++++++++++++++COPY==================

ptr = strstr(s, "copy "); ешет "copy "

if (strlen(ptr)!=0) { Удаляет "copy "

strcpy(s, ptr); копирут строку в S

int i,vb=-1; char sg[254]; Установка перем

for (i=5;i<strlen(s);i++){ Удаляет copy

vb++;

sg[vb]=s[i]; копирует в SG

}

lptr=NULL; обнуляет lptr

lptr=strtok(sg,""); Чтобы ошибок не было

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

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

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

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

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

ptr =strstr(lptr,"con "); ишет "con "

if (ptr){ cout<<"\nNot is function, re-enter"; goto Enter; }

Если есть выводит сообщение

 

ptr =strstr(lptr,"+"); ишет +

if (ptr){ cout<<"\nNot is function, re-enter"; goto Enter; }

Если есть выводит сообщение

 

COPYES(lptr); Собственная функция

                                                    }

//++++++++++++++++EXIT==================

ptr = strstr(s, "exit"); ишет "exit"

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

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

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

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

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

if (strlen(ptr)!=0) exit(EXIT_FAILURE);

если есть то выход программы

 

goto Enter; на метку

}

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...