Автор работы: Пользователь скрыл имя, 29 Декабря 2010 в 04:20, курсовая работа
Функциональный подход реализует принцип движения «от задач» и применяется, когда определен комплекс задач, для обслуживания которых создается информационная система. В этом случае можно выделить минимальный необходимый набор объектов предметной области, которые должны быть описаны.
В предметном подходе объекты предметной области определяются с таким расчетом, чтобы их можно было использовать при решении множества разнообразных, заранее не определенных задач.
If Check1.Checked Then
Del(Ind(Pos)) = 1
Else
Del(Ind(Pos)) = 0
End If
End Sub
Private Sub cmdPack_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdPack.Click
Dim i As Integer
Dim j As Integer = 1
Dim R As TStud = New TStud()
' открывается вспомогательный файл
F2 = New FileStream(PathTemp, FileMode.Create)
' из основного файла во вспомогательный переписываются
' записи, которые не нужно удалять
For i = 1 To N
R.ReadFromFile(f1, i)
If Del(i) = 0 Then
R.writeToFile(F2, j)
j = j + 1
End If
Next i
' закрываются файлы, и происходит сохранение
' вспомогательного файла под именем основного
' файла базы данных
f1.Close()
F2.Close()
Kill(Decl.Path)
Rename(PathTemp, Decl.Path)
' открывается новый основной (рабочий файл) базы
f1 = New FileStream(Decl.Path, FileMode.Open)
N = f1.Length \ R.len
' возвращение исходных значений массивам Ind и Del
For i = 1 To Nmax
Ind(i) = i
Del(i) = 0
Next i
' вывод первой записи данных
Pos = 1
If N = 0 Then
Call ShowNewZap()
Else
Call ShowZap(Pos)
End If
MsgBox("Обновление выполнено успешно!")
End Sub
Таким образом, для удаления записей используется временный файл, куда переносятся все те записи, которые не должны быть удалены (для них значение Del(i) равно нулю), затем исходный файл удаляется, а временный файл переименовывается.
Новый этап тестирования проекта с целью проверки его работоспособности при добавленных возможностях.
11.4. Сохранение и удаление файлов
Мы описали возможности ввода, просмотра и редактирования данных. Добавим несколько процедур, обрабатывающие события выбора следующих пунктов меню: «Файл à Сохранить как», «Файл à Закрыть» и «Файл à Удалить».
При выборе данного пункта меню «Файл à Сохранить как» основной файл базы (файл с данными) должен быть сохранен под новым именем, а затем, должно быть открыто это новое сохранение.
Private Sub mnuFileSaveAsItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuFileSaveAsItem.Click
Dim R As TStud = New TStud()
Dim Sp As TSpec = New TSpec()
Dim PathOld As String
Dim PathOldSpec As String
' запоминаются имена основного файла базы данных и
' Файла-справочника
PathOld = Decl.Path
PathSpec = Mid(Decl.Path, 1, Len(Decl.Path) - 4) + ".spe"
PathOldSpec = PathSpec
' запрос имени нового файла базы
With Me.SaveFileDialog1
.FileName = ""
.Filter = "Все файлы (*.*)|*.*|" + _
"Текстовые файлы. (*.txt)|*.txt|" + _
"Файлы исходных данных (*.dan)|*.dan|" + _
"Файлы результатов (*.rez)|*.rez"
.FilterIndex = 3
.ShowDialog()
Decl.Path = .FileName
If Decl.Path <> "" Then
PathSpec = Mid(Decl.Path, 1, Len(Decl.Path) - 4) + _
".
End If
End With
' если имя нового основного файла пусто, то рабочие файлы
' остаются прежними и производится выход из процедуры
If Decl.Path = "" Then
Decl.Path = PathOld
PathSpec = PathOldSpec
Exit Sub
End If
' иначе файлы закрывается и производится копирование
' рабочих файлов
Close()
If Not (Dir(Decl.Path) = "") Then
Kill(Decl.Path)
Kill(PathSpec)
End If
FileCopy(PathOld, Decl.Path)
FileCopy(PathOldSpec, PathSpec)
' после копирования открываются новые файлы
f1 = New FileStream(Decl.Path, FileMode.Open)
F1_sp = New FileStream(PathSpec, FileMode.Open)
frmInputEdit.Text = "Файл: " + Decl.Path
End Sub
При выборе пункта меню «Файл à Закрыть» все открытые файлы должны быть закрыты и все пункты меню, недоступные в начале работы снова должны снова стать недоступными.
Private Sub mnuFileCloseItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuFileCloseItem.Click
' закрываются все файлы, открытые в процессе работы
CloseAllFiles()
' пункты меню, которые были неактивными в начале
' работы программы, снова становятся неактивными
mnuFileSaveItem.Enabled = False
mnuFileSaveAsItem.Enabled = False
mnuFileCloseItem.Enabled = False
mnuFileDeleteItem.Enabled = False
mnuView.Enabled = False
mnuSort.Enabled = False
mnuQuery.Enabled = False
mnuSearch.Enabled = False
End Sub
При выборе пункта меню «Файл à Удалить» основной файл базы (файл с данными) должен быть удален, и все пункты меню, недоступные в начале работы снова должны снова стать недоступными.
Private Sub mnuFileDeleteItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuFileDeleteItem.Click
Dim Button As Integer
' запрос подтверждения на удаление
Button = MsgBox("Действительно удалить?", vbYesNo + _
vbQuestion, "Удаление файла")
' в случае подтверждения вызывается процедура закрытия
' и удаляется основной файл базы данных
If Button = vbYes Then
Call mnuFileCloseItem_Click(sender, e)
Kill(Decl.Path)
Kill(PathSpec)
End If
End Sub
На этом месте снова необходимо протестировать проект на работоспособность и корректность работы. Особое внимание следует уделить взаимодействию различных компонентов приложения.
Сортировка данных в данной информационной системе производится при помощи индексного массива Ind, описанного в модуле Declar. В этом случае результатом сортировки будет не отсортированный файл, а вспомогательный массив номеров (индексов) Ind, показывающий в каком порядке следует выбирать записи файла, чтобы они образовывали отсортированную последовательность.
Алгоритмы сортировки опишем в стандартном модуле, который необходимо добавить в проект под именем Sorting. Для сортировки данных будем использовать алгоритм сортировки обменом (метод «пузырьковой» сортировки).
Приведем код процедуры сортировки по числовым полям.
Public Sub Sort(Key() As Single, N As Integer, Ind() As Integer)
Dim i As Integer
Dim j As Integer
Dim k As Integer
For j = 1 To N - 1
For i = 1 To N - j
If Key(Ind(i)) > Key(Ind(i + 1)) Then
k = Ind(i)
Ind(i) = Ind(i + 1)
Ind(i + 1) = k
End If
Next i
Next j
End Sub
Перед обращением к этой процедуре необходимо инициализировать массив Ind и занести элементы ключевого поля сортируемого файла во вспомогательный массив Key. Благодаря описанию массива Key как вещественного в него можно записывать числовые данные любого типа: как Single, так и Integer и Byte.
Кроме того, эта процедура пригодна и для сортировки по убыванию ключа; для этого достаточно при инициализации массива Key умножить значения ключевых полей на минус единицу.
Для процедур сортировки по строковым полям и полям типа даты приведем только заголовки, так как код тела этих процедур полностью совпадает с кодом тела процедуры сортировки по числовым полям.
Заголовок процедуры сортировки по строковым полям имеет вид:
Public Sub SortStr(Key() As String , N As Integer, _
Ind() As Integer)
Заголовок процедуры сортировки по полям типа даты имеет вид:
Public Sub SortDate(Key() As Date, N As Integer, _
Ind() As Integer)
Опишем теперь работу с указанными процедурами сортировки. Т.е. опишем процедуры обработки событий выбора пунктов меню «Сортировка à По курсу», «Сортировка à По группе», «Сортировка à По ФИО» и «Сортировка à Исходный порядок». При этом необходимо предусмотреть корректное выполнение вложенных сортировок.
Выбор пункта меню «Сортировка à По курсу»
Private Sub mnuSortKursItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuSortKursItem.Click
Dim i As Integer
Dim KeyK(Nmax) As Single
Dim R As TStud = New TStud()
' подготовка к сортировке
For i = 1 To N
R.ReadFromFile(f1, i)
KeyK(i) = R.Kurs
Next i
' вызов процедуры сортировки
Sort(KeyK, N, Ind)
End Sub
Выбор пункта меню «Сортировка à По группе»
Private Sub mnuSortGroupItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuSortGroupItem.Click
Dim i As Integer