1.3主要程序说明
1 基本函数
//创建到excel数据库的连接(同上,略)
//返回DataAdapter(同上,略)
//将数据装入到DataSet里面(同上,略)
//声明一个类,确定更改字段名。用于对数据的的修改添加。(同上,略)
//用于修改数据库内的数据(同上,略)
//显示文件到DataGridView2
显示文件到DataGridView3
public void dt_1(DataGridView Dgv,int[] ax)//创建数据表格用于装和显示生成的名单
{
DataTable dt1 = new DataTable();
DataColumn dc1 = new DataColumn("姓 名", Type.GetType("System.String"));
DataColumn dc2 = new DataColumn(time_1.Text, Type.GetType("System.String"));
dt1.Columns.Add(dc1);
dt1.Columns.Add(dc2);
for (int ij = 0; ij < (int)nummen; ij++)
{
//ij = Num(arrNum, ij);
if (ij < (int)nummen)
{
DataRow dr = dt1.NewRow();
dr["姓 名"] = reutrnDs().Tables[0].Rows[ax[ij]][1];
dr[time_1.Text] = reutrnDs().Tables[0].Rows[ax[ij]][int.Parse(time_1.Text)+2];
dt1.Rows.Add(dr);
}
}
Dgv.DataSource = dt1;
}
3.2.2.1 随机抽点子模块
在随机抽点子模块要做到的功能是从原始点名名单里随机的抽出一部分人来生成一个随机点名名单,然后对其进行点名。
随机抽点子模块主要利用一个随机函数来对DataSet数据集里面的学生所在行进行随机抽点。在DataSet数据集里面的数据是以二维表方式存放的,在这个二维表里面每一行代表一个学生及其出勤记录。而行号就是确定学生姓名的关键字了。我的做法是首先得到总行数row,确定抽点人数比例用这个比例去乘以row得出抽点人数nummen,然后再从0-row中随即抽取nummen个不相同的数字存放在数组arrNum中。这样就确定了抽点名单了,再将名单显是在dataGridView3里。点名时就只对arrNum数组里相对应行号的学生点名。
具体流程示意图:
主要相应函数:
//产生随机数并装入数组arrNum
int[] arrNum;
public int[] getRandomNum(int num, int minValue, int maxValue)
{
Random ra = new Random(unchecked((int)DateTime.Now.Ticks));
arrNum = new int[num];
for (int i = 0; i <= num - 1; i++)
{
arrNum[i] = 1234567;
}
int tmp = 0;
for (int i = 0; i <= num -1; i++)
{
tmp = ra.Next(minValue, maxValue); //随机取数
arrNum[i] = getNum(arrNum, tmp, minValue, maxValue, ra); //防止取到重复的数字,并值赋到数组中
}
return arrNum;
}
//判断是否有重复随机数
public int getNum(int[] arrNum, int tmp, int minValue, int maxValue, Random ra)
{
int n = 0;
while (n <= arrNum.Length - 1)
{
if (arrNum[n] == tmp) //利用循环判断是否有重复
{
tmp = ra.Next(minValue, maxValue); //重新随机获取。
tmp = getNum(arrNum, tmp, minValue, maxValue, ra);//递归:如果取出来的数字和已取得的数字有重复就重新随机获取。
}
n++;
}
return tmp;
}
主要相应函数:
将将0-row行学生的行号和缺勤记录的行号装入数组aa。
z = row;
if (z <= 30)
t = 1;
if (30 < z && z <= 80)
t = 2;
if (80 < z && z <= 160)
t = 3;
if (160 < z)
t = 4;
aa = new int[row * row * t];
//原有行装入数组
for (a = 0; a < row; a++)
aa[a] = a;
//增加行装入数组
int dc = 0;
string dd = dc.ToString();
for (c = 0; c < row; c++)
for (a = 3; a < column; a++)
{
if (dd == reutrnDs().Tables[0].Rows[c][a].ToString())
{
for (int k = 0; k < t; k++)
aa[z] = c; z++;
}
}
出勤随机函数
Int wz;
public int[] getRandomNum(int num, int minValue, int maxValue)
{
wz=0;
Random ra = new Random(unchecked((int)DateTime.Now.Ticks));
arrNum = new int[num];
for (int i = 0; i <= num - 1; i++)
{
arrNum[i] = 1234567;
}
int tmp = 0;
for (int i = 0; i <= num -1; i++)
{
tmp = ra.Next(minValue, maxValue); //随机取数
arrNum[i] = getNum(arrNum, tmp, minValue, maxValue, ra); //取出值赋到数组中
wz++;
}
return arrNum;
}
//判断是否有重复随机数
public int getNum(int[] arrNum, int tmp, int minValue, int maxValue, Random ra)
{
int n = 0;
while (n <wz)
{