Автор работы: Пользователь скрыл имя, 29 Декабря 2010 в 04:20, курсовая работа
Функциональный подход реализует принцип движения «от задач» и применяется, когда определен комплекс задач, для обслуживания которых создается информационная система. В этом случае можно выделить минимальный необходимый набор объектов предметной области, которые должны быть описаны.
В предметном подходе объекты предметной области определяются с таким расчетом, чтобы их можно было использовать при решении множества разнообразных, заранее не определенных задач.
' запись в файл ФИО студента
PrintLine(F4, vbTab + vbTab + CStr(NPP) + "." + _
NPP = NPP + 1
i = i + 1
' если еще есть записи, то считываем
' следующую, иначе выходим из цикла
If i <= N Then
R.ReadFromFile(f1, Ind(i))
Else
Exit Do
End If
Loop
' пропуск строки между списками различных групп
PrintLine(F4, "")
Loop
Loop
' файла отчета закрывается
FileClose(F4)
' загрузка только что созданного файла в RichTextBox1
RichTextBox1.LoadFile(Path2, _
richName = Path2
' показ элемента RichTextBox1 и кнопки «Сохранить отчет»
RichTextBox1.Visible = True
cmdSaveOtch.Visible = True
End Sub
Вывод списка одной группы реализован в процедуре обработки события выбора пункта меню «Отчеты à Списки групп à Одна группа»
В этой задаче у пользователя сначала запрашиваются значения для курса и группы, и проверяется корректность введенных значений. Затем файл исходных данных упорядочивается по полю «Фамилия» в алфавитном порядке; после чего он просматривается, из него выбираются и выводятся в текстовый файл записи, в которых значения курса и группы совпадают со значениями, введенными пользователем.
Private
Sub mnuQueryListOneItem_Click(
System.Object, ByVal e As System.EventArgs) _
Handles mnuQueryListOneItem.Click
Dim i As Integer
Dim Ind(Nmax) As Integer
Dim NK As Byte
Dim NG As Byte
Dim NPP As Integer
Dim TempStr As String
Dim KeyFIO(Nmax) As String
Dim R As TStud = New TStud()
' открывается файл otch.ist, находящийся в той же папке,
' что и работающий проект
Path2 = CurDir() + "\otch.ist"
F4 = FreeFile()
FileOpen(F4, Path2, OpenMode.Output)
' запрос у пользователя интересующего его курса
TempStr = InputBox("Введите курс", "Ввод курса")
Do While Not IsNumeric(TempStr)
'если введенный курс не является числом,
' но является пустым значением
If (TempStr = "") Then
' то файл закрывается и осуществляется выход
' из процедуры
FileClose(F4)
Exit Sub
End If
' если введенный курс не является числом,
' то еще раз производится запрос номера курса
MsgBox("Курс - число", vbOKOnly + vbExclamation, _
TempStr = InputBox("Введите курс", "Ввод курса")
Loop
' перевод введенного курса в числовое значение
NK = CByte(TempStr)
' запрос у пользователя интересующей его группы
TempStr = InputBox("Введите группу", "Ввод группы")
Do While Not IsNumeric(TempStr)
'если введенная группа не является числом,
' но является пустым значением
If (TempStr = "") Then
' то файл закрывается и осуществляется выход
' из процедуры
FileClose(F4)
Exit Sub
End If
' если введенная группа не является числом,
' то еще раз производится запрос номера группы
MsgBox("Группа-число", vbOKOnly + vbExclamation, _
TempStr = InputBox("Введите группу", "Ввод группы")
Loop
' перевод введенной группы в числовое значение
NG = CByte(TempStr)
' подготовка данных для сортировки по полю ФИО
For i = 1 To N
R.ReadFromFile(f1, i)
KeyFIO(i) = R.FIO
Ind(i) = i
Next i
' сортировка данных
Call SortStr(KeyFIO, N, Ind)
' запись в файл информации о курсе и группы
PrintLine(F4, "Курс " + CStr(NK) + ", Группа " + CStr(NG))
' порядковый номер студентов в группе
' начинается с единицы
NPP = 1
For i = 1 To N
' считывание следующей записи и если курс и группа
' соответствуют, то производится вывод в файл отчета
R.ReadFromFile(f1, Ind(i))
If R.Kurs = NK And R.Group = NG Then
PrintLine(F4, vbTab + CStr(NPP) + "." + vbTab + R.FIO)
NPP = NPP + 1
End If
Next i
' файл отчета закрывается
FileClose(F4)
' загрузка только что созданного файла в RichTextBox1
RichTextBox1.LoadFile(Path2, _
richName = Path2
' показ элемента RichTextBox1 и кнопки «Сохранить отчет»
RichTextBox1.Visible = True
cmdSaveOtch.Visible = True
End Sub
13.2. Количество студентов и средний балл в группах
Во второй и третьей задаче из числа запланированных задач необходимо для каждого студента вычислить средний балл. Вынесем вычисление среднего балла каждого студента в отдельную пользовательскую процедуру, которая будет принадлежать форме frmMenu. В этой процедуре создается вспомогательный файл прямого доступа с записями пользовательского типа Tball, содержащий столько же записей, сколько находится в файле исходных данных. Пользовательский тип Tball содержит поле для вычисления среднего балла. Код процедуры приведен ниже.
Private Sub AverageBallCreate()
Dim i As Integer
Dim j As Integer
Dim KeyK(Nmax) As Single
Dim KeyG(Nmax) As Single
Dim KeyFIO(Nmax) As String
Dim KeyB(Nmax) As Single
Dim R As TStud = New TStud()
Dim S As TBall = New TBall()
' открывается вспомогательный файл Ball.avg, находящийся в
' той же папке, что и работающий проект
Path1 = CurDir + "\Ball.avg"
F3 = New FileStream(Path1, FileMode.Create)
' читается следующая запись из основного файла базы данных
' вычисляется средний балл и созданная запись о среднем
' балле выводится во вспомогательный файл
For i = 1 To N
R.ReadFromFile(f1, i)
S.Sb = 0
For j = 1 To R.Kol
S.Sb = S.Sb + R.M(j - 1)
Next j
S.Sb = S.Sb / R.Kol
S.Kurs = R.Kurs
S.Group = R.Group
S.FIO = R.FIO
S.writeToFile(F3, i)
Next i
' вспомогательный файл закрывается
F3.Close()
End Sub
Вычисление количества студентов и среднего балла для каждой учебной группы реализовано в процедуре обработки события выбора команды меню «Отчеты à Количество и средний балл».
В файле исходных данных содержатся только оценки, поэтому в этой процедуре, сначала формируется вспомогательный файл с данными о студентах (курс, группа, ФИО, средний балл). Затем вспомогательный файл упорядочивается по курсу и группе. После этого вычисляется количество записей в группе с одинаковыми значениями курса и группы, а также средний балл в этой же группе.
Алгоритм вычислений похож на алгоритм, используемый для вывода списков по группам. Во внешнем цикле перебираются курсы, во вложенном в него цикле перебираются номера групп, и в следующем по уровню вложенности цикле (для одинаковых значений курса и группы во всех записях) увеличиваются значения счетчика для количества студентов и суммы для накопления средних баллов. Значения счетчика и суммы обнуляются перед входом во внутренний цикл, после выхода из которого выводится количество студентов в группе и вычисляется и выводится средний балл в группе. Код процедуры снабжен подробными комментариями.
Private Sub mnuQueryKolItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuQueryBallItem.Click
Dim Sum As Double
Dim k As Integer
Dim i As Integer
Dim Ind(Nmax) As Integer
Dim KeyK(Nmax) As Single
Dim KeyG(Nmax) As Single
Dim NK As Byte
Dim NG As Byte
Dim S As TBall = New TBall()
' вызов процедуры создания вспомогательного файла,
' содержащего информацию о среднем балле каждого студента
AverageBallCreate()
' открывается созданный вспомогательный файл
F3 = New FileStream(Path1, FileMode.Open)
' открывается вспомогательный файл kol.avg, находящийся в
' той же папке, что и работающий проект
Path2 = CurDir() + "\kol.avg"
F4 = FreeFile()
FileOpen(F4, Path2, OpenMode.Output)
' подготовка данных для сортировки по курсу и группе
For i = 1 To N
S.ReadFromFile(F3, i)
KeyK(i) = S.Kurs
KeyG(i) = S.Group