基本信息
源码名称:c# 一键分班示例源码下载(可按照男女/分数一键分班)
源码大小:0.02M
文件格式:.7z
开发语言:C#
更新时间:2014-03-10
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
参考下分班逻辑, 分班后 要求 每个班级 性别均匀,分数均匀



using System;
using System.Collections.Generic;
using System.Linq;

namespace DivideClass
{
    internal class DivideClass
    {
        private readonly IDevideStrategy _devideStrategy;
        private int count;

        private int _男女比例因子;

        public DivideClass(IDevideStrategy devideStrategy, int count, int 男女比例因子 = 5)
        {
            _devideStrategy = devideStrategy;
            this.count = count;
            this._男女比例因子 = 男女比例因子;
        }

        /// <summary>
        /// 生成测试数据
        /// </summary>
        /// <returns></returns>
        private IList<Stu> RandomUser()
        {
            var list = new List<Stu>();

            for (int i = 0; i < count; i  )
            {
                var random = new Random(i);

                int score = random.Next(0, 100);
                list.Add(new Stu
                {
                    Score = score,
                    StuNo = i,
                    Sex = (score % _男女比例因子 == 0 ? "女" : "男"),
                });
            }

            return list;
        }


        private Dictionary<int, IList<Stu>> InitClass(int countClass)
        {
            var dicDividedUser = new Dictionary<int, IList<Stu>>();

            for (int i = 0; i < countClass; i  )
            {
                dicDividedUser.Add(i, new List<Stu>());
            }

            return dicDividedUser;
        }


        private IList<Stu> GetUser()
        {
            return RandomUser();
        }


        public Dictionary<int, IList<Stu>> Divide(int classCount)
        {
            IList<Stu> list = GetUser();

            IOrderedEnumerable<Stu> 男的 = list.Where(x => x.Sex == "男").OrderByDescending(x => x.Score);
            IOrderedEnumerable<Stu> 女的 = list.Where(x => x.Sex == "女").OrderByDescending(x => x.Score);


            Dictionary<int, IList<Stu>> dicDividedUser = InitClass(classCount);

            _devideStrategy.DevideOnGroup(男的, classCount, dicDividedUser);

            _devideStrategy.DevideOnGroup(女的, classCount, dicDividedUser);

            return dicDividedUser;
        }



        public void Print(Dictionary<int, IList<Stu>> stuclass)
        {
            foreach (var kv in stuclass)
            {
                Console.WriteLine("classid="   kv.Key);

                foreach (Stu stu in kv.Value)
                {
                    Console.Write(stu.StuNo   "=>"   stu.Sex   "=>"   stu.Score   "\t");
                }

                Console.WriteLine();

                Console.WriteLine("all=>"   kv.Value.Count()   "=>男"   kv.Value.Count(x => x.Sex == "男")   "=>女"  
                                  kv.Value.Count(x => x.Sex == "女")   "=>平均分"   kv.Value.Average(x => x.Score));

                Console.WriteLine();
            }
        }
    }
}