考试系统--成绩分析功能感想

         成绩分析功能最近分给我的一项功能,要求对于对于试卷上每道题的学生的正确率进行分析,从而得出那些题比较简单(学生得分率高),那些题比较难(学生得分率低了),这样老师下次出卷子就可以参考这次的数据.

         这个功能,我从18号开始,弄了5天左右,弄了一个能用,但是不算好的效果.运行起来的效果,是这个样子的.


         分到这个功能的时候,说是要用报表,我就想着用水晶报表.总听他们说,报表是非常有用,而且常用的功能,所以我就想试试.可是由于没有用过水晶报表,所以就想着先用简单的方法,把功能全部都实现了,再用水晶报表去替换.最后,用了别的东西实现了功能,却再也不想用水晶报表去替换,至少这两天不想干这个.

         开始的时候,想仿着禅道的报表弄成这个效果.看了图形,查了FusionCharts Trial,最后用了VS2012自带的Chart工具.

 

         Chart的使用就是先从工具箱从拖控件,然后在后台绑定数据源,写法和其他控件绑定datable基本一样.只不过你要为你的ChartX轴和Y轴赋值,他们具体代表什么.这和dropdownlist类似,你要设置TextValue分别是什么.Series1,你拖了Chart控件就知道是什么了,也可以写成Chart1.Series[0]这种样式.如果你添加了Series2的话,那么就会两种颜色的线在Chart表中.设置ChartType就可以选择用条形图还是线形图,还是其他什么.如这个就是饼形图了Chart1.Series["Series1"].ChartType= SeriesChartType.Pie;而且还可以设置3d样式,如这样Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D =true;

Chart1.DataSource = Datatable1;
Chart1.Series["Series1"].XValueMember = "题号";
Chart1.Series["Series1"].YValueMembers = "得分率";
Chart1.DataBind();

         本来打算左边和禅道一样用复选框的.但是这样有个问题,因为不同的考试,题型(就是听短文,多选题,选择题,填空题这种东西)是不一样的,我要根据不同的考试来查出他们的题型,然后显示一系列的复选框,或者复选框列表.

         这里有两种思路,一种就是,我根据所有的题型,在前台界面写死,每个题型都弄一个 复选框,只是VisibleFalse,只有选择的考试中存在的题型才会VisibleTrue,这样的话东西就未免太多(因为题型有20多中种).

         而且当我勾选不同的题型进行题型分析的时候,就要为每种题型都写一条判断,是否选中,选中如何如何.而且我的数据是在gridview(开始的时候想着用它的排序功能,后来用了图表之后发现这个功能可以不要了)中显示的.如果我一次性勾选所有的复选框,那么就要为所有题型都用一个GridView,那么你就会看到NGridView.(而且用的时候我忘了开启GridViewAllowPaging,所以设置PageSize完全不管用,可想而知数据多的时候的效果了)

           所以,上一种思路被我淘汰了.

          第二种是,我在后台动态生成复选框,有多少题型,就生成多少复选框.但是我好死不死的.在前台界面上,添加了一个按钮,就是上上图中的分析按钮.运行的效果是,界面加载的时候,确实根据不同的题型生成了不同的复选框.但是当我点击分析按钮的时候,我发现他们被刷没了.我就想这个还不如上面那么呢,所以放弃了.后来想想,其实button按钮我也可以试着在后台添加, 这样说不定就不会被刷新掉了. 但是用复选框还是存在,生成多个GridView(还有Chart)的问题,而且还得给这些个GridView都添加属性,添加事件,工作量不一定小.

        最后,果断放弃了复选框,使用了单选框,这样我就只要一个GridView和一个Chart.              

        由于不同的题型在数据库中的表都是不一样的,根据界面获取到的数据,拼凑SQL查询语句,并且还要统计得分率,就是从答题记录中获取该题的每个小题的所有学生的分数,以及从题库表中获取该题每小题的分值,和考该小题的人数的乘积,他们相除的结果.SQL语句中用这样一句实现,cast(SUM(学生该小题的总成绩)*100/SUM(该小题的总成绩)as numeric(9,2)) as 得分率.如果真要加上"%"的话,在最后加上"%"就可以了,cast(SUM(学生该小题的总成绩)*100/SUM(该小题的总成绩) as numeric(9,2)) +"%",但是类型就是varchar,就别想变成数值了.

        最后数据都显示在GridView中了,但是有的数据特别的长,如果都显示出来,GridView hold不住,就想着截取一部分(在数据库中查询的时候也可以直接用substring截取,但是这样就没法tooTip显示所有的内容了),然后鼠标移上去的时候显示全部内容.所以在gridview_DataBound事件中添加这样的代码.凡是长度超过43的都在40上截取,后面的用...代替.Cells[1]代表的是题干列.

  for (int i = 0; i < GridView1.Rows.Count; i++)
  {
     if (GridView1.Rows[i].Cells[1].Text.Length > 43)
     {
        GridView1.Rows[i].Cells[1].ToolTip = GridView1.Rows[i].Cells[1].Text;
        GridView1.Rows[i].Cells[1].Text = GridView1.Rows[i].Cells[1].Text.Substring(0, 40) + "...";
      }
 
  }

         最后就这样,花了5天的时间修修改改,弄出来这样的效果,没有用水晶报表,没有弄下载导出的功能,没有设置页面跳转的功能,页面样式也基本没有调,还需要进一步完善.前两天写完了所有的SQL语句,第三天周四,休息了,第四天用了GridViewChart,最终决定不用复选框用单选框.把三层补完,把所有的SQL语句进行修改后写到各个类中,以及设置GridViewDatabound.第五天,忘了还有一个统计及格人数和及格率这种东西,所以添加了一个页面加上这个功能.并且设置好了样式,只是还是不大好看.

         感觉自己的效率不是很高,一段代码本来自己慢慢看就能发现错误,或者多想想就能不出问题,但是我非要不停的运行,然后运行一次,发现一个错误,然后改一次,然后再运行,发现还有错误,再继续改,这样很浪费时间.经常一个下午过去了,只是解决了一点点问题,大部分时间都是不停地运行,改错,运行,改错.

          以后一定多想,多看,少直接运行.

         

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值