Реферат

Реферат Моделирование файловой системы FAT16

Работа добавлена на сайт bukvasha.net: 2015-10-28

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 22.11.2024





СОДЕРЖАНИЕ



ВВЕДЕНИЕ. 3

1 ПОСТАНОВКА ЗАДАЧИ.. 4

1.1 Теоретическое введение. 4

1.2 Постановка задачи.. 7

2 ПРОЕКТИРОВАНИЕ. 8

2.1 Выбор операционной системы... 8

2.2 Выбор языка программирования.. 8

2.3 Выбор программного обеспечения промежуточного уровня.. 8

2.4 Выбор инструментальных средств.. 8

3 разработка.. 9

3.1 Выбор архитектуры системы... 9

3.2 Построение диаграмм прецедентов и последовательности.. 9

3.3 Разработка вариантов использования.. 11

3.4 Разработка графического интерфейса.. 13

3.5 Разработка архитектуры приложения.. 14

3.6 Разработка алгоритмов работы программы... 16

3.6.1 Метод FileCreate_Click класса Mainform. 17

3.6.2 Метод FileDelete_Click класса Mainform. 18

4 тестирование программы.. 19

4.1 Тестируемые функции.. 19

4.2 Тестирование. 19

5 руководство оператора.. 21

5.1 Назначение программы... 21

5.2 Технические средства для запуска программы... 21

5.3 Работа с программой.. 21

Выводы.. 25

ПЕРЕЧЕНЬ ССЫЛОК.. 26

Приложение А.. 27

ПриложениЕ Б. 31



ВВЕДЕНИЕ
Сложность программных продуктов, в том числе и операционных систем в настоящее время растет не по годам и десятилетиям, как пару десятков лет назад, а по месяцам и дням. Но изучить каждую ее часть, находящуюся на нынешнем уровне развития, представляет собой большую трудность. Именно поэтому проще начать с того, что легло в основу каждой подсистемы ОС.

С каждым днем количество людей, заинтересованных в том, как функционирует та или иная часть ОС, растет. Поэтому становится актуальным упрощение процесса обучения и знакомства пользователей с основами работы наиболее значимых частей операционной системы, а так же выполнение этой задачи в более интересном и наглядном виде.

Примером одной из основных частей ОС является файловая система. Это регламент, определяющий способ организации, хранения и именования данных на носителях информации. Она определяет формат физического хранения информации, которую принято группировать в виде файлов. Конкретная файловая система определяет размер имени файла (папки), максимальный возможный размер файла и раздела, набор атрибутов файла. Некоторые файловые системы предоставляют сервисные возможности, например, разграничение доступа или шифрование файлов.

Файловая система связывает носитель информации с одной стороны и API для доступа к файлам — с другой. Когда прикладная программа обращается к файлу, она не имеет никакого представления о том, каким образом расположена информация в конкретном файле, так же, как и на каком физическом типе носителя (CD, жёстком диске, магнитной ленте или блоке флеш-памяти) он записан. Всё, что знает программа — это имя файла, его размер и атрибуты. Эти данные она получает от драйвера файловой системы. Именно файловая система устанавливает, где и как будет записан файл на физическом носителе (например, жёстком диске).

С точки зрения операционной системы, весь диск представляет собой набор кластеров размером от 512 байт и выше. Драйверы файловой системы организуют кластеры в файлы и каталоги (реально являющиеся файлами, содержащими список файлов в этом каталоге). Эти же драйверы отслеживают, какие из кластеров в настоящее время используются, какие свободны, какие помечены как неисправные.

Целью данного проекта является наглядное моделирование работы файловой системы FAT16, которая использовалась в MS-DOS 3.31.

Для реализации данного проекта был выбран язык C#, как один из лучших объектно-ориентированных языков программирования на данный момент.

Результатом данной работы должна быть программа, которая сможет использоваться в процессе образования людьми, которым интересны основы системного программного обеспечения.

1 ПОСТАНОВКА ЗАДАЧИ

1.1 Теоретическое введение
Файловая система FAT представляет собой таблицу размещения файлов, в которой указываются:

1) непосредственно адреса участков логического диска, предназначенные для размещения файлов;

2) свободные области дискового пространства;

3) дефектные области диска.

В этой таблице каждому блоку, предназначенному для хранения данных, соответствует 16-битовое значение. Если блок свободен, то значение будет нулевым. Если же блок принадлежит файлу, то значение равно адресу следующего блока этого файла. Если это последний блок в файле, то значение - OxFFF . Существует также специальный код для обозначения плохого блока, не читаемого из-за дефекта физического носителя. В каталоге хранится номер первого блока и длина файла, измеряемая в байтах. Емкость диска при использовании 12-битовой FAT ограничена 4096 блоками (2 Мбайт), что приемлемо для дискет, но совершенно не годится для жестких дисков и других устройств большой емкости. На таких устройствах DOS использует FAT с 16-битовыми элементами. На еще больших (более 32 Мбайт) дисках DOS выделяет пространство не блоками, а кластерами из нескольких блоков.

В таблице FAT кластеры, принадлежащие файлу или каталогу, связываются в цепочки. В 16-разрядной FAT можно иметь до 65536 кластеров. Логическое объединение секторов в кластеры позволяет уменьшить размер таблицы FAT и ускорить доступ к файлу. Однако слишком большой размер кластера приводит к неэффективному использованию области данных, особенно при большом количестве маленьких файлов. Например, при размере кластера в 32 сектора (16 Кб) средняя величина потерь на файл составляет 8 Кб. Поэтому в современных файловых системах размер кластера не превышает 4 Кб.

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

Таблица FAT является основой данной файловой системы, поэтому она хранится на диске в двух экземплярах. Обновляются копии FAT одновременно, а для работы используется только первый экземпляр. Если он окажется поврежденным, то произойдет обращение ко второму экземпляру. Утилиты проверки и восстановления файловой системы при обнаружении несоответствия первичной и резервной таблицы FAT осуществляет восстановление основной таблицы, используя данные из её копии.

Система FAT очень проста и имеет одно серьезное достоинство: врожденную устойчивость к сбоям. В то же время у нее есть и ряд серьезных недостатков. Первый недостаток состоит в том, что при каждой операции над файлами система должна обращаться к FAT. Это приводит к частым перемещениям головок дисковода и в результате к резкому снижению производительности. Действительно, исполнение программы на одной и той же машине под MS DOS и под DOS-эмулятором систем UNIX или OS/2 различается по скорости почти в 1,5 раза. Особенно это заметно при архивировании больших каталогов.

В файловой системе FAT дисковое пространство логического диска делится на системную область и область данных. Системная область создается и инициализируется при форматировании диска, а в последующем обновляется при работе. Область данных содержит файлы и каталоги, которые образуют на диске иерархическое дерево каталогов, с единственной директорией не входящей в другие - корневым каталогом. Область данных доступна через пользовательский интерфейс операционной системы. Системная область содержит загрузочную запись, зарезервированные сектора, таблицу размещения файлов и корневой каталог. Для каждого файла и каталога в файловой системе хранится справочная информация. Каждый элемент такого справочника занимает 32 байта и содержит: имя файла или каталога, расширение имени файла, атрибуты файла - системный, архивный, только для чтения и др., дату и время создания и последнего изменения файла, номер начального кластера, размер файла.











Рисунок 1.1 – Структура файловой системы FAT16



1.2 Постановка задачи
Программа, полученная в результате этого проекта должна в точности моделировать поведение файловой системы FAT16. Результаты работы программы должны выводиться на экран в виде карты диска – последовательных цепочек из заполненных, свободных или поврежденных кластеров.

Так как пользователь сам должен задавать параметры файловой системы и создаваемых файлов, то в GUI должны присутствовать такие поля для ввода данных как задание размера раздела; задание размера кластера; задание размера файла, а также его имени и расширения. Пользователю так же должна быть предоставлена возможность удаления файлов или внесения поврежденных кластеров в созданный раздел.

В том случае, если пользователь неправильно ввел значения или задал слишком большой размер файла, программа должна вывести предупреждение об ошибке и предложить повторить процедуру ввода.

При выходе программа должна предупредить пользователя о закрытии.

Предполагаемая структура GUI изображена на рисунке 1.2.
                
Рисунок 1.2 – Интерфейс разрабатываемого ПО

2 ПРОЕКТИРОВАНИЕ

2.1 Выбор операционной системы
В качестве операционной системы для разработки программной системы была выбрана ОС Windows XP. Выбор операционной системы был определен ее функциональными возможностями, а также распространенностью данной ОС.
2.2 Выбор языка программирования
В качестве языка программирования был выбран язык «C#». Этот объектно-ориентированный, со статической типизацией. Он  является основным языком разработки приложений для платформы Microsoft .NET.
2.3 Выбор программного обеспечения промежуточного уровня        
.NET Framework является новейшей, разработанной компанией Microsoft, платформой для создания обычных программ и веб-приложений.. Данная платформа включает в себя языковую среду CLR. Основное назначение CLR — выполнение приложений, соблюдение всех программных зависимостей, управление памятью, обеспечение безопасности и изоляции приложений, интеграция с языками программирования и т.п.

Данная платформа получила широкое распространение и может быть использована на всех современных версиях операционных системах Windows (начиная с Windows 2000).
2.4 Выбор инструментальных средств
В качестве системы разработки была выбрана IDE Microsoft Visual Studio 2008. Данная система совместима с семейством операционных системам Windows и обладает рядом оптимизаций для программирования именно под эти ОС.

Данная среда разработки обладает рядом преимуществ: IntelliSense, система MSDN, встроенная подсветка ошибок.

IntelliSense – встроенная технология, позволяющая ускорить процесс набора текста программы путем автоматической генерации списка доступных для вставки в данном месте программы инструкций и ключевых слов.

Среда разработки интегрируется со справочной системой MSDN, которая содержит обширный набор информации о .NET Framework, языках программирования .NET и многом другом.

3 разработка

3.1 Выбор архитектуры системы
На данный момент существует несколько разновидностей системных архитектур. Одним из примеров является двухуровневая системная архитектура (рисунок 3.1). В основе ее уровней находятся: User Interface, Business Logic. Исходя из анализа поставленной задачи, был выбран именно этот тип системной архитектуры. Это можно объяснить тем, что разрабатываемая программа должна реализовывать определенный алгоритм – Business Logic, взаимодействовать непосредственно с пользователем – User Interface.

Рисунок 3.1 – Двухуровневая системная архитектура
3.2 Построение диаграмм прецедентов и последовательности
Проведя анализ поставленной задачи, мы выявили следующих активных актеров, работающих с разрабатываемой программой:

-       пользователь;

-       файловая система.

Функции, которые могут использовать файловая система и пользователь, а также отношения между ними можно визуализировать с помощью диаграммы прецедентов (рисунок 3.2).


Рисунок 3.2 – Диаграмма вариантов использования

Прецедент «Создание раздела» заключается в создании нового раздела FAT16 для работы с ним. При выполнении данного прецедента сразу попадаем в прецедент «Ввод данных с клавиатуры».

Прецедент «Создание файла» заключается в создании нового файла в заранее созданном разделе. При выполнении данного прецедента сразу попадаем в прецедент «Ввод данных с клавиатуры».

Прецедент «Удаление файла» заключается в удалении созданного файла по его порядковому номеру. При выполнении данного прецедента сразу попадаем в прецедент «Ввод данных с клавиатуры».

         Прецедент «Добавление BAD кластеров» заключается в добавлении поврежденных кластеров в файловую систему. При выполнении данного прецедента попадаем в прецедент «Визуализация результата».

Прецедент «Ввод данных с клавиатуры» заключается в вводе соответствующих значений в зависимости от прецедента из которого был осуществлен переход. При выполнении данного прецедента выполняется переход в один из трех прецедентов:

1)     «Расположение нового файла»;

2)     «Удаление выбранного файла»;

3)     «Создание раздела».

Прецедент «Расположение нового файла» заключается в размещении файловой системой нового файла в разделе. При выполнении данного прецедента сразу попадаем в прецедент «Визуализация результата».

Прецедент «Удаление выбранного файла» заключается в удалении файла из текущего раздела. При выполнении данного прецедента сразу попадаем в прецедент «Визуализация результата».

Прецедент «Создание раздела» заключается в создании нового раздела для работы с файлами. При выполнении данного прецедента сразу попадаем в прецедент «Визуализация результата».

         Прецедент «Визуализация результата» отвечает за отображение всех изменений в файловой системе на карте диска и в списке файлов.
3.3 Разработка вариантов использования
Исходя из анализа построенной диаграммы прецедентов, а также функций, которые должна выполнять программа, были предусмотрены следующие варианты использования:



Номер

ВИ – 01

Название

Создание раздела.

Участники

Пользователь

Описание

При выполнении данного варианта использования пользователь вводит данные о размере раздела и размере кластера с помощью клавиатуры.

Предварительные условия

Нет.

Выходные условия

Параметры нового раздела переданы файловой системе.

Порядок действий

1.     Пользователь в любом порядке вводит информацию о размере раздела и кластера.

Альтернативный порядок действий

Нет.

Приоритет

Высокий.



Номер

ВИ – 02

Название

Создание файла.

Участники

Пользователь.

Описание

При выполнении данного варианта использования пользователь вводит данные о новом файле (размер, имя, расширение) с помощью клавиатуры.

Предварительные условия

Заранее созданный раздел.

Выходные условия

Параметры нового файла переданы файловой системе.

Порядок действий

1.     Пользователь в любом порядке вводит информацию об имени файла, его размере и расширении.

Альтернативный порядок действий

Нет.

Приоритет

Высокий.



Номер

ВИ – 03

Название

Удаление файла.

Участники

Пользователь.

Описание

При выполнении данного варианта использования пользователь задает номер удаляемого файла с помощью клавиатуры.

Предварительные условия

Создан хотя бы один файл.

Выходные условия

Номер удаляемого файла передан файловой системе.

Порядок действий

1.     Пользователь вводит номер файла.

Альтернативный порядок действий

Нет.

Приоритет

Высокий.



Номер

ВИ – 04

Название

Добавление BAD кластеров.

Участники

Пользователь.

Описание

При выполнении данного варианта использования в текущий раздел добавляются поврежденные кластеры, закрытые для записи.

Предварительные условия

Создан раздел.

Выходные условия

Файловой системой добавлены BAD кластеры. Визуализация на карте диска.

Порядок действий

1. Пользователь выбирает пункт меню «Добавить BAD кластеры».

Альтернативный порядок действий

Нет.

Приоритет

Средний.



Номер

ВИ – 05

Название

Создание раздела.

Участники

Файловая система.

Описание

При выполнении данного варианта использования файловая система создает новый раздел.

Предварительные условия

Выполнен ввод данных о параметрах раздела.

Выходные условия

Создан раздел. Визуализация на карте диска.

Порядок действий

1. Пользователь подает запрос на создание раздела.

Альтернативный порядок действий

Нет.

Приоритет

Высокий.



Номер

ВИ – 06

Название

Расположение нового файла.

Участники

Файловая система

Описание

При выполнении данного варианта использования файловая система располагает новый файл в текущем разделе.

Предварительные условия

Выполнен ввод данных о параметрах файла.

Выходные условия

Создан новый файл. Визуализация на карте диска и в списке файлов.

Порядок действий

1.     Пользователь подает запрос на создание файла.

Альтернативный порядок действий

Нет.

Приоритет

Высокий.



Номер

ВИ – 07

Название

Удаление выбранного файла.

Участники

Файловая система

Описание

При выполнении данного варианта использования файловая система удаляет выбранный файл из текущего раздела.

Предварительные условия

Выполнен ввод номера файла.

Выходные условия

Файл удален. Визуализация на карте диска и в списке файлов

Порядок действий

1.     Пользователь подает запрос на удаление файла.

Альтернативный порядок действий

Нет.

Приоритет

Высокий.



3.4 Разработка графического интерфейса
Исходя из анализа поставленной задачи, выяснилось, что графический интерфейс разрабатываемого программного продукта должен содержать: меню, область для визуализации, область для вывода списка файлов, а также информацию о текущей файловой системе (рисунок 1.2).

Ввод входных данных выполняется с помощью дополнительных диалоговых окон.

Главное меню должно включать такие пункты как «Операции с файловой системой», «Операции с файлами» и «Выход из программы». В пункте «Операции с файловой системой» должны присутствовать такие подпункты: «Создать», «Закрыть текущую», «Добавить BAD кластеры» и «Подсветить кластер». В пункте «Операции с файлами» должны присутствовать такие подпункты «Создать», «Удалить выбранный». В области для визуализации результатов работы файловой системы должна изображаться карта текущего раздела.

Уточненный графический интерфейс пользователя разрабатываемого программного продукта изображен на рисунке 3.4.

Рисунок 3.3 – Уточненный графический интерфейс пользователя
3.5 Разработка архитектуры приложения
Исходя из анализа поставленной задачи, а так же предметной области разрабатываемого проекта, были выделены такие основные сущности как FileSystem (файловая система), GUI (интерфейс пользователя). Т.к. информация о разделе, файлах и номере файла задается через диалоговые окна, то GUI можно разбить на 4 сущности: Delete (удаление файла), FileParameters (задание параметров файла), Parameters (задание параметров раздела), Mainform (визуализация и обработка команд). Следуя принципам ООП, эти сущности можно принять за шаблоны создаваемых классов.

Класс FileSystem отвечает за хранение всех параметров файловой системы и содержит следующие поля:

1)     BinaryMap – массив описывающий состояние кластеров;

2)     ClusterSize – размер кластера;

3)     ClustOnFile – массив содержащий количество кластеров необходимое для каждого файла;

4)     Cnt – счетчик;

5)     Date – массив дат создания файлов;

6)     DecimalMap – массив со ссылками на следующие кластеры. Фактически описывает расположение файлов на диске;

7)     StartCluster – массив начальных кластеров файлов;

8)     EndCluster – массив конечных кластеров файлов;

9)     FileName – массив имен файлов;

10)FileSize – массив размеров файлов в байтах;

11)FreeSpace – оставшееся свободное место;

12)IsDeleted – массив описывающий удален файл или нет;

13)Map – карта диска. Представлена изображением в формате “.*bmp”;

14)NumberOfCluster – количество кластеров в разделе;

15)NumberOfFiles – количество файлов в разделе;

16)PartitionSize – размер раздела в байтах;

17)Pointer – указатель на следующий свободный кластер;

18)ToDelete – переменная для передачи данных о номере удаляемого файла.

Класс Mainform отвечает за визуализацию и обработку команд и содержит следующие методы:

1)     FSCreate_Click – метод создающий новый раздел;

2)     FSClose_Click – метод закрывающий текущий раздел;

3)     Ld – метод инициализирующий основные массивы и переменные;

4)     FileCreate_Click – метод создающий новый файл;

5)     FileDelete_Click – метод удаляющий выбранный файл;

6)     Highlighter_Click – подсветка кластера;

7)     BADFill_Click – добавление поврежденных кластеров;

8)     ExitButton_Click – выход из программы.

Класс Parameters имеет отношение ассоциации с классом Mainform, а так же содержит следующий метод:

1)     OK_Click – метод для передачи параметров о разделе.

Класс FileParameters  имеет отношение ассоциации с классом Mainform, а так же содержит следующий метод:

1)     NewFile_Click – метод для передачи данных о новом файле.

Класс Delete имеет отношение ассоциации с классом Mainform, а так содержит следующий метод:

1)     OK_Click – метод для передачи номера удаляемого файла.

Класс Cluster имеет отношение ассоциации с классом Mainform, а так содержит следующий метод:

1)     OK_Click – метод для передачи номера удаляемого файла.

Диаграмма классов, с помощью которой можно визуализировать все описанные выше классы, методы и поля, изображена на рисунке 3.4.


Рисунок 3.4 – Диаграмма классов разрабатываемой программы
3.6 Разработка алгоритмов работы программы
Исходя из анализа поставленной задачи, а также разработанной диаграммы классов, была выделена группа методов, работа которых является особо важной: метод FileCreate_Click класса Mainform и метод FileDelete_Click класса Mainform. Для этих методов были разработаны обобщенные алгоритмы работы.


3.6.1 Метод FileCreate_Click класса Mainform
Метод FileCreate_Click класса Mainform, выполняет размещение нового файла в разделе. Указатель pointer, в начале алгоритма уже указывает на свободный кластер. Алгоритм работы описанного метода изображен на рисунке 3.5.

Рисунок 3.5 – Алгоритм размещения нового файла в разделе
3.6.2 Метод FileDelete_Click класса Mainform.
Метод FileDelete_Click класса Mainform, выполняет удаление созданного ранее файла по его порядковому номеру. Алгоритм работы данного метода представлен на рисунке 3.6.

Рисунок 3.6 – Алгоритм удаления выбранного файла
4 тестирование программы
4.1 Тестируемые функции
При разработке данного проекта были реализованы такие функции:

1а) функция задачи ограничения для данного сеанса работы;

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

2а) функция заполнения структур данных программы введенными данными;

Данная функция выполняется при вводе пользователем исходных данных с клавиатуры;

3а) функция создания раздела;

Данная функция выполняется при запросе пользователем создания раздела.

3б) функция создания файла;

Данная функция выполняется тогда, когда пользователь запрашивает создание файла.

3в) функция удаления файла;

Данная функция выполняется тогда, когда пользователь запрашивает удаление файла.

3г) функция добавления поврежденных кластеров;

Данная функция выполняется при запросе на добавление BAD кластеров, путем вызова пункта меню «Операции с ФС –> Добавить BAD кластеры..». Она добавляет поврежденные кластеры на карту диска.

4а) функция рисования карты диска;

Данная функция выполняется после каждого действия выполненного пользователем. Она выполняет визуализацию всех изменений происходящих с файловой системой.

4б) функция заполнения списка файлов;

Данная функция выполняется после создания или удаления файла.
4.2 Тестирование
С целью проверки корректности работы программного обеспечения, разработанного в данном проекте, было проведено его тестирование. Тесты и результаты их выполнения приведены в таблице 4.1.
Таблица 4.1 – Тестирование и его результаты



Тестируемая функция

Номер теста

Цель теста

Результат теста

1а) Функция задачи ограничения для данного сеанса работы.

1

Проверка на ввод максимального размера раздела.

Пройден

2

Проверка на ввод максимального размера кластера.

Пройден

2а) Функция заполнения структур данных программы введенными данными

3

Заполнение структур данных программы, данными из GUI

Пройден

4

Проверка на ограничение максимального размера раздела

Не пройден

5

Проверка ввода нулевого размера файла

Пройден

6

Проверка ввода размера файла большего чем размер раздела

Пройден

7

Проверка на ограничения размера кластера

Пройден

8

Проверка ввода не существующего номера файла для удаления

Пройден

3а) Функция создания раздела

9

Проверка корректного создания раздела с заранее определенными параметрами

Пройден

10

Корректировка свободного места в соответствии с количеством кластеров

Пройден

3б) Функция создания файла

11

Проверка корректного создания файла с заранее определенными параметрами и его расположения в разделе

Пройден

12

Функция корректировки имени файла в соответствии со спецификацией FAT16

Пройден

3в) Функция удаления файла

13

Проверка корректного удаления файла по его порядковому номеру

Пройден

3г) Функция добавления BAD кластеров

14

Проверка корректного расположения BAD кластеров в созданном разделе.

Пройден

4а) Функция рисования карты диска

15

Проверка корректности визуализации работы файловой системы

Пройден

4а) Функция заполнения списка файлов

16

Проверка корректности визуализации работы файловой системы

Пройден



4.3 Тестирование алгоритма

С целью проверки корректности работы алгоритма, разработанного в данном проекте, было проведено тестирование функций создания и удаления файла, а также функции создания раздела. Тесты и результаты их выполнения приведены в таблице 4.2.
Таблица 4.2 – Тестирование алгоритма и его результаты



Номер теста

Цель теста

Ожидаемый результат

Результат теста

1

Пользователь не ввел размер раздела

Программа должна вывести предупреждение об ошибке и предложить повторить ввод

Пройден



2

Пользователь не ввел размер кластера

Программа должна вывести предупреждение об ошибке и предложить повторить ввод

Пройден

3

Пользователь ввел размер раздела или кластера в некорректном формате

Программа должна вывести предупреждение об ошибке и предложить повторить ввод

Пройден

4

Пользователь не задал имя файла

Программа должна вывести предупреждение об ошибке и предложить повторить ввод

Пройден

5

Пользователь не задал расширения файла

Программа должна вывести предупреждение об ошибке и предложить повторить ввод

Пройден

6

Пользователь не задал размер файла

Программа должна вывести предупреждение об ошибке и предложить повторить ввод

Пройден

7

Пользователь задал размер файла в некорректном формате

Программа должна вывести предупреждение об ошибке и предложить повторить ввод

Пройден

8

Пользователь задал размер файла больше чем количество оставшегося места

Кнопка создания файла должна быть заблокирована. Пользователю должно быть выведено предупреждение об ошибке

Пройден

9

Пользователь задал нулевой размер файла

Программа должна вывести предупреждение об ошибке и предложить повторить ввод

Пройден

10

Пользователь задал размер файла равный количеству оставшегося места

Программа должна записать файл

Не пройден

11

Пользователь запросил удаление несуществующего файла

Программа должна вывести предупреждение об ошибке

Пройден

12

Пользователь запросил удаление файла, который был удален ранее

Программа должна вывести предупреждение об ошибке

Пройден



5 руководство оператора

5.1 Назначение программы
Данная программа наглядно демонстрирует моделирование работы файловой системы FAT16.

Программа предоставляет возможность создания раздела и работы с файлами. Программа предназначена для наглядного обучения студентов, а так же других пользователей компьютера основам работы файловых систем. Программа предназначена эксплуатации на ПК, установленном в офисе или в домашних условиях.

Программа поставляется в виде исполнимых кодов (.exe-файлов), устанавливается на данный компьютер путем копирования в соответствующую директорию и не нуждается в обслуживании.
5.2 Технические средства для запуска программы
В состав технических средств должен входить персональный компьютер (ПЭВМ), включающий в себя:

а) процессор с тактовой частотой, ГГц – 1.5, не менее;

б) материнскую плату с FSB, МГц - 133, не менее;

в) оперативную память объемом, Мб -256, не менее;

г) свободного дискового пространства для хранения программы, Мб – 10, не менее;

д) дисплей и видеоадаптер такого типа, которые смогут отображать графическую информацию, являющуюся результатом выполнения программы;

е) клавиатуру;

к) мышь.

Для запуска программы на персональном компьютере необходимо наличие операционной системы Windows XP и Framework 3.0.
5.3 Работа с программой
Для инсталляции программы на персональный компьютер необходимо скопировать *.exe файл на жесткий диск. После чего программа готова к эксплуатации и может быть запущена путем двойного клика левой кнопки мыши на исполняемом файле (рисунок 5.1).


Рисунок 5.1 – Внешний вид программы после запуска
Операция создания раздела осуществляется путем выполнения следующих действий:

1)     выбор пункта меню «Операции с файловой системой – > Создать..»;

2)     в появившемся диалоговом окне задать параметры нового раздела;

3)     нажать кнопку «ОК».

Выполнив все эти действия мы увидим результат создания раздела (рисунок 5.2).

Операция добавления нового файла осуществляется путем выполнения следующих действий:

1)     необходимо выбрать пункт меню «Операции с файлами – > Создать..»;

2)     в появившемся диалоговом окне задать параметры нового файла;

3)     нажать кнопку «ОК».

Выполнив все эти действия, мы увидим результат создания файла (рисунок 5.3).

Операция удаления файла осуществляется путем выполнения следующих действий:

1)     необходимо выбрать пункт меню «Операции с файлами – > Удалить..»;

2)     в появившемся диалоговом окне задать номер удаляемого файла;

3)     нажать кнопку «ОК».

Выполнив все эти действия, мы увидим результат удаления файла из текущего раздела (рисунок 5.4).

         Операция добавления BAD кластеров осуществляется путем выполнения следующей операции:

1)     необходимо выбрать пункт меню «Операции с файловой системой – > Добавить BAD кластеры..».

Рисунок 5.2 – Внешний вид программы

после создания раздела

Рисунок 5.3 – Внешний вид программы

после создания файла

Рисунок 5.4 – Внешний вид программы

после удаления файла
        

Выводы
Данный проект посвящен изучению и моделированию механизмов функционирования персонального компьютера. В частности моделирования работы файловой системы FAT16.

В проделанной работе было создано программное обеспечение, которое выполняет все функции описанные в техническом задании. Программа выполняет моделирование и наглядно визуализирует фрагментацию файлов, что и являлось основной целью разработки данного проекта.

Данное программное обеспечение написано для операционной системы Windows XP и работает на основе платформы .Net Framework. Программа была написана при помощи IDE Visual Studio 2008 на объектно-ориентированном языке C#.

Кроме этого были разработаны диаграмма классов, диаграмма прецедентов и диаграмма последовательности. Особо важным шагом проектирования был этап создания алгоритмов работы программы. Затем были составлены варианты использования и проведено тестирование. Итогом выполнения данного проекта было написание руководства оператора.

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

Еще одним путем модернизации программы является возможность добавления каталогов.

ПЕРЕЧЕНЬ ССЫЛОК
1. Столингс Вильям. Операционные системы. : Пер. с англ. – М. : Издательский дом «Вильямс», 2002. – 786 с.

2. Троелсен Эндрю. Язык программирования С# и платформа .NET 2.0, 3-е издание. : Пер. с англ. – М. : дом «Вильямс», 2007 – 1168 с.
Приложение А
ТЕХНИЧЕСКОЕ ЗАДАНИЕ

1. Введение

1.1. Наименование программы

Наименование – «Программа моделирования работы файловой системы FAT16» (далее по тексту Программа).

1.2. Краткая характеристика области применения

Программа предназначена для наглядного обучения студентов принципам работы файловых систем. Программа относится к классу прикладных программ и не может использоваться в качестве реального компонента операционной системы. Ее задача – визуализация фрагментации файлов на диске.

2. Основание для разработки

2.1. Основание для проведения разработки

Основанием для разработки Программы является задание на курсовой проект кафедры "Компьютерные системы и сети" (503) Национального аэрокосмического университета им. Н.Е. Жуковского "ХАИ".

2.2. Наименование и условное обозначение разработки

Наименование темы разработки – «Разработка программы моделирования работы файловой системы FAT16».

Условное обозначение темы разработки (шифр темы) - "FSFAT-2010".

3. Назначение разработки

3.1. Функциональное назначение разработки

Данная программа позволяет пользователю иметь наглядное представление о работе файловой системы. Она должна распределять новые файлы на диске и удалять их. В итоге мы должны получить визуальный пример фрагментации файлов.

3.2. Эксплуатационное назначение

Программа работает в ручном режиме работы: ввели данные о новом файле – увидели как файловая система разместит его на диске.

Программа может функционировать в офисе и домашних условиях работы, т.е. в условиях работы настольно ПК.

Программа может работать в необслуживаемом режиме. Квалификация персонала – рядовой пользователь ПК.

Программа устанавливается путем копирования ее файлов на нужный ПК.

Отказ программы не влечет за собой критических последствий.

4. Требования к программе или программному изделию

4.1. Требования к функциональным характеристикам

4.1.1. Требования к составу выполняемых функций

Программа должна решать следующие задачи:

1)     задача инициализации;

2)     задача ввода исходных данных;

3)     задача фрагментации файлов;

4)     задача визуализации работы.

Для того чтобы решить задачу 1), должна быть реализована:

а) функция задачи ограничения для данного сеанса работы.

Для того чтобы решить задачу 2), должна быть реализована:

а) функция для принятия введенных данных с клавиатуры.

Чтобы решить задачу 3), должны быть реализованы четыре подзадачи:

а) функция создания раздела;

б) функция создания файла;

в) функция удаления файла;

г) функция добавления поврежденных кластеров.

Для того чтобы решить задачу 4), должны быть реализованы:

а) функция рисования карты диска;

б) функция заполнения списка файлов.

4.1.2. Требования к организации входных данных

Входные данные должны вводиться с клавиатуры при помощи GUI.

4.1.3. Требования к организации выходных данных

Выходными данными является графическое отображение карты диска, которая отражает фрагментацию созданных файлов.

4.1.4. Требования к временным характеристикам

Требования к временным характеристикам не предъявляются.

4.2. Требования к надежности

Данный программный продукт является прикладной программой, не работающей в системе реального времени или в области критических технологий, на выполнение запускается однократно и функционирует только в необходимый момент времени. Поэтому специальные требования к надежности программы не предъявляются.

4.3. Условия эксплуатации

4.3.1. Климатические условия эксплуатации

Климатические условия эксплуатации, при которых должны обеспечиваться заданные характеристики программы, должны удовлетворять требованиям, предъявляемым к техническим средствам в части условий их эксплуатации.

Программа предназначена для эксплуатации на ПК установленных в офисных помещениях и домашних условиях (SOHO).

4.3.2. Требования к видам обслуживания

После установки на компьютер программа не требует проведения каких-либо видов обслуживания.

4.3.3. Требования к численности и квалификации персонала

Для пользования программой хватает одной штатной единиц – конечный пользователь программы (оператор).

Программа устанавливается путем копирования на магнитный носитель. Для установки программы и ее эксплуатации необходим пользователь с обычными правами доступа, и обладающий навыками работы на компьютере.

Конечный пользователь программы (оператор) должен понимать, каким образом необходимо работать с GUI программы, т.е. должен иметь представление о назначении программы.

Персонал должен быть аттестован на II квалификационную группу по электробезопасности (для работы с конторским оборудованием).

4.4. Требования к составу и параметрам технических средств

Для исполнения программы необходим универсальный компьютер любого типа, для которого получен двоичный код, представленный в виде исполнимого файла (.exe-файла), способного выполняться установленным в ПК процессором.

В состав технических средств должен входить персональный компьютер (ПЭВМ), включающий в себя:

а)  процессор с тактовой частотой, ГГц – 1.5, не менее;

б)  материнскую плату с FSB, МГц - 133, не менее;

в)  оперативную память объемом, Мб -256, не менее;

г)  свободного дискового пространства для хранения программы, Мб – 30, не менее;

д)  дисплей и видеоадаптер такого типа, которые смогут отображать графическую информацию, являющуюся результатом выполнения программы;

е)  клавиатуру;

ж) НЖМД;

и)  если предполагается работа со сменными дисками, необходимо наличие USB-адаптера;

к)  мышь.

4.5. Требования к информационной и программной совместимости

4.5.1. Требования к информационным структурам и методам решения

Требования к информационным структурам (файлов) на входе и выходе, а также к методам решения не предъявляются.

4.5.2. Требования к исходным кодам и языкам программирования

Для разработки программы в качестве языка программирования должен использоваться язык C#.

Программа должна компилироваться компилятором среды Microsoft Visual Studio 2008.

Исходные тексты программ должны содержать достаточное количество комментариев, позволяющих выполнять их верификацию и валидацию, а также контролировать стиль программирования программиста.

Дополнительные настройки компиляторов не требуются.

4.5.3. Требования к программным средствам, используемым программой

Программа должна быть реализована в виде приложения выполняемого под управлением ОС Windows (например, MS Windows XP).

Также на ПК должна быть установлена программная платформа .NET Framework версии 3.0.

4.5.4. Требования к защите информации и программ

Требования к защите информации и программ не предъявляются.

4.6. Специальные требования

Программа должна быть реализована с использованием Windows Forms.

Программа должна осуществлять взаимодействие с пользователем при помощи GUI.

5. Требования к программной документации

5.1. Предварительный состав программной документации

В результате разработки программы должна быть представлена следующая программная документация:

а) техническое задание;

б) схемы алгоритмов;

в) тексты программ;

г) пояснительная записка;

д) руководство оператора;

Кроме программного обеспечения на диске обязательно должна находиться пояснительная записка в электронном виде, содержащая весь комплект документации, предусмотренный в пункте 5 настоящего технического задания.

ПриложениЕ Б
Текст файла Mainform.cs:
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 fat

{

    public partial class Mainform : Form

    {

        Parameters ParametersForm = new Parameters();

        Cluster ClusterForm = new Cluster();

        FileParameters FParam = new FileParameters();

        DeleteForm Del = new DeleteForm();

        public Mainform()

        {

            InitializeComponent();

        }

        private void ExitButton_Click(object sender, EventArgs e)

        {

            if (MessageBox.Show("Вы действительно хотите выйти?", "Выход из программы", MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)

            {

                Application.Exit();

            }

        }

        private void FSCreate_Click(object sender, EventArgs e)

        {

                BADFill.Enabled = true;

                FileOperations.Visible = true;

                FSCreate.Enabled = false;

                Highlighter.Enabled = true;

                FSClose.Enabled = true;

                // Принимаем параметры

                 ParametersForm.ShowDialog();

                // Выводим статус

                //Корректируем размер раздела

                FileSystem.PartitionSize = FileSystem.PartitionSize - (FileSystem.PartitionSize % FileSystem.ClusterSize);

                FileSystem.FreeSpace = FileSystem.PartitionSize;

                PartitionLabel.Text += FileSystem.PartitionSize.ToString() + " байт";

                ClusterLabel.Text += FileSystem.ClusterSize.ToString() + " байт";

                FreeSpaceLabel.Text += FileSystem.FreeSpace.ToString() + " байт";

                Status.Visible = true;

                // Подсчитываем количество кластеров..

                FileSystem.NumberOfClusters = (int)(FileSystem.PartitionSize / FileSystem.ClusterSize);

                FileSystem.BinaryMap = new char[FileSystem.NumberOfClusters];

                FileSystem.DecimalMap = new int[FileSystem.NumberOfClusters];

                //... и рисуем их

                FileSystem.Map = new Bitmap(1270, 5000);

                Graphics Gr = Graphics.FromImage(FileSystem.Map);

                int tmpX = 40;

                int tmpY = 40;

                int stop = 1240;

                Pen tmpPen = new Pen(Color.Black, 1);

                int j = 0;

                Font fnt = new Font(FontFamily.GenericSansSerif, 10);

                for (int i = 42; i < 1240; i += 20) //Рисуем текст по Х

                {

                    j++;

                    Gr.DrawString(j.ToString(), fnt, Brushes.Black, i, 15);

                }

                //Рисуем текст по Y

                j = 0;

                for (int i = 42; i < 5000; i += 20)

                {

                    Gr.DrawString(j.ToString(), fnt, Brushes.Black, 5, i);

                    j++;

                }

                for (int i = 0; i < FileSystem.NumberOfClusters; i++)

                {

                    FileSystem.BinaryMap[i] = '0';

                    Rectangle tmpRec = new Rectangle(tmpX, tmpY, 20, 20);

                    Gr.DrawRectangle(tmpPen, tmpRec);

                    tmpX += 20;

                    if (tmpX == (int)(stop)) // Проверяем не достигнута ли правая граница карты

                    {

                        tmpX = 40;

                        tmpY += 20;

                    }

                }

                FileMap.Image = FileSystem.Map;

                FileMap.Invalidate();

                Gr.Dispose();

           

        }

        private void FSClose_Click(object sender, EventArgs e)

        {

            BADFill.Enabled = false;

            FileOperations.Visible = false;

            FSCreate.Enabled = true;

            Highlighter.Enabled = false;

            FSClose.Enabled = false;

            FileSystem.ClusterSize = 0;

            FileSystem.PartitionSize = 0;

            Status.Visible = false;

            PartitionLabel.Text = "Размер раздела: ";

            ClusterLabel.Text = "Размер кластера: ";

            FreeSpaceLabel.Text = "Свободного места: ";

            Graphics Gr = Graphics.FromImage(FileSystem.Map);

            Gr.FillRectangle(Brushes.White, 0, 0, 1280, 5000);

            Gr.Dispose();

            FileMap.Invalidate();

           

            FileSystem.FileName = new string[100];

            FileSystem.Date = new string[100];

            FileSystem.FileSize = new int[100];

            FileSystem.StartCluster = new int[100];

            FileSystem.EndCluster = new int[100];

            FileSystem.ClustOnFile = new int[100];

            FileSystem.pointer = 1;

           

        }

        private void Highlighter_Click(object sender, EventArgs e)

        {

            ClusterForm.ShowDialog();

            FileMap.Invalidate();

        }

        private void Ld(object sender, EventArgs e)

        {

            BADFill.Enabled = false;

            Highlighter.Enabled = false;

           

            FSClose.Enabled = false;

          

            FileSystem.FileName = new string[100];

            FileSystem.Date = new string[100];

            FileSystem.FileSize = new int[100];

            FileSystem.StartCluster = new int[100];

            FileSystem.EndCluster = new int[100];

            FileSystem.ClustOnFile = new int[100];

            FileSystem.pointer = 1;

            FileSystem.Cnt=0;

            FileSystem.IsDeleted = new byte[100];

        }

        private void FileCreate_Click(object sender, EventArgs e)

        {

            BADFill.Enabled = false;

            FileSystem.NumberOfFiles++;

            FileSystem.Cnt++;

            // принимаем параметры

            FParam.ShowDialog();

            // Переписываем свободное место

            FreeSpaceLabel.Text = "Свободного места: "+FileSystem.FreeSpace.ToString() + " байт";

            // добавляем новый файл в список

            FileView.Items.Add(FileSystem.FileName[FileSystem.Cnt].ToString()); // имя файла

            ListViewItem.ListViewSubItemCollection column = new ListViewItem.ListViewSubItemCollection(FileView.Items[FileSystem.Cnt-1]);

            column.Add(FileSystem.Date[FileSystem.Cnt].ToString()); // дата

            column.Add(FileSystem.FileSize[FileSystem.Cnt].ToString() + " байт"); // размер

            // вычисляем количество кластеров необходимое для записи файла

            FileSystem.ClustOnFile[FileSystem.Cnt] = FileSystem.FileSize[FileSystem.Cnt] / FileSystem.ClusterSize ;

            FileSystem.IsDeleted[FileSystem.Cnt] = 0;

            // Запускаем цикл for на количество кластеров

            for (int i = 0; i < FileSystem.ClustOnFile[FileSystem.Cnt]; i++)

            {

              

                //пытаемся установить i-ый кластер в ячейку, если она пуста - устанавливаем, если нет - ищем следующую возможную для установки

                bool flag = false; //флаг полной записи одного кластера

                do

                {

                    if (FileSystem.BinaryMap[FileSystem.pointer] == '0') //если кластер свободен

                    {

                        //закрываем его от записи

                        FileSystem.BinaryMap[FileSystem.pointer] = '1';

                        //Если это первый кластер , записываем его в таблицу

                        if (i == 0)

                        {

                            FileSystem.StartCluster[FileSystem.Cnt] = FileSystem.pointer;

                            column.Add(FileSystem.StartCluster[FileSystem.Cnt].ToString()); // стартовый кластер

                        }

                        // ищем следующий свободный

                        bool next = false;

                        int j = 1;

                        do

                        {

                            FileSystem.pointer++;

                            if (FileSystem.BinaryMap[FileSystem.pointer] == '0') //если найден следующий свободный

                            {

                                //добавляем его в "карту следования"

                                FileSystem.DecimalMap[FileSystem.pointer - j] = FileSystem.pointer;

                                //и закрываем от записи

                                //FileSystem.BinaryMap[FileSystem.pointer] = '1';

                                //отображаем ссылку на него в предыдущем кластере

                                //и закрашиваем его

                                Graphics Gr = Graphics.FromImage(FileSystem.Map);

                                int tmpypos = (int)((FileSystem.pointer - j) / 60);

                                int tmpxpos = (int)((FileSystem.pointer - j) % 60) -1;

                                if ((FileSystem.pointer - j) % 60 == 0)

                                {

                                    tmpxpos = 59;

                                    tmpypos -= 1;

                                }

                                Gr.FillRectangle(Brushes.Aqua, 40 + 20 * tmpxpos, 40 + 20 * tmpypos, 20, 20);//заливка

                                Font fnt = new Font(FontFamily.GenericSansSerif, 6); //текст

                                Gr.DrawString(FileSystem.pointer.ToString(), fnt, Brushes.Black, 41 + 20 * tmpxpos, 41 + 20 * tmpypos);

                              

                                Gr.Dispose();

                                

                                next = true; //следующий свободный найден

                                //pointer остался равным следующему свободному

                            }

                            else //если следующий занят

                            {

                                j++;

                            }

                        }

                        while (next == false);

                        flag = true; //Переходим к следующему кластеру!

                    }

                    else //Если кластер занят

                    {

                        FileSystem.pointer++;

                    }

                }

                while (flag == false);

            

            }

            //Здесь записываем конечный кластер!

            FileSystem.EndCluster[FileSystem.Cnt] = FileSystem.pointer;

            column.Add(FileSystem.EndCluster[FileSystem.Cnt].ToString()); // конечный кластер

            column.Add(FileSystem.Cnt.ToString());//номер

            //Рисуем конец файла и переводим pointer на свободную позицию

            FileSystem.BinaryMap[FileSystem.pointer] = '1';

            Graphics Gr2 = Graphics.FromImage(FileSystem.Map);

            int tmpypos2 = (int)((FileSystem.pointer ) / 60);

            int tmpxpos2 = (int)((FileSystem.pointer ) % 60) - 1;

            if ((FileSystem.pointer) % 60 == 0)

            {

                tmpxpos2 = 59;

                tmpypos2 -= 1;

            }

            Gr2.FillRectangle(Brushes.Aqua, 40 + 20 * tmpxpos2, 40 + 20 * tmpypos2, 20, 20);//заливка

            Font fnt2 = new Font(FontFamily.GenericSansSerif, 6); //текст

            Gr2.DrawString("0xfff", fnt2, Brushes.Black, 41 + 20 * tmpxpos2, 41 + 20 * tmpypos2);

         

            Gr2.Dispose();

            FileSystem.pointer++;

            this.Refresh();

        }

        private void BADFill_Click(object sender, EventArgs e)

        {

            Random rnd = new Random();

            for (int i = 0; i < FileSystem.NumberOfClusters / 20; i++)

            {

                int rndtmp = rnd.Next(1, FileSystem.NumberOfClusters - 1);

                Graphics Gr2 = Graphics.FromImage(FileSystem.Map);

                int tmpypos2 = (int)(rndtmp / 60);

                int tmpxpos2 = (int)(rndtmp % 60) - 1;

                if (rndtmp % 60 == 0)

                {

                    tmpxpos2 = 59;

                    tmpypos2 -= 1;

                }

                Gr2.FillRectangle(Brushes.Red, 40 + 20 * tmpxpos2, 40 + 20 * tmpypos2, 20, 20);//заливка

           

                FileSystem.BinaryMap[rndtmp] = '2';

            }

            this.Refresh();

            FileSystem.FreeSpace -= FileSystem.NumberOfClusters / 10 * FileSystem.ClusterSize;

            FreeSpaceLabel.Text = "Свободного места: " + (FileSystem.FreeSpace - FileSystem.NumberOfClusters / 10 * FileSystem.ClusterSize).ToString() + " байт + " + (FileSystem.NumberOfClusters / 10 * FileSystem.ClusterSize).ToString() + " байт в BAD-кластерах.";

        }

        private void FileDelete_Click(object sender, EventArgs e)

        {

           

            Del.ShowDialog();

            if (FileSystem.IsDeleted[FileSystem.ToDelete] == 0)

            {

                FileSystem.pointer = FileSystem.StartCluster[FileSystem.ToDelete];

                FileSystem.IsDeleted[FileSystem.ToDelete] = 1;

                int firsttodel = FileSystem.StartCluster[FileSystem.ToDelete];

                FileSystem.BinaryMap[firsttodel] = '0';

                Graphics Gr2 = Graphics.FromImage(FileSystem.Map);

                Pen tmpPen = new Pen(Brushes.Black, 1);

                int tmpypos2 = (int)((firsttodel) / 60);

                int tmpxpos2 = (int)((firsttodel) % 60) - 1;

                if ((firsttodel) % 60 == 0)

                {

                    tmpxpos2 = 59;

                    tmpypos2 -= 1;

                }

                Gr2.FillRectangle(Brushes.White, 40 + 20 * tmpxpos2, 40 + 20 * tmpypos2, 20, 20);

                Gr2.DrawRectangle(tmpPen, 40 + 20 * tmpxpos2, 40 + 20 * tmpypos2, 20, 20);

                int j = FileSystem.StartCluster[FileSystem.ToDelete];

                for (int i = 0; i < FileSystem.ClustOnFile[FileSystem.ToDelete] + 1; i++)

                {

                    FileSystem.BinaryMap[j] = '0';

                    int tmpypos = (int)((FileSystem.DecimalMap[j]) / 60);

                    int tmpxpos = (int)((FileSystem.DecimalMap[j]) % 60) - 1;

                    if ((FileSystem.DecimalMap[j]) % 60 == 0)

                    {

                        tmpxpos = 59;

                        tmpypos -= 1;

                    }

                    Gr2.FillRectangle(Brushes.White, 40 + 20 * tmpxpos, 40 + 20 * tmpypos, 20, 20);

                    Gr2.DrawRectangle(tmpPen, 40 + 20 * tmpxpos, 40 + 20 * tmpypos, 20, 20);

                    j = FileSystem.DecimalMap[j];

                }

                Gr2.Dispose();

                this.Refresh();

                FileSystem.FreeSpace = FileSystem.FreeSpace + FileSystem.FileSize[FileSystem.ToDelete];

                FreeSpaceLabel.Text = "Свободного места: " + FileSystem.FreeSpace.ToString() + " байт";

                FileView.Items[FileSystem.ToDelete - 1].BackColor = Color.Red;

            }

            else MessageBox.Show("Файл уже был удален!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

        }

    }

}

Текст файла Parameters.cs:
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 fat

{

    public partial class Parameters : Form

    {

        public Parameters()

        {

            InitializeComponent();

        }

        private void OK_Click(object sender, EventArgs e)

        {

           

            try

            {

                FileSystem.PartitionSize = double.Parse(PartitionTxt.Text.ToString());

                FileSystem.ClusterSize = int.Parse(ClusterTxt.Text.ToString());

                PartitionTxt.Text =
"";

                ClusterTxt.Text = "";

                this.Close();

            }

            catch

            {

                MessageBox.Show("Вы ввели неверно одно из значений (размер файла задаётся цифрами, без пробелов, символов подчеркивания, точек и запятых). Попробуйте еще раз.", "Ошибка!", MessageBoxButtons.OK,MessageBoxIcon.Error);

            }

        }

       

    }

}




Текст файла FileParameters.cs:

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 fat

{

    public partial class FileParameters : Form

    {

        public FileParameters()

        {

            InitializeComponent();

        }

        private void NewFile_Click(object sender, EventArgs e)

        {

            if ((FileNameTxt.Text == "") || (FileSizeTxt.Text == "") || (Eof.Text == ""))

            {

                MessageBox.Show("Одно из полей не заполнено. Попробуйте еще раз.", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

            else

            {

                try

                {

                    //Пытаемся почитать размер файла

                    FileSystem.FileSize[FileSystem.Cnt] = int.Parse(FileSizeTxt.Text.ToString());

                    //читаем имя файла и преобразуем под условия FAT16

                    if (FileNameTxt.Text.Length > 6)

                    {

                        FileSystem.FileName[FileSystem.Cnt] = FileNameTxt.Text.Remove(6) + "~" + FileSystem.Cnt.ToString() + "." + Eof.Text;

                    }

                    else

                    {

                        FileSystem.FileName[FileSystem.Cnt] = FileNameTxt.Text + "." + Eof.Text;

                    }

                    //Записываем дату создания

                    FileSystem.Date[FileSystem.Cnt] = DateTime.Now.ToString();

                    //Считаем необходимое количество кластеров

                    FileSystem.ClustOnFile[FileSystem.Cnt] = FileSystem.FileSize[FileSystem.Cnt] / FileSystem.ClusterSize + 1;

                    //Чистим поля от значений

                    FileSystem.FreeSpace -= FileSystem.FileSize[FileSystem.Cnt];

                    FileNameTxt.Text = "";

                    FileSizeTxt.Text = "";

                    Eof.Text = "";

                    label5.Text = "Свободно: ";

                    label6.Text = "После создания: ";

                    this.Close();

                }

                catch

                {

                    MessageBox.Show("Размер файла задан неверно. Попробуйте еще раз.", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }

            }

          

        }

        private void Ld(object sender, EventArgs e)

        {

            label5.Text += FileSystem.FreeSpace.ToString() + " байт";

        }

        private void KPress(object sender, KeyPressEventArgs e)

       {

            double tmp;

            if (Char.IsDigit(e.KeyChar)||e.KeyChar==(char)Keys.Back)

            {

                if (FileSizeTxt.Text != "")

                {

                    if (e.KeyChar == (char)Keys.Back)

                    {

                        tmp = double.Parse((FileSizeTxt.Text).ToString());

                    }

                    else

                    {

                        tmp = double.Parse((FileSizeTxt.Text + e.KeyChar).ToString());

                    }

                    if (tmp > FileSystem.FreeSpace)

                    {

                        label6.Text = "Недостаточно свободного места!";

                        label6.ForeColor = Color.Red;

                        NewFile.Enabled = false;

                    }

                    else

                    {

                        label6.ForeColor = Color.Black;

                        NewFile.Enabled = true;

                        label6.Text = "После создания: " + (FileSystem.FreeSpace - tmp).ToString() + " байт";

                    }

                }

            }

            else e.KeyChar = (char)Keys.None;

          

        }

    }

}




Текст файла DeleteForm.cs:
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 fat

{

    public partial class DeleteForm : Form

    {

        public DeleteForm()

        {

            InitializeComponent();

        }

        private void OKBut_Click(object sender, EventArgs e)

        {

            try

            {

                FileSystem.ToDelete = byte.Parse(NToDelTXT.Text);

                NToDelTXT.Text = "";

                this.Close();

            }

            catch

            {

                MessageBox.Show("Вы ввели неверное значение(номер файла задается одним числом, без пробелов, символов подчеркивания, точек и запятых). Попробуйте еще раз.", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }

        private void Ld(object sender, EventArgs e)

        {

            if (FileSystem.NumberOfFiles != 0)

            {

                label1.ForeColor = Color.Black;

                label1.Text = "Введите номер файла(1-" + FileSystem.NumberOfFiles + "):";

                OKBut.Enabled = true;

            }

            else

            {

                label1.ForeColor = Color.Red;

                label1.Text = "Файлов нет!";

                OKBut.Enabled = false;

            }

        }

    }

}




Текст файла Cluster.cs:
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.Threading;

namespace fat

{

    public partial class Cluster : Form

    {

        int tmpVal;

        public Cluster()

        {

            InitializeComponent();

           

        }

        private void OK_Click(object sender, EventArgs e)

        {

            try

            {

                tmpVal = int.Parse(textBox1.Text.ToString());

                Graphics Gr = Graphics.FromImage(FileSystem.Map);

                int tmpypos = (int)(tmpVal / 60);

                int tmpxpos = (int)(tmpVal % 60) - 1;

                if (tmpVal % 60 == 0) tmpxpos = 0;

                Pen tmp = new Pen(Brushes.Blue,2);

                Gr.DrawRectangle(tmp, 40 + 20 * tmpxpos, 40 + 20 * tmpypos, 20, 20);

                label1.Text = "Номер кластера";

                Gr.Dispose();

                this.Close();

            }

            catch

            {

                MessageBox.Show("Вы ввели неверное значение(номер кластера задается одним числом, без пробелов, символов подчеркивания, точек и запятых). Попробуйте еще раз.", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

               

            }

          

        }

        private void ld(object sender, EventArgs e)

        {

            label1.Text += "(1 - " + FileSystem.NumberOfClusters.ToString() + "): ";

        }

    }

}




Текст файла FileSystem.cs:
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

namespace fat

{

    public static class FileSystem

    {

       public static double PartitionSize;

       public static int ClusterSize;

       public static int NumberOfClusters;

       public static double FreeSpace;

       public static Bitmap Map;

       public static int[] DecimalMap;

       public static char[] BinaryMap;

       public static string[] FileName;

       public static string[] Date;

       public static int[] FileSize;

       public static int[] StartCluster;

       public static int[] EndCluster;

       public static int[] ClustOnFile;

       public static byte NumberOfFiles = 0;

       public static byte Cnt = 0;

       public static int pointer;

       public static byte ToDelete;

       public static byte[] IsDeleted;

    }

}



1. Реферат Young Goodman Brown And Rappacini
2. Реферат на тему Оборотные средства 4
3. Реферат на тему Joy Luck 2 Essay Research Paper The
4. Реферат Рузский, Николай Владимирович
5. Курсовая на тему Традиции ислама
6. Реферат Усилитель промежуточной частоты
7. Реферат Государственная служба РФ 2
8. Реферат Тонкопленочные резисторы
9. Реферат на тему Federal Courts The System That Shagged Me
10. Курсовая на тему Тарифные системы оплаты труда