Ejemplo n.º 1
0
        private int[] Deger(OgrenciAnketModel anketDegeri)//Bu fonksiyon AnketModelin içinden sadece profil bilgilerini çekmemizi sağlar.
        {
            int[] parseDeger = new int[16];
            parseDeger[0]  = 0;
            parseDeger[1]  = anketDegeri.P1;
            parseDeger[2]  = anketDegeri.P2;
            parseDeger[3]  = anketDegeri.P3;
            parseDeger[4]  = anketDegeri.P4;
            parseDeger[5]  = anketDegeri.P5;
            parseDeger[6]  = anketDegeri.P6;
            parseDeger[7]  = anketDegeri.P7;
            parseDeger[8]  = anketDegeri.P8;
            parseDeger[9]  = anketDegeri.P9;
            parseDeger[10] = anketDegeri.P10;
            parseDeger[11] = anketDegeri.P11;
            parseDeger[12] = anketDegeri.P12;
            parseDeger[13] = anketDegeri.P13;
            parseDeger[14] = anketDegeri.P14;
            parseDeger[15] = anketDegeri.P15;

            return(parseDeger);
        }
Ejemplo n.º 2
0
        private void button2_Click(object sender, EventArgs e)//Bu button asıl işlemlerin gerçekleştiği buttondur.Arkadaş öneri buttonu
        {
            //Gerekli olan bütün sınıfların nesneleri üretiliyor
            OgrenciListesiOku      OgrenciListOku = new OgrenciListesiOku();
            OgrenciNetworkDatabase OgrenciNetwork = new OgrenciNetworkDatabase();
            OgrenciProfilDatabase  OgrenciProfil  = new OgrenciProfilDatabase();
            ArkadaslarıBulma       arkadaslar     = new ArkadaslarıBulma();
            var ArananNumara = textBox1.Text;                                                                                //Textboxdaki numara değeri alınıyor.

            List <OgrenciNetworkDBModel> NetworkList = new List <OgrenciNetworkDBModel>(OgrenciNetwork.GetNetworkStudent()); //Network tablosundaki bütün veriler Network model tipinde bir listeye alınıyor
            List <OgrenciProfilDBModel>  ProfilList  = new List <OgrenciProfilDBModel>(OgrenciProfil.GetProfileStudent());   //Profil tablosundaki bütün veriler Profil model tipinde bir listeye alınıyor


            if (ArananNumara.Length != 10)//eğer numara 10 haneden küçükse hata gösteriliyor.
            {
                MessageBox.Show("10 haneli numara giriniz");
            }

            else
            {
                var Arkadaslar = arkadaslar.FindFriend(ArananNumara); //eğer girilen numara hatasız ise oluşturduğumuş arkadaslar nesnesi yani veritabanında girilen numaraya göre arama yapan sınıfın nesnesi
                                                                      //ve sınıfın içindeki arama fonksiyonu çağırılıyor textboxdaki arananNumara değeri parametre olarak gönderildi ve o numaraya göre arama yapıldı.
                                                                      //Aranan numaranın arkadaşları da bulundu ve Arkadaslar adlı değişkene alındı.
                if (string.IsNullOrEmpty(Arkadaslar[0]))              //Eğer ilk değer yani numaranın kendisi boş geliyorsa böyle bir numara yok demektir bunun kontrolü sağlanıyor.
                {
                    MessageBox.Show("Bu numarada öğrenci bulunmamaktadır");
                }

                else
                {
                    List <OgrenciAnketModel> AnketList = new List <OgrenciAnketModel>(); //Girilen numaranın arkadaş bilgilerinin alınacağı liste
                    foreach (var item in ProfilList)                                     //Tüm profil bilgilerinin içerisinde sadece girilen numaranın arkadaşlarının profli bilgilerinin alınacağı döngü
                    {
                        for (int i = 1; i < 10; i++)                                     //Girilen numaranın arkadaşlarının profil bilgilerinin alındığı döndü
                        {
                            if (!string.IsNullOrEmpty(Arkadaslar[i]))
                            {
                                if (Arkadaslar[i] == item.Numara)//Eğer arkadaslarının numarası ile profil listesindeki numaralar eşit ise
                                {
                                    OgrenciAnketModel AnketModel = new OgrenciAnketModel();
                                    AnketModel.Arkadaslik       = 1;//Arkadaslık 1 olarak belirlendi çünkü arkadaşlar.
                                    AnketModel.ArkadaslikDegeri = 0;
                                    AnketModel.Arkadaslar       = item.Numara;
                                    AnketModel.P1  = item.P1;
                                    AnketModel.P2  = item.P2;
                                    AnketModel.P3  = item.P3;
                                    AnketModel.P4  = item.P4;
                                    AnketModel.P5  = item.P5;
                                    AnketModel.P6  = item.P6;
                                    AnketModel.P7  = item.P7;
                                    AnketModel.P8  = item.P8;
                                    AnketModel.P9  = item.P9;
                                    AnketModel.P10 = item.P10;
                                    AnketModel.P11 = item.P11;
                                    AnketModel.P12 = item.P12;
                                    AnketModel.P13 = item.P13;
                                    AnketModel.P14 = item.P14;
                                    AnketModel.P15 = item.P15;
                                    AnketList.Add(AnketModel);//tüm arkadaslarının profil bilgilerini alır ve Anketlist'e atar
                                }
                            }
                        }
                    }
                    List <OgrenciProfilDBModel> Liste = new List <OgrenciProfilDBModel>(); //ardından tekrar bütün profil bilgileri alınıyor

                    Liste = OgrenciProfil.GetProfileStudent();                             //Ve listenin içine atılıyor
                    OgrenciProfilDBModel ogrenciProfil = new OgrenciProfilDBModel();
                    for (int i = 0; i < Arkadaslar.Length; i++)                            //Numarası girilen kişinin arkadaşlarını bütün profil bilgilerinden çıkarır.
                    {
                        if (!string.IsNullOrEmpty(Arkadaslar[i]))
                        {
                            ogrenciProfil = Liste.FirstOrDefault(x => x.Numara == Arkadaslar[i]);
                            Liste.Remove(ogrenciProfil);
                        }
                    }

                    for (int i = 0; i < Liste.Count / 2; i++)//kalan profil bilglerinden ilk 40 kişi regresyon için alınır.
                    {
                        OgrenciAnketModel Anket = new OgrenciAnketModel();
                        Anket.ArkadaslikDegeri = 0;
                        Anket.Arkadaslik       = 0;
                        Anket.Arkadaslar       = Liste[i].Numara;
                        Anket.P1  = Liste[i].P1;
                        Anket.P2  = Liste[i].P2;
                        Anket.P3  = Liste[i].P3;
                        Anket.P4  = Liste[i].P4;
                        Anket.P5  = Liste[i].P5;
                        Anket.P6  = Liste[i].P6;
                        Anket.P7  = Liste[i].P7;
                        Anket.P8  = Liste[i].P8;
                        Anket.P9  = Liste[i].P9;
                        Anket.P10 = Liste[i].P10;
                        Anket.P11 = Liste[i].P11;
                        Anket.P12 = Liste[i].P12;
                        Anket.P13 = Liste[i].P14;
                        Anket.P15 = Liste[i].P15;
                        AnketList.Add(Anket);
                    }

                    for (int i = 0; i < AnketList.Count; i++)//Regresyon için alınan 40 kişi de çıkarılır.
                    {
                        var AnketSil = Liste.FirstOrDefault(x => x.Numara == AnketList[i].Arkadaslar);
                        Liste.Remove(AnketSil);
                    }
                    List <OgrenciAnketModel> AranacakOgrenciListe = new List <OgrenciAnketModel>();
                    for (int i = 0; i < Liste.Count; i++)//Ardından hiç dokunulmamış 40 kişi karşılaştırma yapılmak için bir listeye alınır
                    {
                        OgrenciAnketModel Anket = new OgrenciAnketModel();
                        Anket.ArkadaslikDegeri = 0;
                        Anket.Arkadaslik       = 0;
                        Anket.Arkadaslar       = Liste[i].Numara;
                        Anket.P1  = Liste[i].P1;
                        Anket.P2  = Liste[i].P2;
                        Anket.P3  = Liste[i].P3;
                        Anket.P4  = Liste[i].P4;
                        Anket.P5  = Liste[i].P5;
                        Anket.P6  = Liste[i].P6;
                        Anket.P7  = Liste[i].P7;
                        Anket.P8  = Liste[i].P8;
                        Anket.P9  = Liste[i].P9;
                        Anket.P10 = Liste[i].P10;
                        Anket.P11 = Liste[i].P11;
                        Anket.P12 = Liste[i].P12;
                        Anket.P13 = Liste[i].P14;
                        Anket.P15 = Liste[i].P15;
                        AranacakOgrenciListe.Add(Anket);
                    }

                    int      N        = AnketList.Count; //Regresyon için alınan 40 kişi
                    int      Loop     = 100;             //iterasyon sayısı
                    double   stepSize = 0.001;
                    double[] beta     = new double[16];  //Betaların değerlerinin tutulduğu dizi

                    for (int i = 0; i < beta.Length; i++)
                    {
                        beta[i] = 1;
                    }
                    double[] newBeta = new double[16];
                    double   toplam1 = 0.0;
                    double   toplam2 = 0.0;
                    for (int k = 1; k <= Loop; k++)
                    {
                        toplam1 = 0.0;
                        for (int i = 0; i < N; i++)
                        {
                            int[]  Degerler = Deger(AnketList[i]);//regresyon için alınan 40 kişinin profil bilgileri bu dizide tutuluyor.
                            double hx       = Math.Exp(-(beta[0] + beta[1] * Degerler[1] + beta[2] * Degerler[2] + beta[3] * Degerler[3] + beta[4] * Degerler[4] + beta[5] * Degerler[5] +
                                                         beta[6] * Degerler[6] + beta[7] * Degerler[7] + beta[8] * Degerler[8] + beta[9] * Degerler[9] + beta[10] * Degerler[10] + beta[11] * Degerler[11] + beta[12] * Degerler[12] +
                                                         beta[13] * Degerler[13] + beta[14] * Degerler[14] + beta[15] * Degerler[15])); //Ardından bu değerlere göre regresyon uygulanır
                            double hb = 1.0 / (1.0 + hx);
                            double y  = AnketList[i].Arkadaslik;                                                                        //Arkadas olup olmadıkları durumu
                            toplam1 += hb - y;
                        }
                        newBeta[0] = beta[0] - (stepSize * toplam1 / N);//Beta 0'ın yeni değerlerini bu dizide tutuyoruz
                        for (int t = 0; t < 15; t++)
                        {
                            toplam2 = 0.0;
                            for (int i = 0; i < N; i++)
                            {
                                int[]  Degerler = Deger(AnketList[i]);//tekrardan regresyon için alınan ilk 40 kişinin profil değerleri alınıyor
                                double hb       = 1.0 / (1.0 + Math.Exp(-(beta[0] + beta[1] * Degerler[1] + beta[2] * Degerler[2] + beta[3] * Degerler[3] + beta[4] * Degerler[4] + beta[5] * Degerler[5] +
                                                                          beta[6] * Degerler[6] + beta[7] * Degerler[7] + beta[8] * Degerler[8] + beta[9] * Degerler[9] + beta[10] * Degerler[10] + beta[11] * Degerler[11] + beta[12] * Degerler[12] +
                                                                          beta[13] * Degerler[13] + beta[14] * Degerler[14] + beta[15] * Degerler[15])));
                                double y = AnketList[i].Arkadaslik;
                                toplam2 += (hb - y) * Degerler[t];
                            }
                            newBeta[t] = beta[t] - (stepSize * toplam2 / N);//Beta0 hariç diğer tüm betaların yeni değerlerini burda tutuyoruz
                        }
                        for (int i = 0; i < beta.Length; i++)
                        {
                            beta[i] = newBeta[i];//Betalara yeni değerlerini atıyoruz
                        }
                    }

                    for (int i = 0; i < AranacakOgrenciListe.Count; i++) //Ardından hiç dokunmadığımız 40 kişiye ait döngüye geliyoruz



                    {   //Regresyona aldığımız kişilerden çıkan beta değerlerine göre dokunmadığımız 40 kişinin de değerlerini buluyoruz
                        int[]  Degerler = Deger(AranacakOgrenciListe[i]);
                        double hb       = 1.0 / (1.0 + Math.Exp(-(beta[0] + beta[1] * Degerler[1] + beta[2] * Degerler[2] + beta[3] * Degerler[3] + beta[4] * Degerler[4] + beta[5] * Degerler[5] +
                                                                  beta[6] * Degerler[6] + beta[7] * Degerler[7] + beta[8] * Degerler[8] + beta[9] * Degerler[9] + beta[10] * Degerler[10] + beta[11] * Degerler[11] + beta[12] * Degerler[12] +
                                                                  beta[13] * Degerler[13] + beta[14] * Degerler[14] + beta[15] * Degerler[15])));

                        AranacakOgrenciListe[i].ArkadaslikDegeri = hb;                           //Bu değerleri hiç dokunmadığımız 40 kişinin arkadaşlık değerlerine atıyoruz
                    }
                    List <OgrenciAnketModel> BulunanArkadaslar = (from x in AranacakOgrenciListe //Ardından arkadaslık değeri en yüksek olan kişiler bulunuyor.
                                                                  orderby x.ArkadaslikDegeri descending
                                                                  select x).ToList();

                    var OgrenciListesi = OgrenciListOku.getStudenList();                                //Önerilen arkadasların adlarını da görüntülemek için Ogrencilistesi excelini okudugumuz Fonksiyonu cagırıyoruz
                    List <OgrenciListesiModel> OnerilenArkadasListe = new List <OgrenciListesiModel>(); //Ogrencilistesi modelimizin tipinde bir liste olusturuyoruz 10 arkadas bu listeye alınacak.

                    for (int i = 0; i < BulunanArkadaslar.Count; i++)                                   //Bulunan tüm arkadaşların sayısı kadar bir for
                    {
                        for (int j = 0; j < OgrenciListesi.Count; j++)                                  //Ardından excel dosyasındaki tüm ögrenciler kadar dönecek bir for
                        {
                            if (BulunanArkadaslar[i].Arkadaslar == OgrenciListesi[j].OgrNo)             //Eğer bulunan arkadaşların numaraları ile ögrenci listesindeki ögrencilerin numaraları eşit ise
                            {
                                if (OnerilenArkadasListe.Count < 10)                                    //o eşit olanların ilk 10 tanesini alıyor.
                                {
                                    OnerilenArkadasListe.Add(OgrenciListesi[j]);                        //ve bu ilk 10 kişieye OnerilenArkadas listesine atıyor.
                                }
                            }
                        }
                    }


                    dataGridView3.DataSource = OnerilenArkadasListe;//Ardından önerilen arkadaşlar grid view'e basılıyor.
                }
            }
        }