⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frm_sjss2.frm

📁 一个用VB做的试卷分析评估系统
💻 FRM
📖 第 1 页 / 共 2 页
字号:
VERSION 5.00
Object = "{00028C01-0000-0000-0000-000000000046}#1.0#0"; "DBGRID32.OCX"
Begin VB.Form frm_sjss2 
   Caption         =   "试卷搜索"
   ClientHeight    =   5715
   ClientLeft      =   3195
   ClientTop       =   3255
   ClientWidth     =   9030
   Icon            =   "frm_sjss2.frx":0000
   MDIChild        =   -1  'True
   ScaleHeight     =   5715
   ScaleWidth      =   9030
   WindowState     =   2  'Maximized
   Begin VB.Data Data3 
      Caption         =   "Data2"
      Connect         =   "Access"
      DatabaseName    =   ""
      DefaultCursorType=   0  '缺省游标
      DefaultType     =   2  '使用 ODBC
      Exclusive       =   0   'False
      Height          =   375
      Left            =   3840
      Options         =   0
      ReadOnly        =   0   'False
      RecordsetType   =   1  'Dynaset
      RecordSource    =   ""
      Top             =   6960
      Width           =   1140
   End
   Begin VB.CommandButton Command5 
      Caption         =   "修改所选试卷(&O)"
      Default         =   -1  'True
      Height          =   495
      Left            =   5280
      TabIndex        =   2
      Top             =   4920
      Width           =   1815
   End
   Begin VB.CommandButton Command3 
      Cancel          =   -1  'True
      Caption         =   "关闭搜索窗体(&C)"
      Height          =   495
      Left            =   1680
      TabIndex        =   1
      Top             =   4920
      Width           =   1575
   End
   Begin MSDBGrid.DBGrid DBGrid1 
      Bindings        =   "frm_sjss2.frx":030A
      Height          =   4695
      Left            =   0
      OleObjectBlob   =   "frm_sjss2.frx":031E
      TabIndex        =   0
      Top             =   0
      Width           =   9015
   End
End
Attribute VB_Name = "frm_sjss2"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Public sql As String
Private Sub Command3_Click()
Unload Me
End Sub

Private Sub Command5_Click()
 Call go_mod
End Sub

Private Sub DBGrid1_DblClick()
 Call go_mod
End Sub

Private Sub Form_Load()
Call Frm_main.menu_show(False) '菜单控制

Data3.DatabaseName = DName
Data3.RecordSource = sql   ' "shijuan"

'If mod_type = "sjsc" Then '试卷删除
'   Me.Caption = "试卷删除"
'   Command5.Caption = "删除所选试卷(&D)"
If mod_type = "sjsc" Then '试卷删除
   Me.Caption = "试卷删除"
   Command5.Caption = "删除所选试卷(&D)"
ElseIf mod_type = "cjhd" Then '试卷核对
   Me.Caption = "录入成绩核对"
   Command5.Caption = "核对所选试卷(&S)"
ElseIf mod_type = "fxbg" Then '分析报告生成
   Me.Caption = "试卷统计分析"
   Command5.Caption = "分析所选试卷(&S)"
End If

End Sub

Private Sub Form_Unload(Cancel As Integer)
Call Frm_main.menu_show(True) '菜单控制
End Sub

Private Sub go_mod()
Dim i, j, total_ti As Integer
Dim col_width As Double, fen  As Double, total_fen As Double
Dim col As String

If mod_type = "zlxg" Then '资料修改
    frm_sjss3.SJID = DBGrid1.Columns(0)
    frm_sjss3.str_Institute = DBGrid1.Columns(1)
    frm_sjss3.str_Teacher = DBGrid1.Columns(2)
    frm_sjss3.str_Course = DBGrid1.Columns(3)
    frm_sjss3.str_Classes = DBGrid1.Columns(4)
    frm_sjss3.str_Year = DBGrid1.Columns(5)
    frm_sjss3.str_term = DBGrid1.Columns(6)
    Frm_main.tform = "sjss3"
    frm_sjss3.Show
ElseIf mod_type = "cjxg" Then '成绩修改
    frm_sjss4.SJID = DBGrid1.Columns(0)
    Frm_main.tform = "sjss4"
    frm_sjss4.Show
ElseIf mod_type = "sjsc" Then '试卷删除
    If MsgBox("确定要删除该试卷吗?", vbOKCancel, "删除后无法恢复!") = 1 Then
       DB.Execute ("delete from shijuan where  SJID=" + VBA.Str(DBGrid1.Columns(0)))
       Data3.Refresh
    End If
ElseIf mod_type = "cjhd" Then '试卷核对 'exl.Workbooks.Open()'exl.Worksheets(0).Select'exl.Selection = 5
   
   'exl.Cells(1, 1).Select
     
   Set RS = DB.OpenRecordset("select * from shijuan  where  SJID=" + VBA.Str(DBGrid1.Columns(0)))
 
   If RS.RecordCount > 0 Then
     Set RS_t = DB.OpenRecordset("select * from stu_cj  where  SJID=" + VBA.Str(DBGrid1.Columns(0)))
     If RS_t.RecordCount > 0 Then
        Set exl = New Excel.Application
        exl.Workbooks.Add
        exl.Visible = True
        
        
        
        total_ti = RS.Fields("Total_ti").Value
        col_width = 87 / (total_ti + 1)
        
   
        col = Get_Exl_Col(1)
        exl.Columns(col).ColumnWidth = 13
        'exl.Columns(col).HorizontalAlignment = VtHorizontalAlignmentCenter
   
        For i = 1 To total_ti
            exl.Cells(3, i + 1).Value = "第" + VBA.Trim(VBA.Str(i)) + "题"
            col = Get_Exl_Col(i + 1)
            exl.Columns(col).ColumnWidth = col_width
            'exl.Columns(col).HorizontalAlignment = VtHorizontalAlignmentCenter
        Next i
   
        exl.Cells(3, i + 1).Value = "总分"
        col = Get_Exl_Col(i + 1)
        exl.Columns(col).ColumnWidth = col_width
        'exl.Columns(col).HorizontalAlignment = VtHorizontalAlignmentCenter
        
        'For i = 1 To RS_t.RecordCount
        i = 1
        Do While Not RS_t.EOF
            total_fen = 0
            exl.Cells(3 + i, 1).Value = RS_t.Fields("SID").Value
            For j = 1 To total_ti
               fen = RS_t.Fields("T" + VBA.Trim(VBA.Str(j))).Value
               exl.Cells(3 + i, 1 + j).Value = fen
               total_fen = total_fen + fen
            Next j
            exl.Cells(3 + i, 1 + j).Value = total_fen
            RS_t.MoveNext
            i = i + 1
       Loop
       ' Next i
        
        exl.Cells(1, 1).Value = RS.Fields("Institute").Value + RS.Fields("Year").Value + "学年第" + RS.Fields("Term").Value + "学期考试(考查)成绩登记表"
        exl.Cells(2, 1).Value = "班级:" + RS.Fields("Classes").Value + "    课程名称:" + RS.Fields("Course").Value + "      任课教师:" + RS.Fields("Teacher").Value
        exl.Cells(3, 1).Value = "学号"
        Call Unite_Exl_Col(1, total_ti + 2, 1) '合并第一行
        Call Unite_Exl_Col(1, total_ti + 2, 2) '合并第二行
        
   
   
     Else
        MsgBox "该试卷的没有成绩录入!", vbOK, "信息提示"
     End If
     RS_t.Close
   Else
       MsgBox "没有该试卷的信息!", vbOK, "信息提示"
   End If
   RS.Close
   
   
   
   
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


ElseIf mod_type = "fxbg" Then '分析报告生成

   Set RS = DB.OpenRecordset("select * from shijuan  where  SJID=" + VBA.Str(DBGrid1.Columns(0)))
 
   If RS.RecordCount > 0 Then
     Set RS_t = DB.OpenRecordset("select * from stu_cj  where  SJID=" + VBA.Str(DBGrid1.Columns(0)))
     If RS_t.RecordCount > 0 Then
        
        'Dim i, j, total_ti As Integer
        'Dim col_width As Double, fen  As Double, total_fen As Double
        'Dim col As String
        Dim f_Max As Double, f_Min As Double, f_Avg As Double
        Dim Q_nd As Double, Q_nd_m(10) As Double '难度
        Dim D_qfd As Double '区分度
        Dim fens(10, 2) As Double
        Dim fd(6)   '分段数组,即各分数段的人数,如fd(1)为90分以上的人
        Dim Num As Integer
        Dim p As Double
        Dim tt(999) As Double  '每个学生的分数
        Dim str_num As String
        str_num = "一二三四五六七八九十"
        f_Max = 0
        f_Min = 99999
'        For i = 1 To 10
'           fens(i, 1) = -99999
'        Next i
        
        
        For i = 1 To 6
            fd(i) = 0
        Next i
        
        
        total_ti = RS.Fields("Total_ti").Value   '试卷总题数
        
        '取每个人的分数,计算最高分,最低分,等。。
        Do While Not RS_t.EOF
            Num = Num + 1
            
            For j = 1 To total_ti
                fen = RS_t.Fields("T" + VBA.Trim(VBA.CStr(j))).Value
                'If fen > fens(j, 2) Then fens(j, 2) = fen
                fens(j, 2) = RS.Fields("T" + VBA.Trim(VBA.CStr(j))).Value
                fens(j, 1) = fens(j, 1) + fen
                tt(Num) = tt(Num) + fen
            Next j
           ' fens(j, 2) = fens(j, 1) / Num
            
            
            If tt(Num) > f_Max Then f_Max = tt(Num)
            If tt(Num) < f_Min Then f_Min = tt(Num)
            total_fen = total_fen + tt(Num)
            
            If tt(Num) >= 90 Then
               fd(1) = fd(1) + 1
            ElseIf tt(Num) >= 80 Then
               fd(2) = fd(2) + 1
            ElseIf tt(Num) >= 70 Then
               fd(3) = fd(3) + 1
            ElseIf tt(Num) >= 60 Then
               fd(4) = fd(4) + 1
            ElseIf tt(Num) >= 40 Then
               fd(5) = fd(5) + 1
            Else
               fd(6) = fd(6) + 1
            End If
            
            RS_t.MoveNext
        Loop
        
        f_Avg = total_fen / Num  '平均分
        
        
        '计算整个试卷的难度
        For i = 1 To total_ti
            Q_nd_m(i) = 1 - fens(i, 1) / Num / fens(i, 2)  '每道题的难度
            Q_nd = Q_nd + CDbl(RS.Fields("t" + VBA.Trim(VBA.CStr(i))).Value) * Q_nd_m(i)
        Next i
        Q_nd = Q_nd / 100
        
        
        
        '计算整个试卷的区分度
        Dim sh As Double, sl As Double, n As Integer
        p = Num * 27 / 100
        n = CInt(Get_Point(p, -1)) + 1
          '排序
          For i = 1 To Num - 1
             For j = 2 To Num
                 If tt(i) > tt(j) Then
                    p = tt(i)
                    tt(i) = tt(j)
                    tt(j) = p
                 End If
             Next j
          Next i
          
        For i = 1 To n
           sh = sh + tt(Num + 1 - i)  '高分组
           sl = sl + tt(i)            '低分组
        Next i
        D_qfd = (sh - sl) / (n * (f_Max - f_Min))
          
        
       Dim exwbook As Excel.Workbook
         Set exl = CreateObject("excel.application")
         Set exwbook = exl.Workbooks.Open(App.Path + "\result\Paper1.xls")
         exl.Visible = True

        'exl.Cells(3, 1).Value = "班 级:"
        exl.Cells(3, 2).Value = RS.Fields("Classes").Value

        
        'exl.Cells(3, 5).Value = "统计日期:"
        exl.Cells(3, 6).Value = VBA.Date
        
        'exl.Cells(4, 1).Value = "课程名称"
        exl.Cells(4, 2).Value = RS.Fields("Course").Value
         
        'exl.Cells(4, 4).Value = "任课教师"
        exl.Cells(4, 5).Value = RS.Fields("Teacher").Value
        
        'exl.Cells(4, 6).Value = "考试人数"
        exl.Cells(4, 7).Value = RS.Fields("Stu_Num").Value
               

        'exl.Cells(5, 1).Value = "分数统计"
       ' exl.Cells(5, 2).Value = "最高分"
        exl.Cells(5, 3).Value = f_Max
       ' exl.Cells(5, 4).Value = "最低分"
        exl.Cells(5, 5).Value = f_Min
       ' exl.Cells(5, 6).Value = "平均分"
        exl.Cells(5, 7).Value = f_Avg
        
      
        
        For i = 1 To total_ti
          exl.Cells(6 + i, 3).Value = Get_Point(Q_nd_m(i), 2)
        Next i
        For i = total_ti + 1 To 10
          exl.Cells(6 + i, 3).Value = ""
        Next i
       
        exl.Cells(17, 3).Value = Get_Point(Q_nd, 3)
       
        exl.Cells(18, 3).Value = Get_Point(D_qfd, 3)
        
      
        For i = 1 To 6
            exl.Cells(20, i + 1).Value = fd(i)
            p = fd(i) / Num * 100
            exl.Cells(21, i + 1).Value = Get_Point(p, 2) + "%"
        Next i

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -