Prechádzať zdrojové kódy

单科单班标准差计算

zhouj1203@hotmail.com 4 rokov pred
rodič
commit
35364c830e

+ 5 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/ExamClassResult.cs

@@ -32,6 +32,11 @@ namespace TEAMModelOS.SDK.Models
         public List<List<double>> studentScores { get; set; }
         public string scope { get; set; }
         public List<double> sum { get; set; }
+        public double average { get; set; }
+        //等褪等啤腕煦薹
+        public double srate { get; set; }
+        //等褪等啤梓袧船
+        public double standard { get; set; }
     }
 /*    public class PaperSimple {
         public string id { get; set; }

+ 8 - 7
TEAMModelOS/Controllers/Analysis/AnalysisController.cs

@@ -146,7 +146,7 @@ namespace TEAMModelOS.Controllers.Analysis
                 }
                 //获取本次评测所有班级作答结果
                 List<ExamClassResult> examClassResults = new List<ExamClassResult>();
-                var queryClass = $"select c.id,c.name,c.subjectId,c.studentScores,c.studentIds,c.gradeId,c.info from c where c.examId =  '{id}' and c.progress = true ";
+                var queryClass = $"select c.id,c.name,c.subjectId,c.studentScores,c.studentIds,c.gradeId,c.info,c.standard from c where c.examId =  '{id}' and c.progress = true ";
                 await foreach (var item in client.GetContainer("TEAMModelOS", "Common").GetItemQueryIterator<ExamClassResult>(queryText: queryClass, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"ExamClassResult-{code}") }))
                 {
                     examClassResults.Add(item);
@@ -448,14 +448,15 @@ namespace TEAMModelOS.Controllers.Analysis
                         classAys.subjects.Add(new AysSubject {
                             point = tt,
                             field = fieldPoints,
-                            id = key, 
-                            passPercent= passPercent, 
-                            passCount= passCount, 
-                            average= average ,
-                            sRate = paperScore[key]> 0 ? Math.Round(average / paperScore[key] * 100, 2) : 0,
+                            id = key,
+                            passPercent = passPercent,
+                            passCount = passCount,
+                            average = average,
+                            standard = examClassResults.FirstOrDefault(c => c.id == key).standard,
+                            sRate = paperScore[key] > 0 ? Math.Round(average / paperScore[key] * 100, 2) : 0,
                             name = info.subjects.Where(x => x.id == key).FirstOrDefault().name,
                             item = classSubjectPaperDatas.Where(subd => subd.Key == key).First().Value.Where(cls => cls.Key == classId).First().Value
-                        });
+                        }) ;
                     }
                     classes.Add(classAys);
                 }

+ 1 - 0
TEAMModelOS/Controllers/Analysis/ClassAys.cs

@@ -34,6 +34,7 @@ namespace TEAMModelOS.Controllers.Analysis
         public double passPercent { get; set; }
         public double average { get; set; }
         public double sRate { get; set; }
+        public double standard { get; set; }
         public List<double> item { get; set; }
 
     }

+ 32 - 0
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -648,6 +648,21 @@ namespace TEAMModelOS.Controllers
                     {
                         ExamInfo exam = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ExamInfo>(id.ToString(), new PartitionKey($"{scode}"));
                         result.progress = true;
+                        //标记单科单班总得分
+                        double score = 0;
+                        //标准差
+                        double powSum = 0;
+                        var scount = result.studentIds.Count;
+                        foreach (List<double> sc in result.studentScores) {
+                            score += sc.Sum();
+                        }
+                        foreach (string sid in result.studentIds) {
+                            double ssc = result.studentScores[result.studentIds.IndexOf(sid)].Sum();
+                            powSum += Math.Pow(ssc - scount > 0 ? Math.Round(score * 1.0 / scount, 2) : 0, 2);
+
+                        }
+                        result.standard = Math.Round(scount > 0 ? Math.Pow(powSum / scount, 0.5) : 0, 2);
+                        result.average = scount > 0 ? Math.Round(score / scount, 2) : 0;
                         exam.subjects.ForEach(s =>
                         {
                             if (s.id.Equals(subjectId.ToString()))
@@ -736,6 +751,23 @@ namespace TEAMModelOS.Controllers
                         {
                             ExamInfo exam = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ExamInfo>(id.ToString(), new PartitionKey($"Exam-{school}"));
                             result.progress = true;
+                            //标记单科单班总得分
+                            double score = 0;
+                            //标准差
+                            double powSum = 0;
+                            var scount = result.studentIds.Count;
+                            foreach (List<double> sc in result.studentScores)
+                            {
+                                score += sc.Sum();
+                            }
+                            foreach (string sid in result.studentIds)
+                            {
+                                double ssc = result.studentScores[result.studentIds.IndexOf(sid)].Sum();
+                                powSum += Math.Pow(ssc - scount > 0 ? Math.Round(score * 1.0 / scount, 2) : 0, 2);
+
+                            }
+                            result.standard = Math.Round(scount > 0 ? Math.Pow(powSum / scount, 0.5) : 0, 2);
+                            result.average = scount > 0 ? Math.Round(score / scount, 2) : 0;
                             exam.subjects.ForEach(s =>
                             {
                                 if (s.id.Equals(subjectId.ToString()))