Реферат Курсовая Конспект
Резюме. - Курсовая Работа, раздел Компьютеры, Курсовая работа - Модель FAT О Реализации Задания Модель Файловой Си...
|
О реализации задания
Модель файловой системы представляет собой рабочий лист Microsoft Excel, на котором в виде ячеек представлены три логические структуры файловой системы:
· Каталог файлов
· Таблица распределения
· Область файлов
На рабочем листе также расположены две панели управления:
1) Операции с файлами
· добавить
· удалить
· перезаписать
2) Визуализация FAT
· показать файл
· убрать стрелки
Исходя из контекста вопроса параллельное выполнение процессов или потоков (MultiThreading) реализовывать нет необходимости. Учитывая эти факторы, а также необходимость разработки “дружественного” интерейса с применением графических примитивов, было решено использовать язык программирования VisualBasic (VBA) от фирмы Microsoft и электронную таблицу Excel 5.0 фирмы Microsoft.
Так как модель является типичной управляемой событиями системой, то алгоритм ее работы достаточно прост, а точнее представляет собой ряд алгоритмов, которые пересекаются только в среднем уровне абстракции. (см. ниже) События вызываются пользователем посредством воздействия на органы управления.
О примененных уровнях абстракции
Все возможные события были тщательно проанализированы автором и разделены на три категории, или на три уровня абстракции:
· События, вызываемые внешними воздействиями. Таковыми являются все события, вызываемые пользователем посредством вызова пунктов из групп операций с файлами.[2]
· События фундаментальной природы, т.е. базовые события, порождаемые предудущими. Их значительно меньше, и они никак не вникают в суть породивших из внешних событий.[3]
· События низкого уровня абстракции, которые являются искуственно синтезированными из предыдущих двух групп событиями и имеют целью понизить сложность системы за счет абстрагирования от непринципиальных тонкостей и усложнений в системе, диктуемых контекстом. Таковыми, например, являются события обработки неправильных ситуаций.[4]
Об интерфейсе
Интерфейс является интуитивно понятным и не навязчивым, всегда, насколько это возможно, является “демократичным” по отношению к пользователю. В программах, написанных таким стилем, очень четко прослеживается причинно-следственная связь, хорошо знакомая любому человеку и являющаяся неотъемлемой частью образного мышления. Это делат программу весьма простой в использовании, а алгоритм работы простым в понимании. Вся необходимая для работы информация представлена в диалогах, о неправильных ситуциях программа сообщает пользователю и это единственный (и законный) случай нарушения свободы действий пользователя.
Далее приводится исходный текст программы с обширными комментариями, в которых делается упор не на особенности языка программирования и конкретной реализации, а на представление составляющих файловой системы как объектов, а процедур и функций как методов, применяемых к этим объектам.
Макросы, вызываемые событиями
Public Type FileID 'Тип, описывающий файл: имя,размер и точка входа в FAT
Name As String
Size As Integer
First As Integer
End Type
Sub PressAddFile() 'Макрос, вызываемый кнопкой "Добавить Файл"
DialogSheets("Add").EditBoxes("Name").Text = "" 'подготовка диалога "Добавление файла"
DialogSheets("Add").EditBoxes("Size").Text = "" 'очистка полей ввода
Sheets("Add").Show 'Вызов диалога "Добавление файла"
With DialogSheets("Add") 'Проверка на правильность введенных данных
If (.EditBoxes("Name").Text = "") Or (.EditBoxes("Size").Text = "") Or (.EditBoxes("Size").Text = "0") Then Exit Sub
End With
Dim NewFile As FileID 'Экземпляр переменной с описанием создаваемого файла
With DialogSheets("Add")
NewFile.Name = .EditBoxes("Name").Text
NewFile.Size = .EditBoxes("Size").Text
End With
Call AddFile(NewFile) 'Вызов процедуры добавления файла
Refresh 'обновили графическое изображение размещения файлов
End Sub
Sub PressDeleteFile() 'в основном рабочем листе нажата кнопка Удалить Файл
temp = 4
With DialogSheets("Delete") 'подготавливаем к работе диалог Delete
.ListBoxes("Name").RemoveAllItems
While Sheets("Sheet").Cells(temp; 2) <> "" 'заполняем список имеющимися в каталоге файлами
.ListBoxes("Name").AddItem Text:=Worksheets("Sheet").Cells(temp; 2).Value; Index:=temp - 3
temp = temp + 1
Wend
.Show 'показываем диалог Delete
If .ListBoxes("Name") = 0 Then Exit Sub
Dim File As FileID 'переменная для идентификатора удаляемого файла.Передается процедуре DeleteFile
File.Name = Sheets("Sheet").Cells(.ListBoxes("Name") + 3; 2)
File.Size = Sheets("Sheet").Cells(.ListBoxes("Name") + 3; 3)
File.First = Sheets("Sheet").Cells(.ListBoxes("Name") + 3; 4)
Call DeleteFile(File) 'Вызываем процедуру удаления файла
Refresh 'обновили графическое изображение размещения файлов
End With
End Sub
Sub PressRemakeFile() 'нажата кнопка Изменить_размеры_файла
'по этому поводу подготавливаем к работе диалог Remake
temp = 4
With DialogSheets("Remake")
.ListBoxes("Name").RemoveAllItems
.EditBoxes("Size").Text = ""
While Sheets("Sheet").Cells(temp; 2) <> "" 'заполняем список имеющимися в каталоге файлами
.ListBoxes("Name").AddItem Text:=Worksheets("Sheet").Cells(temp; 2).Value; Index:=temp - 3
temp = temp + 1
Wend
.Show 'показываем диалог Remake
'при нажатии кнопки OK в диалоге запустится макрос DialogRemakePressOK
End With
End Sub
Sub DialogRemakePressName() 'в диалоге Перезапись выбран файл из списка
With DialogSheets("Remake") 'и поэтому в диалоге Перезапись обновляем поле размера файла в соотв. с выбранным файлом
.EditBoxes("Size").Text = Sheets("Sheet").Cells(3 + .ListBoxes("Name").ListIndex; 3).Value
End With
End Sub
Sub DialogRemakePressOK() 'в диалоге изменение размеров файла нажата кнопка OK
With DialogSheets("Remake")
.Hide 'убрали с экрана диалог
If .ListBoxes("Name").ListIndex = 0 Then Exit Sub
Dim File As FileID 'Экземпляр типа FileID - идентификатор файла
File.Name = Sheets("Sheet").Cells(3 + .ListBoxes("Name").ListIndex; 2).Text
File.Size = Sheets("Sheet").Cells(3 + .ListBoxes("Name").ListIndex; 3).Value
File.First = Sheets("Sheet").Cells(3 + .ListBoxes("Name").ListIndex; 4).Value
'проверка на наличие изменений
If .EditBoxes("Size").Text = File.Size Or .EditBoxes("Size").Text = "0" Then Exit Sub
'проверка на помещаемость
If .EditBoxes("Size").Text > (FreeSize + ((File.Size - 1) 8 + 1) * 8) Then
temp = MsgBox("Файл " & File.Name & " размером " & .EditBoxes("Size").Text & " не может быть размещен"; vbExclamation; "Перезапись файла")
Exit Sub
End If 'перезапись: удаление, а затем запись файла, но с другим размером
Call DeleteFile(File) 'удалили
File.Size = .EditBoxes("Size").Text 'изменили размер
Call AddFile(File) 'записали
Refresh 'обновили таблицу распределения файлов
End With
End Sub
Sub Visualisation() 'визуализация файла
temp = 4
With DialogSheets("Visualisation") 'подготавливаем к работе диалог Visualisation
.ListBoxes("Name").RemoveAllItems
While Sheets("Sheet").Cells(temp; 2) <> "" 'заполняем список имеющимися в каталоге файлами
.ListBoxes("Name").AddItem Text:=Worksheets("Sheet").Cells(temp; 2).Value; Index:=temp - 3
temp = temp + 1
Wend
.Show 'показываем диалог Visualisation
If .ListBoxes("Name") = 0 Then Exit Sub 'выбрали ли что-нибудь ?
Dim NumberFile As Integer
NumberFile = .ListBoxes("Name").ListIndex 'номер по каталогу визуализируемого файла
Sheets("Sheet").Cells(NumberFile + 3; 2).ShowDependents 'показываем линии, проходящие от ячейки каталога с именем визуализируемого файла до всех занятых им ячеек области файлов
End With
End Sub
Базовые события
Const ColorOfPaper = 33 'цвет фона области файлов
Const ColorUsedPartOfFAT = 2 'цвет занятой части области файлов
Sub AddFile(NewFile As FileID) 'Процедурa добавления файла
'Проверка наличия присутствия в достаточном для создания файла количестве свободного пространства
If NewFile.Size > FreeSize Then
temp = MsgBox("Файл " + NewFile.Name + " не может быть размещен из-за нехватки свободного места."; vbExclamation; "Процесс создания файла")
Exit Sub
End If
count = NewFile.Size 'счетчик уже записанной части файла
NewFile.First = NextFreeCellFAT ' задание точки входа в FAT для данного файла
Dim PreviousCellFAT As Integer 'Номер последней модифицировавшейся ячейки FAT
PreviousCellFAT = NextFreeCellFAT
Call ToFAT(PreviousCellFAT; 0) 'Записали в нее ноль-признак того, что это последний (пока) кластер данного файла
count = count - 8 'как минимум 8 байт файла уже размещены
While count > 0 'пока весь файл не разместился
Call ToFAT(PreviousCellFAT; NextFreeCellFAT) 'в последнюю модифицировавшуюся ячейку FAT вносим указатель на следующую свободную ячейку
PreviousCellFAT = NextFreeCellFAT
Call ToFAT(PreviousCellFAT; 0) 'Записали в нее ноль-признак того, что это последний (пока) кластер данного файла
count = count - 8 'как минимум 8 байт файла уже размещены
Wend
Call AddFileToCatalog(NewFile) 'добавили файл в каталог
End Sub
Sub DeleteFile(File As FileID) 'процедура удаляет заданный файл без разговоров
Call DeleteCellFromFAT(File.First)
Call DeleteFileFromCatalog(File.Name)
End Sub
Sub Refresh() 'обновление изображения области файлов
With Sheets("Sheet")
.Range("F6:U13").Interior.ColorIndex = ColorOfPaper 'окрасили область файлов в цвет фона
.Range("F6:U13").Value = "" 'очистили все ячейки области файлов
.Range("F6:U13").NumberFormat = "0" 'формат числа для области файлов-целые числа
.ClearArrows 'убрали все стрелки
Dim PointerToFile As String
NumberFile = 1
While .Cells(NumberFile + 3; 2) <> "" 'последовательно просматриваем область файлов. Для каждого файлавыполняется следующая процедура:
NumberCellFAT = .Cells(NumberFile + 3; 4) 'точка входа в FAT N-ного файла
PointerToFile = "=R" & NumberFile + 3 & "C2" 'указатель на ячейку каталога с именем N-ного файла
Relation = (.Cells(NumberFile + 3; 3) - 1) Mod 8 'смещение. Являет собой размер неполностью заполненного кластера
While .Cells(3; NumberCellFAT + 5) <> 0 'просмотр FAT до признака конца цепочки
.Range(Cells(6; NumberCellFAT + 5); Cells(6 + 7; NumberCellFAT + 5)).Interior.ColorIndex = ColorUsedPartOfFAT + NumberFile 'выделение цветом очередного непоследнего кластера N-ного файла
.Range(Cells(6; NumberCellFAT + 5); Cells(6 + 7; NumberCellFAT + 5)).Font.ColorIndex = ColorUsedPartOfFAT + NumberFile
.Range(Cells(6; NumberCellFAT + 5); Cells(6 + 7; NumberCellFAT + 5)).Formula = PointerToFile 'каждая ячейка этого кластера теперь указывает на ячейку с именем файла в каталоге
NumberCellFAT = .Cells(3; NumberCellFAT + 5) 'взяли следующую ячейку FAT из цепочки
Wend 'теперь обработка последнего кластера N-ного файла. Отличается тем, что он может быть занят не полностью
.Range(Cells(6; NumberCellFAT + 5); Cells(6 + Relation; NumberCellFAT + 5)).Interior.ColorIndex = ColorUsedPartOfFAT + NumberFile
.Range(Cells(6; NumberCellFAT + 5); Cells(6 + Relation; NumberCellFAT + 5)).Font.ColorIndex = ColorUsedPartOfFAT + NumberFile
.Range(Cells(6; NumberCellFAT + 5); Cells(6 + Relation; NumberCellFAT + 5)).Formula = PointerToFile
NumberFile = NumberFile + 1 'работаем со следующим файлом
Wend
End With
End Sub
Макросы нижнего уровня абстракции
Function FreeSize() As Integer 'Функция для определения количества свободного места в области файлов
FreeSize = 0
temp = 6
While temp < 22 'просмотр области FAT
If Sheets("Sheet").Cells(3; temp).Value = "" Then _
FreeSize = FreeSize + 8 'если ячейка FAT пуста, то своб.места в ней 8 байт
temp = temp + 1
Wend
End Function
Function NextFreeCellFAT() As Integer 'Функция возвращает номер первого найденного свободного элемента FAT
NextFreeCellFAT = 1
While NextFreeCellFAT < 17
If Sheets("Sheet").Cells(3; NextFreeCellFAT + 5).Value = "" Then Exit Function
NextFreeCellFAT = NextFreeCellFAT + 1
Wend
End Function
Sub AddFileToCatalog(File As FileID) 'добавление файла в область каталога
temp = 4
With Sheets("Sheet")
While .Cells(temp; 2) <> ""
temp = temp + 1 'поиск свободного места в каталоге файлов
Wend 'кто дочитает до этого места-бутылка шампанского !
.Cells(temp; 2) = File.Name 'Запись в каталог информации о файле
.Cells(temp; 3) = File.Size
.Cells(temp; 4) = File.First
End With
End Sub
Sub DeleteFileFromCatalog(NameDeletedFile As String) 'удаление информации о файле из каталога
Position = 4
While Sheets("Sheet").Cells(Position; 2).Text <> NameDeletedFile
Position = Position + 1
Wend
For temp = Position To 16 + 3 'следующие за удаляемым файлом ячейки сдвигаются, _
затирая запись об удаляемом файле
Sheets("sheet").Range(Cells(temp; 2); Cells(temp; 4)).Value = _
Sheets("sheet").Range(Cells(temp + 1; 2); Cells(temp + 1; 4)).Value
Next
End Sub
Sub ToFAT(NumberCell As Integer; Value As Integer) 'Процедура записи в заданную ячейку FAT заданного значения
Sheets("Sheet").Cells(3; NumberCell + 5).Value = Value
End Sub
Sub DeleteCellFromFAT(StartCell As Integer) 'рекурсивная функция удаления цепочки из FAT _
Вызывается с номером точки входа
' MsgBox ("DeleteCellFromFAT, StartCell=" & StartCell)
If Sheets("Sheet").Cells(3; 5 + StartCell).Value = 0 Then 'если в рассматриваемой точке - 0, _
то это значит, что она является указателем конца файла
Sheets("Sheet").Cells(3; 5 + StartCell) = "" 'и поэтому очищаем эту ячейку FAT
Else 'в противном случае это указатель на следующую ячейку FAT - вызываем эту же процедуру
DeleteCellFromFAT (Sheets("sheet").Cells(3; 5 + StartCell).Value) 'но с новым номером ячейки FAT
Sheets("sheet").Cells(3; 5 + StartCell) = "" 'и затем ее очищаем
End If
End Sub
– Конец работы –
Эта тема принадлежит разделу:
На сайте allrefs.net читайте: "Курсовая работа "Модель FAT""
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Резюме.
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов