static void Main(string[] args) { ScoreAnalyze.Analyze(); }
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(); }