Реализация подсистемы управления процессами
Реализация подсистемы управления файлами, использующей в качестве способа физической организации файла связанный список блоков. Разработка общей структуры модуля. Описание реализуемых в программе алгоритмов. Ввод в действие программного комплекса.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 10.07.2015 |
Размер файла | 666,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Федеральное государственное бюджетное общеобразовательное
учреждение высшего профессионального образования
Дальневосточный государственный университет путей сообщения
Кафедра: «Информационные технологии и системы»
Курсовой проект
по дисциплине: «Безопасность операционных систем»
Тема: «Реализация подсистемы управления процессами»
Выполнил: Тикканин И.С.
Проверил: Решетникова О.В.
Хабаровск
2015
Введение
управление процесс файла подсистема
Одной из основных задач ОС является предоставление удобств пользователю при работе с данными, хранящимися на дисках. Для этого ОС подменяет физическую структуру хранящихся данных некоторой удобной для пользователя логической моделью. В общем случае, данные, содержащиеся в файле, имеют некоторую логическую структуру. Эта структура является базой при разработке программы, предназначенной для обработки этих данных.
Например, чтобы текст мог быть правильно выведен на экран, программа должна иметь возможность выделить отдельные слова, строки, абзацы и т.д. Признаками, отделяющими один структурный элемент от другого, могут служить определенные кодовые последовательности или просто известные программе значения смещений этих структурных элементов, относительно начала файла. Поддержание структуры данных может быть либо целиком возложено на приложения, либо в той или иной степени может взять на себя файловая система. Файловая система - это часть операционной системы, назначение которой состоит в том, чтобы обеспечить пользователю удобный интерфейс при работе с данными, хранящимися на диске, и обеспечить совместное использование файлов несколькими пользователями и процессами.
В данной курсовой работе необходимо реализовать подсистему управления файлами, использующую в качестве способа физической организации файла связанный список блоков.
Постановка задачи
Реализовать средствами языка программирования C# модуль операционной системы для управления файлами (произвести эмуляцию работы файловой системы). Подсистема управления файлами должна уметь выполнять следующие действия с файлами:
· Создание файла;
· Удаление файла;
· Переименование файла;
· Просмотр свойств файла;
· Копирование файла;
· Вставка файла;
· Просмотр и редактирование содержимого файла, а также перемещение к слову с заданным номером.
Способ физической организации файлов должен быть представлен в виде связного списка блоков.
Анализ методов решения задачи
Физическая организация файла - это способ размещения файла на диске. Основными критериями эффективности физической организации файлов являются:
· Скорость доступа к данным.
· Объем адресной информации файла.
· Степень фрагментированнности дискового пространства.
· Максимально возможно размер файла.
Фрагментация - это наличие большого числа несмежных участков свободной памяти очень маленького размера (фрагментов). Настолько маленького, что ни одна из вновь поступающих программ не может поместиться ни в одном из участков, хотя суммарный объем фрагментов может составить значительную величину, намного превышающую требуемый объем памяти.
Существует несколько способов физической организации файла. В данной работе мы будем рассматривать способ физической организации файлов в виде связного списка блоков.
Рис.1 Размещение файла в виде связного списка блоков
Метод распределения блоков в виде связного списка решает основную проблему непрерывного выделения, то есть устраняет внешнюю фрагментацию. Каждый файл - связный список блоков диска. Запись в директории содержит указатель на первый и последний блоки файла. Каждый блок содержит указатель на следующий блок.
Внешняя фрагментация для данного метода отсутствует. При отсутствии фрагментации на уровне кластеров на диске все равно имеется определенное количество областей памяти небольшого размера, которые невозможно использовать, то есть фрагментация все же существует. Эти фрагменты представляют собой неиспользуемые части последних кластеров, назначенных файлам, так как объем файла в общем случае не кратен размеру кластера. На каждом файле в среднем теряется половина кластера. Эти потери особенно велики, когда на диске имеется большое количество маленьких файлов, а кластер имеет большой размер.
Любой свободный блок может быть использован для удовлетворения запроса. Заметим, что нет необходимости декларировать размер файла в момент создания. Файл может неограниченно расти.
Связное выделение имеет, однако, несколько существенных недостатков.
Во-первых, при прямом доступе к файлу для поиска i-го блока нужно осуществить несколько обращений к диску, последовательно считывая блоки от 1 до i-1, то есть выборка логически смежных записей, которые занимают физически несмежные секторы, может требовать много времени.
Прямым следствием этого является низкая надежность. Наличие дефектного блока в списке приводит к потере информации в остаточной части файла и, потенциально, к потере дискового пространства отведенного под этот файл.
Наконец, для указателя на следующий блок внутри блока нужно выделить место. Емкость блока, традиционно являющаяся степенью двойки (многие программы читают и пишут блоками по степеням двойки), таким образом, перестает быть степенью двойки, т.к. указатель отбирает несколько байтов.
Итоги:
Плюсы:
ь Адресная информация минимальна
ь Расположение файла может быть задано одним числом - номером первого кластера
ь Фрагментация на уровне кластеров отсутствует, так как каждый кластер может быть присоединен к цепочке кластеров какого-либо файла
ь Файл может изменять свой размер, наращивая число кластеров
Минусы:
§ Фрагментация на уровне файлов (файл может разбиваться на несмежные фрагменты)
§ Количество данных файла в одном кластере не равно степени двойки (одно слово израсходовано на номер следующего кластера), а многие программы читают данные кластерами, размер которых равен степени двойки
§ Сложность организации доступа к произвольно заданному месту файла - чтобы прочитать пятый по порядку кластер файла, необходимо последовательно прочитать четыре первых кластера, прослеживая цепочку номеров кластеров
Исходя из наличия существенных минусов при данной физической организации файла, метод связного списка обычно не используется в чистом виде.
Структура программы
Разработка общей структуры модуля
Основным классом программы будет класс «Form1», в нем будет реализована основная функциональность программы и интерфейс главного окна программы. Взаимодействие классов приведено на рисунке:
Рис. 2 Взаимодействие классов
Класс «VirtualBlock» будет хранить один блок виртуальной памяти. Из массива таких блоков будет состоять вся виртуальная память программы.
Класс «VirtualFile» представляет собою модель организации файла в виде связного списка блоков. В этом классе используются следующие поля: строковая переменная name - имя файла, по которому его можно идентифицировать (все имена файлов уникальны), а также связный список типа VirtualBlock - список виртуальных блоков памяти, который занимает файл.
Формы «CreateFile», «OpenFile», «RenameFile» будут вспомогательными и будут служить элементами интерфейса для управления программой. Класс “Program” является основным исполнительным классом, служит для запуска и взаимодействия программы с операционной системой.
Распишем подробно атрибуты и методы основного класса Form1:
1. Form1_Load - выбираем все файлы с расширением «.txt», находящиеся в корневом каталоге проекта и записываем их в связный список файлов типа VirtualFile. Имя файла получаем, используя статический метод Path.GetFileNameWithoutExtension, который возвращает имя файла без расширения. Считав содержимое каждого файла, разбиваем его на виртуальные блоки. Полученные блоки добавляем в список блоков.
2. GetFile - принимает в качестве аргументов две строковые переменные: имя файла и его содержание. Возвращает объект типа VirtualFile, используя входные параметры.
3. GetText - по передаваемому в качестве аргумента имени файла возвращает строку с его содержимым.
4. FileRename - переименовывает имя файла. Принимает в качестве аргумента две строковые переменные, содержащие имя старого и нового файла. Результатом работы метода является изменение имени в списке файлов.
5. RemoveFile - по введённому номеру файла в списке осуществляет его удаление.
6. ReWriteFile - полностью перезаписывает файл. В качестве аргументов принимает две строковых переменных: имя файла и новый текст файла. По имени файла осуществляется его поиск в списке.
7. UpdateListBox - обновляет список файлов в графическом компоненте ListBox, отображаемый пользователю.
8. button3_Click - открывает форму «OpenFile», в которой отображает содержимое выбранного файла.
9. listBox1_SelectedIndexChanged - реагирует на смену файла или снятие выделения со всех файлов. Эта реакция заключается в изменении уровней видимости некоторых графических компонентов, изменение перечня возможных действий с файлами.
10. checkBox1_CheckedChanged - снимает выделение со всех файлов.
11. button1_Click - отображает диалоговое окно для создания нового файла и реагирует на различные действия пользователя, совершённые при работе с ним.
12. button2_Click - отображает диалоговое окно для переименования выбранного пользователем файла и реагирует на различные действия пользователя, совершённые при работе с ним.
13. button4_Click - удаляет выбранный пользователем файл. Перед удалением запрашивает разрешение на удаление файла у пользователя.
14. Copy - осуществляет копирование файла. В качестве аргумента принимает объект типа VirtualFile, в качестве результат - объект типа VirtualFile, являющийся полной копией входного.
15. button5_Click - осуществляет копирование файла в переменую типа VirtualFile, являющуюся виртуальным буфером обмена.
16. GetLine - извлекает из файла текст. Входным значением является параметр типа VirtualFile, выходным - строка с содержанием файла.
17. button6_Click - осуществляет вставку файла, хранящегося в буфере обмена.
18. pictureBox1_Paint - отрисовывает в графическом компоненте PictureBox структурное содержание файла: чёрный прямоугольник - ячейка памяти содержит символ пустой ячейки, красным - ячейка содержит символ «пробел», жёлтым - ячейка содержит символ конца строки, зелёным - ячейка не пуста, и не содержит ни один из вышеперечисленных символов.
Описание реализуемых в программе алгоритмов
Рассмотрим алгоритмы работы с файлами, реализованные в данной программе:
Создание нового файла. Создание файла осуществляется по следующему алгоритму:
1. После нажатия кнопки «Создать» в главной форме программы, пользователю откроется диалоговое окно «Создание файла», предлагающее ввести пользователю имя создаваемого файла и его содержание.
2. После того, как пользователь введёт необходимые ему параметры файла, он нажимает на кнопку закрытия формы. Программа спрашивает, необходимо ли сохранить внесённые изменения. Если пользователь отвечает утвердительно, программа начинает анализировать введённое имя файла.
3. В первую очередь, программа проверит условие, не забыл ли пользователь ввести имя файла. Если поле имени файла пустое, программа сгенерирует ошибку «Имя файла не может быть пустым!». Если пользователь указал имя файла, программа переходит к анализу следующего условия.
4. Во вторую очередь, программа проверит имя файла на содержание запрещённых символов. В ОС Windows не разрешается в именах файлов использовать 9 символов: '/', '?', '*', ':', '>', '<', '"', '|', '\\'. Если хотя бы один из символов будет обнаружен, программа выдаст ошибку: «Имя файла не может содержать символ» с указанием запрещённого символа, обнаруженного в имени файла. Если программа не найдёт ошибки, то настанет очередь последней проверки.
5. В последнюю очередь, программа проверит, нет ли файла с таким именем в памяти программы. При загрузке формы, в конструкторе мы передали в качестве параметра массив строк, содержащий имена уже существующих в корневой директории проекта файлов. Программа сравнивает введённое имя с каждым именем файла из массива и если найдёт совпадение, закончит проверку и выдаст сообщение об ошибке: «Файл с таким именем уже существует». Если совпадений обнаружено не будет, программа приступит к созданию файла.
6. После получения всех необходимых параметров, программа приступает к созданию файла. Строка с содержанием файла, разбивается на виртуальные блоки по 10 ячеек. Как только блок будет заполнен, программа добавляет этот блок в связный список. Если содержание файла закончилось, а блок не до конца заполнен, он добавляется в связанный список: пустые ячейки будут содержать символ «~». После всех операций, файл создаётся физически в корневой папке проекта. И наконец, вызывается метод UpdateListBox, который обновляет список файлов, отображаемый в главной форме программы.
Переименование выбранного файла. Переименование файла, выбранного пользователем, осуществляется по следующему алгоритму:
1. Когда пользователь выбирает из списка файл, кнопка «Переименовать» становится доступной. Нажав на неё, пользователю открывается диалоговое окно «Переименование файла», предлагающее ввести новое имя файла.
2. Пользователь вводит имя файла и нажимает кнопку закрытия окна. Программа выдаёт сообщение «Сохранить внесённые изменения?» с вариантами выбора: Да, Нет и Отмена. Если пользователь выбирает вариант «Отмена» - программа не закрывает диалоговое окно. Если пользователь выбирает «Нет» - диалоговое окно закрывает и пользователь возвращает в главное окно программы, при этом никаких изменений не происходит. Если пользователь выбирает «Да» - программа включает механизм проверки корректности введённого имени файла такой же, как и при создании файла.
3. После успешного прохождения механизма проверки, программа вызывает метод переименования файла FileRename из главной формы, который переименовывает файл в списке файлов. После этого, имя физического файла, хранящегося в корневой папке проекта, меняется на новое. После выполнения всех этих операций, вызывается метод UpdateListBox, который обновляет список файлов, отображаемый в главной форме программы.
Открытие файла с возможностью внесения изменений в его содержание. Открытие файла, выбранного пользователем, осуществляется по следующему алгоритму:
1. Когда пользователь выбирает из списка файл, кнопка «Открыть» становится доступной. Нажав на неё, пользователю открывается диалоговое окно «Открытие файла», предлагающее ввести новое имя файла.
2. По заданию, необходимо реализовать функцию перехода к слову по его номеру в тексте. По нажатию функциональной клавиши «F1» пользователю открывается диалоговое окно «Переход к слову с заданным номером», в котором пользователю предлагает ввести номер слова. Если пользователь захочет выйти из формы, то он нажимает кнопку закрытия формы, при этом поле ввода номера слова должно оставаться пустым. Если пользователь захочет использовать эту функцию, он вводит соответствующее значение в поле ввода номера. После этого он нажимает на закрытие формы. В дело вступает алгоритм проверки корректности вводимого аргумента: проверка, является ли строка натуральным числом и можно ли её перевести в формат целых чисел
3. Если пользователь решит отредактировать файл, он изменяет его содержание и нажимает кнопку закрытия формы. Пользователь вводит имя файла и нажимает кнопку закрытия окна. Программа выдаёт сообщение «Сохранить внесённые изменения?» с вариантами выбора: Да, Нет и Отмена. Если пользователь выбирает вариант «Отмена» - программа не закрывает диалоговое окно. Если пользователь выбирает «Нет» - диалоговое окно закрывает и пользователь возвращает в главное окно программы, при этом никаких изменений не происходит. Если пользователь выбирает «Да» - программа запустит процедуру сохранения файла.
4. Программа выполняет метод ReWriteFile, который находит файл в списке файлов, перезаписывает связный список блоков файлов, а затем перезаписывает физический файл.
Удаление файла. Удаление файла, выбранного пользователем, осуществляется по следующему алгоритму:
1. Пользователь выбирает файл, после чего кнопка Удалить файл становится доступной. Нажав её, система выдаёт предупреждение: «Вы действительно хотите удалить выбранный файл?» и два варианта ответа к нему: Да и Нет.
2. Если пользователь при выборе варианта ответа на сообщение выберет вариант Нет, то сообщение закрывается и никаких изменений в системе не происходит.
3. Если пользователь выберет ответ Нет, то система выполнит код, написанный в методе RemoveFile и удалит весь файл сначала из виртуального списка файлов, а затем и физически из корневого каталога проекта. После всех этих действий вызовется метод UpdateListBox, который обновляет список файлов, отображаемый в главной форме программы.
Копирование файла. При нажатии пользователем кнопки Копировать в переменную типа VirtualFile, служащую буфером обмена копируется название файла, а также его содержание, разбитое на блоки. Копирование осуществляется с помощью метода Copy.
Вставка файла. Вставка файла осуществляется по следующему алгоритму:
1. Пользователь снимает выделение со всех файлов и нажимает кнопку Вставить.
2. Создаётся объект типа VirtualFile, в который с помощью метода Copy осуществляется копирование объекта такого же типа, находящегося в виртуальному буфере обмена.
3. После выполнения предыдущего шага, необходимо добавить полученный объект в список файлов. Однако сразу этого сделать нельзя, так как имена файлов должны быть уникальны. Для решения этой задачи мы запускаем цикл от 1, в котором проверяем, существует ли в списке файлов у какого-нибудь файла имя, сформированное из двух строк: имени файла, находящегося в буфере обмена плюс переменная цикла. Если такое имя существует, переменная цикла увеличивается на 1, а проверка заканчивается. Это продолжается до тех пор, пока мы не установим, что подобранное имя файла уникально.
4. Как только мы подберём подходящее имя файла, мы изменяем имя объекта VirtualFile, полученного на 1 шаге на подобранное в 3-ем. После этого мы добавляем готовый объект в виртуальный список файлов, после чего создаём его физически. В конце, мы вызываем метод UpdateListBox, который обновляет список файлов, отображаемый в главной форме программы.
Руководство пользователя
Общие сведения
Разработчик - Тикканин Иван Сергеевич, студент группы 23К
Дата создания - Июнь 2015г
Язык интерфейса пользователя - Русский
Компоненты пакета - Курсовой проект.exe
Назначение программы
Изучение теоретических основ построения подсистемы управления файлами, а также наглядное представление организации и функционирования файловых систем различных ОС.
Используемые технические средства
· Операционная система - Windows XP, Vista, 7, 8
· Свободное место на жестком диске - не менее 800 Кб
· Объем оперативной памяти - не менее 16 Мб
· Процессор Intel Core i3
· Видеокарта 2048 Мб
Ввод в действие программного комплекса
Данный программный продукт не требует установки на ПК, достаточно просто скопировать файл «Курсовой проект.exe» в нужную пользователю папку. Для запуска программы необходимо два раза щелкнуть левой кнопкой мыши по исполняемому файлу Курсовой проект.exe. После запуска программы откроется главное окно программы.
Заключение
В ходе выполнения данной курсовой работы был создан модуль подсистемы управления файлами, основанный на технологии физического хранения файлов в виде связанного списка блоков. Данная технология позволяет минимизировать адресную информацию о файле, относительно легко работать с файлами и получать доступ к любому блоку, так как каждый блок памяти хранит ссылку, как на предыдущий, так и следующий за ним блок, а также избежать фрагментации на уровне кластеров. Однако стоит отметить и существенные недостатки данного метода, наиболее главным из которых - это сложность организации доступа к произвольно заданному месту файла - чтобы прочитать пятый по порядку кластер файла, необходимо последовательно прочитать четыре первых кластера, прослеживая цепочку номеров кластеров. Этот недостаток потребует выделение определённого количества ресурсов компьютера, что при работе одновременно с несколькими большими по объёму файлами приведёт к замедлению работы всей системы в целом. Созданный модуль наглядно демонстрирует возможности хранения файлов на диске, но имеет достаточное количество допущений, которые необходимо будет учитывать при разработке настоящего модуля подсистемы управления файлами для операционной системы. Также, стоит отметить, что данный способ организации не применяется в чистом виде, поэтому при разработке реальных файловых систем не нужно руководствовать этим способом в чистом виде.
Список используемой литературы
1. Герберт Шилдт «Полный справочник по C#» Издательский дом «Вильямс», 2004.
2. Быкова Т.М. Правила оформления дипломного проекта: Метод. указания для всех форм обучения / Т.М. Быкова, Л.П. Березюк: Изд-во ДВГУПС , 2003.
3. ГОСТ 19.402-78
4. ГОСТ Р ИСО 9127-94
5. Безбогов А.А. Безопасность операционных систем : учебное пособие - М. : "Издательство «Машиностроение-1», 2007.
6. Разработка модуля учебной операционной системы: Методические указания к курсовому проектированию по дисциплине «Операционные системы» для студентов направления 0.915 - компьютерная инженерия дневной формы обучения / Сост. Г.Г.Сергеев. - Севастополь: Изд-во СевНТУ, 2006.
7. Решетникова О.В. «Лекции по дисциплине Безопасность ОС».
Приложение
Результаты работы программы
Рис. 3 Главное окно программы
Рис. 4 Окно создания нового файла
Рис. 5 Окно изменения имени выбранного файла
Рис. 6 Окно для ввода номера слова
Рис. 7 Открытие файла
Диаграмма классов
Листинг проекта
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Курсовой_проект
{
public class VirtualBlock
{
public char[] elem = new char[10];
public VirtualBlock()
{
for (int i = 0; i < 10; i++)
{
elem[i] = '~';
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Курсовой_проект
{
public class VirtualFile
{
public string name = "";
public LinkedList<VirtualBlock> Block;
public VirtualFile(string filename)
{
name = filename;
Block = new LinkedList<VirtualBlock>();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Курсовой_проект
{
public partial class CreateFile : Form
{
string[] names;
public CreateFile(string[]filenames)
{
names = new string[filenames.Length];
for (int i = 0; i < names.Length; i++)
names[i] = filenames[i];
InitializeComponent();
}
private void CreateFile_FormClosing(object sender, FormClosingEventArgs e)
{
string caption = "Создание файла";
string message = "Сохранить внесённые изменения?";
DialogResult DR = MessageBox.Show(message, caption, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (DR == DialogResult.Yes)
{
if (textBox1.Text == "")
{
caption = "Неверное имя файла";
message = "Имя файла не может быть пустым!";
MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
e.Cancel = true;
}
else
{
char[] symbols = { '/', '?', '*', ':', '>', '<', '"', '|', '\\' };
bool error = false;
for (int i = 0; i < symbols.Length; i++)
{
if (textBox1.Text.Contains(symbols[i]))
{
caption = "Неверное имя файла";
message = "Имя файла не может содержать символ " + symbols[i];
MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
e.Cancel = true;
error = true;
break;
}
}
if (error == false)
{
bool exists = false;
for (int n = 0; n < names.Length; n++)
{
if (textBox1.Text == names[n])
{
exists = true;
break;
}
}
if (exists == true)
{
caption = "Неверное имя файла";
message = "Файл с таким именем уже существует";
MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
e.Cancel = true;
}
else
this.DialogResult = DialogResult.Yes;
}
}
}
else
{
if (DR == DialogResult.No)
this.DialogResult = DialogResult.No;
else
{
this.DialogResult = DialogResult.Cancel;
e.Cancel = true;
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Курсовой_проект
{
public partial class OpenFile : Form
{
bool flag;
public OpenFile()
{
InitializeComponent();
}
private void OpenFile_SizeChanged(object sender, EventArgs e)
{
this.textBox1.Size = new Size(this.Size.Width - 12, this.Size.Height - 37);
}
private void OpenFile_Load(object sender, EventArgs e)
{
textBox1.SelectionStart = textBox1.TextLength;
textBox1.SelectionLength = 0;
flag = false;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
flag = true;
}
private void OpenFile_FormClosing(object sender, FormClosingEventArgs e)
{
if (flag == true)
{
string caption = "Сохранение файла";
string message = "Сохранить внесённые изменения?";
DialogResult DR = MessageBox.Show(message, caption, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (DR == DialogResult.Yes)
this.DialogResult = DialogResult.Yes;
else
{
if (DR == DialogResult.No)
this.DialogResult = DialogResult.No;
else
{
this.DialogResult = DialogResult.Cancel;
e.Cancel = true;
}
}
}
}
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.F1)
{
string text = textBox1.Text;
uint index=1;
for (int i = 0; i < text.Length; i++)
{
if ((text[i] == ' ') || (text[i] == '\r' && text[i + 1] == '\n'))
index++;
}
Seek seek = new Seek(index);
seek.ShowDialog();
uint number;
if (seek.DialogResult == DialogResult.OK)
{
number = Convert.ToUInt32(seek.textBox1.Text);
uint count = 1;
bool first = true;
textBox1.SelectionLength = 0;
for (int i = 0; i < text.Length; i++)
{
if ((text[i] == ' ') || ((text[i] == '\r') && (text[i + 1] == '\n')))
count++;
else
{
if (count == number)
{
if (first == true)
{
textBox1.SelectionStart = i;
first = false;
}
textBox1.SelectionLength++;
}
}
if (count > number)
break;
}
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Курсовой_проект
{
public partial class RenameFile : Form
{
string[] names;
bool rename;
public RenameFile(string[] filenames)
{
names = new string[filenames.Length];
for (int i = 0; i < names.Length; i++)
names[i] = filenames[i];
InitializeComponent();
}
private void RenameFile_FormClosing(object sender, FormClosingEventArgs e)
{
if (rename == true)
{
string caption = "Переименование файла";
string message = "Сохранить внесённые изменения?";
DialogResult DR = MessageBox.Show(message, caption, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (DR == DialogResult.Yes)
{
if (textBox1.Text == "")
{
caption = "Неверное имя файла";
message = "Имя файла не может быть пустым!";
MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
e.Cancel = true;
}
else
{
char[] symbols = { '/', '?', '*', ':', '>', '<', '"', '|', '\\' };
bool error = false;
for (int i = 0; i < symbols.Length; i++)
{
if (textBox1.Text.Contains(symbols[i]))
{
caption = "Неверное имя файла";
message = "Имя файла не может содержать символ " + symbols[i];
MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
e.Cancel = true;
error = true;
break;
}
}
if (error == false)
{
bool exists = false;
for (int n = 0; n < names.Length; n++)
{
if (textBox1.Text == names[n])
{
exists = true;
break;
}
}
if (exists == true)
{
caption = "Неверное имя файла";
message = "Файл с таким именем уже существует";
MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
e.Cancel = true;
}
else
this.DialogResult = DialogResult.Yes;
}
}
}
else
{
if (DR == DialogResult.No)
this.DialogResult = DialogResult.No;
else
{
this.DialogResult = DialogResult.Cancel;
e.Cancel = true;
}
}
}
}
private void RenameFile_Load(object sender, EventArgs e)
{
rename = false;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
rename = true;
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Курсовой_проект
{
public partial class Seek : Form
{
uint seek;
public Seek(uint s)
{
seek = s;
InitializeComponent();
}
private void Seek_FormClosing(object sender, FormClosingEventArgs e)
{
if (textBox1.Text == "")
this.DialogResult = DialogResult.Cancel;
for (int i = 0; i < textBox1.Text.Length; i++)
{
if (Char.IsDigit(textBox1.Text[i]) == false)
{
string caption = "Ошибка ввода";
string message = "Ввдённая строка не является числом";
DialogResult DR = MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
e.Cancel = true;
break;
}
}
if (e.Cancel == false)
{
if (textBox1.Text == "0")
{
string caption = "Ошибка ввода";
string message = "Номер слова не может быть 0";
MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
e.Cancel = true;
}
else
{
if (seek < Convert.ToUInt32(textBox1.Text))
{
string caption = "Ошибка ввода";
string message = "Введённый номер больше, чем количество слов в тексте";
MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
e.Cancel = true;
}
else
this.DialogResult = DialogResult.OK;
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Курсовой_проект
{
public partial class Legend : Form
{
public Legend()
{
InitializeComponent();
}
private void Legend_Load(object sender, EventArgs e)
{
panel1.BackColor = Color.Red;
panel2.BackColor = Color.Gold;
panel3.BackColor = Color.Black;
panel4.BackColor = Color.Green;
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Курсовой_проект
{
public partial class Form1 : Form
{
public List<VirtualFile> Files = new List<VirtualFile>();
public string RootPath = Environment.CurrentDirectory+ "\\";
VirtualFile buffer = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string[] files = Directory.GetFiles(RootPath, "*.txt");
for (int i = 0; i < files.Length; i++)
{
StreamReader SR = new StreamReader(files[i]);
string content = SR.ReadToEnd();
SR.Close();
files[i] = Path.GetFileNameWithoutExtension(files[i]);
Files.Add(GetFile(files[i], content));
}
button1.Enabled = true;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button5.Enabled = false;
button6.Enabled = false;
UpdateListBox();
}
public VirtualFile GetFile(string filename, string content)
{
VirtualFile VF = new VirtualFile(filename);
byte index=0;
VirtualBlock VB=new VirtualBlock();
for (int i = 0; i < content.Length; i++)
{
VB.elem[index] = content[i];
if ((index == 9) || (i == content.Length - 1))
{
index = 0;
VF.Block.AddLast(VB);
VB = new VirtualBlock();
}
else
index++;
}
return VF;
}
public string GetText(string filename)
{
string text = "";
for (int i = 0; i < Files.Count; i++)
{
if (Files[i].name == filename)
{
LinkedListNode<VirtualBlock> node;
for (node = Files[i].Block.First; node != null; node = node.Next)
{
for (int k = 0; k < node.Value.elem.Length; k++)
if (node.Value.elem[k] != '~')
text += node.Value.elem[k];
else
break;
}
break;
}
}
return text;
}
public void FileRename(string oldname, string newname)
{
for (int i = 0; i < Files.Count; i++)
{
if (Files[i].name == oldname)
{
Files[i].name = newname;
}
}
}
public void RemoveFile(int i)
{
Files[i].name = "";
Files[i].Block = new LinkedList<VirtualBlock>();
Files.RemoveAt(i);
}
public void ReWriteFile(string filename, string text)
{
for (int i = 0; i < Files.Count; i++)
{
if (Files[i].name == filename)
{
Files[i].Block = null;
Files[i].Block = new LinkedList<VirtualBlock>();
VirtualBlock VB = new VirtualBlock();
byte index = 0;
for (int j = 0; j < text.Length; j++)
{
VB.elem[index] = text[j];
if ((index == 9) || (j == text.Length - 1))
{
Files[i].Block.AddLast(VB);
index = 0;
VB = new VirtualBlock();
}
else
index++;
}
break;
}
}
}
public void UpdateListBox()
{
listBox1.ClearSelected();
listBox1.Items.Clear();
for (int i = 0; i < Files.Count; i++)
listBox1.Items.Add(Files[i].name);
}
private void button3_Click(object sender, EventArgs e)
{
OpenFile OF = new OpenFile();
OF.Text = Files[listBox1.SelectedIndex].name + ".txt";
OF.textBox1.Text = GetText(Files[listBox1.SelectedIndex].name);
OF.ShowDialog();
if (OF.DialogResult == DialogResult.Yes)
{
ReWriteFile(Files[listBox1.SelectedIndex].name, OF.textBox1.Text);
StreamWriter SW = new StreamWriter(RootPath + Files[listBox1.SelectedIndex].name + ".txt");
SW.Write(OF.textBox1.Text);
SW.Close();
pictureBox1.Refresh();
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex == -1)
{
button1.Enabled = true;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button5.Enabled = false;
if (buffer != null)
button6.Enabled = true;
else
button6.Enabled = false;
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
}
else
{
button1.Enabled = false;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true;
button6.Enabled = false;
checkBox1.Enabled = true;
FileInfo FI = new FileInfo(RootPath + Files[listBox1.SelectedIndex].name + ".txt");
textBox1.Text = FI.Length + " байт";
textBox2.Text = FI.CreationTime.ToShortDateString();
textBox3.Text = FI.FullName;
}
pictureBox1.Refresh();
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
listBox1.SelectedIndex = -1;
checkBox1.Checked = false;
checkBox1.Enabled = false;
}
private void button1_Click(object sender, EventArgs e)
{
string[] filenames = new string[Files.Count];
for (int i = 0; i < filenames.Length; i++)
filenames[i] = Files[i].name;
CreateFile CF = new CreateFile(filenames);
CF.ShowDialog();
if (CF.DialogResult == DialogResult.Yes)
{
Files.Add(GetFile(CF.textBox1.Text, CF.textBox2.Text));
StreamWriter SW = new StreamWriter(RootPath + CF.textBox1.Text + ".txt");
SW.Write(CF.textBox2.Text);
SW.Close();
UpdateListBox();
}
}
private void button2_Click(object sender, EventArgs e)
{
string[] filenames = new string[Files.Count];
for (int i = 0; i < filenames.Length; i++)
filenames[i] = Files[i].name;
RenameFile RF = new RenameFile(filenames);
RF.Text += " " + Files[listBox1.SelectedIndex].name + ".txt";
RF.textBox1.Text = Files[listBox1.SelectedIndex].name;
RF.ShowDialog();
if (RF.DialogResult == DialogResult.Yes)
{
FileRename(Files[listBox1.SelectedIndex].name, RF.textBox1.Text);
File.Move(RootPath + listBox1.Items[listBox1.SelectedIndex] + ".txt", RootPath + RF.textBox1.Text + ".txt");
UpdateListBox();
}
}
private void button4_Click(object sender, EventArgs e)
{
string caption = "Удаление файла";
string message = "Вы действительно хотите удалить выбранный файл?";
DialogResult DR = MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (DR == DialogResult.Yes)
{
string name = Files[listBox1.SelectedIndex].name;
RemoveFile(listBox1.SelectedIndex);
File.Delete(RootPath + name + ".txt");
UpdateListBox();
}
}
public VirtualFile Copy(VirtualFile VF)
{
VirtualFile copy = new VirtualFile(VF.name);
LinkedListNode<VirtualBlock> node;
VirtualBlock VB=new VirtualBlock();
for (node = VF.Block.First; node != null; node = node.Next)
{
for (int i = 0; i < node.Value.elem.Length; i++)
VB.elem[i] = node.Value.elem[i];
copy.Block.AddLast(VB);
VB = new VirtualBlock();
}
return copy;
}
private void button5_Click(object sender, EventArgs e)
{
buffer = Copy(Files[listBox1.SelectedIndex]);
}
public string GetLine(VirtualFile VF)
{
string text = "";
LinkedListNode<VirtualBlock> node;
for (node = VF.Block.First; node != null; node = node.Next)
{
for (int i = 0; i < node.Value.elem.Length; i++)
text += node.Value.elem[i];
}
return text;
}
private void button6_Click(object sender, EventArgs e)
{
VirtualFile pastle = Copy(buffer);
uint index=1;
bool flag;
do
{
flag = false;
for (int i = 0; i < Files.Count; i++)
{
if (Files[i].name == pastle.name + index.ToString())
{
flag = true;
index++;
break;
}
}
}
while (flag != false);
pastle.name += index.ToString();
Files.Add(pastle);
UpdateListBox();
StreamWriter SW = new StreamWriter(RootPath + pastle.name + ".txt");
SW.Write(GetLine(pastle));
SW.Close();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
if (listBox1.SelectedIndex != -1)
{
LinkedListNode<VirtualBlock> node;
byte index = 0;
for (node = Files[listBox1.SelectedIndex].Block.First; node != null; node = node.Next)
{
for (int i = 0; i < node.Value.elem.Length; i++)
{
if (node.Value.elem[i] == '~')
{
Brush brush = Brushes.Black;
Rectangle rec = new Rectangle(i * 10, index * 10, 10, 10);
g.FillRectangle(brush, rec);
}
else
{
if (node.Value.elem[i] == ' ')
{
Brush brush = Brushes.Red;
Rectangle rec = new Rectangle(i * 10, index * 10, 10, 10);
g.FillRectangle(brush, rec);
}
else
{
if (node.Value.elem[i] == '\r' || node.Value.elem[i] == '\n')
{
Brush brush = Brushes.Gold;
Rectangle rec = new Rectangle(i * 10, index * 10, 10, 10);
g.FillRectangle(brush, rec);
}
else
{
Brush brush = Brushes.Green;
Rectangle rec = new Rectangle(i * 10, index * 10, 10, 10);
g.FillRectangle(brush, rec);
}
}
}
}
index++;
}
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
Legend legend = new Legend();
legend.ShowDialog();
}
}
}
Размещено на Allbest.ru
Подобные документы
Объекты и методы проведения предпроектного обследования предприятия, анализ результатов . Схема организационной структуры управления и документооборота. Назначение информационной подсистемы. Реализация подсистемы "Helpdesk" на основе "1С: Предприятие".
дипломная работа [6,9 M], добавлен 24.06.2011Анализ функциональной структуры и обеспечивающей части АСУ. Проектирование функциональной структуры подсистемы управления проблемами, разработка модели в среде CPN Tools и алгоритма работы. Описание программного и технического обеспечения проекта.
дипломная работа [5,6 M], добавлен 26.06.2011Описание особенностей подсистемы обеспечения медикаментами. Разработка структуры базы данных, схемы алгоритма и программного модуля, структуры реестра. Обоснование выбора языка программирования. Оценка надежности и классификация ошибок программы.
дипломная работа [1,3 M], добавлен 25.12.2014Состав и содержание работ по подготовке объекта автоматизации к вводу подсистемы в действие. Реализация пользовательского интерфейса "Менеджер". Создание проекта в программе "1С: Предприятие". Экономическая эффективность внедрения программного продукта.
дипломная работа [7,2 M], добавлен 01.07.2011Разработка автоматизированной информационной подсистемы учета свидетельств обязательного пенсионного страхования для Управления Пенсионного фонда России. Атрибуты сущностей базы данных, создание интерфейса формы и описание логической структуры программы.
дипломная работа [7,5 M], добавлен 24.06.2011Разработка концептуальной модели базы данных. Реализация алгоритмов и разработка управляющей программы. Разработка структуры системы управления данными. Методика проведения и результаты тестирования. Функционирование разработанного программного модуля.
курсовая работа [550,5 K], добавлен 08.06.2023Проектирование базы данных, информационной подсистемы PLC-Tester, модуля тестирования и web-приложения. Разработка логической структуры программного продукта и общие требования к техническому обеспечению. Запуск программы и описание тестовых прогонов.
дипломная работа [3,2 M], добавлен 30.06.2011Основные функции и процессы подсистемы управления процессами. Диспетчеризация процессов (потоков). Алгоритмы планирования выполнения потоков. Назначение и разновидности приоритетов в операционных системах. Функции подсистемы управления основной памятью.
презентация [117,7 K], добавлен 20.12.2013Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.
курсовая работа [215,3 K], добавлен 01.09.2010Разработка информационного и алгоритмического обеспечения системой управления базами данных Microsoft Access. Реализация и принцип работы основных компонентов подсистемы поддержки принятия решений. Особенности разработки программного модуля в Delphi.
реферат [333,9 K], добавлен 15.11.2009