Ejemplo n.º 1
0
        //פונקציות שיוצרות שיבוצים של כל האמהות על פי הבקשות שלהן
        //כל פונקציה תמיין את רשימת האמהות לפי פרמטר אחר
        // וכן תבצע חלק מהשיבוצים באמצעות הגרלה
        //כמובן שכל הפונקציות מתיחסות גם לשמירה על רצף קטן ככל האפשר בין אחיות

        //פונקצית שיבוץ לכל התלמידות
        public bool func_shibutz()
        {
            while (lst_studens.Count != 0)
            {
                studens s = lst_studens[0];
                lst_studens.RemoveAt(0);
                if (Shibutz_stud(s))
                {
                    return(func_shibutz());
                }
                lstscheduling.RemoveAll(ss => ss.id_student == s.id);
                lst_studens.Add(s);
            }
            return(false);
        }
Ejemplo n.º 2
0
        //פונקצית שיבוץ לתלמידה בודדת
        // אם יכול לשבץ מוסיף לאוסף השיבוץ ומחזיר אמת
        //אחרת מחזיר שקר
        bool Shibutz_stud(studens s)
        {
            //נשלוף את הבקשות של האמא
            //את השיבוצים של האחיות של התלמידה
            // את השעות הפנויות בכיתה שלה
            //וננסה לשבץ באופן שמתאים לכל הקריטריונים
            request r = s.parents.request.FirstOrDefault();

            if (r == null)
            {
                r           = new request();
                r.id_parent = s.id_parent;
                r.from_hour = s.classes.times.FirstOrDefault().from_hour;
                r.to_hour   = s.classes.times.FirstOrDefault().to_hour;
            }
            List <scheduling> lstSis   = lstscheduling.Where(ss => ss.studens.id_parent == s.id_parent).ToList();
            List <scheduling> lstClass = lstscheduling.Where(ss => ss.studens.code_class == s.code_class)
                                         .OrderBy(ss => ss.hour_).ToList();

            //לולאה שעוברת על כל השעות שבטווח הבקשה של האמא
            //ומנסה לשבץ
            //אם הצליחה מחזירה אמת
            for (TimeSpan h = r.from_hour; h < r.to_hour; h.Add(new TimeSpan(0, 15, 0)))
            {
                if (lstSis == null || lstSis.Where(ss => ss.hour_.Equals(h)).FirstOrDefault() == null)
                {
                    if (lstClass.Where(ss => ss.hour_.Equals(h)).ToList().Count < 2)
                    {    //שיבוץ בפועל
                        //והחזרת אמת
                        scheduling x = new scheduling();
                        x.code_class = s.code_class;
                        x.hour_      = h;
                        x.id_student = s.id;
                        lstscheduling.Add(x);
                        return(true);
                    }
                }
            }
            //אם לא הצליחה
            //לולאה שעוברת על כל הטווח של הכיתה
            //ומנסה לשבץ
            //!!!!!!!!!!!!!!!!!!!!!!!!!!חובה לשנות שישלוף את הזמנים של הכיתה
            times tt = new times();//global.PARENTS.times.Where(t => t.code_class == s.code_class);

            for (TimeSpan h = tt.from_hour; h < tt.to_hour; h.Add(new TimeSpan(0, 15, 0)))
            {
                if (lstClass.Where(ss => ss.hour_.Equals(h)).ToList().Count < 2)
                {
                    if (lstSis == null || lstSis.Where(ss => ss.hour_.Equals(h)).FirstOrDefault() == null)
                    {
                        {    //שיבוץ בפועל
                             //והחזרת אמת
                            scheduling x = new scheduling();
                            x.code_class = s.code_class;
                            x.hour_      = h;
                            x.id_student = s.id;
                            lstscheduling.Add(x);
                            return(true);
                        }
                    }
                }
            }
            //אם לא הצליחה יחזיר שקר
            return(false);
        }
Ejemplo n.º 3
0
        //פונקצית שיבוץ לתלמידה בודדת
        // אם יכול לשבץ מוסיף לאוסף השיבוץ ומחזיר אמת
        //אחרת מחזיר שקר
        public bool Shibutz_stud(studens s)
        {
            //נשלוף את הבקשות של האמא
            //את השיבוצים של האחיות של התלמידה
            // את השעות הפנויות בכיתה שלה
            //וננסה לשבץ באופן שמתאים לכל הקריטריונים

            //בקשות
            parents p = new parents();

            p = allParents
                .Where(t => t.id == s.id_parent).FirstOrDefault();
            request r = allRquest
                        .Where(rr => rr.id_parent == p.id).FirstOrDefault();

            if (r == null)
            {
                r           = new request();
                r.id_parent = s.id_parent;
                r.from_hour = allTimes.Where(t => t.code_class == s.code_class).FirstOrDefault().from_hour;
                r.to_hour   = allTimes.Where(t => t.code_class == s.code_class).FirstOrDefault().to_hour;
            }
            //שיבוצים של   אחיות
            List <studens> lst_sis = allStudents
                                     .Where(a => a.id_parent == s.id_parent).ToList();

            List <scheduling> lstSis = new List <scheduling>();

            foreach (studens item in lst_sis)
            {
                scheduling scd = lstscheduling
                                 .Where(u => u.id_student == item.id)
                                 .FirstOrDefault();
                if (scd != null)
                {
                    lstSis.Add(scd);
                }
            }
            //שעות פנויות בכיתה ממוין לפי שעה
            List <studens> all_class = allStudents
                                       .Where(cc => cc.code_class == s.code_class).ToList();
            List <scheduling> lstClassNotEmpty = new List <scheduling>();

            foreach (var item in all_class)
            {
                scheduling scd = lstscheduling
                                 .Where(cc => cc.id_student == item.id).FirstOrDefault();
                if (scd != null)
                {
                    lstClassNotEmpty.Add(scd);
                }
            }
            lstClassNotEmpty = lstClassNotEmpty.OrderBy(ss => ss.hour_).ToList();
            TimeSpan t1 = allTimes
                          .Where(o => o.code_class == s.code_class)
                          .FirstOrDefault().from_hour;
            TimeSpan t2 = allTimes
                          .Where(o => o.code_class == s.code_class)
                          .FirstOrDefault().to_hour;
            List <TimeSpan> lstClass = new List <TimeSpan>();

            for (TimeSpan h = t1; h < t2; h += (new TimeSpan(0, 15, 0)))
            {
                if (lstClassNotEmpty.Where(ss => ss.hour_.Equals(h)).ToList().Count() == 1)
                {
                    lstClass.Add(h);
                }
                else
                if (lstClassNotEmpty.Where(ss => ss.hour_.Equals(h)).ToList().Count() == 0)
                {
                    lstClass.Add(h);
                    lstClass.Add(h);
                }
            }
            //לולאה שעוברת על כל השעות שבטווח הבקשה של האמא
            //ומנסה לשבץ
            //אם הצליחה מחזירה אמת
            for (TimeSpan h = r.from_hour; h < r.to_hour; h += (new TimeSpan(0, 15, 0)))
            {
                if (lstSis == null || lstSis.Where(ss => ss.hour_.Equals(h)).FirstOrDefault() == null)
                {
                    TimeSpan f = lstClass.Where(ss => ss == h).FirstOrDefault();
                    if (lstClass.Where(ss => ss == h).FirstOrDefault() != (new TimeSpan(00, 00, 00)) && h >= t1 && h < t2)
                    {    //שיבוץ בפועל
                        //והחזרת אמת
                        scheduling x = new scheduling();
                        x.code_class = s.code_class;
                        x.hour_      = h;
                        x.id_student = s.id;
                        lstscheduling.Add(x);
                        return(true);
                    }
                }
            }
            //אם לא הצליחה
            //לולאה שעוברת על כל הטווח של הכיתה
            //ומנסה לשבץ


            foreach (TimeSpan h in lstClass)
            {
                if (lstSis == null || lstSis.Where(ss => ss.hour_.Equals(h)).FirstOrDefault() == null)
                {
                    {    //שיבוץ בפועל
                         //והחזרת אמת
                        scheduling x = new scheduling();
                        x.code_class = s.code_class;
                        x.hour_      = h;
                        x.id_student = s.id;
                        lstscheduling.Add(x);;
                        return(true);
                    }
                }
            }

            //אם לא הצליחה יחזיר שקר
            return(false);
        }