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

Автор работы: Пользователь скрыл имя, 29 Декабря 2010 в 04:20, курсовая работа

Краткое описание

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

В предметном подходе объекты предметной области определяются с таким расчетом, чтобы их можно было использовать при решении множества разнообразных, заранее не определенных задач.

Вложенные файлы: 1 файл

Net.doc

— 623.50 Кб (Скачать файл)

          Dim KeyK(Nmax) As Single

          Dim R As TStud = New TStud()

 

          ' подготовка к сортировке

          For i = 1 To N

            R.ReadFromFile(f1, i)

            KeyK(i) = R.Group

          Next i

 

          ' вызов процедуры сортировки

          Sort(KeyK, N, Ind)

      End Sub

 

     Выбор пункта меню «Сортировка à По ФИО»

 

    Private Sub mnuSortFIOItem_Click(ByVal sender As System.Object,_

       ByVal e As System.EventArgs) Handles mnuSortFIOItem.Click

          Dim i As Integer

          Dim KeyK(Nmax) As String

          Dim R As TStud = New TStud()

 

          ' подготовка к сортировке

          For i = 1 To N

            R.ReadFromFile(f1, i)

            KeyK(i) = Trim(R.FIO)

          Next i

 

          ' вызов процедуры сортировки

          SortStr(KeyK, N, Ind)

      End Sub

 

     Выбор пункта меню «Сортировка à Исходный порядок»

 

      Private Sub mnuSortUnsorted_Click(ByVal sender As _

      System.Object, ByVal e As System.EventArgs) _

      Handles mnuSortUnsorted.Click

          Dim i As Integer

 

          ' возвращение исходных значений массивам Ind и Del

          For i = 1 To Nmax

            Ind(i) = i

            Del(i) = 0

          Next i

      End Sub

 

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

     В команды меню «Сортировка» вынесены сортировки по одному полю (ключу) данных. А если необходимо выполнить сортировку по набору ключей, т.е. представить данные о студентах так, что сначала идут записи по возрастанию номера курса, записи в пределах одного курса – по возрастанию номера группы, а записи в пределах одной группы – по фамилиям в алфавитном порядке. Здесь мы встречаемся с сортировкой по набору ключей.

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

     Допустим, нужно выполнить сортировку по набору ключей: «Курс», «Группа», «Фамилия И.О.». Предположим, что исходный файл отсортирован по последнему ключу (в нашем случае по полю «Фамилия И.О.). Сортируя полученный файл по предшествующему ключу (по полю «Группа»), мы можем быть уверены, что в пределах одного значения данного ключа записи сохраняют упорядоченность по последнему ключу (это следует из свойства устойчивости алгоритма). Т.е. данные будут отсортированы по полю «Группа», а внутри каждой группы – по полю «Фамилия И.О.». Повторяя процесс сортировки по всем ключам от последнего к первому (т.е. в порядке, обратном требуемому), мы получим файл, отсортированный по набору ключей. Опять же напомним, что файл на самом деле не сортируется, а сортируется индексный массив. Подчеркнем, что в описанном процессе индексный массив, являющийся результатом сортировки по некоторому ключу, является исходным для сортировки по очередному ключу.

     Таким образом, процедуры модуля Sorting позволяют осуществлять сортировку записей файла по нескольким подчиненным ключам.

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

      Заметим, однако, что при удалении записи в отсортированных данных (это  возможно только в режиме просмотра в виде формы) порядок следования записей нарушается, возвращаясь к исходному виду.

 

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

13. Задачи, решаемые в информационной системе

     В техническом задании запланировано  решение следующих задач:

    1. Вывод списков групп по запросам для одной группы и для всех групп.
    2. Вычисление среднего балла для каждого студента.
  1. Для каждой учебной группы вычисление количества студентов и среднего балла в группе.

      Результаты  решения задач оформляются в  виде отчетов, вывод которых вызывается командами пункта меню «Отчеты» в строке меню главной формы.

      Заметим, что первый пункт – это фактически два различных отчета: списки всех групп и список одной, указанной группы. Из-за этого мы при создании пунктов меню поставили в соответствие этому отчету два пункта меню: «Отчеты à Списки групп à Все группы» и «Отчеты à Списки групп à Одна группа».

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

      Поместим этот элемент на форму frmMenu, задав ему следующие свойства:

    Name = RichTextBox1 Системное имя
    Font = Courier New Шрифт
    ReadOnly = True Запрет редактирования
    ScrollBars = Vertical Вертикальная  полоса прокрутки
    Visible = False Объект невидим
 

      Кроме этого элемента поместим на форму  еще и кнопку (Name = cmdSaveOtch, Visible = False), при нажатии которой будем сохранять просматриваемый отчет. Таким образом, макет формы frmMenu , доработанный для вывода результатов имеет вид, представленный на рисунке 8.

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

Рисунок 8. Макет главной формы в режиме конструктора

 

      Приведем  код процедуры обработки события нажатия на кнопку «Сохранить отчет».

      Private Sub cmdSaveOtch_Click(ByVal sender As System.Object,_

       ByVal e As System.EventArgs) Handles cmdSaveOtch.Click

          ' запрос имени файла для сохранения

          With SaveFileDialog1

            .FileName = ""

            .Filter = "Все файлы (*.*)|*.*|" + _

                 "Текстовые файлы. (*.txt)|*.txt|" + _

                 "Файлы исходных данных (*.dan)|*.dan|" + _

                 "Файлы результатов (*.rez)|*.rez"

            .FilterIndex = 2

            .ShowDialog()

          End With

 

          ' если имя файла не пусто и не равно имени

          ' просматриваемого файла,

          If SaveFileDialog1.FileName <> "" And _

           richName <> SaveFileDialog1.FileName Then

            ' то производится копирование просматриваемого файла,

            FileCopy(richName, SaveFileDialog1.FileName)

            ' его удаление

            Kill(richName)

            ' и вывод в RichTextBox1 нового файла

            richName = SaveFileDialog1.FileName

            RichTextBox1.LoadFile(richName, _

                                        RichTextBoxStreamType.PlainText)

 

            ' сообщение об успешном завершении сохранения отчета

            MsgBox("Отчет сохранен", vbOKOnly + vbInformation, _

            "Сохранение")

          End If

 

      End Sub

 

13.1. Вывод списков групп

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

      Прежде  чем привести код этой процедуры, обсудим алгоритм, реализованный в ней. Идея алгоритма состоит в следующем: сначала файл с данными о студентах должен быть «отсортирован» по курсу, группе и фамилии; результатом чего станет индексный массив Ind, который позволит просматривать записи файла в отсортированном виде именно таким образом. Такая упорядоченность записей файла фактически представляет его разбитым на группы записей, самая внутренняя группа имеет одинаковые значения для курса и группы и упорядочена в алфавитном порядке фамилий. Поэтому в самом внешнем цикле перебираются курсы, во вложенном в него цикле перебираются номера групп, и в следующем по уровню вложенности цикле (для одинаковых значений курса и группы во всех записях) выбираются и выводятся в текстовый файл фамилии студентов. Код процедуры снабжен подробными комментариями.

 

      Private Sub mnuQueryListAllItem_Click(ByVal sender As _

      System.Object, ByVal e As System.EventArgs) _

      Handles mnuQueryListAllItem.Click

          Dim i As Integer

          Dim Ind(Nmax) As Integer

          Dim NK As Byte

          Dim NG As Byte

          Dim NPP As Integer

          Dim KeyK(Nmax) As Single

          Dim KeyG(Nmax) As Single

          Dim KeyFIO(Nmax) As String

          Dim R As TStud = New TStud()

 

          ' открывается временный вспомогательный файл otch.ist,

          ' находящийся в той же папке, что и работающий проект

          Path2 = CurDir() + "\otch.txt"

          F4 = FreeFile()

          FileOpen(F4, Path2, OpenMode.Output)

 

          ' подготовка данных для сортировки по курсу, группе и ФИО

          For i = 1 To N

            R.ReadFromFile(f1, i)

            KeyK(i) = R.Kurs

            KeyG(i) = R.Group

            KeyFIO(i) = R.FIO

            Ind(i) = i

          Next i

 

          ' сортировка данных

          Call SortStr(KeyFIO, N, Ind)

          Call Sort(KeyG, N, Ind)

          Call Sort(KeyK, N, Ind)

 

          ' чтение первой записи в отсортированном списке

          i = 1

          R.ReadFromFile(f1, Ind(i))

 

          Do While i <= N

 

            ' фиксирование и запись в файл номера текущего курса

            NK = R.Kurs

            PrintLine(F4, "Курс " + CStr(NK))

 

            Do While NK = R.Kurs And i <= N

 

              ' фиксирование и запись в файл номера

              ' текущей группы

              NG = R.Group

              PrintLine(F4, vbTab + "Группа " + CStr(NG))

 

              ' порядковый номер студентов в группе

              ' начинается с единицы

              NPP = 1

 

              Do While NK = R.Kurs And NG = R.Group

Информация о работе Проектирование информационной системы