考试系统:如何计算不同表的分数

Posted

技术标签:

【中文标题】考试系统:如何计算不同表的分数【英文标题】:Examination System: How to count score from different table 【发布时间】:2018-05-28 07:06:15 【问题描述】:
Private Sub QuestionNavigation()
        rdbA.Checked = False
        rdbB.Checked = False
        rdbC.Checked = False
        rdbD.Checked = False

        Dim qDT As DataTable = DTTable("SELECT *", "tblQuestions", "")

        numItems = qDT.Rows.Count
        If (numItems > 0) Then
            If (n < numItems) Then
                lblQuestionNumber.Text = "Question " & (n + 1) & " of " & qDT.Rows.Count & ""
                Qid = qDT.Rows(n).Item(0).ToString()
                txtQuestion.Text = qDT.Rows(n).Item(1).ToString()

                Dim qcDT As DataTable = DTTable("SELECT *", "tblChoices", " WHERE QuestionID='" & Qid & "'")
                txtChoiceA.Text = qcDT.Rows(0).Item(2).ToString()
                txtChoiceB.Text = qcDT.Rows(1).Item(2).ToString()
                txtChoiceC.Text = qcDT.Rows(2).Item(2).ToString()
                txtChoiceD.Text = qcDT.Rows(3).Item(2).ToString()
            Else
                MessageBox.Show("Congratulation! You have completed the exam. Thank you for your cooperation.", "Complete", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                Close()
                DisplayForm(frmLogin, frmMain.pnlMain)
            End If
        End If
    End Sub

这是从数据库生成问题到带有圆形按钮的数据网格视图的代码。我已经有了包含正确答案的表格,但我不知道如何将其连接到表格考生的答案中,并且分数将被计算在内。

Dim Score As String
Dim dict As New Dictionary(Of Integer, Integer)

  Private Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSubmit.Click
            If (answerChoice() <> "") Then
                Try
                    RecordRow("INSERT INTO tblExamineeAnswers(ExamineeID, QuestionID, ExamineeAnswer) VALUES ('" & examineeID & "', '" & Qid & "', '" & (Qid & answerChoice()) & "')")
                    n += 1
                    QuestionNavigation()


   Dim dt As DataTable = DTTable("SELECT *", "tblExamineeAnswers", "")
                For examineeID = 170001 To 170004
                    For Each row As DataRow In dt.Rows
                        If examineeID = CInt(row(0)) And row(2).ToString.EndsWith("A") Then
                            Score += 1
                        End If
                    Next
                    dict.Add(examineeID, Score)
                    Score = 0
                Next


                Catch ex As Exception
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End Try
            Else
                MessageBox.Show("Please Select Your Answer", "Answer", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
            End If
        End Sub

这是按下提交按钮并进入下一个问题的代码。以及如何将所有计算的分数相加并放入另一个表中。

tbl个人信息

ID  LastName    FirstName   Gender  Address ContactNo   EmailAd Score   Name
170001  Padilla John David  Male    Palina East 639304536   dsd 0    
170002  hgdfd   fdgffd  Female  aa  11  1   0    
170003  Laguit  Mark Angelo Male    Pozzorubio  12314   jkwej   0    

score 属性是我打算放置要求和的分数的地方。

tblexamineeanswers

ExamineeID  QuestionID  ExamineeAnswer
170001  Q170001 Q170001A
170001  Q170002 Q170002A
170001  Q170003 Q170003B
170001  Q170004 Q170004B
170002  Q170001 Q170001C
170002  Q170002 Q170002B
170002  Q170003 Q170003B
170002  Q170004 Q170004C
170003  Q170001 Q170001A
170003  Q170002 Q170002B
170003  Q170003 Q170003B
170003  Q170004 Q170004B

这是考生回答的表格。 ExamineeAnswer 上的字母表示他单击了哪个圆形按钮。

tbl选择

 QuestionID ChoiceID    Choice
    Q170001 Q170001A    Paragraph
    Q170001 Q170001B    Sentence
    Q170001 Q170001C    Word
    Q170001 Q170001D    Topic
    Q170002 Q170002A    Masking
    Q170002 Q170002B    Remembering
    Q170002 Q170002C    Hearing
    Q170002 Q170002D    Listening
    Q170003 Q170003A    Airport
    Q170003 Q170003B    Canteen
    Q170003 Q170003C    Garden
    Q170003 Q170003D    School
    Q170004 Q170004A    Common
    Q170004 Q170004B    Communicare
    Q170004 Q170004C    Communar

此表显示问题的选项。

tbl问题

QuestionID  Question    
Q170001 A _________ is a group of sentence about one topic...   
Q170002 It is a natural process of recieving aural and vis...   
Q170003 A specific place to show where the departure and a...   
Q170004 The term communication was derived from the term _...

此表格显示带有 ID 的问题

tblanswer

QuestionID  ChoiceID
Q170001 Q170001A
Q170002 Q170002A
Q170003 Q170003A
Q170004 Q170004A

此表显示了对特定问题的正确选择/答案。

【问题讨论】:

欢迎来到 ***,停止使用“请在明天之前我需要这个”,在询问之前阅读this @kentLoves 从 Soumesh 提供的链接中读取 我的错,我不是故意的。我还是新来的,对不起 您设计了数据库吗?我需要对架构有一个清晰的了解。 @Mary 我刚刚用数据库编辑了关于它的帖子,你可以看看。 【参考方案1】:

'伪代码 Dim dt as DataTable - 你的 tblexamineeanswers

    Dim Score As Integer
    Dim dict As New Dictionary(Of Integer, Integer)
    For ExamineeID = 170001 To 170004
        For Each row As DataRow In dt.Rows
            If ExamineeID = CInt(row(0)) And row(2).ToString.EndsWith("A") Then
                Score += 1
            End If
        Next
        dict.Add(ExamineeID, Score)
        Score = 0
    Next

现在您有一个以 ExamineeId 作为键,总分作为值的字典 查看结果 在 For...Next 下方添加以下内容

For Each item As KeyValuePair(Of Integer, Integer) In dict
     Debug.Print($"ExamineeId = item.Key, Score = item.Value")
Next

数据将显示在“立即”窗口中。在 Window 下的调试菜单中找到它。

【讨论】:

每当有人必须注册并参加考试时,ExamineeID 都会自动增加。那个怎么样?是否可以在考生按下提交键的时候,答对就已经计分了 改正了分数,每次考生忘记归零 我无法正确将 dt 作为 DataTable 进行调暗,你能教我如何调用它吗? 我宁愿假设您的数据集中已经有一个与您的 tblexamineeanswers 匹配的数据表。您可以自己滚动,但这似乎很愚蠢。在您的代码中,您显示 Dim qDT As DataTable = DTTable("SELECT *", "tblQuestions", "") 如果这样做只能从 tblexamineeanswers 中选择,请这样做 好的,所以我确实将 Dim dt As DataTable = DTTable("SELECT *", "tblExamineeAnswers", "") 但每当我将您发送的代码放在 Private Sub btnSubmit_Click 下方 QuestionNavigation() ,应试者 ID 说“For”循环控制变量不能是“字符串”类型,因为该类型不支持所需的运算符。

以上是关于考试系统:如何计算不同表的分数的主要内容,如果未能解决你的问题,请参考以下文章

考试成绩管理系统:

2021年信号与系统处理期中考试与课堂交互分数

查询英语分数在 80-90之间的同学?

09驾校科目一考试系统——提交分数

09驾校科目一考试系统——提交分数

09驾校科目一考试系统——提交分数