工大助手--加权平均分计算
工大助手--加权平均分计算
实现功能
1)用户可选择获取入学以来所有已修课程的相关信息:课程代号、课程名、课程属性、学分、成绩等信息。
2)用户可选择获取特定已修课程的相关信息:课程代号、课程名、课程属性、学分、成绩等信息。
3)用户可获得特定时间段内的加权平均分(1学期、1学年、全部)。
团队成员
13070003 张 帆
13070046 孙宇辰
13070004 崔 巍
13070006 王 奈
13070002 张雨帆
13070045 汪天米
加权平均分计算
在计算加权平均分这一部分,由于每次用户查询的结果不同,所以不能使用在类中存储的数据(因为那些数据没有被筛选过),而需要用户传入一个DataTable,其中存着筛选后的成绩。对于传入的这些数据,需要逐项相加获取加权分数以及总学分,然后才能计算加权平均分。在累加的过程中,需要筛选掉第二课堂课程的分数(这些不算在加权分数内)。然后在整个处理的过程中错误处理也是很重要的一个环节,我想到的需要错误处理的问题主要有以下几种:
1)传入的数据表为空
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("校选修课")) 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
方法返回值类型为bool,代表计算过程是否成功执行并结束。输入calculateData表示筛选后的数据表,输出weightedMean表示计算的结果。