Проектирование и разработка автоматизированной системы для проверки знаний студентов

Автор работы: Пользователь скрыл имя, 15 Декабря 2013 в 20:45, дипломная работа

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

Разработка и внедрение автоматизированной системы для тестирования позволила упростить процедуру, сократить время студентов и преподавателей, избежать ошибок в подсчете результатов.
Во время выполнения данной работы требовалось решить следующие задачи:
разработать техническое задание (ТЗ) на автоматизированную систему (АС);
разработать и реализовать АС;
провести внедрение АС.

Содержание

Введение 3
Глава 1.Описание предметной области и содержательная постановка задачи 4
1.1. Описание предметной области 4
1.2. Содержательная постановка задачи 8
Глава 2. Технческое задание 9
2.1 Описание технических требований 9
2.2. Описание требований к интерфейсу 9
2.3. Дополнительные требования 10
Глава 3. Практическая разработка автоматизированной системы 11
3.1. Этапы разработки 11
3.2. Функциональная модель 13
3.3. Обоснование выбора в качестве среды программирования MS Visual Basic 6.0 15
Глава 4. Описание автоматизированной системы 17
4.1. Состав автоматизированной системы 17
4.2. Описание функциональных возможностей 17
4.3. Ограничения 18
Заключение 20
Список используемой литературы 21
Приложения. 22
Приложение 1. Техническое задание. 22
Приложение 2. Экранные формы 28
Приложение 3. Листинги модулей. 31

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

Диплом - Коршунов.doc

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

        Input #F, MyText, BackColorStandard                 '

        Input #F, MyText, BackColorAnsweredQ                 ' Цвет отвеченного вопроса

        Input #F, MyText, BackColorCurrentQ                 ' Цвет текущего вопроса

        Input #F, MyText, BackColorWrongAnsw                ' Цвет неправильных ответов

       

        ' frmDebug.Text1(1).Text = frmDebug.Text1(1) & MyText & prmWidht & vbCrLf

        ' frmDebug.Text1(1).Text = frmDebug.Text1(1) & MyText & prmHeight & vbCrLf

        ' frmDebug.Text1(1).Text = frmDebug.Text1(1) & MyText & prmFontSize & vbCrLf

        ' frmDebug.Text1(1).Text = frmDebug.Text1(1) & MyText & FolderResult & vbCrLf

        ' frmDebug.Text1(1).Text = frmDebug.Text1(1) & MyText & FolderQuestions & vbCrLf

       

       

    Close #F                                       ' закончили чтение параметров программы

   '-------------------------------------------------------------------------

   Rem Начинаем чтение параметров

   ' -------------------------------------------------------------------------

    fullFileName = App.Path & "\" & FolderQuestions & "\" & OptionsFile

    ' frmDebug.Text1(2).Text = fullFileName

   

    AllQuestionForTest = 0

    AllQuestionInTest = 0

   

    Open fullFileName For Input As #F           ' открываем файл для чтения  параметров теста

        Line Input #F, MyText

        frmMain.Caption = "MTest2: " & MyText   ' установили  шапку теста

        Input #F, Group

        k = 0                       ' число вопросов перед секцией

        For i = 0 To Group - 1

            Input #F, Options(i, 0), Options(i, 1), Options(i, 2)

            Options(i, 3) = k

            k = k + Options(i, 1)

            AllQuestionInTest = AllQuestionInTest + Options(i, 1)

            AllQuestionForTest = AllQuestionForTest + Options(i, 2)

        Next i

    Close #F                                    ' закончили чтение параметров теста

    Rem 2

    ' frmDebug.Text1(3).Text = "Параметры теста: " & Group & " " & AllQuestionInTest & " " & AllQuestionForTest

   

   

    fullFileName = App.Path & "\" & FolderQuestions & "\" & FileSN

    Open fullFileName For Input As #F           ' открываем файл для чтения  названий секций

        For i = 0 To Group - 1

            Line Input #F, NameSections(i)

            Rem MsgBox (NameSections(i))

        Next i

    Close #F                                    ' закончили чтение названий секций

   

    '--------------------------------------------------------------------------

    Rem Начинаем чтение вопросов

    '--------------------------------------------------------------------------

    For i = 0 To 2999                            ' обнуляем список вопросов

        For j = 0 To 10

            Question(i, j) = ""

        Next j

        AnswerInQuestion(i) = 0

    Next i

   

   MaxAnswerInQuestionThisTest = 1              ' определение сколько максимум вариантов ответа возможно

   m = 0

  

   For i = 0 To Group - 1              ' Цикл по всем группам

        fullFileName = App.Path & "\" & FolderQuestions & "\" & FileQ & (i + 1) & ExtFileQ

        Rem MsgBox (fullFileName)

        Open fullFileName For Input As #F           ' открываем файл для чтения вопросов и вариантов ответа

  

        For j = 0 To Options(i, 1) - 1      '   Цикл по всем вопросам в группе

            Line Input #F, MyText

            MyText = Trim(MyText)

            Question(m, 0) = MyText

           

            For k = 1 To MaxAnswerInQuestion

                    If EOF(1) Then

                        Rem showQuestions(i, j, k)

                        Exit For

                    End If

                    Line Input #F, MyText

                    MyText = Trim(MyText)

                    Rem MsgBox ("Группа =" & i & " Вопрос =" & j & "Номер ответа =" & k & "[" & m & "] Вариант ответа =" & MyText)

                    If MyText = "" Then

                        Rem showQuestions(i, j, k)

                        Exit For

                    Else

                        Question(m, k) = MyText

                        AnswerInQuestion(m) = k

                        If MaxAnswerInQuestionThisTest < k Then MaxAnswerInQuestionThisTest = k

                    End If

            Next

            m = m + 1

            Rem MsgBox ("Конец вариантов ответа")

        Next

        Rem MsgBox ("Конец секции")

        Close #F                                    ' закончили чтение вопросов и вариантов ответа

    Next i

    Rem Загрузка вопросов закончена

    '=============================================================================

   

    '--------------------------------------------------------------------------

    Rem Начинаем чтение ответов

    '--------------------------------------------------------------------------

    m = 0

    For i = 0 To Group - 1              ' Цикл по всем группам

        fullFileName = App.Path & "\" & FolderQuestions & "\" & FileA & (i + 1) & ExtFileA

        Rem MsgBox (fullFileName)

        Open fullFileName For Input As #F           ' открываем файл для чтения  вопросов и вариантов ответа

           

            For j = 0 To Options(i, 1) - 1      '   Цикл по всем вопросам в группе

                Line Input #F, MyText

                MyText = Trim(MyText)

                Answer(m) = Right(MyText, 1)

                ' frmDebug.Text1(5).Text = frmDebug.Text1(5).Text & Answer(m)

               

                m = m + 1

            Next

           

        

         Rem MsgBox ("Конец секции ответов")

         Close #F

    Next i

    Rem Загрузка ответов закончена

    '=============================================================================

   

    Rem Проверка параметров не выполняется!

   

   

    Rem Скрываем все ненужное

    frmMain.frameQuestion.Visible = False

    frmMain.lblQuestion.Visible = False     ' Текст вопроса

    frmMain.lblQuestions.Visible = False    ' "Вопросы:"

    frmMain.btnEndTest.Visible = False

    frmMain.btnNext.Visible = False

    frmMain.btnPrevious.Visible = False

    frmMain.btnClearAnswer.Visible = False

   

    For i = 0 To 3 - 1

        frmMain.txtName(i).Text = ""

    Next i

   

    frmMain.btnBeginTest.Visible = True

   

    frmMain.Height = prmHeight * 9810 / 600         ' Устанавливаем высоту окна

    frmMain.Width = prmWidht * 12120 / 800          ' Ширину

    frmMain.lblQuestion.FontSize = prmFontSize      ' Устанавливаем  размер шрифта для вопросов

    frmMain.lblQuestion.Caption = ""

   

    j = frmMain.frameQuestion.Height                 ' в пикселях frmMain.frameQuestion.Top +

    j = j * 9810 / 600                                          'переводим в y.e по вертикали

    k = frmMain.lblQuestion.Top + frmMain.lblQuestion.Height    ' в у.е

    k = (j - k) / (MaxAnswerInQuestionThisTest * 1.2)       ' вычисляем желательную высоту варианта ответа

    frmMain.Option1(0).Height = k

   

           

    For i = 0 To MaxAnswerInQuestionThisTest - 1               ' Выстраиваем варианты ответа и номера клавиш

        frmMain.Option1(i).FontSize = prmFontSize

        frmMain.Option1(i).Visible = False

        frmMain.Option1(i).TabStop = False

        frmMain.Option1(i).TabIndex = 0

       

        frmMain.Option1(i).Width = frmMain.Option1(0).Width

        frmMain.Option1(i).Height = frmMain.Option1(0).Height

        frmMain.Option1(i).Top = i * frmMain.Option1(0).Height * 1.2 + frmMain.Option1(0).Top

               

        ' подпись цифр ответа

        frmMain.Label1(i).FontSize = prmFontSize

        frmMain.Label1(i).Caption = (i + 1) Mod 10

        frmMain.Label1(i).Top = frmMain.Option1(i).Top + frmMain.Option1(i).Height / 2 - frmMain.Label1(i).Height / 2

        frmMain.Label1(i).Visible = False

       

    Next i

   

    For i = 0 To MaxQuestionsInTest - 1             ' Выстраиваем в порядок кнопки с номерами вопросов

        frmMain.cmdNQuestion(i).Caption = i + 1

        frmMain.cmdNQuestion(i).Width = frmMain.cmdNQuestion(0).Width

        frmMain.cmdNQuestion(i).Height = frmMain.cmdNQuestion(0).Height

        frmMain.cmdNQuestion(i).Left = frmMain.cmdNQuestion(0).Left + (i Mod 20) * frmMain.cmdNQuestion(0).Width

        frmMain.cmdNQuestion(i).Top = frmMain.cmdNQuestion(0).Top + (i \ 20) * frmMain.cmdNQuestion(0).Height

        frmMain.cmdNQuestion(i).Visible = False

        frmMain.cmdNQuestion(i).TabStop = False

        ' frmMain.cmdNQuestion(i).Style = 1   ' Устанавливаем графический вид кнопки

        frmMain.cmdNQuestion(i).BackColor = BackColorStandard   '&HFFFF&      ' &H8000000F&

       

    Next i

    Rem Устанвливаем другие переменные

    TestInProgress = False

    ShowAnswersMode = False

       

End Sub

Sub SetPositionForAnswer()

 

End Sub

 

 

Rem ===================================================================================================

Rem Окончена загрузка данных из файлов и подготовка к работе

Rem ===================================================================================

Sub TestBegin()    ' Начало тестирования

    Rem MsgBox ("Начало тестирования")

    If TestInProgress Then

            MsgBox ("У Вас уже идет тестирование, завершите его.")

            Exit Sub

        Else

            If CheckFIO = False Then

                    MsgBox ("ФИО заполнено не полностью!")

                    Exit Sub

                Else

                    TestInProgress = True       ' Тестирование  считаем начавшимся

                    GenerateQList

                    PrepareForShowQuestion

                    ShowQuestion

            End If

    End If

       

End Sub

 

Function CheckFIO() As Boolean       ' Проверка заполнены ли поля ФИО

    Dim i As Integer

    CheckFIO = True

    For i = 0 To 3 - 1

        If frmMain.txtName(i) = "" Then

                CheckFIO = False

                Exit For

        End If

    Next i

End Function

'--------------------------------------------------------------------------

' Генерирование случайных  вопросов

'--------------------------------------------------------------------------

Sub GenerateQList() ' Генерирование случайных вопросов

    Rem MsgBox ("GenerateQList")

    Rem Dim RandomGenerator As New Random

    Dim i, j As Integer

    Dim n, m, X, Y As Integer

   

    Randomize

 

    n = 0

    ' frmDebug.Text1(4).Text = ""

   

    For i = 1 To Group

        For j = 1 To Options(i - 1, 1)      ' Подготовка массива для получения случайных вопросов

                tmpK(j) = j

        Next j

           

        For j = 1 To Options(i - 1, 2)  ' Готовим необходимое число вопросов

            m = Options(i - 1, 1) - j + 1

            X = CInt(Int((m * Rnd()) + 1))

            GenQListQuestion(n) = Options(i - 1, 3) + tmpK(X)

            GenQListAnswer(n) = " "

           

            Rem frmDebug.Text1(4).Text = frmDebug.Text1(4).Text & M & "_" & X & "_" & tmpK(X) & " "

          

            Y = tmpK(X)

            tmpK(X) = tmpK(Options(i - 1, 1) - j + 1)

            tmpK(Options(i - 1, 1) - j + 1) = Y

           

            ' frmDebug.Text1(4).Text = frmDebug.Text1(4).Text & GenQListQuestion(n) & GenQListAnswer(n)

           

            n = n + 1

       

        Next j

   

    Next i

    

End Sub

' конец генерации случайных  вопросов

'==============================================================================

 

Sub PrepareForShowQuestion() 'Подготовка к показу вопросов

    Dim i As Integer

    Rem MsgBox ("PrepareForShowQuestion")

   

    frmMain.btnBeginTest.Visible = False

    frmMain.mnuStartTest.Visible = False

    frmMain.btnEndTest.Visible = True

    frmMain.btnClearAnswer.Visible = True

    frmMain.frameQuestion.Visible = True

    frmMain.lblQuestion.Visible = True

    frmMain.lblQuestions.Visible = True

   

    For i = 0 To 3 - 1

        frmMain.txtName(i).Locked = True

    Next i

   

   

    For i = 0 To AllQuestionForTest - 1             ' Показываем кнопки с номерами вопросов

        frmMain.cmdNQuestion(i).Visible = True

        frmMain.cmdNQuestion(i).FontItalic = False

    Next i

   

    CurrentQ = 1

   

End Sub

' --------------------------------------------------

'           Показ вопроса (Прорисовка элементов)

' --------------------------------------------------

Sub ShowQuestion()  ' Показ  вопроса

    Dim i, s, k, l As Integer

    Dim a, b, c As String

    If frmMain.txtName(0).Enabled = True Then

        frmMain.txtName(0).SetFocus         ' всегда фокус держим на фамилии

    End If

   

    If CurrentQ <= 1 Then               ' проверяем надо ли показывать кнопку Предыдущий

                        CurrentQ = 1

                        frmMain.btnPrevious.Visible = False

                    Else

                        frmMain.btnPrevious.Visible = True

    End If

   

    If CurrentQ >= AllQuestionForTest Then ' проверяем надо ли показывать кнопку Следующий

                        CurrentQ = AllQuestionForTest

                        frmMain.btnNext.Visible = False

                    Else

                        frmMain.btnNext.Visible = True

    End If

   

    Rem MsgBox ("ShowQuestion :" & CurrentQ)

   

    frmMain.frameQuestion.Caption = CurrentQ & " вопрос из " & AllQuestionForTest

   

    a = Question(GenQListQuestion(CurrentQ - 1) - 1, 0)

    If ShowNumberQuestion = 1 Then                  ' проверяем надо ли показывать номера вопросов в секции

        frmMain.lblQuestion.Caption = a

    Else

        s = 0

        k = 0

        l = Len(a)

        For i = 1 To l

            c = Mid(a, i, 1)

            If c = "." And s = 0 Then s = i

            If c = " " And k = 0 Then k = i

        Next i

        b = Left(a, s) & " "

        b = b & Right(a, l - k)

       

        frmMain.lblQuestion.Caption = b

    End If

   

    ' Показываем  вопросы

    For i = 1 To AnswerInQuestion(GenQListQuestion(CurrentQ - 1) - 1)

        frmMain.Option1(i - 1).Caption = Question(GenQListQuestion(CurrentQ - 1) - 1, i)

        frmMain.Option1(i - 1).Visible = True

        frmMain.Label1(i - 1).Visible = True

        frmMain.Option1(i - 1).FontItalic = False

        frmMain.Option1(i - 1).BackColor = BackColorStandard

        If Left(frmMain.Option1(i - 1).Caption, 1) = GenQListAnswer(CurrentQ - 1) Then 'проверяем был ли дан раньше ответ

                frmMain.Option1(i - 1).Value = True                                ' если был, то указываем

                frmMain.Option1(i - 1).FontBold = True                             ' и выделяем жирным

            Else

                frmMain.Option1(i - 1).Value = False

                frmMain.Option1(i - 1).FontBold = False

        End If

       

        If ShowAnswersMode = True Then                          ' проверяем включен ли режим показа ответов

                frmMain.Option1(i - 1).Enabled = False          'делаем невозможным правку

                ' Если это правильный ответ,  то выделяем курсивом

                If Left(frmMain.Option1(i - 1).Caption, 1) = Answer(GenQListQuestion(CurrentQ - 1) - 1) Then

                    frmMain.Option1(i - 1).FontItalic = True

                    frmMain.Option1(i - 1).BackColor = BackColorWrongAnsw

                End If

            Else

                frmMain.Option1(i - 1).Enabled = True

        End If

    Next i

   

    For i = AnswerInQuestion(GenQListQuestion(CurrentQ - 1) - 1) + 1 To MaxAnswerInQuestion

        frmMain.Option1(i - 1).Caption = ""

        frmMain.Option1(i - 1).Visible = False

Информация о работе Проектирование и разработка автоматизированной системы для проверки знаний студентов