226 (665388), страница 2

Файл №665388 226 (Модель файловой системы FAT) 2 страница226 (665388) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

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

Список литературы, примененной при подготовке курсовой работы.

  1. Microsoft Systems Journal, Sept 1989. Получен из Computer Library Periodicals, Jan 1990, Doc #14753

  1. Профессиональная работа в MS-DOS, Р.Данкан, Мир, 1993

  1. Excel 5.0 для профессионалов, Н.Николь, Р. Альбрехт, Москва, “Эком”, 1996

1 Необходимо заметить, что именно такая структура использовалась в первой версии MS-DOS.

2 PressAddFile

PressDeleteFile

PressRemakeFile

DialogRemakePressName

DialogRemakePressOK

Visualisation

3 AddFile

DeleteFile

Visualisation

Refresh

4 FreeSize

ToFAT

NextFreeCellFAT

AddFileToCatalog

DeleteCellFromFAT

DeleteFileFromCatalog

Характеристики

Тип файла
Документ
Размер
106,46 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6521
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее