工大助手--加权平均分计算

工大助手--加权平均分计算

实现功能


 

  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表示计算的结果。

 

原文地址:https://www.cnblogs.com/fanfan-blogs/p/5601810.html