示例#1
0
 public void pocetak(List <Sestra> sestre, GlobalniRaspored globalniRaspored)
 {
     for (int i = 0; i < sestre.Count; i++)
     {
         sestre[i].prazniRaspored();
     }
     globalniRaspored.prazniRaspored();
     radiLiNekaSestDana = 0;
 }
示例#2
0
 public void obeleziSve(List <Sestra> sestre, GlobalniRaspored globalniRaspored)
 {
     for (int i = 0; i < sestre.Count; i++)
     {
         for (int j = 0; j < 7; j++)
         {
             if (sestre[i].raspored[3, j] == 1)
             {
                 if (globalniRaspored.gl[3, j] == null)
                 {
                     globalniRaspored.gl[3, j] = sestre[i];
                 }
             }
         }
     }
 }
示例#3
0
        public bool krajnjaProvera(List <Sestra> sestre, GlobalniRaspored globalniRaspored)
        {
            if (!globalniRaspored.proveraRasporeda())
            {
                return(false);
            }

            for (int i = 0; i < sestre.Count; i++)
            {
                if (SumaSaOffDayovima(sestre[i].raspored) != 7)
                {
                    return(false);
                }
            }
            obeleziSve(sestre, globalniRaspored);
            return(true);
        }
        static void Main(string[] args)
        {
            Sestra nurse1 = new Sestra("Jelena", "Vasic");
            Sestra nurse2 = new Sestra("Marija", "Majkic");
            Sestra nurse3 = new Sestra("Dragana", "Tomcic");
            Sestra nurse4 = new Sestra("Snezana", "Subasic");

            GlobalniRaspored globalniRaspored = new GlobalniRaspored();


            List <Sestra> sestre = new List <Sestra>();

            sestre.Add(nurse1);
            sestre.Add(nurse2);
            sestre.Add(nurse3);
            sestre.Add(nurse4);
            Functions fun = new Functions();

            do
            {
                fun.pocetak(sestre, globalniRaspored);
                for (int k = 0; k < 2; k++)
                {
                    for (int i = 0; i < 7; i++)
                    {     //prva petlja je za dane {PON,UT...}
                        for (int j = 0; j < 3; j++)
                        { //druga je za smene {PREPO,POP,UVE,OFF}
                            if (k == 0)
                            {
                                fun.shuffleSestre(sestre);

                                if (globalniRaspored.gl[j, i] == null)
                                {
                                    fun.DodajPrvuSlobodnuSestru(sestre, globalniRaspored, j, i);
                                }
                            }
                            else if (k > 0)
                            {
                                if (globalniRaspored.gl[j, i] == null)
                                {
                                    fun.TraziSlobodnu(sestre, globalniRaspored, j, i);
                                }
                            }
                        }
                    }
                }

                for (int i = 0; i < sestre.Count; i++)
                {
                    //proveri raspored svake sestre pojedinacno
                    fun.proveriRasporedSestre(sestre[i].raspored);
                }
            } while (!fun.krajnjaProvera(sestre, globalniRaspored));



            for (int i = 0; i < sestre.Count; i++)
            {
                Console.WriteLine();
                sestre[i].printaj();
            }

            Console.WriteLine("************************Globalni raspored***********************");
            globalniRaspored.printaj();
            Console.ReadKey();
        }
示例#5
0
        } //u sustini samo dodeljulje offdayove sestrama koje vec imaju 5 ili 6 dana

        public void TraziSlobodnu(List <Sestra> sestre, GlobalniRaspored globalniRaspored, int red, int kolona)
        {
            for (int i = 0; i < sestre.Count; i++)
            {
                int[,] niz = sestre[i].raspored;
                if (SumaSaOffDayovima(niz) == 7)
                {
                    continue;
                }
                else if (IzracunajSumu(niz) == 6)
                {
                    radiLiNekaSestDana = 1;
                    offdays(sestre[i].raspored);
                    continue;
                }
                else if (IzracunajSumu(niz) <= 5)
                {
                    if (IzracunajSumu(niz) == 5 && radiLiNekaSestDana != 0)
                    {
                        offdays(sestre[i].raspored);
                        continue;
                    }
                    if (niz[red, kolona] == 0)
                    {
                        if (!proveriSestruTajDan(niz, kolona))
                        {
                            if (globalniRaspored.gl[red, kolona] == null)
                            {
                                if (red == 0)
                                {
                                    int br = proveriSestruPrepodne(niz);
                                    if (br == -1)
                                    {
                                        continue;
                                    }
                                }
                                else if (red == 1)
                                {
                                    int br = proveriSestruPopodne(niz);
                                    if (br == -1)
                                    {
                                        continue;
                                    }
                                }
                                else if (red == 2)
                                {
                                    int br = proveriSestruUvece(niz);
                                    if (br == -1)
                                    {
                                        continue;
                                    }
                                }
                                sestre[i].raspored[red, kolona] = 1;

                                globalniRaspored.gl[red, kolona] = sestre[i];

                                if (IzracunajSumu(niz) == 6)
                                {
                                    radiLiNekaSestDana = 1;
                                    offdays(sestre[i].raspored);
                                    return;
                                }
                            }
                        }
                    }
                }
            }
        }
示例#6
0
        public void DodajPrvuSlobodnuSestru(List <Sestra> sestre, GlobalniRaspored globalniRaspored, int red, int kolona)
        {
            //tu treba sve uslove da dodam

            //valjalo bi kada bi napravio zastite neke za red i kolonu da ne bi dobijao greske indexOutOfRange

            for (int i = 0; i < sestre.Count; i++)
            {
                int[,] niz = sestre[i].raspored;
                //DA SESTRA RADI 5 ili 6 dana u nedelji
                #region PRVI USLOV
                int suma = IzracunajSumu(niz);

                if (suma == 6)
                {
                    radiLiNekaSestDana = 1;
                }

                if (suma == 5 || suma == 6)
                {
                    if (radiLiNekaSestDana != 0)
                    {
                        offdays(sestre[i].raspored);
                    }
                    //prvi uslov nije zadovoljen, ova sestra je radila dovoljno ove nedelje, ostale dane joj treba popuniti sa OFF dayovima
                    //napraviti funkciju koja dodaje off-dayove na ostatak
                    //  offdays(niz);//***************************************IDEJA OVO ZAKOMENTARISATI
                    continue;
                    //samo da predje odma na sledecu sestru
                }



                #endregion

                //da li sestra radi trenutnu smenu
                #region DRUGI USLOV

                if (niz[red, kolona] == 1)
                {
                    continue; // to nam govori da ova sestra radi ovu smenu
                }



                #endregion

                //provera da li je sestra radila dovoljan broj dana u odredjenoj smeni
                #region TRECI USLOV
                int rez = 0;
                if (red == 0)
                {
                    rez = proveriSestruPrepodne(niz);
                } //pozivanje funkcije prepodne
                else if (red == 1)
                {
                    rez = proveriSestruPopodne(niz);
                } //pozivanje funkcije poslepodne
                else if (red == 2)
                {
                    rez = proveriSestruUvece(niz);
                } //pozivanje funkcije uvece
                else
                {
                    rez = 43; //offday al 43 je random broj cisto da preskocimo sledece ifove iako ne bi trebalo uopste da se poziva ova funkcija
                } //else nam je offday



                if (rez == -1)
                {
                    //popunila sve dane
                    continue; //predji na sledeci
                }


                #endregion

                //****************************************************************************************


                if (proveriSestruTajDan(niz, kolona))
                {
                    continue; //sestra vec radi taj dan neku smenu, treba preci na sledecu
                }

                //***************************************************************************************

                //u slucaju da je smena poslepodne ili uvece sledeci ili prethodni dan mora biti isto poslepodne ili uvece
                #region CETVRTI USLOV
                if (red == 1 || red == 2)
                {
                    int provera1 = proveriSestruPopodne(niz);
                    int provera2 = proveriSestruUvece(niz);

                    if (red == 1)
                    {
                        if (provera1 == 0)
                        {
                            //fali jos jos smena popodne

                            //TODO DODELITI JOJ SMENU POSLEPODNE I UPISATI U GLOBALNI RASPORED
                            sestre[i].raspored[red, kolona]  = 1;
                            globalniRaspored.gl[red, kolona] = sestre[i];

                            PostaviNaPoslednjeMesto(sestre, i);

                            return;
                        }
                        else if (provera1 == 1)
                        {
                            //izmedju minimuma i maximuma
                            int danas = proveriSestruPoslepodneiUvece(niz, red, kolona);
                            if (danas == 1)
                            {
                                if (niz[red, kolona - 1] == 0)
                                {
                                    if (proveriSestruTajDan(niz, kolona - 1))
                                    {
                                        //TODO DODELITI JOJ SMENU POSLEPODNE I UPISATI U GLOBALNI RASPORED
                                        sestre[i].raspored[red, kolona - 1]  = 1;
                                        globalniRaspored.gl[red, kolona - 1] = sestre[i];

                                        PostaviNaPoslednjeMesto(sestre, i);
                                        return;
                                    }
                                }
                            }
                            else if (danas == -1)
                            {
                                if (niz[red, kolona + 1] == 0)
                                {
                                    if (proveriSestruTajDan(niz, kolona + 1))
                                    {
                                        //TODO DODELITI JOJ SMENU POSLEPODNE I UPISATI U GLOBALNI RASPORED
                                        sestre[i].raspored[red, kolona + 1]  = 1;
                                        globalniRaspored.gl[red, kolona + 1] = sestre[i];

                                        PostaviNaPoslednjeMesto(sestre, i);
                                        return;
                                    }
                                }
                            }
                        }
                        else if (provera1 == -1)
                        {
                            continue; //smene za popodne su joj popunjene cao zdravo idemo na sledecu sestru
                        }
                    }

                    else if (red == 2)
                    {
                        if (provera2 == 0)
                        {
                            //fali jos jos smena uvece

                            //TODO DODELITI JOJ SMENU uvece I UPISATI U GLOBALNI RASPORED


                            sestre[i].raspored[red, kolona]  = 1;
                            globalniRaspored.gl[red, kolona] = sestre[i];

                            PostaviNaPoslednjeMesto(sestre, i);
                            return;
                        }
                        else if (provera2 == 1)
                        {
                            int danas = proveriSestruPoslepodneiUvece(niz, red, kolona);
                            if (danas == 1)
                            {
                                if (niz[red, kolona - 1] == 0)
                                {
                                    if (proveriSestruTajDan(niz, kolona - 1))
                                    {
                                        //TODO DODELITI JOJ SMENU uvece I UPISATI U GLOBALNI RASPORED



                                        sestre[i].raspored[red, kolona - 1]  = 1;
                                        globalniRaspored.gl[red, kolona - 1] = sestre[i];

                                        PostaviNaPoslednjeMesto(sestre, i);
                                        return;
                                    }
                                }
                            }
                            else if (danas == -1)
                            {
                                if (niz[red, kolona + 1] == 0)
                                {
                                    if (proveriSestruTajDan(niz, kolona + 1))
                                    {
                                        //TODO DODELITI JOJ SMENU uvece I UPISATI U GLOBALNI RASPORED
                                        sestre[i].raspored[red, kolona + 1]  = 1;
                                        globalniRaspored.gl[red, kolona + 1] = sestre[i];

                                        PostaviNaPoslednjeMesto(sestre, i);
                                        return;
                                    }
                                }
                            }
                            else if (provera1 == -1)
                            {
                                continue; //smene za uvece su joj popunjene cao zdravo idemo na sledecu sestru
                            }
                        }
                    }
                }



                #endregion
                else
                {
                    sestre[i].raspored[red, kolona]  = 1;
                    globalniRaspored.gl[red, kolona] = sestre[i];

                    PostaviNaPoslednjeMesto(sestre, i);
                    return;
                }
            }

            return;
        }