private void NowSetRow(DataGridViewRow row, CLUBRecord club, StudRecord stud, string v) { row.Cells[colSelectClub.Index].Value = "" + club.ClubName; row.Cells[colSelectClub.Index].Tag = club; club.NewCount++; //新加入多少人 if (ClubAddDic.ContainsKey(club.UID)) { ClubAddDic[club.UID].Add(stud.id); } if (v == "1") { club.NewGrade1Limit++; } else if (v == "2") { club.NewGrade2Limit++; } else if (v == "3") { club.NewGrade3Limit++; } }
private void btnSave_Click(object sender, EventArgs e) { //將指定好的學生 //建立社團參與記錄 //並加入該社團內 btnSave.Enabled = false; List <SCJoin> SCJoinList = new List <SCJoin>(); sb_log = new StringBuilder(); sb_log.AppendLine(string.Format("「{0}」學年度 第「{1}」學期 未選社團學生分發:", seting_school_year, seting_school_semester)); foreach (DataGridViewRow row in dataGridViewX1.Rows) { if (row.Cells[colSelectClub.Index].Tag != null) { StudRecord sr = (StudRecord)row.Tag; CLUBRecord cr = (CLUBRecord)row.Cells[colSelectClub.Index].Tag; SCJoin sc = new SCJoin(); sc.RefClubID = cr.UID; sc.RefStudentID = sr.id; SCJoinList.Add(sc); sb_log.AppendLine(string.Format("班級「{0}」學生「{1}」社團指定為「{2}」", sr.class_name, sr.name, cr.ClubName)); } } BGWSave.RunWorkerAsync(SCJoinList); }
void btnItem_Click(object sender, EventArgs e) { if (itmPnlTimeName.SelectedItems.Count == 1) { List <CLUBRecord> clubList = new List <CLUBRecord>(); //取得目前所選擇的Button ButtonItem Buttonitem = itmPnlTimeName.SelectedItems[0] as ButtonItem; //取得課程Record CLUBRecord club = (CLUBRecord)Buttonitem.Tag; clubList.Add(club); //該課程目前有多少選課學生 int count = 0; if (ScjDic.ContainsKey(club.UID)) { count = ScjDic[club.UID].Count; } // foreach (DataGridViewRow row in dataGridViewX1.SelectedRows) { //先清除原本的 if (row.Cells[colSelectClub.Index].Tag != null) { CLUBRecord reClub = (CLUBRecord)row.Cells[colSelectClub.Index].Tag; StudRecord stud = (StudRecord)row.Tag; if (ClubAddDic.ContainsKey(reClub.UID)) { ClubAddDic[reClub.UID].Remove(stud.id); } if (!clubList.Contains(reClub)) { clubList.Add(reClub); } } //填入學生所選的社團資料 row.Cells[colSelectClub.Index].Value = "" + club.ClubName; row.Cells[colSelectClub.Index].Tag = club; //統計,此按鈕造成新增多少學生(不重複) if (ClubAddDic.ContainsKey(club.UID)) { //不包含此學生則加入 StudRecord stud = (StudRecord)row.Tag; if (!ClubAddDic[club.UID].Contains(stud.id)) { ClubAddDic[club.UID].Add(stud.id); } } } RefreshButtonItem(clubList); } }
private void 加入待處理學生ToolStripMenuItem_Click(object sender, EventArgs e) { List <string> list = new List <string>(); foreach (DataGridViewRow row in dataGridViewX1.SelectedRows) { StudRecord sr = (StudRecord)row.Tag; list.Add(sr.id); } K12.Presentation.NLDPanels.Student.AddToTemp(list); }
private void 清除指定社團ToolStripMenuItem_Click(object sender, EventArgs e) { List <CLUBRecord> clublist = new List <CLUBRecord>(); foreach (DataGridViewRow row in dataGridViewX1.SelectedRows) { //取得課程Record CLUBRecord club = (CLUBRecord)row.Cells[colSelectClub.Index].Tag; clublist.Add(club); //該課程目前有多少選課學生 int count = 0; if (ScjDic.ContainsKey(club.UID)) { count = ScjDic[club.UID].Count; } row.Cells[colSelectClub.Index].Value = null; row.Cells[colSelectClub.Index].Tag = null; //統計,此按鈕造成新增多少學生(不重複) if (ClubAddDic.ContainsKey(club.UID)) { //包含此學生,則移除學生 StudRecord stud = (StudRecord)row.Tag; if (ClubAddDic[club.UID].Contains(stud.id)) { ClubAddDic[club.UID].Remove(stud.id); } club.NewCount--; if (stud.grade_year == "1" || stud.grade_year == "7") { club.NewGrade1Limit--; } else if (stud.grade_year == "2" || stud.grade_year == "8") { club.NewGrade2Limit--; } else if (stud.grade_year == "3" || stud.grade_year == "9") { club.NewGrade3Limit--; } } } RefreshButtonItem(clublist); }
private int SortRandom(StudRecord x, StudRecord y) { return(x.RandomIndex.CompareTo(y.RandomIndex)); }
private void NowRunRow(DataGridViewRow row, CLUBRecord club, StudRecord stud) { //如果沒有設定過,才進行分配 if (row.Cells[colSelectClub.Index].Value == null) { //當學生是一年級時 if (stud.grade_year == "1" || stud.grade_year == "7") { if (club.Grade1Limit.HasValue) { if (club.Grade1Limit.Value > club.NewGrade1Limit) { if (club.GenderRestrict != "") { //性別判斷 if (club.GenderRestrict == stud.gender) { NowSetRow(row, club, stud, "1"); } } else { NowSetRow(row, club, stud, "1"); } } } else { NowSetRow(row, club, stud, "1"); } } else if (stud.grade_year == "2" || stud.grade_year == "8") { if (club.Grade2Limit.HasValue) { if (club.Grade2Limit.Value > club.NewGrade2Limit) { if (club.GenderRestrict != "") { //性別判斷 if (club.GenderRestrict == stud.gender) { NowSetRow(row, club, stud, "2"); } } else { NowSetRow(row, club, stud, "2"); } } } else { NowSetRow(row, club, stud, "2"); } } else if (stud.grade_year == "3" || stud.grade_year == "9") { if (club.Grade3Limit.HasValue) { //三年級人數上限還沒滿 if (club.Grade3Limit.Value > club.NewGrade3Limit) { if (club.GenderRestrict != "") { //性別判斷 if (club.GenderRestrict == stud.gender) { NowSetRow(row, club, stud, "3"); } } else { NowSetRow(row, club, stud, "3"); } } } else { NowSetRow(row, club, stud, "3"); } } } }
private void btnStartAuto_Click(object sender, EventArgs e) { DialogResult dr = MsgBox.Show("自動分配將會把本畫面中\n未手動指定社團的學生\n進行[依選社條件]亂數分配\n確認開始指定?", MessageBoxButtons.YesNo, MessageBoxDefaultButton.Button2); if (dr == DialogResult.No) { MsgBox.Show("已取消"); return; } //開始自動分配 //1.取得系統內的各社團的條件 //a.人數上限(目前社團人數) //b.科別限制 //c.男女限制 //d.年級限制 List <CLUBRecord> InsertClubLimit = new List <CLUBRecord>(); foreach (CLUBRecord club in CLUBRecordList) { //取得目前社團修課人數 int count = 0; if (ScjDic.ContainsKey(club.UID)) { count += ScjDic[club.UID].Count; } if (ClubAddDic.ContainsKey(club.UID)) { count += ClubAddDic[club.UID].Count; } //目前人數 club.NewCount = count; //本社團,是否有"人數上限"限制 if (club.Limit.HasValue) { //目前社團人數,是否已超過人數上限 if (count < club.Limit.Value) { InsertClubLimit.Add(club); } } else { InsertClubLimit.Add(club); } //如果社團已經有修課學生 if (ScjDic.ContainsKey(club.UID)) { //判斷與分類目前社團修課人數 foreach (SCJoin scj in ScjDic[club.UID]) { //取得學生資料 if (IsStudentDic.ContainsKey(scj.RefStudentID)) { StudRecord stud = IsStudentDic[scj.RefStudentID]; if (stud.grade_year == "1" || stud.grade_year == "7") { club.NewGrade1Limit++; } else if (stud.grade_year == "2" || stud.grade_year == "8") { club.NewGrade2Limit++; } else if (stud.grade_year == "3" || stud.grade_year == "9") { club.NewGrade3Limit++; } } } } } //這一段主要是要將學生進行亂數排序 List <StudRecord> StudList = new List <StudRecord>(); Random xy01 = new Random(); foreach (DataGridViewRow row in dataGridViewX1.Rows) { //如果沒有設定過,才進行分配 if (row.Cells[colSelectClub.Index].Value == null) { //學生基本資料 StudRecord stud = (StudRecord)row.Tag; stud.row = row; stud.RandomIndex = xy01.Next(1, 99999); StudList.Add(stud); } } StudList.Sort(SortRandom); //開始分配作業 foreach (StudRecord stud in StudList) { DataGridViewRow row = stud.row; //可以分配的社團 foreach (CLUBRecord club in InsertClubLimit) { //這個社團,有人數上限 if (club.Limit.HasValue) { //人數未滿 if (club.Limit.Value > club.NewCount) { //社團有科別限制 if (club.GetDeptRestrictList.Count > 0) { if (stud.dept_name_stud != "") { //學生科別 if (club.GetDeptRestrictList.Contains(stud.dept_name_stud)) { NowRunRow(row, club, stud); } else { //科別條件不符合 } } else if (stud.dept_name_class != "") { //班級科別 if (club.GetDeptRestrictList.Contains(stud.dept_name_class)) { NowRunRow(row, club, stud); } else { //科別條件不符合 } } else { //有科別限制,但學生身上無科別 } } else { NowRunRow(row, club, stud); } } else { //這個社團人數上限已滿 } } else { //沒有人數上限 //如果沒有設定過,才進行分配 if (row.Cells[colSelectClub.Index].Value == null) { NowRunRow(row, club, stud); } } } } //重新處理畫面顯示 RefreshButtonItem(InsertClubLimit); dataGridViewX1.Sort(new RowComparer()); }
void BGW_DoWork(object sender, DoWorkEventArgs e) { //取得本學期社團資料 CLUBRecordList.Clear(); //舊的 會載入 系統系統學期的社團清單 //CLUBRecordList = _AccessHelper.Select<CLUBRecord>(string.Format("school_year={0} and semester={1}", School.DefaultSchoolYear, School.DefaultSemester)); //新的 是載入 人為設定選社學年、學期 CLUBRecordList = _AccessHelper.Select <CLUBRecord>(string.Format("school_year={0} and semester={1}", seting_school_year, seting_school_semester)); //取得本學期,所有社團參與記錄 List <string> ClubRefIDList = new List <string>(); foreach (CLUBRecord record in CLUBRecordList) { if (!ClubRefIDList.Contains(record.UID)) { ClubRefIDList.Add(record.UID); ClubAddDic.Add(record.UID, new List <string>()); } } //取得學校所有學生記錄 //學生記錄來自於社團ID StudentScjoinDic = new Dictionary <string, SCJoin>(); ScjDic = new Dictionary <string, List <SCJoin> >(); string ClubIdString = string.Join("','", ClubRefIDList); List <SCJoin> Scjoin = _AccessHelper.Select <SCJoin>(string.Format("ref_club_id in ('{0}')", ClubIdString)); foreach (SCJoin join in Scjoin) { //學生修社紀錄 if (!StudentScjoinDic.ContainsKey(join.RefStudentID)) { StudentScjoinDic.Add(join.RefStudentID, join); } //社團修課人數 if (!ScjDic.ContainsKey(join.RefClubID)) { ScjDic.Add(join.RefClubID, new List <SCJoin>()); } ScjDic[join.RefClubID].Add(join); } //取得學校內所有一般生記錄 //班級/座號/學號/姓名 //(沒有班級之學生,不列入記錄 DataTable studentDT = _QueryHelper.Select(@"select student.id,class.class_name, student.seat_no,student.student_number,student.name,class.grade_year, student.gender ,dept_Class.name as dept_name_class,dept_Stud.name as dept_name_stud from student join class on student.ref_class_id=class.id left join dept dept_Class on dept_Class.id=class.ref_dept_id left join dept dept_Stud on dept_Stud.id=student.ref_dept_id where student.status in (1,2) and class.grade_year in (1,2,3,7,8,9) ORDER BY class.grade_year,class.class_name,student.seat_no"); IsStudentList = new List <StudRecord>(); IsStudentDic = new Dictionary <string, StudRecord>(); foreach (DataRow row in studentDT.Rows) { StudRecord stud = new StudRecord(row); //依據社團參與記錄進行資料篩選 if (!StudentScjoinDic.ContainsKey(stud.id)) { IsStudentList.Add(stud); } //所有學生,都加入清單 if (!IsStudentDic.ContainsKey(stud.id)) { IsStudentDic.Add(stud.id, stud); } } }