我来说:考试判分

我们的项目到现在,整个系统算是跑起来了,小有成果的感觉,开森~~~在最近这段时间,感觉收获最大的就是

分的逻辑被我理的透透的,所以想写篇文章跟大家分享一下~


1、计算机一级与考试系统的区别


我对计算机一级的理解,停留在大一考一级那会,感觉挺简单的啊~But,现在要开始研究它才发现,真的不是想

中的那么easy。

刚接触这个项目的时候,我们是从框架开始的,要求很简单,调通了就行了。然后针对晓婵完善后的原型图写了

求文档,自我感觉还是蛮简单嘛~但是在老师验收我们原型的时候,一句话点醒了我们。我们ITOO已经有了考试系

了,做计算机一级的目的在哪里?现在界面什么的都不是重点,找到计算机一级与考试系统的区别——操作题!

后边一想,真的是这样的,我们前期研究半天框架,原型什么的,如果主要功能没有实现的话,那就是一个空

壳。所以后来转战操作题:Windows,IE,outlook,word,Excel,PPT。


2、判分逻辑


在整合系统的时候,发现判分这块内容的逻辑性真的是比较复杂。敲代码的时候差不多需要代码走查好几遍才能

大致明白判分的逻辑,而且因为这一个判分,我和芬芬差点打起来,相信以后再想起这段,我们能大笑半天。

废话少说,看如何判分!

先介绍一下我的职责,我负责的是Excel部分,所以我的数据库就两张表:ExcelEntity,Excel_Record_01。

ExcelEntity里边放的是试题信息,重要的几个字段是:QuestionTypeID,Fration,PaperType,QuestionContent,

CorrectAnswer。而Excel_Record_01是考生的答题记录表,里边重要字段有:StudentID,PaperType,

QuestionContent,CorrectAnswer,ExamAnswer,Fration。

再简单介绍一下判分流程,在考生答题结束之后,点击交卷时,我们就统计考生的答题信息,从ExcelEntity里读

取试题信息,然后获取考生答题记录,更新到考生答题记录表Excel_Record_01里。

其实很简单对不对?

但是在判分的过程中我遇到个问题,就是本来ExcelEntity里试卷题目一共14个题,但是一判分,

Excel_Record_01表里有88条记录。看到这个数目,俺就兴奋了,这是咋回事,又有机会进步了???开始一点点理

这条判分线。

我在U层抽象了7个类出来,就简单的说说这三种,讲讲判分流程:

考生交卷——>判断类加载试题信息,根据QuestionTypeID关键字,进行判断,该题是查找类,图表类还是文件

夹类?——>三个类根据题型的不同进行判分——>更新到数据库。

整个判分流程就是这样的,然后我在代码里,一共加了两种循环。第一种循环在判断里,第二种循环在具体的判

分类里。两种循环调用的都是ExcelEntity表,所以两种循环都需要循环14次。

我说到这里,大家有没有明白为什么我的答题记录里会有88条记录了吗?

本来正常的正确的判分逻辑应该是:

但是因为两次循环都是相同的,然后真实的就变成了这样:


这样的结果就是:我的查找类数据一共7条,这样的话光是7*7就已经是49条数据库,更别说还有其他的几种类。

所以这个循环是导致问题的根本原因。那么问题来了,这个循环到底应该怎么进行?数据库里一共14条记录,但是我

更新抽象的方法类,我只需要循环8次就行了,那么怎么进行?


3、在抽象的基础上抽象

我和芬芬为什么差点打起来,就是在讨论这个问题应该怎么解决。

芬芬的想法:

一:去掉U层判断类中的循环!还是一样的数据库表ExcelEntity,从里边查询出数据,找到QuestionTypeID这个

字段,然后将这个字段中的所有结果与“查找”这个字符串进行比较,如果是“查询”就进行查询工作,否则的话进行下

一次比较。(注意:整个过程中没有用到循环)

二:在D层加8个查询方法,然后在U层一个个调用。

注:这两个想法中,有一个我认为逻辑是有点问题的,但是我到现在也没有跟她讲清楚,如果大家看出了

倪,请找我们两个一起商讨商讨。


基于芬芬的想法上,我的想法是:在数据库里再加一个表:ExcelQuestionTypeEntity。将ExcelEntity中出现过的

所有的类型都写在ExcelQuestionTypeEntity表里,然后对类型进行编号,在ExcelEntity里用QuestionTypeID就可以

了。

然后在第一个判断类里,查询ExcelQuestionTypeEntity的所有数据,然后针对查询到的类型开始循环,第二个循

环条件不变。第一个循环代码如下:

 #region 根据题型关键字,判断判分方式
        /// <summary>
        /// 判断是什么类型的题
        /// </summary>
        /// <param name="excelinfo"></param>
        public void SelectJudge(ExcelEntity excelinfo)
        {
            ExcelQuestionTypesEntity exceltype = new ExcelQuestionTypesEntity();
            DataTable dt = excelquestionbll.QueryExcelQuestionType(exceltype);
            int i;
            for (i = 0; i < dt.Rows.Count; i++)
            {
                string questiontypeid = dt.Rows[i]["questionTypeID"].ToString().Trim();
                //根据试题类型关键字判断
                excelinfo.QuestionTypeID = questiontypeid;

                switch (questiontypeid)
                {                    
                    case "1"://查找
                        ExcelFindKeyWord excelfindkeyword = new ExcelFindKeyWord();
                        excelfindkeyword.FindKey(excelinfo);
                        break;
                    case "2"://文件夹查找
                        ExcelChazhao excelchazhao = new ExcelChazhao();
                        excelchazhao.Chaozhao(excelinfo);
                        break;
                    case "3"://工作表重命名
                        ExcelSheetName excelsheetname = new ExcelSheetName();
                        excelsheetname.SheetName(excelinfo);
                        break;
                    case "4"://图表类型

                        ExcelChartType excelcharttype = new ExcelChartType();
                        excelcharttype.ChartType(excelinfo);
                        break;
                    case "5"://图表标题

                        ExcelChartTitle excelcharttitle = new ExcelChartTitle();
                        excelcharttitle.ChartTitle(excelinfo);
                        break;
                    case "6"://图表颜色
                        ExcelChartColor excelchartcolor = new ExcelChartColor();
                        excelchartcolor.ChartColor(excelinfo);
                        break;
                    case "7"://图表位置
                        ExcelChartPosition excelchartposition = new ExcelChartPosition();
                        excelchartposition.ChartPosition(excelinfo);
                        break;
                   
                    default:
                        break;
                }
            }

        }
        #endregion

然后这个循环就能按照预期效果进行1:1加上1:N的执行结果。


4、总结


这条线大概恼了我们1天的时间,但是跟芬芬的交流过程中,虽然差点掐吧,但是逻辑真的越来越清楚。而且还

找了十期连江伟给我们指导了一下,感觉收获还是蛮大的。所以一级项目做到现在为止,我真的体会到了它带给我的

一些潜在的东西,我真的能明显感觉出来自己的逻辑思维还是蛮强大的!

在这里,跟大家说句心里话:做项目,掐架在所难免,那是因为我们在头脑风暴,正处在风暴的中间位置。但是

我和芬芬还会是好朋友的,对吧?芬仔~哈哈~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值