软件工程 2016.6.29 日报
今天我的主要工作就是调查了解我校的加权平均分计算方法,并将程序加权计算部分予以修正。
通过查阅北工大教务公示,获得信息:
第十条学校利用“学分通过率”和“加权平均分”作为衡量学生在校期间学习质量的主要指标。辅修课程、创新学分和第二课堂的学分和成绩不计入学分通过率和加权平均分的计算。创新学分和第二课堂是学生获得毕业资格的必要条件。理工类专业学生应修不少于4学分的创新学分,其他专业应修不少于2学分的创新学分。第二课堂应修满12学分。
同时,通过询问同学获取了在教务管理中对辅修课程的表示:
在网站数据中有辅修标记一栏,该栏标记为2即表示辅修课程。
除此之外,根据同学的反映,对于不及格的科目,是不计算在加权平均分中的,所以需要将不及格的科目不做处理。
根据调查的资料修改了加权平均分部分的计算逻辑,由于在数据抓取部分没有抓取辅修课程标记一栏,所以对于这方面暂时无法进行修改。但对于创新学分课程以及第二课堂课程在代码逻辑中进行了排除。这就是今天所做的工作。
下面是修改后的代码逻辑:
1 #region ----------计算加权平均分---------- 2 /// <summary> 3 /// 计算加权平均分 4 /// </summary> 5 /// <param name="calculateData">筛选后的成绩列表</param> 6 /// <param name="weightedMean">加权平均分</param> 7 /// <returns>计算是否成功</returns> 8 public static bool CalculateWeightedMean(DataTable calculateData, out double weightedMean) 9 { 10 //若输入数据表为空,则不计算。 11 if (calculateData.Rows.Count == 0) 12 { 13 weightedMean = 0; 14 MessageBox.Show("[ERROR]No data to calculate weighted mean."); 15 //Console.WriteLine("[ERROR]No data to calculate weighted mean."); 16 return false; 17 } 18 19 try 20 { 21 //计算学分和、成绩*学分和 22 double sumOfCredit = 0, sumOfGrade = 0; 23 foreach (DataRow dr in calculateData.Rows) 24 { 25 //如果成绩为数字且不是第二课堂性质的课程,计算加权 26 if (Regex.IsMatch(Convert.ToString(dr["成绩"]), pattern) && !Convert.ToString(dr["课程性质"]).Equals("校选修课") && Convert.ToInt32(dr["成绩"]) >= 60) 27 { 28 sumOfCredit += Convert.ToDouble(dr["学分"]); 29 sumOfGrade += Convert.ToDouble(dr["成绩"]) * Convert.ToDouble(dr["学分"]); 30 } 31 32 } 33 weightedMean = sumOfGrade / sumOfCredit; 34 return true; 35 } 36 catch (Exception e) 37 { 38 weightedMean = -1; 39 MessageBox.Show("{0}", e.Message); 40 //Console.WriteLine("{0}", e.Message); 41 return false; 42 } 43 } 44 #endregion
时间: 2024-10-05 05:05:55