程序由来:为了更好的学习以及接触更多的人,最近参加了一个读书社(QQ群ID:216284991),里面的群主说要开发一个随机分组的程序,让组员可以随机分组,于是我毛遂自荐一把,开发了这个小程序。
大致思路:本程序采用txt作为数据库,然后通过Split截取其中的字符串,然后通过随机算法,将组员进行分组。
界面如下:
代码如下:
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"; } } } }
站在巨人的肩膀,去学习