E-Sınav Bölüm-1 (Soru kayıt yönetimi)


        Merhaba, bu uygulamamızda sizlerle birlikte temel kayit işlemlerini gerçekleştireceğiz fakat tek bir farkla; uygulamada HTML bölümünde hiç bir tasarım yapmayacağız. Yani ne HTML ne ASPX nesnesi olarak hiç bir elemanı web sayfamıza yerleştirmeyeceğiz. Tüm veri kontrollerini; düğmeleri, metin kutularını vb. kod ile sayfaya yazdıracağız. Verilerimizi sunucuya göndermeden evvel kullanıcı tarafında temel kontrollerini JavaScript kodlar ile yapacağız. Aslında bu pek tercih edeceğiniz bir yöntem değil zira kod sayfasında (kısmen ve yerine göre gereksiz, yerine göre ise zaruri biçimde) fazladan kod satırı yazmanızı gerekli kılacaktır. Uygulamamız aslında kısmen bir test sınavı uygulamasının soru-cevap yönetimi bölümü olarak kullanılabilir. Bunu sizler geliştirerek ders ve ilgili derse ait konuların kayıtlarını da ekleyerek güzel bir soru bankası haline dönüştürebilirsiniz. Uygulamamız şu şekilde işliyor:

  1. Öncelikle sayfa yüklenirken veritabanındaki kayıt sayısı sorgulanıyor,
  2. Şeyet hiçbir kayıt bulunamaz ise temel kayıt giriş formu nesneleri yazdırılıyor. Bunlar:
    1. Soru metni için bir < textarea / > elemanı
    2. 5 adet (A, B, C, D, E, F) cevap şıkkı için < textarea / > elemanı
    3. Doğru cevabı seçebilmek için bir < option / > elemanı
    4. Değişiklikleri kaydetmek için Kaydet düğmesi veri alanlarını temizleyebilmek için Temizle ve yapılan işlemi iptal etmek için İptal düğmesidir.
  3. Şayet en az bir kayıt bulunmuş ise Veri yönetim formu nesneleri yazdırılıyor. Bunlar yine temel giriş formunda olan veri giriş elamanları ile bu formdan farklı olarak:
    1. Aktif kayıt üzerinde yapılan değişiklikleri kaydedebilmek için Güncelle düğmesi, seçilen kaydı silebilmek için Sil düğmesi ve temel veri giriş formunu görüntlemek için Yeni düğmesidir.
  4. Ve şayet en az bir kayıt bulunmuş ise ise kayıtların listesi görüntüleniyor. Bu listede soru metni, sorunun doğru cevap şıkkı ve bu kayıt üzerinde değişiklik yapabilmek için tüm bilgilerin Veri yönetim formuna yüklenmesini sağlayan Seç düğmesidir. Özetle bir kayıt üzerinde işlem yapabilmek için o kaydın mutlaka seç düğmesi ile seçilmesi gerekmektedir.

          Uygulamanın ekran görüntüleri aşağıda verildiği gibidir. Bu uygulama sizlere daha önce ayrı bir makalede aktardığım üzere ve derslerimizde de sözlü olarak defaatle ifade ettiğim gibi "web dünyası metin dünyasıdır" fikrinin hayat bulmuş halidir. Uygulamada verilerimizi saklamak/depolamak için Microsoft Access Veritabanı kullanıyoruz, keşke bu olağan üstü olay medyada gelmemiş olsaydı da sizlerle derslerimizde Micsoroft SQL Server üzerinde bir veritabanı oluşturarak uygulama yapma imkanı bulabilseydik ama ne demişler "Nasipten ötesi yalan...". Bundan sonrası artık yüksek okulda alacağınız öğretime kalıyor. Şayet tüm bu olumsuzluklar olmamış olsa idi sizler ile kendi okulumuzda bir PC' yi sunucu olarak kullarak o sunucuya bağlayacağımız bir Arduino geliştirme kartı ile seri haberleşme yaparak ağ üzerinden aç/kapat ve PWM kontrol uygulaması yazacaktık ama dediğim gibi "Nasip değilmiş..." Sizlere bundan sonra yüksek öğretimde başarılar dilemekten başa birşey gelmiyor elimden güzel çocuklarım.


Temel veri giriş formu

Veri yönetim formu

           Gelelim web formumuzun HTML kodlarına; aşağıda verildiği üzer aslında pek fazla üzerinde duracak bir şey yok lakin sizlerin dikkatini çekmek istediğim bir nokta var ki o da < body < % Response.Write(mesajVerilsin); % > > şeklindeki bölüm. Burada mesajVerilsin C# tarafında tanımlanmış bir string tipindeki public değişkendir. Bu değişken normalde hiç bir veri içermemektedir lakin sizler kayıtlar üzerinde ekleme, silme ve güncelleme işlemi yaparsanız değeri onload='mesajVer()' olarak değişir ki bu da kayitYonetimi.js dosyasında bulunan mesajVer(); fonksiyonu çalıştırır ve sizler animasyonlu bir bilgilendirme mesajı alırsınız. Elbette bunun gerçekleşebilmesi sayfanızdaki < script >< / script > bölümününde bulunması gerekir. Bu kodlar adı ya da id'si acilanKutu olan nesnesini görüntülemek ya da bu nesneyi X simgesi tıklandığında ya da web sayfası üzerinde boş bir alan tıklandığında gizlemek için varlar. Özetle bu kodlar olmazsa animasyonlu mesaj kutusu istediğimiz gibi çalışmaz ve onu gizleyemezsiniz.

< %@ Page Language="C#" AutoEventWireup="true" CodeFile="kayitYonetimi.aspx.cs" Inherits="kayitYonetimi" % >
< html xmlns="http://www.w3.org/1999/xhtml" >
< head runat="server" >
< title >..:: Soru/ Cevap kayit yönetimi ::..< / title >
< link rel="stylesheet" type="text/ css" href="kayitYonetimi.css" /  >
< script type="text/ javascript" src="kayitYonetimi.js" >< / script >
< / head >
< body < % Response.Write(mesajVerilsin); % > >
< form id="form1" runat="server" >
 
< div id="icerik" runat="server" >< / div >
 
< div id="liste" runat="server" >< / div >  
 
</ form >
 
< script >
// acilanKutu isimli div nesnesi acilan degiskenine aktariliyor 
var acilan = document.getElementById('acilanKutu');
 
// kapat dugmesinin sinifi okunarak btnKapat degiskenine aktariliyor
var btnKapat = document.getElementsByClassName("kapat")[0];
 
// btnKapat tiklaninca popup gizlensin
btnKapat.onclick = function () {
	acilan.style.display = "none";
}
 
// acilan, kendisi disinda sayfa uzerinde tiklama yapildiginda gizlensin
window.onclick = function (event) {
	if (event.target == acilan) {
		acilan.style.display = "none";
	}
}
< / script >
< / body >
< / html >

Yukarıda verilen kodlarda id='icerik' şeklinde tanımlaana div nesnesinde form nesneleri görüntülenirken, id='liste' şeklinde tanımlanan div nesnesinde kayıtların listesi verilmektedir. Kullanıcı kayıtlar üzerinde ekleme, silme ve güncelleme vb. işlemler yapılırken kısmı kontroller yapılırken (alanlar boş mu? Değil mi?) kullanıcıdan duruma göre onay alınmaktadır. Tüm bu işlemleri JavaScript kodlar ile kullanıcı tarafında yaptım ve yazdığım kodlar kayitYonetimi.js dosyasında olup bunların dökümü aşağıdaki gibidir.

function islemYap(islemID, kid) {
//////////////////////////////////////////////////////////////////////////////////////
// Kodlama          : Bilal SERT
// Amaç             : Formu sunucuya yapilacak isleme gore gondermek
// Tarih|Saat       : 30.05.2020 | 14:42
// G|Ç              : Yapilacak islem tanimayicisi (yeni, sil, guncelle vb.) | yok
//////////////////////////////////////////////////////////////////////////////////////
var cevap = "";
if (islemID == 1) {
	//yeni
	if (kontrol() == true) {
		document.getElementById("kayNo").value = "";
		document.getElementById("islem").value = "yeni";
		cevap = confirm("Kayit ekleme işlemini onaylıyor musunuz?");
		if (cevap) document.getElementById("form1").submit();
	}
} else if (islemID == 2) {
	//sil
	document.getElementById("kayNo").value = kid;
	document.getElementById("islem").value = "sil";
	cevap = confirm("Kayit silme işlemini onaylıyor musunuz?");
	if (cevap) document.getElementById("form1").submit();
} else if (islemID == 3) {
	//guncelle
	if (kontrol() == true) {
		document.getElementById("kayNo").value = kid;
		document.getElementById("islem").value = "guncelle";
		cevap = confirm("Kayit güncelleme işlemini onaylıyor musunuz?");
		if (cevap) document.getElementById("form1").submit();
	}
}
} //end of islemYap

function verileriYukle(kid) {
//////////////////////////////////////////////////////////////////////////////////////
// Kodlama          : Bilal SERT
// Amaç             : Secilen kaydin verilerini yuklemek
// Tarih|Saat       : 30.05.2020 | 14:50
// G|Ç              : Istenilen kaydin numarasi| yok
//////////////////////////////////////////////////////////////////////////////////////
document.getElementById("kayNo").value = kid;
document.getElementById("form1").submit();
} //end of verileriYukle

function tazele(isID) {
//////////////////////////////////////////////////////////////////////////////////////
// Kodlama          : Bilal SERT
// Amaç             : Secilen kaydin verilerini yuklemek
// Tarih|Saat       : 30.05.2020 | 14:55
// G|Ç              : yok | yok
// Cagrildigi yer   : kontrolleriEkle()-> tazele(1); kayitGetir() -> tazele(2);
//                    kontrolleriEkle()-> tazele(3); 
//////////////////////////////////////////////////////////////////////////////////////
if (isID == 1) {
	//temizle
	document.getElementById("txtSoru").value = "";
	document.getElementById("txtSecA").value = "";
	document.getElementById("txtSecB").value = "";
	document.getElementById("txtSecC").value = "";
	document.getElementById("txtSecD").value = "";
	document.getElementById("txtSecE").value = "";
	document.getElementById("islem").value = "";
} else if (isID == 2) {
	//yeni 
} else if (isID == 3) {
	//iptal
	window.open("kayitYonetimi.aspx", "_self");
	return;
}
document.getElementById("islem").value = "";
document.getElementById("kayNo").value = "";
document.getElementById("form1").submit();
} //end of tazele

function kontrol() {
//////////////////////////////////////////////////////////////////////////////////////
// Kodlama          : Bilal SERT
// Amaç             : Yeni kayit icin form alanlarinin bos birakilmasini engellemek
// Tarih|Saat       : 30.05.2020 | 15:00
// G|Ç              : yok | yok
//////////////////////////////////////////////////////////////////////////////////////
if (document.getElementById("txtSoru").value == "") {
	alert("Soru metni boş bırakilamaz");
	return (false);
} else if (document.getElementById("txtSecA").value == "") {
	alert("Cevaplardan A seçeneği boş bırakılamaz");
	return (false);
} else if (document.getElementById("txtSecB").value == "") {
	alert("Cevaplardan B seçeneği boş bırakılamaz");
	return (false);
} else if (document.getElementById("txtSecC").value == "") {
	alert("Cevaplardan C seçeneği boş bırakılamaz");
	return (false);
} else if (document.getElementById("txtSecD").value == "") {
	alert("Cevaplardan D seçeneği boş bırakılamaz");
	return (false);
} else if (document.getElementById("txtSecE").value == "") {
	alert("Cevaplardan E seçeneği boş bırakılamaz");
	return (false);
}
return (true);
} //end of kontrol

function mesajVer() {
var mpopup = document.getElementById('acilanKutu');
mpopup.style.display = "block";
}

Sayfanın C# kodları aşadaki gibidir kodlardan önce yeteri kadar açıklama satırı yazdığım için ayrıca yazdığım tüm fonskiyonların isimleri de görevlerini ifade eden Türkçe sözcükler oladuğu için burada ayrıca bir açıklama yapma gereği duymuyorum.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.OleDb;
 
 
public partial class kayitYonetimi : System.Web.UI.Page
{
    public string mesajVerilsin = string.Empty;
    string bilgi = string.Empty;
    int kaySay = 0;
    OleDbConnection conn = new OleDbConnection();
    OleDbCommand cmd = new OleDbCommand();
    OleDbDataReader dr;
    OleDbDataAdapter da = new OleDbDataAdapter();
    DataSet ds = new DataSet();
 
protected void Page_Load(object sender, EventArgs e)
{
string islem = string.Empty;
string geriBildirim = Request.QueryString.Get("sonuc");
//tablomuzdaki toplam kayit sayisini ogreniyoruz
kaySay = kayitSayisi();      
//sayfa ilk defa cagrildiginda
if (!Page.IsPostBack)
{
    if (kaySay == 0)
        //kayit yoksa veri girisi icin kontroller yuklensin
        kontrolleriEkle();
    else
    {
        //sayet kayit varsa son kaydin bilgileri kontrollere yuklensin
        kaydiGetir(0);
        //tum kayitlari listeliyoruz
        kayitlariListele();
    }
}else { 
    //sayfa sunucuya geri gonderilmis ise
    islem=Request.Form["islem"];
    if (islem == "yeni")
    {
        kayitEkle();
    }
    else if (islem == "sil")
    {
        kayitSil(int.Parse(Request.Form["kayNo"]));
    }
    else if (islem == "guncelle")
        kayitGuncelle(int.Parse(Request.Form["kayNo"]));
    {
    }
    if (Request.Form["kayNo"] != "")
        //bir kayit numarasi gelmisse o kaydi
        kaydiGetir(int.Parse(Request.Form["kayNo"]));
    else
        //tum kayitlar silinmisse yeni veri girisi icin
        kontrolleriEkle();
}
}//end of Page_Load
 
 
int  kayitSayisi()  {
//*******************************************************************************
//Created By         : Bilal SERT
//Date /Time         : 26.05.2020 /19:44
//Aim                : kayit sayisini belirlemek
//I/O                : none
//Calls              : 
//Called by          : 
//*******************************************************************************
int sonuc=  0;
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
Server.MapPath("~/data.mdb");
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT COUNT(*) FROM sorular";
try{
    conn.Open();
    sonuc = (Int32)cmd.ExecuteScalar();
}catch(Exception ex){
    //mesajVer("< span style='color:red'>Dikkat! Hata oluştu< /span> (Modul: Kayit sayma)< br / >" & ex.Message.ToString());
}finally{
if(conn.State ==ConnectionState.Open) {
    conn.Close();
    conn.Dispose();
}
}
return (sonuc);
}//end of kayitSayisi
 
void kaydiGetir(int kayNo){
/////////////////////////////////////////////////////////////////////////////////
//Created By         : Bilal SERT
//Date /Time         : 26.05.2020 /19:44
//Aim                : tablodaki son kaydi getirmek
//I/O                : none
//Calls              : 
//Called by          : 
/////////////////////////////////////////////////////////////////////////////////
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
Server.MapPath("~/data.mdb");
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
if(kayNo == 0)
    cmd.CommandText = "SELECT TOP 1 * FROM sorular ORDER BY sid DESC";
else
    cmd.CommandText = "SELECT * FROM sorular  WHERE sid=" + kayNo.ToString();
 
try{
    conn.Open();
    da.SelectCommand = cmd;
    da.Fill(ds, "sorular");
    if(ds.Tables["sorular"].Rows.Count != 0){
    icerik.InnerHtml = "< div class='kayitTutucu' > ";
    icerik.InnerHtml + = "< table style='width:100%;' cellspacing='3' cellpadding='0' border='0' > ";
    icerik.InnerHtml + = "< tr>";
    icerik.InnerHtml + = "< td colspan='2' class='baslik'>KAYIT BİLGİLERİ< / td >";
    icerik.InnerHtml + = "< / tr >";
    icerik.InnerHtml + = "< tr>";
    icerik.InnerHtml + = "< td class='etiket' valign='top'>Soru metni< / td >";
    icerik.InnerHtml + = "< td class='kontrol' > ";
    //icerik.InnerHtml + = "< input type='text' name='txtSoru' class='formElemani' value='" & ds.Tables("sorular").Rows(0).Item(1).ToString() & "'  / >";
    icerik.InnerHtml + = "< textarea rows='4' cols='40' id='txtSoru' name='txtSoru' class='formElemani' > "+ ds.Tables["sorular"].Rows[0][1].ToString()  + "< / textarea>";
    icerik.InnerHtml + = "< / td >";
    icerik.InnerHtml + = "< / tr >";
    icerik.InnerHtml + = "< tr>";
    icerik.InnerHtml + = "< td class='etiket'>A seçeneği< / td >";
    icerik.InnerHtml + = "< td  class='kontrol' > ";
    //icerik.InnerHtml + = "< input type='text' name='txtSecA' class='formElemani' value='" + ds.Tables["sorular"].Rows[0][2].ToString()  + "' / >";
    icerik.InnerHtml + = "< textarea rows='2' cols='40' id='txtSecA' name='txtSecA' class='formElemani' > "+ ds.Tables["sorular"].Rows[0][2].ToString()  +"< / textarea>";
    icerik.InnerHtml + = "< / td >";
    icerik.InnerHtml + = "< / tr >";
    icerik.InnerHtml + = "< tr>";
    icerik.InnerHtml + = "< td class='etiket'>B seçeneği< / td >";
    icerik.InnerHtml + = "< td class='kontrol' > ";
    //icerik.InnerHtml + = "< input type='text'  name='txtSecB' class='formElemani' value='" + ds.Tables["sorular"].Rows[0][3].ToString()  + "' / >";
    icerik.InnerHtml + = "< textarea rows='2' cols='40' id='txtSecB' name='txtSecB' class='formElemani' > "+ ds.Tables["sorular"].Rows[0][3].ToString()  + "< / textarea>";
    icerik.InnerHtml + = "< / td >";
    icerik.InnerHtml + = "< / tr >";
    icerik.InnerHtml + = "< tr>";
    icerik.InnerHtml + = "< td class='etiket'>C seçeneği< / td >";
    icerik.InnerHtml + = "< td class='kontrol' > ";
    //icerik.InnerHtml + = "< input type='text' name='txtSecC' class='formElemani' value='" + ds.Tables["sorular"].Rows[0][4].ToString()  + "' / >";
    icerik.InnerHtml + = "< textarea rows='2' cols='40' id='txtSecC' name='txtSecC' class='formElemani' > "+ ds.Tables["sorular"].Rows[0][4].ToString()  + "< / textarea>";
    icerik.InnerHtml + = "< / td >";
    icerik.InnerHtml + = "< / tr >";
    icerik.InnerHtml + = "< tr>";
    icerik.InnerHtml + = "< td class='etiket'>D seçeneği< / td >";
    icerik.InnerHtml + = "< td class='kontrol' > ";
    //icerik.InnerHtml + = "< input type='text' name='txtSecD' class='formElemani' value='" + ds.Tables["sorular"].Rows[0][5].ToString()  + "' / >";
    icerik.InnerHtml + = "< textarea rows='2' cols='40' id='txtSecD' name='txtSecD' class='formElemani' > "+ ds.Tables["sorular"].Rows[0][5].ToString()  + "< / textarea>";
    icerik.InnerHtml + = "< / td >";
    icerik.InnerHtml + = "< / tr >";
    icerik.InnerHtml + = "< tr>";
    icerik.InnerHtml + = "< td class='etiket'>E seçeneği< / td >";
    icerik.InnerHtml + = "< td class='kontrol' > ";
    //icerik.InnerHtml + = "< input type='text' name='txtSecE' class='formElemani' value='" + ds.Tables["sorular"].Rows[0][6].ToString()  +"' / >";
    icerik.InnerHtml + = "< textarea rows='2' cols='40' id='txtSecE' name='txtSecE' class='formElemani' > "+ ds.Tables["sorular"].Rows[0][6].ToString()  +"< / textarea>";
    icerik.InnerHtml + = "< / td >";
    icerik.InnerHtml + = "< / tr >";
    icerik.InnerHtml + = "< tr>";
    icerik.InnerHtml + = "< td class='etiket' style='background-color:yellowgreen; color:#fff; height:35px'>Doğru cevap< / td >";
    icerik.InnerHtml + = "< td class='kontrol' > ";
    icerik.InnerHtml + = "< select id='txtCevap' name='txtCevap' > ";
    for (int i = 1; i < = 5; i++)
    {
        if (((char)(64 + i)).ToString() == ds.Tables["sorular"].Rows[0][7].ToString())
            icerik.InnerHtml + =  "< option value='" + (char)(64 + i) + "' selected>" + (char)(64 + i) + "< / option>";
        else
            icerik.InnerHtml + =  "< option value='" + (char)(64 + i) + "' > " + (char)(64 + i) + "< / option>";
    }
    icerik.InnerHtml + = "< /select>";
    icerik.InnerHtml + = "< / td >";
    icerik.InnerHtml + = "< / tr >";
    icerik.InnerHtml + = "< tr>";
    icerik.InnerHtml + = "< td>< input type='hidden' name='islem' id='islem' value=''/ >";
    icerik.InnerHtml + = "< input type='hidden' name='kayNo' id='kayNo' value='" + ds.Tables["sorular"].Rows[0][0].ToString() + "'/ >< / td >";
    icerik.InnerHtml + = "< td style='text-align:right' > ";
    //icerik.InnerHtml + = "< input class='dugme' type='button' onclick='islemYap(1,0)' value='Yeni' id='btnYeni' / >";
    icerik.InnerHtml + = "< input class='dugme' id='btnYeni' type='button' value='Yeni' onclick='tazele(2)'/ >";
    icerik.InnerHtml + =  "< input class='dugme' id='btnSil' type='button' onclick='islemYap(2," + ds.Tables["sorular"].Rows[0][0].ToString() + ")' value='Sil' / >";
    icerik.InnerHtml + =  "< input class='dugme' id='btnGuncelle' type='button' onclick='islemYap(3," + ds.Tables["sorular"].Rows[0][0].ToString() + ")' value='Güncelle' / >";
    icerik.InnerHtml + = "< / td >";
    icerik.InnerHtml + = "< / tr >";
    icerik.InnerHtml + = "< / table >";
    icerik.InnerHtml + = "< / div >";
 
    }
}catch(Exception ex){
    mesajVer("< span style='color:red'>Dikkat! Hata oluştu< /span> (Modul: Veri getirme)< br / >" + ex.Message.ToString());
}finally{
    if(conn.State == ConnectionState.Open){
        conn.Close();
        conn.Dispose();
        ds.Clear();
        ds.Dispose();
        da.Dispose();
    }
}
}//end of kaydiGetir
 
void kayitEkle()
{
    /////////////////////////////////////////////////////////////////////////////////
    //Created By         : Bilal SERT
    //Date /Time         : 27.05.2020 /22:22
    //Aim                : yeni kayit eklemek
    //I/O                : kayNo | yok
    //Calls              : 
    //Called by          : 
    /////////////////////////////////////////////////////////////////////////////////
    int result = 0;
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
    Server.MapPath("~/data.mdb");
    cmd.Connection = conn;
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("@p1", Request.Form["txtSoru"]);
    cmd.Parameters.AddWithValue("@p2", Request.Form["txtSecA"]);
    cmd.Parameters.AddWithValue("@p3", Request.Form["txtSecB"]);
    cmd.Parameters.AddWithValue("@p4", Request.Form["txtSecC"]);
    cmd.Parameters.AddWithValue("@p5", Request.Form["txtSecD"]);
    cmd.Parameters.AddWithValue("@p6", Request.Form["txtSecE"]);
    cmd.Parameters.AddWithValue("@p7", Request.Form["txtCevap"]);
    cmd.CommandText = "INSERT INTO sorular(soru,mad1,mad2,mad3,mad4,mad5,cevap)VALUES(@p1,@p2,@p3,@p4,@p5,@p6,@p7)";
    try
    {
        conn.Open();
        result = cmd.ExecuteNonQuery();
        if (result != 0)
            mesajVer("< span style='color:green; font-size:16px; font-weight:bold'>Kayit ekleme< /span> işlemi başarılı bir şekilde tamamlandı");
    }
    catch (Exception ex)
    {
        mesajVer("< span style='color:red'>Dikkat! Hata oluştu< /span> (Modul: Kayit ekleme)< br / >" + ex.Message.ToString());
    }
    finally
    {
        if (conn.State == ConnectionState.Open)
        {
            conn.Close();
            conn.Dispose();
        }
    }
    if (kayitSayisi() > 0) kaydiGetir(0); else kontrolleriEkle();
    kayitlariListele();
}//end of kayitEkle
 
void kayitSil(int kayNo){
/////////////////////////////////////////////////////////////////////////////////
//Created By         : Bilal SERT
//Date /Time         : 27.05.2020 /22:22
//Aim                : id si verilen kaydi silmek
//I/O                : kayNo | yok
//Calls              : 
//Called by          : 
/////////////////////////////////////////////////////////////////////////////////
int result= 0;
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
Server.MapPath("~/data.mdb");
cmd.Connection = conn;
cmd.CommandType =CommandType.Text;
cmd.CommandText = "DELETE FROM sorular  WHERE sid=" + kayNo.ToString();
try{
    conn.Open();
    result = cmd.ExecuteNonQuery();
    if (result != 0)
        mesajVer("< span style='color:red; font-size:16px; font-weight:bold'>Kayit silme< /span> işlemi başarılı bir şekilde tamamlandı");       
}catch(Exception ex){
    mesajVer("< span style='color:red'>Dikkat! Hata oluştu< /span> (Modul: Kayit silme)< br / >" + ex.Message.ToString());
}finally{
    if (conn.State == ConnectionState.Open){
        conn.Close();
        conn.Dispose();
    }
}
if(kayitSayisi() > 0 )kaydiGetir(0); else kontrolleriEkle();
kayitlariListele();
}//end of kayitSil
 
void kayitGuncelle(int kayNo)
{
/////////////////////////////////////////////////////////////////////////////////
//Created By         : Bilal SERT
//Date /Time         : 27.05.2020 /22:22
//Aim                : id si verilen kaydi silmek
//I/O                : kayNo | yok
//Calls              : 
//Called by          : 
/////////////////////////////////////////////////////////////////////////////////
int result = 0;
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
Server.MapPath("~/data.mdb");
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@p1", Request.Form["txtSoru"]);
cmd.Parameters.AddWithValue("@p2", Request.Form["txtSecA"]);
cmd.Parameters.AddWithValue("@p3", Request.Form["txtSecB"]);
cmd.Parameters.AddWithValue("@p4", Request.Form["txtSecC"]);
cmd.Parameters.AddWithValue("@p5", Request.Form["txtSecD"]);
cmd.Parameters.AddWithValue("@p6", Request.Form["txtSecE"]);
cmd.Parameters.AddWithValue("@p7", Request.Form["txtCevap"]);
cmd.CommandText = "UPDATE sorular SET soru=@p1,mad1=@p2,mad2=@p3,mad3=@p4,mad4=@p5,mad5=@p6,cevap=@p7 WHERE sid=" + kayNo.ToString();
try
{
    conn.Open();
    result = cmd.ExecuteNonQuery();
    if (result != 0)
        mesajVer("< span style='color:#0066ff; font-size:16px; font-weight:bold'>Kayit güncelleme< /span> işlemi başarılı bir şekilde tamamlandı");
}
catch (Exception ex)
{
    mesajVer("< span style='color:red'>Dikkat! Hata oluştu< /span> (Modul: Kayit güncelleme)< br / >" + ex.Message.ToString());
}
finally
{
    if (conn.State == ConnectionState.Open)
    {
        conn.Close();
        conn.Dispose();
    }
}
if (kayitSayisi() > 0) kaydiGetir(0); else kontrolleriEkle();
kayitlariListele();
}//end of kayitGuncelle
 
void kayitlariListele(){
    /////////////////////////////////////////////////////////////////////////////////
    //Created By         : Bilal SERT
    //Date /Time         : 28.05.2020 /13:43
    //Aim                : tablodaki tum kayitlari listelemek
    //I/O                : none
    //Calls              : 
    //Called by          : 
    /////////////////////////////////////////////////////////////////////////////////
 
    conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
    Server.MapPath("~/data.mdb");
    cmd.Connection = conn;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "SELECT * FROM sorular ORDER BY sid DESC";
    try{
        conn.Open();
        da.SelectCommand = cmd;
        da.Fill(ds, "sorular");
        if(ds.Tables["sorular"].Rows.Count != 0) {
            liste.InnerHtml = "< div style='float:left; margin-left:10px; box-shadow:3px 3px 3px #333; margin-bottom:10px; width:45%; overflow:scroll; height:500px; border:2px solid #333' > ";
            liste.InnerHtml + = "< table width='100%' border='0' cellspacing='3' cellpadding='0' > ";
            liste.InnerHtml + = "< tr>< td colspan='8' class='baslik'>KAYIT LİSTESİ< / td >< / tr >";
            liste.InnerHtml + = "< tr>";
            liste.InnerHtml + = "< td class='hucreBaslik'> < / td >";
            liste.InnerHtml + = "< td class='hucreBaslik' colspan='6' style='width:70%'>SORU METNİ< / td >";
            //liste.InnerHtml + = "< td class=''>A-Seçeneği< / td >";
            //liste.InnerHtml + = "< td class=''>B-Seçeneği< / td >";
            //liste.InnerHtml + = "< td class=''>C-Seçeneği< / td >";
            //liste.InnerHtml + = "< td class=''>D-Seçeneği< / td >";
            //liste.InnerHtml + = "< td class=''>E-Seçeneği< / td >";
            liste.InnerHtml + = "< td class='hucreBaslik'>CEVAP< / td >";
            liste.InnerHtml + = "< / tr >";
            for( int sayac = 0 ; sayac<  ds.Tables["sorular"].Rows.Count;sayac++){
 
                liste.InnerHtml + = "< tr>";
                liste.InnerHtml + =  "< td class='' align='center' valign='middle'>< input class='hucreDugme' type='button' value='Seç' onclick='verileriYukle(" + ds.Tables["sorular"].Rows[sayac][0].ToString() + ")' / > < / td >";
                liste.InnerHtml + =  "< td class='hucreVeri' colspan='6' > " + ds.Tables["sorular"].Rows[sayac][1].ToString() + "< / td >";
                //liste.InnerHtml + = "< td class='hucreVeri' > " + ds.Tables["sorular"].Rows[sayac][1].ToString() + "< / td >";
                //liste.InnerHtml + = "< td class='hucreVeri' > " + ds.Tables["sorular"].Rows[sayac][1].ToString() +  "< / td >";
                //liste.InnerHtml + = "< td class='hucreVeri' > " + ds.Tables["sorular"].Rows[sayac][1].ToString() +  "< / td >";
                //liste.InnerHtml + = "< td class='hucreVeri' > " + ds.Tables["sorular"].Rows[sayac][1].ToString() + "< / td >";
                //liste.InnerHtml + = "< td class='hucreVeri' > " + ds.Tables["sorular"].Rows[sayac][1].ToString() +  "< / td >";
                liste.InnerHtml + =  "< td class='hucreCevap' > "+ ds.Tables["sorular"].Rows[sayac][7].ToString() + "< / td >";
                liste.InnerHtml + = "< / tr >";
            }
            liste.InnerHtml + = "< / table >";
            liste.InnerHtml + = "< / div >";
        }else{
            liste.InnerHtml = "";
        }
    }catch(Exception ex){
        mesajVer("< span style='color:red'>Dikkat! Hata oluştu< /span> (Modul: Kayit Listeleme)< br / >" + ex.Message.ToString());
    }finally{
        if(conn.State == ConnectionState.Open){
            conn.Close();
            conn.Dispose();
            ds.Clear();
            ds.Dispose();
            da.Dispose();
        }
    }
}//end of kayitlariListele
 
void kontrolleriEkle(){
    /////////////////////////////////////////////////////////////////////////////////
    //Created By         : Bilal SERT
    //Date /Time         : 26.05.2020 /19:44
    //Aim                : bos veri kontrollerini eklemek
    //I/O                : none
    //Calls              : 
    //Called by          : 
    /////////////////////////////////////////////////////////////////////////////////
    icerik.InnerHtml = "< div class='kayitTutucu' > ";
    icerik.InnerHtml + =  "< table style='width:100%;' cellspacing='3' cellpadding='0' border='0' > ";
    icerik.InnerHtml + =  "< tr>";
    icerik.InnerHtml + =  "< td colspan='2' class='baslik'>KAYIT BİLGİLERİ< / td >";
    icerik.InnerHtml + =  "< / tr >";
    icerik.InnerHtml + =  "< tr>";
    icerik.InnerHtml + =  "< td class='etiket' valign='top'>Soru metni< / td >";
    icerik.InnerHtml + =  "< td class='kontrol' > ";
    //icerik.InnerHtml + =  "< input type='text' class='formElemani' name='txtSoru' value=''  / >";
    icerik.InnerHtml + =  "< textarea rows='4' cols='40' id='txtSoru' name='txtSoru' class='formElemani'>< / textarea>";
    icerik.InnerHtml + =  "< / td >";
    icerik.InnerHtml + =  "< / tr >";
    icerik.InnerHtml + =  "< tr>";
    icerik.InnerHtml + =  "< td class='etiket'>A seçeneği< / td >";
    icerik.InnerHtml + =  "< td  class='kontrol' > ";
    //icerik.InnerHtml + =  "< input type='text' class='formElemani' name='txtSecA' value='' / >";
    icerik.InnerHtml + =  "< textarea rows='2' cols='40' id='txtSecA' name='txtSecA' class='formElemani'>< / textarea>";
    icerik.InnerHtml + =  "< / td >";
    icerik.InnerHtml + =  "< / tr >";
    icerik.InnerHtml + =  "< tr>";
    icerik.InnerHtml + =  "< td class='etiket'>B seçeneği< / td >";
    icerik.InnerHtml + =  "< td class='kontrol' > ";
    //icerik.InnerHtml + =  "< input type='text'  class='formElemani' name='txtSecB' value='' / >";
    icerik.InnerHtml + =  "< textarea rows='2' cols='40' id='txtSecB' name='txtSecB' class='formElemani'>< / textarea>";
    icerik.InnerHtml + =  "< / td >";
    icerik.InnerHtml + =  "< / tr >";
    icerik.InnerHtml + =  "< tr>";
    icerik.InnerHtml + =  "< td class='etiket'>C seçeneği< / td >";
    icerik.InnerHtml + =  "< td class='kontrol' > ";
    //icerik.InnerHtml + =  "< input type='text' class='formElemani' name='txtSecC' value='' / >";
    icerik.InnerHtml + =  "< textarea rows='2' cols='40' id='txtSecC' name='txtSecC' class='formElemani'>< / textarea>";
    icerik.InnerHtml + =  "< / td >";
    icerik.InnerHtml + =  "< / tr >";
    icerik.InnerHtml + =  "< tr>";
    icerik.InnerHtml + =  "< td class='etiket'>D seçeneği< / td >";
    icerik.InnerHtml + =  "< td class='kontrol' > ";
    //icerik.InnerHtml + =  "< input type='text' class='formElemani' name='txtSecD' value='' / >";
    icerik.InnerHtml + =  "< textarea rows='2' cols='40' id='txtSecD' name='txtSecD' class='formElemani'>< / textarea>";
    icerik.InnerHtml + =  "< / td >";
    icerik.InnerHtml + =  "< / tr >";
    icerik.InnerHtml + =  "< tr>";
    icerik.InnerHtml + =  "< td class='etiket'>E seçeneği< / td >";
    icerik.InnerHtml + =  "< td class='kontrol' > ";
    //icerik.InnerHtml + =  "< input type='text' class='formElemani' name='txtSecE' value='' / >";
    icerik.InnerHtml + =  "< textarea rows='2' cols='40' id='txtSecE' name='txtSecE' class='formElemani'>< / textarea>";
    icerik.InnerHtml + =  "< / td >";
    icerik.InnerHtml + =  "< / tr >";
    icerik.InnerHtml + =  "< tr>";
    icerik.InnerHtml + =  "< td class='etiket' style='background-color:yellowgreen; color:#fff;height:35px'>Doğru cevap< / td >";
    icerik.InnerHtml + =  "< td class='kontrol' > ";
    icerik.InnerHtml + =  "< select id='txtCevap' name='txtCevap' > ";
    for(int i=1; i< =5;i++){
        icerik.InnerHtml + =  "< option value='" +(char)(64 + i) + "' > " + (char)(64 + i) + "< / option>";
    }
    icerik.InnerHtml + =  "< /select>";
    icerik.InnerHtml + =  "< / td >";
    icerik.InnerHtml + =  "< / tr >";
    icerik.InnerHtml + =  "< tr>";
    icerik.InnerHtml + =  "< td>< input type='hidden' name='islem' id='islem' value=''/ >";
    icerik.InnerHtml + =  "< input type='hidden' name='kayNo' id='kayNo' value=''/ >< / td >";
    icerik.InnerHtml + =  "< td style='text-align:right' > ";
    icerik.InnerHtml + =  "< input class='dugme' type='button' value='İptal' onclick='tazele(3)' id='btnIptal' / >";
    icerik.InnerHtml + =  "< input class='dugme' type='button' value='Temizle' onclick='tazele(1)' id='btnTemizle' / >";
    icerik.InnerHtml + =  "< input class='dugme' type='button' onclick='islemYap(1)' value='Kaydet' id='btnKaydet' / >";
    icerik.InnerHtml + =  "< / td >";
    icerik.InnerHtml + =  "< / tr >";
    icerik.InnerHtml + =  "< / table >";
    icerik.InnerHtml + =  "< / div >";
}//end of kontrolleriEkle
 
void  mesajVer(string mesaj){
    /////////////////////////////////////////////////////////////////////////////////
    //Created By         : Bilal SERT
    //Date /Time         : 28.05.2020 /13:43
    //Aim                : uyari mesaji vermek
    //I/O                : none
    //Calls              : 
    //Called by          : 
    /////////////////////////////////////////////////////////////////////////////////
    bilgi = "< div id='acilanKutu' class='popup' > ";
    bilgi + =  "< div class='popup-icerik' > ";
    bilgi + =  "< div class='popup-baslik' > ";
    bilgi + =  "	< span class='kapat'>×< /span>";
    bilgi + =  "	< h2>Kullanıcının dikkatine< / h2 >";
    bilgi + =  "< / div >";
    bilgi + =  "< div class='popup-temel' > ";
    bilgi + =  "	< p >" + mesaj + "< / p >";
    bilgi + =  "< / div >";
    bilgi + =  "< div class='popup-altBilgi' > ";
    bilgi + =  "	< p >https://www.bilalsert.com.tr< / p >";
    bilgi + =  "< / div >";
    bilgi + =  "< / div >";
    bilgi + =  "< / div >";
    mesajVerilsin = "onload='mesajVer()'";
    Response.Write(bilgi);
 
}//end of mesajVer
}//end of class kayitYonetimi


       Gelelim son olarak sayfanın görsel olarak aynı şekilde görüntülenebilmesi için yazılması gereken CSS kodlarına ki bunlar kayitYonetimi.css dosyasında yer almaktadırlar. Bu sayfanın kodlarının tam dökümü aşağıdaki gibi olup nesne ve sınıf adları tamamen Türkçe olduğu için bir açıklama yapmak bu noktada bence gereksiz ki siz zaten temel css ayarlarını öğrendiniz. Ayrıca bu uygulamanın C# ve JavaScript kodları olmayan halini kaynak dosyalar bağlantısından indirip kullanabilirsiniz. Kodları bu sayfadan kopyalarak, düzenleyerek ilgili yerlere yapıştırıp uygulamayı çalışır hale getirebilrsiniz. Unutmayın çaba harcamadan yaptığınız hiç bir şeyi öğrenemezsiniz. Bu uygulamayı tamamladıktan sonra bunun 2. bölümünü kodlayacağız ki bu bölümde; kullanıcı, adı ve şifresi ile giriş yaparak veritabanından çekilen sorulardan oluşan bir testi yapacak sonrasında tesi tamamladığında sonuçlarını gözlemleyecek kullanıcı bu testi sadece bir defa yapabilecek. Uygulamada test oluşturulurken tüm kontroller burada olduğu gibi saf HTML elemanları ile dinamik olarak yazdırılacak. Evet 2. bölümde görüşmek üzere esen kalın, "mutlu kodlama günleri" dilerim.

.kayitTutucu
{
    width:45%;
    float:left;
    padding:5px;
    margin:5px;
    border:1px solid #333;
    box-shadow:3px 3px 3px #333;
}
.etiket
{
    text-align:right;
    padding-right:5px;
    background-color:#eee;
    color:#333;
    font-size:16px;
    font-weight:bold;    
    height:22px;
    width:30%;
    font-family:Arial;
}
.kontrol
{
    text-align:left;
    padding-left:5px;
    background-color:#FFFAF0;
    color:#333;
    font-size:14px;    
    height:22px; 
    font-family:Arial;
    margin-left:5px;      
}
.baslik
{
    background-color:#0080ff;
    color:#fff;
    text-align:center;
    font-size:24px;
    font-family:Arial;
    height:36px;
}
.dugme
{
    width:120px;
    height:35px;
    padding:5px;
    margin-left:10px;    
    box-shadow:3px 3px 3px gray;  
    font-weight:bold;
 }
#btnSil
{
    background-color:#ff0040;
    color:#fff;
}
#btnGuncelle
{
    background-color:yellowgreen;
    color:#fff;
}
#btnYeni
{
    background-color:#6495ed;
    color:#fff;
}
#btnKaydet
{
    background-color:#6495ed;
    color:#fff;
}
#btnTemizle
{
    background-color:#ff0040;
    color:#fff;
}
.formElemani
{
   width:99%;
   text-align:left;
   padding-left:5px;
   font-family:Arial;
   font-size:14px;      
}
.hucreVeri
{
    background-color:ghostwhite;
    color:#333;
    font-size:14px;
    border:1px solid #333;    
    padding-left:5px;
    height:30px; 
}
.hucreCevap
{
    background-color:greenyellow;
    color:#333;
    font-size:14px;
    font-weight:bold;
    border:1px solid #333;    
    padding-left:5px;
    height:30px; 
}
.hucreBaslik
{
    background-color:green;
    color:#fff;
    font-size:14px;
    font-weight:bold;
    border:0px solid #333;    
    padding-left:5px;
    height:30px; 
}
.hucreDugme
{
    width:70%;
    height:30px;
    box-shadow:3px 3px 3px gray;
        
}
/* pop-up-acilan mesaj kutusu */
.popup {
    display: none;
    position: fixed;
    z-index: 1;
    padding-top: 100px;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    overflow: auto;
    background-color: rgb(0,0,0);
    background-color: rgba(0,0,0,0.4);
}
.popup-icerik {
    position: relative;
    background-color: #fefefe;
    margin: auto;
    padding: 0;
    width: 60%;
    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
    -webkit-animation-name: animatetop;
    -webkit-animation-duration: 0.4s;
    animation-name: animatetop;
    animation-duration: 0.4s
}

.popup-baslik {
    padding: 2px 16px;
    background-color: #ff0000;
    color: white;
}
.popup-temel {padding: 2px 16px;}
.popup-altBilgi {
    padding: 2px 16px;
    background-color: #ff0000;
    color: #ffffff;
}

/* yukaridan asagi animasyon etkisi veriyoruz */
@-webkit-keyframes animatetop {
    from {top:-300px; opacity:0}
    to {top:0; opacity:1}
}

@keyframes animatetop {
    from {top:-300px; opacity:0}
    to {top:0; opacity:1}
}

/* kapat dugmesi  */
.kapat {
    color: white;
    float: right;
    font-size: 28px;
    font-weight: bold;
}
.kapat:hover, .close:focus {
    color: #000;
    text-decoration: none;
    cursor: pointer;
}