private void btmatch_Click(object sender, EventArgs e)//第一轮一键匹配 { ad_ServicesBLL bLL = new ad_ServicesBLL(); DialogResult dr = MessageBox.Show(bLL.match(), "提示", MessageBoxButtons.OKCancel); if (dr == DialogResult.OK) { ViewResults cform = new ViewResults(); //实例化一个子窗口 //设置子窗口不显示为顶级窗口 cform.TopLevel = false; //设置子窗口的样式,没有上面的标题栏 cform.FormBorderStyle = FormBorderStyle.None; //填充 cform.Dock = DockStyle.Fill; //清空控件 this.Controls.Clear(); //加入控件 this.Controls.Add(cform); //让窗体显示 cform.Show(); //跳转页面 } else { // } //获取学生的对象数组 sx_student[] sx_Students = new sx_student[50]; sx_Students = Keepinformation.sx_Students; //获取教师的对象数组 sx_teacher[] sx_Teachers = new sx_teacher[20]; sx_Teachers = Keepinformation.sx_Teachers; }
//加载一轮匹配结果 private void jiazaiyilun() { //加载一轮匹配结果 sx_student[] sx_Students = new sx_student[100]; sx_Students = Keepinformation.sx_Students; sx_teacher[] sx_Teachers = new sx_teacher[100]; sx_Teachers = Keepinformation.sx_Teachers; DataTable dataTable = new DataTable(); dataTable.Columns.Add("教师工号", typeof(string)); dataTable.Columns.Add("教师姓名", typeof(string)); dataTable.Columns.Add("学生组号", typeof(int)); dataTable.Columns.Add("组长姓名", typeof(string)); dataTable.Columns.Add("组长学号", typeof(string)); dataTable.Columns.Add("论文课题", typeof(string)); DataColumn[] PrimaryKeyColumns = new DataColumn[1]; //声明了一个datacolumn的数组,该数组只有一个元素 PrimaryKeyColumns[0] = dataTable.Columns["学生组号"]; //把主键列赋给数组元素 dataTable.PrimaryKey = PrimaryKeyColumns; //指定表的主键为PrimaryKeyColumns主键数组 if (sx_Teachers != null) { foreach (sx_teacher sx in sx_Teachers) { if (sx != null) { for (int i = 1; i <= sx.LovestuList.GetLength(); i++) { try { DataRow dataRow = dataTable.NewRow(); dataRow["教师工号"] = sx.Teano; dataRow["教师姓名"] = sx.Teaname; dataRow["学生组号"] = sx.LovestuList.GetElem(i).Groupid; dataRow["组长姓名"] = sx.LovestuList.GetElem(i).Stuname; dataRow["组长学号"] = sx.LovestuList.GetElem(i).Leaderno; dataRow["论文课题"] = sx.LovestuList.GetElem(i).Topic; dataTable.Rows.Add(dataRow); Console.WriteLine(dataRow["教师姓名"].ToString()); } catch (Exception e) { Console.WriteLine(e.Message); continue; } } dataGridView1.DataSource = dataTable; } } } }
//将剩余的结果继续加到老师的链表中去并提交 public void Merge_First_Sec() { sx_student[] sx_Students = new sx_student[50]; sx_teacher[] sx_Teachers = new sx_teacher[20]; sx_Students = Keepinformation.stsx_Students; sx_Teachers = Keepinformation.stsx_Teachers; ////将datatable中的值赋给sx_teacher对象数组 //for (int i = 0; i < sx_Teachers.Length; i++) //{ // sx_teacher teacher = new sx_teacher(20);//实例化对象 // sx_Teachers[i] = teacher; // sx_Teachers[i].LovestuList = new MyLinkList<sx_student>();//初始化一个链表,用于选择学生 //} for (int i = 0; i < sx_Students.Length; i++) { for (int j = 0; j < sx_Teachers.Length; j++) { if (sx_Teachers[j] != null && sx_Teachers[j].Kexuan > 0 && sx_Students[i] != null && sx_Students[i].Beixuan == 0) { sx_Students[i].Beixuan = 1; sx_Teachers[j].LovestuList.Append(sx_Students[i]); Console.WriteLine("学生" + sx_Students[i].Groupid + "被老师" + sx_Teachers[j].Teaname + "录取啦"); sx_Teachers[j].Kexuan -= 1; Console.WriteLine(sx_Teachers[j].Teaname + "的可选数为" + sx_Teachers[j].Kexuan); } } } for (int k = 0; k < sx_Students.Length; k++) { if (sx_Students[k] != null && sx_Students[k].Beixuan == 0) { Console.WriteLine("不好啦,学生" + sx_Students[k].Groupid + "被漏选啦"); } } Keepinformation.stsx_Students = sx_Students; // Keepinformation.sx_Teachers = sx_Teachers; Keepinformation.stsx_Teachers = sx_Teachers; }
//加载二轮匹配结果 private void jiazaierlun() { //加载二轮匹配结果 sx_student[] sx_Students = new sx_student[50]; sx_Students = Keepinformation.stsx_Students; sx_teacher[] sx_Teachers = new sx_teacher[20]; sx_Teachers = Keepinformation.stsx_Teachers; DataTable dataTable = new DataTable(); dataTable.Columns.Add("教师工号", typeof(string)); dataTable.Columns.Add("教师姓名", typeof(string)); dataTable.Columns.Add("学生组号", typeof(int)); dataTable.Columns.Add("组长姓名", typeof(string)); dataTable.Columns.Add("组长学号", typeof(string)); dataTable.Columns.Add("论文课题", typeof(string)); if (sx_Teachers != null) { foreach (sx_teacher sx in sx_Teachers) { if (sx != null) { for (int i = 1; i <= sx.LovestuList.GetLength(); i++) { DataRow dataRow = dataTable.NewRow(); dataRow["教师工号"] = sx.Teano; dataRow["教师姓名"] = sx.Teaname; dataRow["学生组号"] = sx.LovestuList.GetElem(i).Groupid; dataRow["组长姓名"] = sx.LovestuList.GetElem(i).Stuname; dataRow["组长学号"] = sx.LovestuList.GetElem(i).Leaderno; dataRow["论文课题"] = sx.LovestuList.GetElem(i).Topic; dataTable.Rows.Add(dataRow); //Console.WriteLine(dataRow["教师姓名"].ToString()); } dataGridView1.DataSource = dataTable; } } } }
//将剩余的结果继续加到老师的链表中去并提交 public void Merge_First_Sec() { sx_student[] sx_Students = new sx_student[50]; sx_teacher[] sx_Teachers = new sx_teacher[20]; sx_Students = Keepinformation.stsx_Students; sx_Teachers = Keepinformation.stsx_Teachers; //sx_student[] sx_Students =new Keepinformation.stsx_Students; //sx_teacher[] sx_Teachers =new Keepinformation.stsx_Teachers; for (int i = 0; i < sx_Students.Length; i++) { for (int j = 0; j < sx_Teachers.Length; j++) { if (sx_Teachers[j] != null && sx_Teachers[j].Kexuan > 0 && sx_Students[i] != null && sx_Students[i].Beixuan == 0) { sx_Students[i].Beixuan = 1; Console.WriteLine(sx_Students[i].Stuname + ";" + sx_Students[i].Groupid); Console.WriteLine(sx_Teachers[j].Teaname + ";"); sx_Teachers[j].LovestuList.Append(sx_Students[i]); Console.WriteLine("学生" + sx_Students[i].Groupid + "被老师" + sx_Teachers[j].Teaname + "录取啦"); sx_Teachers[j].Kexuan -= 1; Console.WriteLine(sx_Teachers[j].Teaname + "的可选数为" + sx_Teachers[j].Kexuan); } } } for (int k = 0; k < sx_Students.Length; k++) { if (sx_Students[k] != null && sx_Students[k].Beixuan == 0) { Console.WriteLine("不好啦,学生" + sx_Students[k].Groupid + "被漏选啦"); } } Keepinformation.stsx_Students = sx_Students; // Keepinformation.sx_Teachers = sx_Teachers; Keepinformation.stsx_Teachers = sx_Teachers; }
private void button1_Click(object sender, EventArgs e)//加载学生列表 { //获取学生对象数组 sx_student[] sx_Students = new sx_student[50]; sx_Students = Keepinformation.sx_Students; //获取教师对象数组 sx_teacher[] sx_Teachers = new sx_teacher[20]; sx_Teachers = Keepinformation.sx_Teachers; DataTable dataTable = new DataTable(); dataTable.Columns.Add("学生组号", typeof(string)); dataTable.Columns.Add("组长姓名", typeof(string)); dataTable.Columns.Add("论文课题", typeof(string)); dataTable.Columns.Add("组内人数", typeof(int)); dataTable.Columns.Add("志愿一", typeof(string)); dataTable.Columns.Add("志愿二", typeof(string)); dataTable.Columns.Add("志愿三", typeof(string)); dataTable.Columns.Add("综测均分", typeof(double)); //dataTable.Columns.Add("是否被选", typeof(string)); if (sx_Students != null) { for (int i = 0; i < sx_Students.Length; i++) { if (sx_Students[i] != null && sx_Students[i].Beixuan > 0) { continue; } // Console.WriteLine(sx_Students[i].Beixuan); DataRow dataRow = dataTable.NewRow(); if (sx_Students[i] != null && sx_Students[i].Groupid != 0) { dataRow["学生组号"] = sx_Students[i].Groupid; } if (sx_Students[i] != null && sx_Students[i].Stuname != null) { dataRow["组长姓名"] = sx_Students[i].Stuname; } if (sx_Students[i] != null && sx_Students[i].Topic != null) { dataRow["论文课题"] = sx_Students[i].Topic; } if (sx_Students[i] != null && sx_Students[i].Membernum != 0) { dataRow["组内人数"] = sx_Students[i].Membernum; } if (sx_Students[i] != null && sx_Students[i].LoveTeacher[0] != null) { dataRow["志愿一"] = sx_Students[i].LoveTeacher[0]; } if (sx_Students[i] != null && sx_Students[i].LoveTeacher[1] != null) { dataRow["志愿二"] = sx_Students[i].LoveTeacher[1]; } if (sx_Students[i] != null && sx_Students[i].LoveTeacher[2] != null) { dataRow["志愿三"] = sx_Students[i].LoveTeacher[2]; } if (sx_Students[i] != null && sx_Students[i].Grade != 0) { dataRow["综测均分"] = sx_Students[i].Grade; } dataTable.Rows.Add(dataRow); //dataRow["是否被选"] = sx_Students[i].Beixuan > 0 ? "是" : "不是"; } dataGridView1.DataSource = dataTable; } }
private void button2_Click(object sender, EventArgs e)//加载教师列表 { //获取学生对象数组 sx_student[] sx_Students = new sx_student[50]; sx_Students = Keepinformation.sx_Students; //获取教师对象数组 sx_teacher[] sx_Teachers = new sx_teacher[20]; sx_Teachers = Keepinformation.sx_Teachers; DataTable dataTable = new DataTable(); dataTable.Columns.Add("教师姓名", typeof(string)); dataTable.Columns.Add("应带组数", typeof(int)); dataTable.Columns.Add("已匹配组数", typeof(int)); dataTable.Columns.Add("匹配组数一", typeof(string)); dataTable.Columns.Add("匹配组数二", typeof(string)); dataTable.Columns.Add("匹配组数三", typeof(string)); dataTable.Columns.Add("匹配组数四", typeof(double)); dataTable.Columns.Add("匹配组数五", typeof(double)); //dataTable.Columns.Add("是否被选", typeof(string)); if (sx_Teachers != null) { for (int i = 0; i < sx_Teachers.Length; i++) { if (sx_Teachers[i] == null) { continue; } if (sx_Teachers[i].Groupnumber > sx_Teachers[i].LovestuList.GetLength()) { DataRow dataRow = dataTable.NewRow(); if (sx_Teachers[i] != null && sx_Teachers[i].Teaname != null) { dataRow["教师姓名"] = sx_Teachers[i].Teaname; } if (sx_Teachers[i] != null && sx_Teachers[i].Groupnumber != 0) { dataRow["应带组数"] = sx_Teachers[i].Groupnumber; } if (sx_Teachers[i] != null && sx_Teachers[i].LovestuList.GetLength() != 0) { dataRow["已匹配组数"] = sx_Teachers[i].LovestuList.GetLength(); } for (int j = 1; j <= sx_Teachers[i].LovestuList.GetLength(); j++) { switch (j) { case 1: dataRow["匹配组数一"] = sx_Teachers[i].LovestuList.GetElem(j).Groupid; break; case 2: dataRow["匹配组数二"] = sx_Teachers[i].LovestuList.GetElem(j).Groupid; break; case 3: dataRow["匹配组数三"] = sx_Teachers[i].LovestuList.GetElem(j).Groupid; break; case 4: dataRow["匹配组数四"] = sx_Teachers[i].LovestuList.GetElem(j).Groupid; break; case 5: dataRow["匹配组数五"] = sx_Teachers[i].LovestuList.GetElem(j).Groupid; break; } } dataTable.Rows.Add(dataRow); } //dataRow["是否被选"] = sx_Students[i].Beixuan > 0 ? "是" : "不是"; } dataGridView2.DataSource = dataTable; } }
public string MatchSecondtime() { sx_student[] sx_Students = new sx_student[50]; sx_teacher[] sx_Teachers = new sx_teacher[20]; DataTable stutable = ST_GetStuMatchtable(); int row_stucount = stutable.Rows.Count; DataTable teatable = ST_GetTeaMatchtable(); int row_teacount = teatable.Rows.Count; //将datatable中的值赋给sx_student对象数组 for (int i = 0; i < row_stucount; i++) { sx_student student = new sx_student(10); //if(sx_Students[i]!=null) // { if (stutable.Rows[i][0] != DBNull.Value)//组号 { student.Groupid = Convert.ToInt32(stutable.Rows[i][0]); } if (stutable.Rows[i][1] != DBNull.Value)//组长姓名 { student.Stuname = stutable.Rows[i][1].ToString(); } if (stutable.Rows[i][2] != DBNull.Value)//学生课题 { student.Topic = stutable.Rows[i][2].ToString(); } if (stutable.Rows[i][3] != DBNull.Value)//志愿一 { student.LoveTeacher[0] = stutable.Rows[i][3].ToString(); } if (stutable.Rows[i][4] != DBNull.Value)//志愿二 { student.LoveTeacher[1] = stutable.Rows[i][4].ToString(); } if (stutable.Rows[i][5] != DBNull.Value)//志愿三 { student.LoveTeacher[2] = stutable.Rows[i][5].ToString(); } if (stutable.Rows[i][6] != DBNull.Value)//小组平均成绩 { student.Grade = Convert.ToDouble(stutable.Rows[i][6]); } if (stutable.Rows[i][7] != DBNull.Value)//组内人数 { student.Membernum = Convert.ToInt16(stutable.Rows[i][7]); } if (stutable.Rows[i][8] != DBNull.Value)//组长学号 { student.Leaderno = stutable.Rows[i][8].ToString(); } student.Beixuan = 0;//初始化被选=0 sx_Students[i] = student; } //将datatable中的值赋给sx_teacher对象数组 for (int i = 0; i < row_teacount; i++) { sx_teacher teacher = new sx_teacher(20); //实例化对象 teacher.Teano = teatable.Rows[i][0].ToString(); //工号 teacher.Teaname = teatable.Rows[i][1].ToString(); //姓名 teacher.Groupnumber = Convert.ToInt32(teatable.Rows[i][2]); //应带组数 if (teatable.Rows[i][3] != DBNull.Value) //可选组数 { teacher.Kexuan = Convert.ToInt32(teatable.Rows[i][3]); } if (teatable.Rows[i][4] != DBNull.Value)//已选组数 { teacher.Yixuan = Convert.ToInt32(teatable.Rows[i][4]); } if (teatable.Rows[i][5] != DBNull.Value)//志愿一 { teacher.Groupid[0] = Convert.ToInt32(teatable.Rows[i][5]); } if (teatable.Rows[i][6] != DBNull.Value)//志愿二 { teacher.Groupid[1] = Convert.ToInt32(teatable.Rows[i][6]); } if (teatable.Rows[i][7] != DBNull.Value)//志愿三 { teacher.Groupid[2] = Convert.ToInt32(teatable.Rows[i][7]); } if (teatable.Rows[i][8] != DBNull.Value)//志愿四 { teacher.Groupid[3] = Convert.ToInt32(teatable.Rows[i][8]); } if (teatable.Rows[i][9] != DBNull.Value)//志愿五 { teacher.Groupid[4] = Convert.ToInt32(teatable.Rows[i][9]); } sx_Teachers[i] = teacher; sx_Teachers[i].LovestuList = new MyLinkList <sx_student>();//初始化一个链表,用于选择学生 } Console.WriteLine("第二轮表白游戏开始啦!!!"); //教师有可选组数,遍历每个志愿学生,看学生是否喜欢他 for (int i = 0; i < row_teacount; i++) //遍历每个教师,由教师追学生 { if (sx_Teachers[i].Kexuan > 0) //该教师是否还有名额可以收徒 { for (int k = 0; k < sx_Teachers[i].Yixuan; k++) //遍历该教师的已选志愿 { Console.WriteLine(sx_Teachers[i].Teaname + "老师向学生" + sx_Teachers[i].Groupid[k] + "表白啦"); for (int j = 0; j < row_stucount; j++) { if (sx_Students[j].Groupid == sx_Teachers[i].Groupid[k]) //找到相应志愿的学生 { for (int l = 0; l < 3; l++) //看学生的三个志愿老师里面有没有他 { if (sx_Students[j].LoveTeacher[l] == sx_Teachers[i].Teano && sx_Students[j].Beixuan == 0) { sx_Students[j].Beixuan = 1; sx_Teachers[i].LovestuList.Append(sx_Students[j]); Console.WriteLine("该学生被" + sx_Teachers[i].Teaname + "老师录取啦"); sx_Teachers[i].Kexuan -= 1; Console.WriteLine("该老师目前可选人数为" + sx_Teachers[i].Kexuan + "人\n"); break; } else if (sx_Students[j].LoveTeacher[l] == sx_Teachers[i].Teano && sx_Students[j].Beixuan == 1) { //找到该学生但却已经被录取了,那也没办法了 } } break; } break; } } } } int[] vs = new int[40]; int e = 0; string weipipei = "第二轮匹配失败组数["; foreach (sx_student sx in sx_Students) { if (sx != null && sx.Beixuan == 0) { vs[e] = sx.Groupid; e++; } } for (int h = 0; h < vs.Length; h++) { if (vs[h] != 0) { weipipei += vs[h].ToString() + ","; } } weipipei += "]"; Console.WriteLine(weipipei); Keepinformation.sx_Students = sx_Students; Keepinformation.sx_Teachers = sx_Teachers; Keepinformation.stsx_Students = sx_Students; Keepinformation.stsx_Teachers = sx_Teachers; Console.WriteLine("\n\n\n\n"); Merge_First_Sec(); return("二轮匹配结束,点击确定查看匹配结果"); }
//匹配算法 public string Match() { //初始化对象数组 sx_student[] sx_Students = new sx_student[50]; //50个地址值 sx_teacher[] sx_Teachers = new sx_teacher[20]; //20个地址值 MyLinkList <sx_student> myLinkList = new MyLinkList <sx_student>(); //声明对象链表 DataTable stutable = GetStuMatchtable(); //获取学生列表 int row_stucount = stutable.Rows.Count; DataTable teatable = GetTeaMatchtable(); //获取教师列表 int row_teacount = teatable.Rows.Count; //将datatable中的值赋给sx_student对象数组 for (int i = 0; i < row_stucount; i++) { sx_student student = new sx_student(10); //if(sx_Students[i]!=null) // { if (stutable.Rows[i][0] != DBNull.Value)//组号 { student.Groupid = Convert.ToInt32(stutable.Rows[i][0]); } if (stutable.Rows[i][1] != DBNull.Value)//组长姓名 { student.Stuname = stutable.Rows[i][1].ToString(); } if (stutable.Rows[i][2] != DBNull.Value)//学生课题 { student.Topic = stutable.Rows[i][2].ToString(); } if (stutable.Rows[i][3] != DBNull.Value)//志愿一 { student.LoveTeacher[0] = stutable.Rows[i][3].ToString(); } if (stutable.Rows[i][4] != DBNull.Value)//志愿二 { student.LoveTeacher[1] = stutable.Rows[i][4].ToString(); } if (stutable.Rows[i][5] != DBNull.Value)//志愿三 { student.LoveTeacher[2] = stutable.Rows[i][5].ToString(); } if (stutable.Rows[i][6] != DBNull.Value)//小组平均成绩 { student.Grade = Convert.ToDouble(stutable.Rows[i][6]); } if (stutable.Rows[i][7] != DBNull.Value)//组内人数 { student.Membernum = Convert.ToInt16(stutable.Rows[i][7]); } if (stutable.Rows[i][8] != DBNull.Value)//组长学号 { student.Leaderno = stutable.Rows[i][8].ToString(); } student.Beixuan = 0;//初始化被选=0 sx_Students[i] = student; //} } //将datatable中的值赋给sx_teacher对象数组 for (int i = 0; i < row_teacount; i++) { sx_teacher teacher = new sx_teacher(20); //实例化对象 teacher.Teano = teatable.Rows[i][0].ToString(); //工号 teacher.Teaname = teatable.Rows[i][1].ToString(); //姓名 teacher.Groupnumber = Convert.ToInt32(teatable.Rows[i][2]); //应带组数 if (teatable.Rows[i][3] != DBNull.Value) //已选组数 { teacher.Yixuan = Convert.ToInt32(teatable.Rows[i][3]); } if (teatable.Rows[i][4] != DBNull.Value)//志愿一 { teacher.Groupid[0] = Convert.ToInt32(teatable.Rows[i][4]); } if (teatable.Rows[i][5] != DBNull.Value)//志愿二 { teacher.Groupid[1] = Convert.ToInt32(teatable.Rows[i][5]); } if (teatable.Rows[i][6] != DBNull.Value)//志愿三 { teacher.Groupid[2] = Convert.ToInt32(teatable.Rows[i][6]); } if (teatable.Rows[i][7] != DBNull.Value)//志愿四 { teacher.Groupid[3] = Convert.ToInt32(teatable.Rows[i][7]); } if (teatable.Rows[i][8] != DBNull.Value)//志愿五 { teacher.Groupid[4] = Convert.ToInt32(teatable.Rows[i][8]); } sx_Teachers[i] = teacher; sx_Teachers[i].LovestuList = new MyLinkList <sx_student>();//初始化一个链表,用于选择学生 } Console.WriteLine("表白游戏开始啦!!!"); //学生有三个志愿,遍历三个志愿,找对应的teacher,看老师是否喜欢他 for (int i = 0; i < row_stucount; i++) { Console.WriteLine("\n\n学生" + sx_Students[i].Groupid + "进来啦"); if (sx_Students[i].Beixuan != 0)//若已经被选了就直接轮到下一个学生 { continue; } for (int m = 0; m < 3; m++)//三个志愿老师 { string get_Lovetea = sx_Students[i].LoveTeacher[m]; for (int k = 0; k < row_teacount; k++) //遍历老师列表,查找当前学生的心仪老师 { if (sx_Teachers[k].Teano == get_Lovetea) //找到这个老师 { Console.WriteLine("学生" + sx_Students[i].Groupid + "向" + "第" + (m + 1) + "志愿老师" + sx_Teachers[k].Teaname + "表白了"); for (int a = 0; a < 5; a++) //教师的志愿个数,最多循环5个志愿 { if (sx_Teachers[k].Groupid[a].Equals(sx_Students[i].Groupid) && sx_Students[i].Beixuan == 0) //这个老师也喜欢他 { Console.WriteLine("老师也喜欢他"); //判断他招的学生满了没有 if (sx_Teachers[k].LovestuList.GetLength() < sx_Teachers[k].Groupnumber && sx_Students[i].Beixuan == 0)//没满 { int flag = 0; // 判断这个老师列表里是不是已经有了该学生了 for (int f = 1; f <= sx_Teachers[k].LovestuList.GetLength(); f++) { if (sx_Teachers[k].LovestuList.GetElem(f).Groupid == sx_Students[i].Groupid)//该老师列表已有这个学生 { flag += 1; Console.WriteLine("学生重复,不加入链表"); break; } } if (flag == 0 && sx_Students[i].Beixuan == 0)//这个老师列表里还没有这个学生且学生未被其他老师选 { sx_student item = sx_Students[i]; item.Beixuan = 1; sx_Teachers[k].LovestuList.Append(item); Console.WriteLine("恭喜学生" + item.Groupid + "被" + sx_Teachers[k].Teaname + "老师录取了"); string str = "此时教师" + sx_Teachers[k].Teaname + "的心仪学生有:["; for (int t = 1; t <= sx_Teachers[k].LovestuList.GetLength(); t++) { str += sx_Teachers[k].LovestuList.GetElem(t).Groupid + ","; } str += "]"; Console.WriteLine(str); //break; } else { break; } } else//满了 { Console.WriteLine("啊哦,这个老师的可选人数已满了,让我们来看看可不可以抢位置"); int length = sx_Teachers[k].LovestuList.GetLength(); //获取已选学生列表长度 for (int p = 1; p <= length; p++) //替换掉比当前学生成绩低的学生 { if (sx_Teachers[k].LovestuList.GetElem(p).Grade < sx_Students[i].Grade) //有比该学生成绩还要低的 { for (int g = 1; g <= row_stucount; g++) { if (sx_Students[g].Groupid == sx_Teachers[k].LovestuList.GetElem(p).Groupid)//根据教师列表中的groupid定位到学生对象数组中对应学生 { sx_Students[g].Beixuan = 0; } } Console.WriteLine("找到" + sx_Teachers[k].LovestuList.GetElem(p).Groupid + "比" + sx_Students[i].Groupid + "成绩还要低!抢他!!"); Console.WriteLine("学生" + sx_Teachers[k].LovestuList.GetElem(p).Groupid + "失恋了,他的指导老师被学生" + sx_Students[i].Groupid + "抢了"); sx_Teachers[k].LovestuList.Delete(p); //删除第p个节点 sx_Students[i].Beixuan = 1; sx_Teachers[k].LovestuList.Append(sx_Students[i]); //插入第i个节点 Console.WriteLine("恭喜学生" + sx_Students[i].Groupid + "被" + sx_Teachers[k].Teaname + "老师录取了"); string str = "此时教师" + sx_Teachers[k].Teaname + "的心仪学生有:["; for (int t = 1; t <= sx_Teachers[k].LovestuList.GetLength(); t++) { str += sx_Teachers[k].LovestuList.GetElem(t).Groupid + ","; } str += "]"; Console.WriteLine(str); //break; } else//没有比当前学生成绩还要低的了 { Console.WriteLine("你的段位才" + sx_Students[i].Grade + ",打不过这个组" + sx_Teachers[k].LovestuList.GetElem(p).Groupid + ",他的段位" + sx_Teachers[k].LovestuList.GetElem(p).Grade); continue; } } } } else//这个老师不喜欢当前学生 { //若有空位则暂时接受该学生 if (sx_Teachers[k].LovestuList.GetLength() < sx_Teachers[k].Groupnumber && sx_Students[i].Beixuan == 0) { sx_Students[i].Beixuan = 1; sx_Teachers[k].LovestuList.Append(sx_Students[i]);// Console.WriteLine("该老师不喜欢这个学生,不过可以暂时接受他"); Console.WriteLine("恭喜学生" + sx_Students[i].Groupid + "被老师" + sx_Teachers[k].Teaname + "录取啦!"); string str = "此时教师" + sx_Teachers[k].Teaname + "的心仪学生有:["; for (int t = 1; t <= sx_Teachers[k].LovestuList.GetLength(); t++) { str += sx_Teachers[k].LovestuList.GetElem(t).Groupid + ","; } str += "]"; Console.WriteLine(str); //break; } //break; } } } else//没找到这个老师,不可能吧 { //Console.WriteLine("没找到"+ sx_Teachers[k].Teano + "老师不可能呀"+ ",我要找的是:"+ get_Lovetea); if (sx_Students[i].Beixuan == 1) { break; } else { continue; } } } } } int[] vs = new int[40]; int e = 0; string weipipei = "第一轮匹配失败组数["; foreach (sx_student sx in sx_Students) { if (sx != null && sx.Beixuan == 0) { vs[e] = sx.Groupid; e++; } } for (int h = 0; h < vs.Length; h++) { if (vs[h] != 0) { weipipei += vs[h].ToString() + ","; } } weipipei += "]"; Console.WriteLine(weipipei); for (int h = 0; h < sx_Teachers.Length; h++) //检测教师心仪的学生链表里的值 { MyLinkList <sx_student> myLinkList1 = new MyLinkList <sx_student>(); if (sx_Teachers[h] != null && sx_Teachers[h].LovestuList.GetLength() > 0) { myLinkList1 = sx_Teachers[h].LovestuList; string str = "教师" + sx_Teachers[h].Teano + " ___" + sx_Teachers[h].Teaname + "选的学生是["; for (int i = 1; i <= sx_Teachers[h].LovestuList.GetLength(); i++) { str += myLinkList1.GetElem(i).Groupid + ","; } str += "]"; Console.WriteLine(str); } } Keepinformation.sx_Students = sx_Students; //没办法同时返回两个对象数组,只能通过第三方存储了??? Keepinformation.sx_Teachers = sx_Teachers; return("一轮匹配结束,点击确定查看匹配结果"); }