程序由来:为了更好的学习以及接触更多的人,最近参加了一个读书社(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";
}
}
}
}
站在巨人的肩膀,去学习


浙公网安备 33010602011771号