15 Mart 2010 Pazartesi

Konsol Programlama::Bölüm 3: "Basit QMap uygulaması"

QMap bir şablon sınıfıdır. Atlamalı liste tabanlı bir sözlük oluşturmamızı sağlar.QMap Qt frameworkünde kullanılan genel bir konteyner sınıftır. QMap'de veriler < Anahtar,Veri > şeklindedir ve QMap anahtarlar üzerinden hızlıca veriye ulaşmamızı sağlar.QMap'in performans bakımından gelişmiş hali QHash'dir. Ancak ona sonra değineceğiz.

Şimdi programımıza bir göz atalım



#include <QTextStream>
#include <QString>
#include <QMap>


/*Tüm fonksiyonların kullanabilmesi için
yaz ve oku nesnelerini global yapıyorum.
*/

QTextStream yaz(stdout), oku(stdin);
//oku nesnesi klavyeden gelen (stdin) girişi almaktadır.

int main()
{

QMap<QString,QString> kullanicilar; //kullanicilar adındaki < QString,QString >
// formatindaki QMap nesnemizi tanımladık

//Kullanıcı adı anahtar, sifrede veri olacak.
kullanicilar.insert("Cengiz","abc111"); // Değerleri giriyoruz
kullanicilar.insert("Burak","abc123");
kullanicilar["Ali"]="123abc"; // Değerleri bu şekilde de girebilirsiniz.


QString kullaniciAdi;
QString sifre;

yaz << "Kullanici adini girin:" << endl;
oku >> kullaniciAdi;
yaz << "Sifrenizi girin:" << endl;
oku >> sifre;

if(sifre.length()<5) // girlen şifrenin karakter sayısı kontrol ediliyor
{
yaz << "Sifre 5 karakterden kucuk olamaz" << endl;
return 0;// programdan çık
}

if(kullanicilar.contains(kullaniciAdi)) // girilen isimde kullanıcı var mı kontrol ediliyor.
{
if(kullanicilar.value(kullaniciAdi)==sifre) // şifrenin doğruluğu kontrol ediliyor
{
QString dolgu; // Süsleme işlerinde kullanacağız
yaz << "Hosgeldiniz.\nSistemde kayitli olan kullanicilar ve sifreleri:\n" << endl;

// STL tipi bir iterator tanımladık
// ve kullanicilar nesnemizin ilk elemanını işaret ettik
QMap<QString, QString>::const_iterator i = kullanicilar.constBegin();

//QString'in bize sağladığı fonksiyonları kullanarak süslü bir başlık oluşturuyoruz
yaz << QString("Kullanici Adi").rightJustified(15,' ')+" | "+
QString("Sifre").rightJustified(15,' ') << endl;

yaz << dolgu.fill('-',15)+" | "+dolgu.fill('-',15) << endl;

//kullanicilar nesnemizdeki verileri listeliyoruz.
while (i != kullanicilar.constEnd())
{
yaz << i.key().rightJustified(15,' ') + " | " +
i.value().rightJustified(15,' ') << endl;
++i;
}
yaz << endl;
}
else
{
yaz << "Hatali sifre" << endl;
return 0; // programdan çık
}
}
else
{
yaz<< "Boyle bir kullanici yok" << endl;
return 0; // programdan çık
}

return 0; // programdan çık
}



Burada dikkat ettiyseniz QString nesnelerinde == operatörü ile büyük küçük harfe duyarlı karşılaştırma yapabiliyoruz.

QMap::key() fonksiyonu bize anahtarı, QMap::value() fonksiyonu da bize veriyi döndürmektedir. Bu fonksiyonları key(veri) -> anahtar, value(anahtar) -> veri şeklinde de kullanabiliriz.

Program çalıştığında elde edeceğimiz sonuç şu şekide olacaktır.



Kullanici adini girin:
Burak
Sifrenizi girin:
abc123
Hosgeldiniz.
Sistemde kayitli olan kullanicilar ve sifreleri:

Kullanici Adi | Sifre
--------------- | ---------------
Ali | 123abc
Burak | abc123
Cengiz | abc111




Burada anahtarların sıralı bir şekilde geldiğini rahat bir şekilde görüyoruz.

Detaylı QMap bilgisi için: http://doc.trolltech.com/4.5/qmap.html
Detaylı QString bilgisi için: http://doc.trolltech.com/4.5/qstring.html

Hiç yorum yok:

Yorum Gönder