【前言】小编最近在进行NCRE计算机考试系统时候了解到了C#怎么与office交互的,怎么实现可以检测到学生的答题记录然后进行判分的。
小编现在主要介绍的就是操作题的判题逻辑,因为选择题的判题逻辑是比较简单的只要把考生答案和数据库中的正确答案对比一下就可以了。在操作题的判题逻辑中每一类型的题都有自己的判题逻辑,小编主要管的是PPT这一类型题,就以此为例来介绍一下PPT与C#是如何交互的。
一、判题的逻辑说明
我现在这里简单给大家描述一下我这里判题的逻辑,然后再给大家看一下这个过程,然后就容易理解了。
首先我们是按照试卷写的判题逻辑,所以每一套卷的判题逻辑是不一样的,如果需要新加一套卷那么我们就需要添加新的判分逻辑。
在每套题的内部是按照题型分类的,比如说查看字体,字号,幻灯片版式等题型,这些题型的判分之所以无法复用是因为每一套题需要判断的幻灯片不是同一张,获取的对象是不一样的所以虽然逻辑类似,但是却不好复用。
这里所有卷的题型,当开始判题的时候就会去找对应的题型。
这是展开之后的效果
这是所有的题型的判题类。
二、具体某套卷某个题型的判题逻辑
首先我们需要做到的就是打开学生的答题记录,然后获取相应的信息和数据库中作对比,如果一直就加分,如果不一致就加0分,然后将实体中的分数提交到数据库中。
下面这行代码的意思是获取第一章PPT的第一个元素的字体的颜色,然后我们就可以和数据库中的颜色进行对比了。
Microsoft.Office.Interop.PowerPoint.ColorFormatmycolor = pp1.Slides[1].Shapes[1].TextFrame.TextRange.Font.Color;
其他题型的判题逻辑和这个类似,具体用什么方法我们可以去MSDN上找对应的枚举类,这样我们就可以完成判题了。
public class PptFontColor
{
Microsoft.Office.Interop.PowerPoint.Application pa1 = new Microsoft.Office.Interop.PowerPoint.ApplicationClass();
Microsoft.Office.Interop.PowerPoint.Presentation pp1;
public PptFontColor()
{
pp1 = pa1.Presentations.Open(@"D:\" + MyInfo.MystudentID() + @"\计算机一级考生文件\Pptkt\PPTA.pptx", Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse);
}
private PptQuestionEntityBLL pptquestionbll = new PptQuestionEntityBLL();
private PptQuestionEntity pptquestion = new PptQuestionEntity();
public void FontColor(PptQuestionEntity pptinfo)
{
StudentInfoEntity studentinfo = new StudentInfoEntity();
studentinfo.studentID = FrmLogin.studentID;
pptinfo.QuestionFlag = "字体颜色";
DataTable dt1 = pptquestionbll.SelectPaperTypeByStudentIDBLL(studentinfo);
DataTable dt = pptquestionbll.LoadPptByFlag(pptinfo);
PptQuestionRecordEntity studentrecord = new PptQuestionRecordEntity();
if (dt.Rows.Count != 0)
{
studentrecord.QuestionID = Convert.ToDouble(dt.Rows[0]["QuestionID"]);
}
else
{
studentrecord.QuestionID = 1;
}
studentrecord.TimeStamp = MyInfo.TimeTamp();
studentrecord.StudentID = FrmLogin.studentID;
if (pp1.Slides.Count >= 1 && dt.Rows.Count != 0)
{
if (pp1.Slides[1].Shapes.Count >= 1 && dt.Rows.Count != 0)
{
try
{
//将考生答案传递给studentrecord实体
Microsoft.Office.Interop.PowerPoint.ColorFormat mycolor = pp1.Slides[1].Shapes[1].TextFrame.TextRange.Font.Color;
studentrecord.ExamAnswer = mycolor.RGB.ToString();
}
catch
{
studentrecord.ExamAnswer = "未设置字体颜色";
}
if (studentrecord.ExamAnswer == dt.Rows[0]["RightAnswer"].ToString())
{
studentrecord.Fration = dt.Rows[0]["Fration"].ToString();
}
else
{
studentrecord.Fration = "0";
}
}
else
{
studentrecord.ExamAnswer = "未能找到对象";
studentrecord.Fration = "0";
}
}
else
{
studentrecord.ExamAnswer = "未能找到对象";
studentrecord.Fration = "0";
}
PptLoadinfo.list.Add(studentrecord);
}
}
【总结】刚开始加题的时候感觉很困难,因为有些题的不是直接正面查找的,需要借助别的东西来实现我们想要的效果,不过加完之后再去回顾这个过程也很简单,理清逻辑还是最重要的。