Skip to content

Commit fd20b98

Browse files
author
a.hosseini
committed
.
1 parent f69611a commit fd20b98

File tree

9 files changed

+259
-41
lines changed

9 files changed

+259
-41
lines changed

Course Scheduler/Controllers/SchedulerController.cs

Lines changed: 78 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using ClosedXML.Excel;
22
using Course_Scheduler.Data;
33
using Course_Scheduler.Models;
4+
using Course_Scheduler.Models.Enum;
45
using Course_Scheduler.Services;
56
using Microsoft.AspNetCore.Mvc;
67
using Microsoft.EntityFrameworkCore;
@@ -46,21 +47,95 @@ public async Task<IActionResult> GeneticAlgorithm(int semesterId,int Count = 100
4647
.Where(fc => fc.SemesterId == semesterId)
4748
.ToList();
4849
var coursePrerequisites = _context.CoursePrerequisites.ToList();
49-
50+
var corequisiteCourse = _context.CorequisitesCourses.ToList();
5051
var schedules = new List<Schedule>();
5152

5253
GeneticAlgorithm ga = new GeneticAlgorithm(courses, courseToTeachers, coursePenaltys,
53-
teachers, fixedCourses, coursePrerequisites);
54+
teachers, fixedCourses, coursePrerequisites,
55+
corequisiteCourse);
5456

5557
schedules.AddRange(await ga.CreateSchedules(Count,UnhealtyCount));
5658

5759
schedules = schedules.OrderBy(s => s.Penalty.TotalPenalty).ToList();
5860

5961

60-
6162

6263

6364

65+
//using (var workbook = new XLWorkbook())
66+
//{
67+
// // Add a worksheet to the workbook
68+
// var worksheet = workbook.Worksheets.Add("My Worksheet2");
69+
70+
// // Set headers
71+
72+
73+
// // Populate data
74+
// var cell = 0;
75+
// int row = 0;
76+
// int id = 0;
77+
// foreach (var schedule in schedules)
78+
// {
79+
// worksheet.Cell(row, cell + 1).Value = "T1";
80+
// worksheet.Cell(row, cell + 2).Value = "T2";
81+
// worksheet.Cell(row, cell + 3).Value = "T3";
82+
// worksheet.Cell(row, cell + 4).Value = "T4";
83+
// worksheet.Cell(row, cell + 5).Value = "T5";
84+
85+
// worksheet.Cell(row+1, cell).Value = "sa";
86+
// worksheet.Cell(row+2, cell).Value = "su";
87+
// worksheet.Cell(row+3, cell).Value = "m";
88+
// worksheet.Cell(row+4, cell).Value = "t";
89+
// worksheet.Cell(row+5, cell).Value = "w";
90+
91+
// foreach (var CTT in schedule.CourseTeacherClassTimes)
92+
// {
93+
// foreach (var time in CTT.ClassTimes)
94+
// {
95+
// switch (time.ClassTime.ToString().Substring(0, time.ClassTime.ToString().IndexOf('T')))
96+
// {
97+
// case "Saturday":
98+
// // کد مربوط به روز شنبه
99+
// switch (time.ClassTime.ToString().Substring(time.ClassTime.ToString().IndexOf('T')), time.ClassTime.ToString().Length)
100+
// {
101+
// //case "":
102+
// // break;
103+
// }
104+
105+
// //worksheet.Cell(row+1,);
106+
// break;
107+
// case "Sunday":
108+
// // کد مربوط به روز یکشنبه
109+
// break;
110+
// case "Monday":
111+
// // کد مربوط به روز دوشنبه
112+
// break;
113+
// case "Tuesday":
114+
// // کد مربوط به روز سه شنبه
115+
// break;
116+
// case "Wednesday":
117+
// // کد مربوط به روز چهارشنبه
118+
// break;
119+
// case "Thursday":
120+
// // کد مربوط به روز پنجشنبه
121+
// break;
122+
// case "Friday":
123+
// // کد مربوط به روز جمعه
124+
// break;
125+
// default:
126+
// // کد مربوط به زمانی که روز مشخص نیست
127+
// break;
128+
// }
129+
// }
130+
// }
131+
// row++;
132+
// }
133+
134+
// // Save the workbook
135+
// workbook.SaveAs("TimeTable.xlsx");
136+
//}
137+
138+
64139
// Create a new Excel workbook
65140
using (var workbook = new XLWorkbook())
66141
{

Course Scheduler/Models/CorequisiteCourse.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,16 @@ public class CorequisiteCourse : Base
66
public int CorequisiteCourseId { get; set; }
77
public Course Course { get; set; }
88

9+
10+
11+
public CorequisiteCourse DeepCopy()
12+
{
13+
return new CorequisiteCourse
14+
{
15+
CourseId = this.CourseId,
16+
CorequisiteCourseId = this.CorequisiteCourseId,
17+
Course = this.Course.DeepCopy()
18+
};
19+
}
920
}
1021
}

Course Scheduler/Models/Course.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,25 @@ public Course()
2121
public List<Group> Groups { get; set; }
2222
public List<CorequisiteCourse> CorequisiteCourses { get; set; }
2323
public List<CoursePrerequisites> Prerequisites { get; set; }
24+
25+
26+
27+
28+
29+
public Course DeepCopy()
30+
{
31+
var newCourse = new Course
32+
{
33+
Name = this.Name,
34+
Credits = this.Credits,
35+
CountOfClass = this.CountOfClass,
36+
CourseCode = this.CourseCode,
37+
Groups = this.Groups.Select(g => g.DeepCopy()).ToList(),
38+
CorequisiteCourses = this.CorequisiteCourses.Select(cc => cc.DeepCopy()).ToList(),
39+
Prerequisites = this.Prerequisites.Select(cp => cp.DeepCopy()).ToList()
40+
};
41+
42+
return newCourse;
43+
}
2444
}
2545
}

Course Scheduler/Models/CoursePrerequisites.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,18 @@ public class CoursePrerequisites : Base
77
public int CourseId { get; set; }
88
public int PrerequisiteCourseId { get; set; }
99
public Course Course { get; set; }
10+
11+
12+
13+
14+
public CoursePrerequisites DeepCopy()
15+
{
16+
return new CoursePrerequisites
17+
{
18+
CourseId = this.CourseId,
19+
PrerequisiteCourseId = this.PrerequisiteCourseId,
20+
Course = this.Course.DeepCopy()
21+
};
22+
}
1023
}
1124
}

Course Scheduler/Models/Group.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,16 @@ public Group()
88
}
99
public string Name { get; set; }
1010
public List<Course> Courses { get; set; }
11+
12+
13+
14+
public Group DeepCopy()
15+
{
16+
return new Group
17+
{
18+
Name = this.Name,
19+
Courses = this.Courses.Select(c => c.DeepCopy()).ToList()
20+
};
21+
}
1122
}
1223
}

Course Scheduler/Models/Schedule.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,40 @@ public Schedule()
1111
}
1212
public List<CourseTeacherClassTime> CourseTeacherClassTimes { get; set; }
1313
public Penalty Penalty { get; set; }
14+
15+
16+
17+
18+
public Schedule DeepCopy()
19+
{
20+
var newSchedule = new Schedule
21+
{
22+
Penalty = new Penalty
23+
{
24+
TotalPenalty = this.Penalty?.TotalPenalty ?? 0,
25+
PenaltyOfOverlay = this.Penalty?.PenaltyOfOverlay ?? 0,
26+
PenaltyOfTeacher = this.Penalty?.PenaltyOfTeacher ?? 0,
27+
PenaltyOfMaximumCountOfClassInSection = this.Penalty?.PenaltyOfMaximumCountOfClassInSection ?? 0
28+
}
29+
};
30+
31+
foreach (var ctt in this.CourseTeacherClassTimes)
32+
{
33+
newSchedule.CourseTeacherClassTimes.Add(new CourseTeacherClassTime
34+
{
35+
Course = ctt.Course.DeepCopy(),
36+
Teacher = ctt.Teacher.DeepCopy(),
37+
SemesterId = ctt.SemesterId,
38+
ClassTimes = ctt.ClassTimes.Select(ct => new EvenOddClassTime
39+
{
40+
ClassTime = ct.ClassTime,
41+
EvenOdd = ct.EvenOdd,
42+
CourseTeacherClassTimeId = ct.CourseTeacherClassTimeId
43+
}).ToList()
44+
});
45+
}
46+
47+
return newSchedule;
48+
}
1449
}
1550
}

Course Scheduler/Models/Teacher.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,19 @@ public Teacher()
1414
public List<TeacherClassTimeWithPenalties> PreferredTimes{ get; set; }
1515
public int MaximumDayCount { get; set; }
1616
public int PenaltyForEmptyTime { get; set; } = 1;
17+
18+
public Teacher DeepCopy()
19+
{
20+
return new Teacher
21+
{
22+
Name = this.Name,
23+
TeacherCode = this.TeacherCode,
24+
MaximumDayCount = this.MaximumDayCount,
25+
PenaltyForEmptyTime = this.PenaltyForEmptyTime,
26+
PreferredTimes = this.PreferredTimes.Select(pt => pt.DeepCopy()).ToList()
27+
};
28+
}
29+
1730
}
1831
public class TeacherClassTimeWithPenalties : Base
1932
{
@@ -22,4 +35,18 @@ public class TeacherClassTimeWithPenalties : Base
2235
public EvenOdd? EvenOdd { get; set; }
2336
public int TeacherId { get; set; }
2437
public Teacher Teacher { get; set; }
38+
39+
40+
public TeacherClassTimeWithPenalties DeepCopy()
41+
{
42+
return new TeacherClassTimeWithPenalties
43+
{
44+
PreferredTime = this.PreferredTime,
45+
Penalty = this.Penalty,
46+
EvenOdd = this.EvenOdd,
47+
TeacherId = this.TeacherId,
48+
Teacher = this.Teacher?.DeepCopy()
49+
};
50+
}
51+
2552
}

0 commit comments

Comments
 (0)