private ThoiKhoaBieu BuildTKB(string namHoc, int buoi, List<MonHoc> dsMonHoc, List<Lop> dsLop, ref List<Phong> dsPhong, List<GiaoVien> dsGiaoVien, List<ThoiKhoaBieu> lstTKB, int l, List<List<ChiTietTKB>> arrTKB, Phong phong) { ThoiKhoaBieu tkb = new ThoiKhoaBieu(); tkb.Lop = dsLop[l]; tkb.NamHoc = namHoc; int tietDau = buoi == 1 ? 0 : Int32.Parse(ConfigurationManager.AppSettings["TongSoTietSang"]); int tietCuoi = buoi == 1 ? (tietDau + Int32.Parse(ConfigurationManager.AppSettings["TongSoTietSang"])) : (tietDau + Int32.Parse(ConfigurationManager.AppSettings["TongSoTietChieu"])); for (int k = 0; k < dsMonHoc.Count; k++) { MonHoc mh = dsMonHoc[k]; GiaoVien giaoVien = null; List<GiaoVien> dsGV_MH = GetDSGiaoVienTheoMonHoc(mh.MaMonHoc, dsGiaoVien); for (int i = 0; i < 7; i++) // 7days: from Monday to Sunday { for (int j = tietDau; j < tietCuoi; j++) { if (arrTKB[i][j].MonHoc == null) // Còn trống { if (KiemTraMonHoc(arrTKB, mh, i, j)) { ChiTietTKB ctTKB = new ChiTietTKB(); // Xếp giáo viên vào môn học ở ngày i tiết j if ((giaoVien != null && KiemTraGiaoVien(lstTKB, arrTKB, giaoVien, mh.MaMonHoc, i, j)) || GetGiaoVien(lstTKB, arrTKB, dsGV_MH, mh.MaMonHoc, i, j, out giaoVien)) { ctTKB.ThoiKhoaBieu = tkb; ctTKB.MonHoc = mh; ctTKB.GiaoVien = giaoVien; ctTKB.Phong = phong; ctTKB.TietBatDau = j; ctTKB.TietKetThuc = j; ctTKB.Thu = i; tkb.ChiTietTKBs.Add(ctTKB); arrTKB[i][j].MonHoc = mh; arrTKB[i][j].GiaoVien = giaoVien; arrTKB[i][j].Phong = phong; arrTKB[i][j].TietBatDau = j; arrTKB[i][j].TietKetThuc = j; arrTKB[i][j].Thu = i; } } } } } } return tkb; }
public string CheckSaveTKB(int maTKB, int thu, int tiet, int maMH, int maGV, int maPhong) { try { using (var db = new TKBEntities()) { ChiTietTKB chiTiet = new ChiTietTKB() { ThoiKhoaBieu = db.ThoiKhoaBieux.FirstOrDefault(p => p.MaTKB == maTKB), Thu = thu, TietBatDau = tiet, TietKetThuc = tiet, MonHoc = db.MonHocs.FirstOrDefault(p => p.MaMonHoc == maMH), GiaoVien = db.GiaoViens.FirstOrDefault(p => p.MaGiaoVien == maGV), Phong = db.Phongs.FirstOrDefault(p => p.MaPhong == maPhong) }; if (chiTiet != null) { ThoiKhoaBieu tkb = db.ThoiKhoaBieux.FirstOrDefault(p => p.MaTKB == maTKB); List<ThoiKhoaBieu> lstTKB = GetTKB(tkb.NamHoc); List<ChiTietTKB> lstChiTiet = GetDanhSachChiTietTKB(tkb.MaTKB); List<List<ChiTietTKB>> arrTKB = new List<List<ChiTietTKB>>(); for (int i = 2; i <= 8; i++) // 7days: from Monday to Sunday { List<ChiTietTKB> dsTKB = new List<ChiTietTKB>(); for (int j = 1; j <= Int32.Parse(ConfigurationManager.AppSettings["TongSoTietSang"]) + Int32.Parse(ConfigurationManager.AppSettings["TongSoTietChieu"]); j++) { ChiTietTKB ct = new ChiTietTKB(); dsTKB.Add(ct); } arrTKB.Add(dsTKB); } foreach (ChiTietTKB ct in lstChiTiet) { int maMonHoc = (int)ct.MonHocReference.EntityKey.EntityKeyValues[0].Value; int maGiaoVien = (int)ct.GiaoVienReference.EntityKey.EntityKeyValues[0].Value; arrTKB[(int)ct.Thu - 2][(int)ct.TietBatDau - 1].MonHoc = db.MonHocs.FirstOrDefault(p => p.MaMonHoc == maMonHoc); arrTKB[(int)ct.Thu - 2][(int)ct.TietBatDau - 1].GiaoVien = db.GiaoViens.FirstOrDefault(p => p.MaGiaoVien == maGiaoVien); } MonHoc mh = db.MonHocs.FirstOrDefault(o => o.MaMonHoc == maMH); if (KiemTraMonHoc(arrTKB, mh, (int)chiTiet.Thu, (int)chiTiet.TietBatDau)) { GiaoVien gv = db.GiaoViens.FirstOrDefault(p => p.MaGiaoVien == maGV); if (KiemTraGiaoVien(lstTKB, arrTKB, gv, mh.MaMonHoc, (int)chiTiet.Thu, (int)chiTiet.TietBatDau)) { // Kiểm tra phòng (từ từ làm, đuối òi) return "true"; } else return "Giáo viên này bận rồi."; } else return "Môn học này không xếp vào đây được"; } else return "Có lỗi xảy ra ở hệ thống"; } } catch (Exception ex) { return ex.ToString(); } }
private void AddChiTietTKB(ref ChiTietTKB ct, ChiTietTKB chiTietTKB) { ct.MaChiTietTKB = chiTietTKB.MaChiTietTKB; ct.MonHoc = chiTietTKB.MonHoc; ct.GiaoVien = chiTietTKB.GiaoVien; ct.Phong = chiTietTKB.Phong; ct.ThoiKhoaBieu = chiTietTKB.ThoiKhoaBieu; ct.TietBatDau = chiTietTKB.TietBatDau; ct.TietKetThuc = chiTietTKB.TietKetThuc; ct.Thu = chiTietTKB.Thu; }
public bool TestCreateTKB() { List<List<ChiTietTKB>> arrTKB = new List<List<ChiTietTKB>>(); for (int i = 2; i <= 8; i++) // 7days: from Monday to Sunday { List<ChiTietTKB> dsTKB = new List<ChiTietTKB>(); for (int j = 1; j <= Int32.Parse(ConfigurationManager.AppSettings["TongSoTietSang"]) + Int32.Parse(ConfigurationManager.AppSettings["TongSoTietChieu"]); j++) { ChiTietTKB ct = new ChiTietTKB(); ct.Thu = i; ct.TietBatDau = j; ct.TietKetThuc = j; dsTKB.Add(ct); } arrTKB.Add(dsTKB); } using (var db = new TKBEntities()) { //List<Lop> dsLop = db.Lops.ToList(); List<Lop> dsLop = new List<Lop>(); dsLop.Add(new Lop() { MaLop = 7, SiSo = 20, CaHoc = "Sáng" }); dsLop.Add(new Lop() { MaLop = 8, SiSo = 20, CaHoc = "Sáng" }); List<MonHoc> dsMonHoc = db.MonHocs.ToList(); List<Phong> dsPhong = db.Phongs.ToList(); List<GiaoVien> dsGiaoVien = db.GiaoViens.ToList(); return GenerateTKB("2012", arrTKB, dsMonHoc, dsLop, dsPhong, dsGiaoVien); } }
public bool SaveChiTietTKB(int maTKB, int thu, int tiet, int maMH, int maGV, int maPhong) { try { using (var db = new TKBEntities()) { ChiTietTKB chiTiet = new ChiTietTKB() { ThoiKhoaBieu = db.ThoiKhoaBieux.FirstOrDefault(p => p.MaTKB == maTKB), MonHoc = db.MonHocs.FirstOrDefault(p => p.MaMonHoc == maMH), GiaoVien = db.GiaoViens.FirstOrDefault(p => p.MaGiaoVien == maGV), Phong = db.Phongs.FirstOrDefault(p => p.MaPhong == maPhong), TietBatDau = tiet, TietKetThuc = tiet, Thu = thu }; db.AddToChiTietTKBs(chiTiet); db.SaveChanges(); } return true; } catch (Exception ex) { return false; } }
public bool GenerateTKB(string namHoc, List<List<ChiTietTKB>> arrTKB1, List<MonHoc> dsMonHoc, List<Lop> dsLop, List<Phong> dsPhong, List<GiaoVien> dsGiaoVien) { try { // Xóa thông tin TKB cũ sẽ sắp mới foreach (Lop l in dsLop) { DeleteTKB(l.MaLop, namHoc); } // Lấy danh sách TKB cũ List<ThoiKhoaBieu> lstTKB = GetTKB(namHoc); List<List<List<ChiTietTKB>>> listTKBs = new List<List<List<ChiTietTKB>>>(); for (int l = 0; l < dsLop.Count; l++) { List<List<ChiTietTKB>> arrTKB = new List<List<ChiTietTKB>>(); for (int i = 0; i < arrTKB1.Count; i++) { List<ChiTietTKB> temp = new List<ChiTietTKB>(); for (int j = 0; j < arrTKB1[i].Count; j++) { ChiTietTKB ct = new ChiTietTKB(); AddChiTietTKB(ref ct, arrTKB1[i][j]); temp.Add(ct); } arrTKB.Add(temp); } // Tìm phòng trống Phong phong = new Phong(); int caHoc = dsLop[l].CaHoc == null ? 1 : (dsLop[l].CaHoc.Equals("Sáng") ? 1 : 2); phong = GetPhong(ref dsPhong, (int)dsLop[l].SiSo); ThoiKhoaBieu tkb = BuildTKB(namHoc, caHoc, dsMonHoc, dsLop, ref dsPhong, dsGiaoVien, lstTKB, l, arrTKB, phong); lstTKB.Add(tkb); //Tối ưu TKB listTKBs.Add(OptimizeTKB(arrTKB)); } // Save TKB; SaveTKB(lstTKB, dsLop); } catch (Exception ex) { return false; } return true; }
private void SaveTKB(List<ThoiKhoaBieu> lstTKB, List<Lop> dsLop) { using (var db = new TKBEntities()) { foreach (ThoiKhoaBieu oTKB in lstTKB) { if (oTKB.MaTKB == 0) { ThoiKhoaBieu tkb = new ThoiKhoaBieu() { Lop = db.Lops.FirstOrDefault(p => p.MaLop == oTKB.Lop.MaLop), NamHoc = oTKB.NamHoc }; db.AddToThoiKhoaBieux(tkb); db.SaveChanges(); foreach (ChiTietTKB ct in oTKB.ChiTietTKBs.ToList()) { ChiTietTKB chiTiet = new ChiTietTKB() { ThoiKhoaBieu = tkb, MonHoc = db.MonHocs.FirstOrDefault(p => p.MaMonHoc == ct.MonHoc.MaMonHoc), GiaoVien = db.GiaoViens.FirstOrDefault(p => p.MaGiaoVien == ct.GiaoVien.MaGiaoVien), Phong = db.Phongs.FirstOrDefault(p => p.MaPhong == ct.Phong.MaPhong), TietBatDau = ct.TietBatDau + 1, TietKetThuc = ct.TietKetThuc + 1, Thu = ct.Thu + 2 }; db.AddToChiTietTKBs(chiTiet); db.SaveChanges(); } } } } }