2022秋软工实践 第二次结对编程作业

这个作业属于哪个课程 fzusdn
这个作业要求在哪里 作业要求
这个作业的目标 生成指定条件数据集,实现效益最大的点名策略
学号 032004110
队友学号 032004119

commit记录

在这里插入图片描述

仓库(github)

一、背景分析

A.1、算法背景

栋哥对大家第一次结对编程作业的原型设计感到很满意,为了尽快让同学们使用上软件,于是栋哥花了一晚上时间开发了一个点名小程序。但是,在上线运行过后,发现了一些问题:
大多数老师习惯在每次上课后或下课前的一小段时间内进行点名。
如果采用全点的方式,在这段时间里,后端服务器需要处理大量的请求,拥塞导致响应速度变慢,给点名小程序带来极差的使用体验。
采用随机抽点的方式,能够有效减少并发量,但是无法保证点名的质量,难以有效抓出没有到教室的同学。
所以栋哥急需大家设计一个算法来解决这个问题,要求能够最小化后端发送的请求次数,最大化抓出缺勤同学的数量

A.2、具体要求

定义5门课程,每个课程班级人数为90人,一学期共20次课。每门课程均有5-8位同学缺席了该学期80%的课,此外每次课程均还有0-3位同学由于各种原因缺席。

B、实际背景

高校扩招,大学生逃课问题频发,理性逃课逐渐进入人们的视野。在功利主义风气的影响下,在逃课学生中,出现了一部分“逃课不逃学”的学生,他们基于对到课与逃课的理性分析,衡量逃课的成本和收益,在认为逃课成本小于收益时选择逃课(比如因兼职、做学生干部工作、考研、考证以及感觉逃课自主学习比到课听讲收获更大等逃课,而不因睡觉、玩耍、玩电脑游戏等逃课),我们称此为“理性逃课”。通过对文献的梳理及福建省3所高校的514份逃课样本及其中237份理性逃课样本进行分析发现:大学生逃课发生率很高;理性逃课占逃课近一半比例;理性逃课学生较一般逃课学生逃课次数少;逃课学生认为逃课对课程成绩影响很小;

根据调查研究目的编制了调查问卷,调查问卷分为两部分:第一部分是被调查学生的基本情况和对逃课的看法等;第二部分运用计划行为理论设计,采用李克特五分量表,分为行为态度、主观规范、感知行为控制和情境因素四部分。通过征询专家意见修改问卷后,进行小范围预调查,收到学生有效问卷28份,其中男生11份,女生17份,与被调查的福州大学、福建师范大学和福建农林大学等三所高校的学生性别比例大致相当。将28份问卷量表的数据输入SPSS 20.0中,对问卷量表进行信效度检验,通过计算,量表的Cronbach’s Alpha 值为0.882,十分接近0.9,各潜变量的信度值均超过0.7,表明量表具有较好的内部一致性。对量表进行效度检验得出,量表的KMO检验系数(Kaise-Meyer-Olkin Measure of Sampling Adequacy)为0.878,大于0.5;巴特利球形检验(Bartlett’s Test of Sphericity) χ2=3829.459,P

调查结果分析
1.逃课发生率很高
在758份有效问卷中,有逃课经历的共514份,即67.81%的大学生曾逃课,说明大学生逃课发生率很高,其现状不容乐观,值得引起重视。
2.理性逃课接近逃课比例一半
在514份有逃课经历的问卷中,根据理性逃课的定义,即问卷第11题“请问您逃课的原因是什么”,筛选出选择G选项“参与自习、做兼职、考证、学生干部工作等利于个人职业发展的事情”的学生问卷,对这些理性逃课学生的问卷样本进行更加深入分析发现,有逃课经历并选择G选项的样本共237份,逃课学生中46.11%是理性逃课,接近逃课比例一半,说明理性逃课学生比较多,也提示要正确理解、对待学生逃课,并对逃课分类治理。
3.理性逃课学生较一般逃课学生逃课次数少
福州大学、福建农林大学、福建师范大学学生一般逃课的比例分别为79.1%、63.0%、60.4%,表明三所高校的逃课现象不容乐观。值得关注的是,作为福建省重点建设的“211”高校――福州大学是三所高校中逃课率最高的,学生逃课率接近80%。福州大学、福建农林大学、福建师范大学学生理性逃课的比例分别为32.4%、31.1%、29.9%,福州大学的理性逃课率仍高于其他两所高校。也就是说,不同学校学生理性逃课严重程度不一,这与很多研究发现的学生逃课率因学校不同而不同结论相似,但和高校层次与学生逃课率成反比的结果存在出入。这既提示层次高的高校也应关注学校的教学管理和学风建设,又提示不同高校正确引导、针对性治理理性逃课的迫切性不同。

以上调查数据引用自qitong《大学生“逃课”的调查与分析》

因此,针对逃课的两种类型:理性逃课和惰性逃课,我们的算法中设计了不同的点名策略,以提高有效点名率。

二、算法模块说明

A、算法思路

我们通过Java实现数据集的生成和点名端策略算法,并通过Mysql展示每次的学生出勤情况和点名情况。

B、数据集生成

a、数据集特性(该校学生的上课习惯)

我们先按序产生学生的学号和姓名,之后按照正态分布,产生所有学生的绩点(2.0,0.5)。由于考虑到补考通过时,该学生绩点至少为1,因此,我们的绩点生成范围为1-4之间,不考虑绩点小于1的情况。又由于遵循了3σ原则,我们产生的绩点在1-4范围内的概率有0.9544,几乎可以看做是必然事件(但我们还是做了限制,对于产生范围之外的绩点,重新进行随机)。根据绩点,我们产生了出勤率(绩点/4),代表学生出勤该次课程的概率。虽然出勤率的起始值与绩点成正比,但由于后者会随着点名的进行而不断改变
,因此我们在此给出
出勤率的变化规则

  • 学生分成坏学生与普通学生,坏学生无视点名策略出勤,普通学生则会根据不同的点名情况决定下次出勤情况。
  • 若该学生此次课逃课,被点名点到,则下次出勤率大幅上升。
  • 若该学生此次课出勤,被点名点到,若其为绩点稍好一些的学生,他会有求稳心理,他会觉得下次点名可能还是会被抽点到,所以其出勤率反而会小幅度的上升;但是,若该学生为绩点略差的学生(不包括坏学生),则他可能会产生一种侥幸心理,会觉得下次自己应该不会再次被点到,所以出勤率会小幅度下降。
  • 若该学生逃课,且此次点名未被点到,则他可能会尝到甜头,觉得逃课也无关紧要,反正不会被点到,于是下次还会产生逃课的心理,其出勤率会大幅度的下降。
  • 若该学生没逃课,且此次点名也未被点到,则不会对其内心产生影响,出勤率不会改变。

b、代码模块说明(由于代码太多了。。。。展现部分主要代码)

学生姓名生成
    public static String insideFirstName(){
   
        Random random = new Random();
        int index = random.nextInt(firstName.length);
        return firstName[index];//获得一个随机的姓氏
    }
    public static int getNum(int start,int end) {
   
        return(int)(Math.random()*(end-start+1)+start);//获得一个随机的名字
    }
    public static int getNum(int start,int end) {
   
        return(int)(Math.random()*(end-
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值