Monster Notebook
 
Şimdi Üye Ol | Şifremi Unuttum
Ana SayfaSanalkurs.netProgramlarSanalkurs.netÖnemli SitelerSanalkurs.netYazarlarSanalkurs.netDers EkleSanalkurs.netE-DergiSanalkurs.netBlog Sanalkurs.netİletişimSanalkurs.netForum
 
Anasayfa » ASP.net (59 ders)
 
Asp.Net ile Ziyaretçi Defteri

Yazar: Mustafa Çiçek  
Eklenme: 22.06.2009   Okunma: 5153   Seviyesi:  Orta
 
Bu dersimizde Asp.Net ile basitçe ziyaretçi defteri yapmayı göreceğiz.

Bir arkadaşımızın istediği üzerine bu makaleyi yazma girişiminde bulunduğumu belirtmek isterim. Asp.Net ile ziyaretçi defterimi giriş yapmadan önce birkaç öneride bulunmak istiyorum.

Ziyaretçi defterimizi DataList nesnesi ile yaptığım için ilk olarak bu nesne hakkında bilginiz yok ise Ders 1, Ders 2, Ders 3, Ders 4 makalelerini okumanızı tavsiye ederim. Şaket direk bu makaleden devam ederseniz. Anlamakta zorlanacağınızdan eminim. İkinci önerim olarakda eğer MsSql ile nasıl veritabanı oluşturulduğunu bilmiyorsanız daha önce yazmış olduğum makalelerden bakabilirsiniz. Bundan da uzun uzun bahsetmeyeceğim. Üçüncüsüde MasterPage olayınada yine daha önce yazdığım makaleden göz atın.

Makemize artık giriş yapabiliriz. İlk olarak sayfalarımızdan ve veritabanımızdan bahsetmek istiyorum.

http://resim.sanalkurs.net/uploads/2009_06_22_150258.jpg

http://resim.sanalkurs.net/uploads/2009_06_22_150505.jpg

Bu projemizde Default.aspx, MesajYaz.aspx ve ZiyaretciDefteri.master bir tane Css ve MsSql veritabanımız var.

Veritabanımızdaki tablo(Defter)da ID(Birincil Anahtar), AdiSoyadi(varchar(50)), MailAdresi(varchar(500)), WebSitesi(varchar(150)), Mesaj(varchar(500)), EklenmeTarihi(smalldatetime) alanları bulunuyor.
ZiyaretciDefteri.master sayfamızdan başlayalım. Bu sayfamızda ana kalıbımız yer alacak.

Html Tagler: ZiyaretciDefteri.master


<%@ Master Language="C#" AutoEventWireup="true" CodeFile="ZiyaretciDefteri.master.cs"
    Inherits="ZiyaretciDefteri" %>
<%--Mustafa Çiçek - By_Mstfcck--%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Asp.NET ile Ziyaretçi Defteri - mstfcck</title>
    <asp:ContentPlaceHolder ID="head" runat="server">
        <style type="text/css">
            .tablo
            {
                width: 750px;
            }
            .baslik
            {
                height: 100px;
            }
        </style>
    </asp:ContentPlaceHolder>
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form_ziyaretcidefteri" runat="server">
    <div>
        <table align="center" class="tablo" cellpadding="5" cellspacing="0">
            <tr>
                <td class="baslik">
                    <div>
                        <h2>
                        Ziyaretçi Defteri</h2>
                    </div>
                </td>
            </tr>
            <tr>
                <td>
                    <div style="text-align: center">
                        <a href="Default.aspx">Defter</a> | <a href="MesajYaz.aspx">Mesaj Yaz</a></div>
                </td>
            </tr>
            <tr>
                <td>
                    <div>
                        <asp:ContentPlaceHolder ID="CPH_ziyaretcidefteri" runat="server">
                        </asp:ContentPlaceHolder>
                    </div>
                </td>
            </tr>
            <tr>
                <td>
                    <div>
                        Mustafa Çiçek - @Copyright By_Mstfcck</div>
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>


Code Behind: Bu sayfamızda herhangi bir kod yer almıyor.
Görünümü:
http://resim.sanalkurs.net/uploads/2009_06_22_151435.jpg

Html Tagler: Default.aspx

<%@ Page Language="C#" MasterPageFile="~/ZiyaretciDefteri.master" AutoEventWireup="true"
    CodeFile="Default.aspx.cs" Inherits="_Default" Title="Defter" %>
<%--Mustafa Çiçek - By_Mstfcck--%>
<asp:Content ID="Content_head" ContentPlaceHolderID="head" runat="Server">
    <style type="text/css">
        div
        {
            height: 100%;
            width: 100%;
        }
        .sagayasla
        {
            text-align: right;
        }
        .altbasliksitili
        {
            text-align: center;
        }
        .gumusarkaplan
        {
            background-color: Silver;
        }
        .ustbasliksitili
        {
            text-align: center;
        }
    </style>
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</asp:Content>
<asp:Content ID="Content_CPH" ContentPlaceHolderID="CPH_ziyaretcidefteri" runat="Server">
    <div>
        <%--DataList nesnemiz. Buradaki olaylara(event) dikkat edin. CodeBehind kısmında bunları kullanıyoruz
        (OnCancelCommand, OnDeleteCommand ...)--%>
        <asp:DataList ID="DL_defter" runat="server" 
            OnCancelCommand="DL_defter_CancelCommand"
            OnDeleteCommand="DL_defter_DeleteCommand" 
            OnEditCommand="DL_defter_EditCommand"
            OnUpdateCommand="DL_defter_UpdateCommand">
            
            <%--Burası DataList nesnesinin başlık kısmı--%>
            <HeaderTemplate>                
                <h1>Asp.Net ile Ziyaretçi Defteri - By_Mstfcck</h1> 
            </HeaderTemplate>
            
            <%--Burası DataList içinde veritabanından aldığımız verileri işleyecek kısım--%>
            <ItemTemplate>
                <table align="center" style="width: 750px">
                    <tr>
                        <td class="ustbasliksitili">
                            <%--Burasıda önemli bir basamak. Şimdi DataBinder ne işe yarar diye soruyorsunuzdur.
                            Bunun hakkında çok fazla bir bilgim olduğunu söyleyemem ama. Burada yaptığımız işlemin ne işe yaradığını söylim.
                            Alt satırda görmüş olduğumuz DataBinder.Eval veritabanından bulunan tablomuzdaki
                            sutunlardan "AdiSoyadi" olan alandaki verileri listelemeye yarar.
                            Diğerleride buna benzer işlemler yapıyor.--%>
                            <%#DataBinder.Eval(Container.DataItem,"AdiSoyadi")%>
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2">
                            <%#DataBinder.Eval(Container.DataItem,"Mesaj")%>
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2" class="altbasliksitili">
                            <%#DataBinder.Eval(Container.DataItem,"MailAdresi") %>
                            |
                            <%#DataBinder.Eval(Container.DataItem,"WebSitesi") %>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <%--HiddenFiled bizim görünmez alanımızdır. Veritabanından her yoruma ait ID değerini saklıyor burada.
                            Bunu silme işlemi için kullanacağız.--%>
                            <asp:HiddenField ID="HiddenField_id" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"ID") %>' />
                            <%--Düzenle butonu CommandName olayına dikkat edin. Diğer butonlarda da--%>
                            <asp:LinkButton ID="lb_Duzenle" runat="server" CommandName="Edit" Text="Düzenle"></asp:LinkButton>
                            <asp:LinkButton ID="lb_Sil" runat="server" CommandName="Delete" Text="Sil"></asp:LinkButton>
                        </td>
                    </tr>
                </table>
            </ItemTemplate>
            
            <%--Düzenleme işlemi için verilerin sayfada görünecek hali. Burada TextBox'lar içinde görüntüleme yapıyoruz.
            Düzenleme işlemini yaptıktan sonra Güncelle butonuyla işlemi bitiriyoruz.--%>
            <EditItemTemplate>
                <table align="center" style="width: 750px">
                    <tr>
                        <td class="ustbasliksitili">
                            <asp:TextBox ID="txtAdiSoyadi" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"AdiSoyadi")%>' />
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2" class="ustbasliksitili">
                            <asp:TextBox ID="txtMesaj" runat="server" Width="700px" Height="150px" TextMode="MultiLine" Text='<%#DataBinder.Eval(Container.DataItem,"Mesaj")%>' />
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2" class="altbasliksitili">
                            <asp:TextBox ID="txtMailAdresi" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"MailAdresi") %>' />
                            |
                            <asp:TextBox ID="txtWebSitesi" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"WebSitesi") %>' />
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <asp:HiddenField ID="HiddenField_id" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"ID") %>' />
                            <asp:LinkButton ID="lb_Guncelle" runat="server" CommandName="Update" Text="Güncelle"></asp:LinkButton>
                            <asp:LinkButton ID="lb_Iptal" runat="server" CommandName="Cancel" Text="İptal"></asp:LinkButton>
                        </td>
                    </tr>
                </table>
            </EditItemTemplate>
            
            <%--Burası ayırıcı kısmı adı üstünde. İki yorumu birbirinden ayrımak için araya yazdığımız taglardeki içeriği görüntüler.
            Ben burada bir tane çizgi koydum siz daha farklı yapabilirsiniz. Resim vs. içerikler.--%>
            <SeparatorTemplate>
                <hr />
            </SeparatorTemplate>
            
        </asp:DataList>
    </div>
</asp:Content>


Code Behind: Default.cs

using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    // Defteri veritabanından çekerek getiriyoruz.
    private void DefteriYukle() 
    {
        // Bağlantı nesnemiz
        SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ZiyaretciDefteri.mdf;Integrated Security=True;User Instance=True");
        // Command nesnemiz. Buradaki sorguda tarihleri büyükten küçüğe doğru sıralıyoruz.
        // Çünkü en son eklenen mesajın en başta görünmesini istiyoruz.
        SqlCommand com = new SqlCommand("Select * From Defter Order By EklenmeTarihi Desc ", con);
        con.Open();
        // Burada DL_defter bizim DataList'imizin adı. Direk olarak veri kaynağını belirtiyoruz.
        // Html kısmında yazmış olduğumuz DataBinder.Eval ile verileri kendisi sayfaya yükleyecektir.
        DL_defter.DataSource = com.ExecuteReader();
        DL_defter.DataBind();
        con.Close();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        // Sayfamız ilk defa yükleniyorsa Yorumları listeliyoruz.
        // Buradaki postback olayı önemli sonradan sorun çıkarabiliyor. !!!
        if (!IsPostBack)
            DefteriYukle();
    }
    protected void DL_defter_EditCommand(object source, DataListCommandEventArgs e)
    {
        // Burada datalist lislenen verilere birer index ataması yaptığı için direk olarak edit
        // olayında e.Item.ItemIndex olayı ile index değerini alıp hangi kaydın güncelleneceğini
        // belirtiyoruz.
        DL_defter.EditItemIndex = e.Item.ItemIndex;
        // Daha sonra listeyi tekar yüklüyoruz.
        DefteriYukle();
    }
    protected void DL_defter_CancelCommand(object source, DataListCommandEventArgs e)
    {
        // Burada -1 değeri ile listemizin eski haline dönmesini sağlıyoruz.
        DL_defter.EditItemIndex = -1;
        DefteriYukle();
    }
    protected void DL_defter_UpdateCommand(object source, DataListCommandEventArgs e)
    {
        /* Burası önemli bir adım.
         * e.Item.FindControl ile datalist içindeki nesneleri ID değerlerini belirterek buluyoruz
         * ve içerdikleri değerleri değişkenlerimize atıyoruz.*/        
        int _ID = Convert.ToInt32(((HiddenField)(e.Item.FindControl("HiddenField_id"))).Value);
        string _AdiSoyadi = ((TextBox)e.Item.FindControl("txtAdiSoyadi")).Text.Trim();
        string _Mesaj = ((TextBox)e.Item.FindControl("txtMesaj")).Text.Trim();
        string _MailAdresi = ((TextBox)e.Item.FindControl("txtMailAdresi")).Text.Trim();
        string _WebSitesi = ((TextBox)e.Item.FindControl("txtWebSitesi")).Text.Trim();

        // Burada standart güncelleme işlemini yapıyoruz.
        // HiddenField da sakladığımız ID değerini sorgumuzda koşul olarak belirtiyoruz.
        SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ZiyaretciDefteri.mdf;Integrated Security=True;User Instance=True");
        SqlCommand com = new SqlCommand("Update Defter Set AdiSoyadi=@AdiSoyadi, Mesaj=@Mesaj, MailAdresi=@MailAdresi, WebSitesi=@WebSitesi Where ID=@ID", con);
        con.Open();
        // Değişken değerlerini sorgumuza gönderiyoruz.
        com.Parameters.Add("@AdiSoyadi", SqlDbType.VarChar).Value = _AdiSoyadi;
        com.Parameters.Add("@Mesaj", SqlDbType.VarChar).Value = _Mesaj;
        com.Parameters.Add("@MailAdresi", SqlDbType.VarChar).Value = _MailAdresi;
        com.Parameters.Add("@WebSitesi", SqlDbType.VarChar).Value = _WebSitesi;
        com.Parameters.Add("@ID", SqlDbType.Int).Value = _ID;
        com.ExecuteNonQuery();
        DL_defter.EditItemIndex = -1;
        con.Close();
        DefteriYukle();
    }
    protected void DL_defter_DeleteCommand(object source, DataListCommandEventArgs e)
    {
        // silme işleminde de yine hiddenfield alanımızdaki id değerinden yararlanıyoruz.
        int _ID = Convert.ToInt32(((HiddenField)(e.Item.FindControl("HiddenField_id"))).Value);
        SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ZiyaretciDefteri.mdf;Integrated Security=True;User Instance=True");
        SqlCommand com = new SqlCommand("Delete From Defter Where ID=@ID", con);
        con.Open();
        com.Parameters.Add("@ID", SqlDbType.Int).Value = Convert.ToInt32(_ID);
        com.ExecuteNonQuery();
        con.Close();
        DefteriYukle();
    }
}


Görünüm:
http://resim.sanalkurs.net/uploads/2009_06_22_153135.jpg

Html Tagler: MesajYaz.aspx
<%@ Page Language="C#" MasterPageFile="~/ZiyaretciDefteri.master" AutoEventWireup="true"
    CodeFile="MesajYaz.aspx.cs" Inherits="MesajYaz" Title="Mesaj Yaz" %>
<%--Mustafa Çiçek - By_Mstfcck--%>
<asp:Content ID="Content_head" ContentPlaceHolderID="head" runat="Server">
    <style type="text/css">
        div
        {
            height: 100%;
            width: 100%;
        }
        .ortala
        {
            text-align: center;
        }
    </style>
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</asp:Content>
<asp:Content ID="Content_CPH" ContentPlaceHolderID="CPH_ziyaretcidefteri" runat="Server">
    <div>
        <table align="center" cellpadding="5" cellspacing="0">
            <tr>
                <td colspan="2">
                    <h2>
                    Mesaj Yaz
                    </h2>
                </td>
            </tr>
            <tr>
                <td>
                    Adı Soyadı:
                </td>
                <td>
                    <asp:TextBox ID="txtAdiSoyadi" runat="server" Width="500px"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    Mail Adresi:
                </td>
                <td>
                    <asp:TextBox ID="txtMailAdresi" runat="server" Width="500px"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    Web Site:
                </td>
                <td>
                    <asp:TextBox ID="txtWebSite" runat="server" Width="500px"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td>
                    Mesaj:
                </td>
                <td>
                    <asp:TextBox ID="txtMesaj" runat="server" Height="150px" MaxLength="500" TextMode="MultiLine"
                        Width="500px"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td colspan="2" class="ortala">
                    <asp:LinkButton ID="lbtn_gonder" runat="server" onclick="lbtn_gonder_Click">Gönder</asp:LinkButton>
                </td>
            </tr>
        </table>
    </div>
</asp:Content>


Code Behind: MesajYaz.cs (Buradaki işlem standart kayıt ekleme olayıdır. TextBoxlara girilen bilgileri veritabanımızdaki uygun alanlara kaydediyoruz.)

using System.Data.SqlClient;

public partial class MesajYaz : System.Web.UI.Page
{
    protected void lbtn_gonder_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ZiyaretciDefteri.mdf;Integrated Security=True;User Instance=True");
        SqlCommand com = new SqlCommand("Insert Into Defter(AdiSoyadi,MailAdresi,WebSitesi,Mesaj,EklenmeTarihi) Values(@AdiSoyadi,@MailAdresi,@WebSitesi,@Mesaj,GETDATE())", con);
        con.Open();
        com.Parameters.Add("@AdiSoyadi", SqlDbType.VarChar).Value = txtAdiSoyadi.Text;
        com.Parameters.Add("@MailAdresi", SqlDbType.VarChar).Value = txtMailAdresi.Text;
        com.Parameters.Add("@WebSitesi", SqlDbType.VarChar).Value = txtWebSite.Text;
        com.Parameters.Add("@Mesaj", SqlDbType.VarChar).Value = txtMesaj.Text;
        com.ExecuteNonQuery();
        con.Close();
        Response.Redirect("Default.aspx");
    }
}


Görünüm:

http://resim.sanalkurs.net/uploads/2009_06_22_153514.jpg

Sayfamızın çalışan halinden bir görünüm:

http://resim.sanalkurs.net/uploads/2009_06_22_153628.jpg

Bu makelemizde bu kadar arkadaşlar sorularınız olursa beklerim. İyi çalışmalar?

Kaynak dosyayı indirmek için tıklayın

 

 

Asp.Net ile Ziyaretçi Defteri Dersini Yazdirin YAZDIR

"Asp.Net ile Ziyaretçi Defteri" dersi için 11 yorum var

22.06.2009 mahmutbattal diyor ki:
Çok güzel çalışma teşekkürler..

27.06.2009 kanlyl diyor ki:
denemem için ilk olarak proramı indirmem gerek sanırım

12.07.2009 asya10 diyor ki:
ben bıilgisayar mühendisliginde okuyorum.2 ci sınıfa gectim ve sadece c ve shell programming ögrendim.yaz tatılınde ıyı bı calısma yapmak ıstıyorum bı cok kısı asp.net ogren dedi fakat hic bilmiyorum ogrenmeye calışacagım.ayrıca asp ve asp.net arasındakı farkı bana soyleyebilirmisiniz

18.07.2009 mustafabas diyor ki:
ben bilgisayar mühendisliğnde okuyorum asp ye yeni başladım.yalnız daha başında şöyle bir sorunla karşılaştım.sayfası çalıştırdığımda web sayfası görüntülenemiyor diyor.acaba başka bir özellik var da ben mi bilmiyorum.lütfen yardım edermisiniz

18.07.2009 mustafabas diyor ki:
ben bilgisayar mühendisliğnde okuyorum asp ye yeni başladım.yalnız daha başında şöyle bir sorunla karşılaştım.sayfası çalıştırdığımda web sayfası görüntülenemiyor diyor.acaba başka bir özellik var da ben mi bilmiyorum.lütfen yardım edermisiniz

22.07.2009 mstfcck diyor ki:
asya10: http://forum.muhabbetim.com/php-asp-cgi/asp-ile-asp-net-arasindaki-fark-t1733.html |
mustafabas: siz asp'ye mi asp.net'e mi başladınız. Ben aspden pek anlamam. asp.net ise sayfayı nerde çalıştırmayı deniyorsunuz sorunuzu tam olarak anlayamadım.

27.08.2009 orjinal_manyak diyor ki:
Merhaba ben birşey öğrenmek istiyorum bu ziyaretçi defterine admin onayını nasıl verebiliriz? Yani gönderilen mesajları admin onay vermeden görüntülenmiycek nasıl yapabilirim?yardımcı olabilirseniz sevinirim...

14.09.2009 mexxanit diyor ki:
Bence db de boolen bir değer koyup true yapılınca görüntülensin şeklinde olabilir. true false'u da tabii ki admine bırakılır.

24.09.2009 mstfcck diyor ki:
arkadaşın dediği aynen doğrudur. where onay='true' diye koşul belirtirsiniz. tamamdır.

30.12.2009 josemari diyor ki:
benim yazdığım kod sizin mesaj kodunuzla benzer.Program masaüstünde çalışıyor fakat internet serverına atınca

An attempt to attach an auto-named database for file D:WebSitesOgrencig060110011App_DataDatabase.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.

gibi bir hata veriyor.bende mi sorun var diye sizin programıda upload ettim aynı hatayı verdi. sorunun ne olduğu konsunda yardımcı olabilirmisiniz

01.01.2010 mstfcck diyor ki:
veritabanını yanlış yerde arıyor. bunu denemedim daha önce sunucuya atıp. sunucu için veritabanı adesi başına server.mappath(adres) şeklinde belirtip bi de öyle deneyin... bu locak de çalışır

  BU DERSE YORUM EKLEYİN

Üye olmadan yorum ekleyemezsiniz !


UYARI: SANALKURS.net'te yer alan materyaller ile ilgili her türlü sorumluluk hazırlayan veya gönderene aittir. Yazarlar, gönderdikleri makale ve derslerle başkalarını yanıltıcı bilgi veremezler. SANALKURS.net bilgilerin kullanımı sonucunda doğacak hata ve zararlardan sorumlu tutulamaz. SANALKURS.net'te yer alan bir makale link vermek ve kaynak göstermek şartıyla başka bir sitede yayınlanabilir. SANALKURS.net kullanıcıları ve üyeleri, üçüncü kişilerin telif hakkı sahibi bulunduğu hiçbir yazı, fotoğraf, resim vb. materyal ve ürünü kullanamazlar. SANALKURS.net kullanıcı ve yazarlarının, üçüncü kişilerin telif hakkı sahibi olduğu yazı, resim vb. ürünleri izinsiz kullanması durumunda, her türlü hukuki ve cezai sorumluluk kendilerine aittir.
 İSTATİSTİKLER
XML Kaynağımızdan yararlanarak sitemizdeki derslerimizi masaüstünüzden yada web sitenizden takip edebilirsiniz
ÇEVRİMİÇİ 175 Ziyaretçi, 13 Üye
Keremel, bozoklar, NaRe_TuRKeY, ramones1982, sanalusta, s-R-c, Charisma_47, ertughaskan, deliler, hacoban, kerasus, mocaco3, siracel
Bugün: 664, Dün: 10154, Bu Ay: 21031, Toplam Ziyaret: 7226843, Toplam Üye: 216260, Son Üye: nur_cihan
Yazılı Dersler: 2459, Video Dersler: 407, Toplam Yazar: 64, Toplam Dosya: 53, Toplam Link: 26
   
RSS Kaynağımızdan yararlanarak sitemizdeki derslerimizi masaüstünüzden yada web sitenizden takip edebilirsiniz