Example #1
0
 static void Main(string[] args)
 {
     ScoreAnalyze.Analyze();
 }
Example #2
0
        public static void Analyze()
        {
            var students = ScoreAnalyze.GetStudents(@"E:\others\04 MathTeachingAids\ScoreAnalyze\Documents\七年级登分表3.20.xlsx", "七年级成绩(可排序)");

            var totalCount = students.Count;
            var classNames = (from s in students select s.ClassName).Distinct().OrderBy(s => s).ToList();
            var classes    = new List <Class>();

            ScoreAnalyze.RankAllSubjects(students);

            //  全体学生分数及各科排名
            var sb = new StringBuilder("姓名\t班级\t语文\t\t数学\t\t英语\t\t科学\t\t社会\t\t总分\t\n");

            foreach (var s in students)
            {
                sb.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}\t{9}\t{10}\t{11}\t{12}\t{13}\n",
                                s.Name, s.ClassName,
                                s.ChineseScore, s.ChineseRank,
                                s.MathScore, s.MathRank,
                                s.EnglishScore, s.EnglishRank,
                                s.ScienceScore, s.ScienceRank,
                                s.SocietyScore, s.SocietyRank,
                                s.Score, s.Rank);
            }
            var studentsScore = sb.ToString();

            //  班级成绩分析

            sb = new StringBuilder("班级\t人数\t平均分\t前10\t前20\t前50\t前80\t后20\n");
            foreach (var c in classNames)
            {
                var sTemp = students.Where(s => s.ClassName == c).ToList();
                var cls   = new Class(c, sTemp, totalCount);
                classes.Add(cls);
                sb.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\n",
                                c, cls.StudentCount, cls.AverageScore,
                                cls.Top10Count, cls.Top20Count, cls.Top50Count, cls.Top80Count, cls.Last20Count);
            }
            classes.Add(new Class("7年级", students, totalCount));
            var classAnalyze = sb.ToString();

            //  班级学科成绩分析

            sb = new StringBuilder("学科\t班级\t分数>=95\t95>分数>=90\t90>分数>=85\t85>分数>=80\t80>分数>=75\t75>分数>=70\t70>分数>=60\t分数<60\tA分\tA数\tA率\tE分\tE数\tE率\n");
            double[,] ranges = new double[, ] {
                { 95, double.MaxValue },
                { 90, 95 },
                { 85, 90 },
                { 80, 85 },
                { 75, 80 },
                { 70, 75 },
                { 60, 70 },
                { double.MinValue, 60 }
            };
            //string[] subjects = new string[] { "Chinese", "Math", "English", "Society", "Science" };

            foreach (var subject in Subject.Subjects)
            {
                foreach (var c in classes)
                {
                    var subjectName = subject.Name;

                    sb.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}\t{9}\t{10}\t{11}\t{12}\t{13}\t{14}\t{15}\n",
                                    subject.Aliases[0], c.ClassName,
                                    c.GetScoreRangeCount(subjectName, ranges[0, 0], ranges[0, 1], subject.TotalScore),
                                    c.GetScoreRangeCount(subjectName, ranges[1, 0], ranges[1, 1], subject.TotalScore),
                                    c.GetScoreRangeCount(subjectName, ranges[2, 0], ranges[2, 1], subject.TotalScore),
                                    c.GetScoreRangeCount(subjectName, ranges[3, 0], ranges[3, 1], subject.TotalScore),
                                    c.GetScoreRangeCount(subjectName, ranges[4, 0], ranges[4, 1], subject.TotalScore),
                                    c.GetScoreRangeCount(subjectName, ranges[5, 0], ranges[5, 1], subject.TotalScore),
                                    c.GetScoreRangeCount(subjectName, ranges[6, 0], ranges[6, 1], subject.TotalScore),
                                    c.GetScoreRangeCount(subjectName, ranges[7, 0], ranges[7, 1], subject.TotalScore),

                                    c.GetAScore(subjectName, totalCount),
                                    c.GetACount(subjectName, totalCount),
                                    c.GetARatio(subjectName, totalCount),
                                    c.GetEScore(subjectName, totalCount),
                                    c.GetECount(subjectName, totalCount),
                                    c.GetERatio(subjectName, totalCount)
                                    );
                }
            }

            string classSubjectAnalyze = sb.ToString();
        }