天道酬勤,厚德载物,自强不息,求真务实,动脑动手,孜孜以求

StudyDo

天道酬勤,厚德载物,自强不息,求真务实,动脑动手,孜孜以求

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

程序由来:为了更好的学习以及接触更多的人,最近参加了一个读书社(QQ群ID:216284991),里面的群主说要开发一个随机分组的程序,让组员可以随机分组,于是我毛遂自荐一把,开发了这个小程序。

大致思路:本程序采用txt作为数据库,然后通过Split截取其中的字符串,然后通过随机算法,将组员进行分组。

界面如下:

image

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Extraction
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }

        private void btnDataPath_Click(object sender, EventArgs e)
        {


        }
        /// <summary>
        /// 获取文本文件的内容,放入数组
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExtract_Click(object sender, EventArgs e)
        {
            string textDataMember = null;
            using (OpenFileDialog ofd = new OpenFileDialog())
            {
                //设置过滤文件后缀
                ofd.Filter = "文本文件(*.txt)|*.txt";
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        using (StreamReader sr = new StreamReader(ofd.FileName, Encoding.GetEncoding("GB2312")))//设置文件编码,防止乱码
                        {

                            while ((textDataMember = sr.ReadLine()) != null)
                            {
                                string[] memberArray = textDataMember.Split('|');//读取行,然后通过Split截取字符串
                                ArrayToExtraction(memberArray);
                            }
                        }
                    }
                    catch (Exception ex)
                    {

                        MessageBox.Show("无法读取文件" + ex.Message);
                    }
                }
            }
        }
        /// <summary>
        /// 分组算法
        /// </summary>
        /// <param name="memberArray"></param>
        private void ArrayToExtraction(string[] memberArray)
        {
            int extractionEveryNum = int.Parse(txtExtractMem.Text);//从界面获取需要的每组人数
            int groupNum = (int)Math.Ceiling(memberArray.Length * 1.0 / extractionEveryNum);//获取组数
            Dictionary<int, string> iDict = new Dictionary<int, string>();
            for (int i = 0; i < memberArray.Length; i++)
            {
                iDict.Add(i, memberArray[i].ToString());//将数组的值,放入字典中
            }

            Random rd = new Random();
            rtbResult.Text = null;
            for (int j = 1; j <= groupNum; j++)//组的循环
            {
                rtbResult.Text += "第" + j + "组:     ";
                for (int k = 0; k < extractionEveryNum; k++)//组的人员的循环
                {
                    int rdNum = rd.Next(0, memberArray.Length);

                    bool done = false;
                    if (iDict.Count != 0)
                    {
                        while (!done)
                        {
                            if (iDict.ContainsKey(rdNum))
                            {
                                rtbResult.Text += iDict[rdNum]+"\t";
                                iDict.Remove(rdNum);
                                done = true;
                            }
                            else
                            {
                                rdNum = rd.Next(0, memberArray.Length);
                            }
                        }
                    }

                }
                rtbResult.Text += "\n\r";
            }
        }
    }
}
posted on 2012-03-21 00:19  三木人  阅读(189)  评论(0编辑  收藏  举报