private void CapNhatTKB(int row, int column, GiangDay monhoc, List <MONHOC> listMon) { for (int k = 0; k < listMon.Count; k++) { for (int i = 0; i < _QuanTheBanDau[row].Count(); i++) { if (_QuanTheBanDau[row][i] != null && _QuanTheBanDau[row][i].giaoVien.MaMonHoc.Equals(listMon[k].MAMONHOC)) { if (KiemTraMonHocCoBiTrung(monhoc, _QuanTheBanDau, i) == 0 && KiemTraMonHocCoBiTrung(_QuanTheBanDau[row][i], _QuanTheBanDau, column) == 0) { GiangDay temp = monhoc; _QuanTheBanDau[row][column] = _QuanTheBanDau[row][i]; _QuanTheBanDau[row][i] = temp; return; } } else if (_QuanTheBanDau[row][i] == null && KiemTraMonHocCoBiTrung(monhoc, _QuanTheBanDau, i) == 0) { _QuanTheBanDau[row][i] = monhoc; _QuanTheBanDau[row][column] = null; return; } } } }
private GiangDay[][] _QuanTheBanDau; // thời khóa biểu public GiaiThuatLapThoiKhoaBieu(List <GIAOVIEN> ListGiaoVien, List <MONHOC> ListMonHoc, List <LOP> ListLop, List <GIANGDAY> ListGiangDay) { this._ListGiaoVien = ListGiaoVien; this._ListLop = ListLop; this._ListMonHoc = ListMonHoc; _listPhanCongGiangDay = new List <GiangDay>(); for (int i = 0; i < ListGiangDay.Count; i++) { for (int j = 0; j < ListGiaoVien.Count; j++) { if (ListGiaoVien[j].MaGiaoVien.Equals(ListGiangDay[i].MaGiaoVien)) { GiangDay temp = new GiangDay(ListGiangDay[i], ListGiaoVien[j], ""); _listPhanCongGiangDay.Add(temp); break; } } } // khoi tao ctr hoc cho khoi _ListChuongTrinhHoc = new List <ChuongTrinhHoc>(); _ListChuongTrinhHoc.Add(TinhSoTietHocTrongTuan(KHOI.KHOI_10, _ListMonHoc)); _ListChuongTrinhHoc.Add(TinhSoTietHocTrongTuan(KHOI.KHOI_11, _ListMonHoc)); _ListChuongTrinhHoc.Add(TinhSoTietHocTrongTuan(KHOI.KHOI_12, _ListMonHoc)); }
private GiangDay[] CreateTKB_Lop(LOP lop) { GiangDay[] TKB_Khoi = new GiangDay[_SOTIETHOCTRONGTUAN]; // khởi tạo số tiết tối đa trong tuần là 70 tiết List <int> SoTietHocTrongTuan = new List <int>(); for (int i = 0; i < _SOTIETHOCTRONGTUAN; i++) { SoTietHocTrongTuan.Add(i); } Random rand = new Random(); int index = 0; for (int i = 0; i < _ListChuongTrinhHoc.Count; i++) { if (_ListChuongTrinhHoc[i].maKhoi.Equals(lop.MAKHOI)) // lấy chương trình học đúng với lớp { List <GiangDay> ListSoTietMonHocTrongTuan = layDanhSachGiaoVienDayLop(_ListChuongTrinhHoc[i], lop); // copy tạo list mới for (int j = 0; j < ListSoTietMonHocTrongTuan.Count; j++) { if (SoTietHocTrongTuan.Count > 0) { index = rand.Next(0, SoTietHocTrongTuan.Count); TKB_Khoi[SoTietHocTrongTuan[index]] = ListSoTietMonHocTrongTuan[j]; SoTietHocTrongTuan.RemoveAt(index); } } break; } } return(TKB_Khoi); }
/// <summary> /// Lập thời khóa biểu cho toàn trường /// </summary> /// <returns></returns> private GiangDay[][] CreateTKB_ToanTruong() { // Cấp phát vùng nhớ GiangDay[][] TKB_ToanTruong = new GiangDay[_ListLop.Count][]; for (int i = 0; i < TKB_ToanTruong.Count(); i++) { TKB_ToanTruong[i] = CreateTKB_Lop(_ListLop[i]); Thread.Sleep(1000); } return(TKB_ToanTruong); }
private int KiemTraMonHocCoBiTrung(GiangDay MonHoc, GiangDay[][] TKB, int column) { int rows = TKB.Count(); int count = 0; for (int i = 0; i < rows; i++) { if (TKB[i][column] != null && MonHoc.giangDay.MaGiaoVien == TKB[i][column].giangDay.MaGiaoVien) { count++; } } return(count); }
/// <summary> /// lấy danh sách giáo viên dạy một lớp và cập nhất khối đang dạy cho giáo viên /// </summary> private List <GiangDay> layDanhSachGiaoVienDayLop(ChuongTrinhHoc chuongTrinhHocLop, LOP lop) { List <GiangDay> listDanhSachGiaoVien = new List <GiangDay>(); for (int i = 0; i < chuongTrinhHocLop.chuongTrinhHoc.Count; i++) { for (int j = 0; j < _listPhanCongGiangDay.Count; j++) { // tìm giáo viên được phân công dạy một môn tại một lớp if (_listPhanCongGiangDay[j].giaoVien.MaMonHoc.Equals(chuongTrinhHocLop.chuongTrinhHoc[i].MAMONHOC) && _listPhanCongGiangDay[j].giangDay.MaLop.Equals(lop.MALOP)) { GiangDay temp = new GiangDay(_listPhanCongGiangDay[j]); temp.maKhoi = lop.MAKHOI; listDanhSachGiaoVien.Add(temp); break; } } } return(listDanhSachGiaoVien); }
public GiangDay(GiangDay temp) { giaoVien = temp.giaoVien; this.giangDay = temp.giangDay; maKhoi = temp.maKhoi; }