7 Aralık 2012 Cuma

KDV PROGRAMI VE ÖZEL ÖĞRENCİ İNDİRİMİ

 
 
KDV  PROGRAMI VE ÖZEL ÖĞRENCİ İNDİRİMİ
 
 
FORM1 DESİGN

 
 
 
 
FORM1 CS

1 Aralık 2012 Cumartesi

C# ile LCD Simulatörü


LCD’ler elektronikte karakterlerin gösterilmesinde kullanılırlar.LCD’lerin üstünde ekran kartları gibi ekrana yazılan bilgilerin sürekli görünebilmeleri için tarama işlemini yapan entegrelerle birlikte üretilip satılırlar.Bu entegreler ekranın her yanını tarayarak kendini sürekli günceller.Neyse bu kadar elektronik bize yeter.Elektronik demişken yapacağımız uygulamanın lcd’ye bağlayıpta yapacağımız birebir uygulama değil(ama onuda yapacam.ilk önce 20$ bulup bir lcd aldıktan sonra:)).Lcd’yi bir anlamda simule edeceğiz.LCD’lerin yapısını tam anlamak için bir kareli defteri düşünün.Bu defter içindeki kareler LCD içindeki her noktayı yani bir led’i (noktayı)temsil etsin.Karakterlerde bellirli bir binary dağılım göstererek ledleri yakar ve ortaya insanların anlayabileceği bir şekil gelirki bunlar karakter olarak isimlendirilir.
Programın Amacı: Yapacağımız programla textboxtan girilen bir yazı sanki bir Lcd üzerindeymiş gibi bitlerine ayrışacak ve biz insanlara anlaşır bir karakter sunacak.Gireceğimiz string veri haliyle karakterlere ayrılacak ve ayrılan her karakter binary olarak sanal Lcd’mize yayılacak ve bize güzel bir sonuç ile dönecek.
ALGORİTMA:
Ve programıza başlıyoruz.LCD’ye yaz butonuna basınca yaz() isimli master metotu çağırıyoruz. Butonlara ne kadar az kod yazarsak o kadar iyi olacağı inancındayım. yaz() metotuna gelirsek burda şöyle bir yapı söz konusu: Karakter dizisine ayrılan string verimizin her karakteri kodlama için harfyaz() metotuna gider. Kodları incelersek bu rahatlıkla gözükecektir. Birde gonder isimli değişken var. Bu "gonder"in anlamı ise aşadaki şekille pekiştirilmeye çalışılmıştır.

public void yaz()
{
int gonder=0;
int i,j;
char[]gelen=textBox1.Text.ToUpper().ToCharArray();
for(i=0,j=0;i<gelen.Length && j<gelen.Length;i++,j++)
{
harfyaz(gonder,gelen[j]);
gonder+=8;
}
}

yaz() metodunun istediği harfyaz metodunda ise temel mantık yaz() metotundan gelen karakter dizisinin elemanlarını alarak harfsec isimli metota yollar. Harfsec ise; genel bildirim yaptıdığımız A isimli iki boyutlu karakterlerimizin binary formatının tutulacağı matrisi harfe göre doldurmaktır. Harfyaz metotu gelen A matrisindeki verileri 8’li gruplar halinde kaydırarak ekransatir[8,80]isimli LCD ekran kabul ettiğimiz matrisin bulunduğu satir ve sutuna göre ledleri yakar. Ledler yandığı zaman led1.image, söndüğünde ise led0.image gözükecektir.Aşadaki yapıyı dikkatle incelerseniz neler olup bittiğini daha iyi anlayacaksınız.

public void harfyaz(int a,char c)
{
int x=a;
harfsec(c);
for(int i=0;i<8;i++)
{
x=a;
for(int j=0;j<8;j++)
{
if(A[i,j]==1)
{
ekransatir[i,x].Image=led1.Image;

}
else if(A[i,j]==0)
{
ekransatir[i,x].Image=led0.Image;

}
x++;
}
}
matristemizle();//A matrisinin tüm elemanlarını sıfırlayan metotdur.
}

harfsec() metotuna kısaca değinirsek:Gelen karaktere göre A matrisini 1 ve 0 ile doldurur. Geriye dönüş değeri yoktur ve olmamasıda çok doğaldır. Bu metotta bütün karakterler binary olarak kodlandığı için sadece birini inceleyim...

int[,]A;
public void harfsec(char karakter)
{
switch(karakter)
{
case ’ ’:
A=new int[8,8];
break;
case ’A’:
A=new int[8,8]{{0,0,1,1,1,1,0,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0},
{0,1,1,1,1,1,1,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0},
{0,1,0,0,0,0,1,0}};
break;

NOT: Rakamlar ve bazı özel karakterleri ben koymadım.isterseniz koyabilirsiniz.Sadece temel alfabe ve ünlem işaretleri var.
Evet nerde kaldık. Birde sağa sola kaydırma işlemleri var. Bu işlemleri kontrol altında tutmak için timer controlüne koymak daha anlamlı. Örnek olarak sola kaydırma işlemini ele alalım.Bu işlemle iki döngü ile tüm sanal Lcd ekranını tarayarak sola doğru bir öteleme yapıyoruz. ekransatir[i,j].Image=ekransatir[i,j+1].Image; bu kadar basit.....

private void timer1_Tick(object sender, System.EventArgs e)
{
for(int i=0;i<8;i++)
{
for(int j=0;j<79;j++)
{
ekransatir[i,j].Image=ekransatir[i,j+1].Image;
}
}
}

Son olarak formun load event’ ına bakmakta yarar var. Burada ekransatir isimli sanal Lcd panel belirtiliyor ve dizi olarak formun kontollerine ekleniyor ve düzenli artışla formda gösteriliyor. Birde programda her defasında textbox’ tan veri yollamadan önce Lcd temizle butonu ile matrisleri boşaltmamız gerekir.

PictureBox[,]ekransatir;
private void Form1_Load(object sender, System.EventArgs e)
{
ekransatir=new PictureBox[8,80];
int xpos=0;
int ypos=20;
int width=8;
int height=8;
for(int i=0;i<8;i++)
{
for(int j=0;j<80;j++)
{
ekransatir[i,j]=new PictureBox();
this.Controls.Add(ekransatir[i,j]);
ekransatir[i,j].Image=led0.Image;
ekransatir[i,j].SetBounds(xpos,ypos,width,height);
ekransatir[i,j].Show();
xpos+=8;
}
xpos=0;
ypos+=8;
}
}


c# da Rastgele Kod Üretimi


Bu uygulama birçok, yerde işimize yarayabilecek bir “Rastgele Kod Üretici” dir. Rastgele üretilmiş bir koda birçok yerde ihtiyaç duyabiliriz. Örneğin; web sitenizin üye kayıtlarında üye adaylarının gerçek email adreslerini girmelerini garantilemek isteyebilirsiniz. Bunu sağlamanın en basit yolu, kişinin verdiği email adresine rastgele ürettiğinz bir kodu göndermektir. Böylece üye adayından, üyelik işlemlerinin tamamlanarak hesabın aktive olabilmesi için, email adresine gönderdiğiniz aktivasyon kodunu “üyelik aktivasyon” sayfanızda girmesini isteyebilirsiniz. Eğer email adresi doğru değilse aktivasyon kodunu edinemeyeceğinde üyeliği de geçerli olmaz.
Rastgele kod üretebilmek için kullanacağımız en önemli sınıf “System” isim alanı (namespace) içerisinde bulunan “Random” sınıfıdır (class). Bu sınıfı kullanarak kod içerisinde görünmesini istediğimiz karakterler dizisinin boyutu kadar rastgele tamsayı üreteceğiz.
Kullanacağımız diğer bir sınıf ise System.Text isim alanı içerisinde bulunan StringBuilder sınıfıdır. Yapacağımız işlem bir metin birleştirme döngüsü içermekte ve metin birleştirme işlemlerinde StringBuilder sınıfı, string tipine oranla daha fazla performans sağlamaktadır.
Uygulamayı bir fonksiyon olarak hazırlayacağız.
Fonksiyon üreteceği “rastgele kod” un kaç karakter uzunlukta olması istendiğini “codeLength” parametresiyle alacak. Ürettiği “codeLength” kadar karakter uzunluğundaki “Rastgele Kod”u da string veri tipinde, fonksiyonun çağırıldığı yere döndürecek.
private string GenerateCode(int codeLength)
{
}
Fonksiyonda ilk olarak “sb” değişken adıyla, “rastgele kod”u yapılandıracağımız StringBuilder nesnesini ve ikinci olarak da “objRandom” adıyla, rastgele sayı üretecek olan Random nesnesini yapılandıracağız.
System.Text.StringBuilder sb=new System.Text.StringBuilder();
System.Random objRandom=new System.Random();
Sıra “Rastgele Kod”umuz içinde yer almasını istediğimiz karakterleri bir metin dizisi olarak tanılamaya geldi. Ben bu örnekte “A-Z”, “a-z” ve “0-9” arası karakterleri kullandım. Siz isterseniz uygulamayı zenginleştirmek için farklı karakterler de kullanabilirsiniz.
string[] strChars = { “A", "B", "C", ...
"1", "2", "3", ...
“a", "b", "c", ... };
Şimdi işlemlere başlayabiliriz. Önce rastgele üreteceğimiz sayı aralığını bulalım. Yukarıdaki karakterler “strChars” adında bir metin dizisinde tutulmaktalar. Diziler 0 indeksle başladıklarından rastgele üretilecek olan minimum rakam 0 olmalıdır. Üretilecek maksimum rakam ise dizinin en son elemanının indeksi olmalıdır. Dizinin en büyük indeksli elemanının indeks bilgisini
int maxRand=strChars.GetUpperBound(0);
koduyla aynı anda hem bu değeri tutacak olan “maxRand” adında bir değişken tanımlayarak dizinin “GetUpperBound(0)” metoduyla alırız.
“Rastgele Kod”un üretilmesi, istenilen kod uzunluğu için her bir basamağın rastgele oluşturulmasıyla sağlanır. Bunun için, 0 ile “Rastgele Kod” için kullanılacak karakter dizisinin en büyük indeksi arasında rastgele bir sayı objRandom.Next(maxRand) metoduyla üretilir ve bu değer “rndNumber” değişkenine atanır.
int rndNumber=objRandom.Next(maxRand);
Karakter dizisindeki rastgele bir eleman, edinilen “rndNumber” sayısını indeks olarak kullanarak “strChars(rndNumber)” ifadesiyle elde edilir ve bu karakter sb.Append metoduyla “sb” nesnesine eklenir.
sb.Append(strChars[rndNumber]);
Eğer 10 karakter uzunluğunda bir “rastgele kod” istenirse, önce birinci basamak için rastgele bir karakter üretilir, daha sonra ikinci basamak için ve bu böylece 10’a kadar devam eder. Bu üretilen karakterler “sb” değişkeni içerisinde ard arda eklenir.
for(int i=0;i<codeLength;i++)
{
int rndNumber=objRandom.Next(maxRand);
sb.Append(strChars[rndNumber]);
}
En son olarak da StringBuilder nesnesinin içerinde yapılandırılmış olan ve rastgele karakterlerden meydana gelen sonuç, string veri tipine sb.ToString() metoduyla dönüştürülerek fonksiyon sonlandırılır ve değer fonksiyonun çağırıldığı yere döndürülür.
return sb.ToString();
Kodun tamamlanmış şekli aşağıdaki gibidir.
private string GenerateCode(int codeLength)
{
System.Text.StringBuilder sb=new System.Text.StringBuilder();
System.Random objRandom=new System.Random();
string[] strChars = { "A","B","C","D","E","F","G","H","I",
"J","K","L","M","N","O","P","Q","R",
"S","T","U","V","W","X","Y","Z",
"1","2","3","4","5","6","7","8","9","0",
"a","b","c","d","e","f","g","h","i","j","k",
"l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
int maxRand=strChars.GetUpperBound(0);
for(int i=0;i<codeLength;i++)
{
int rndNumber=objRandom.Next(maxRand);
sb.Append(strChars[rndNumber]);
}
return sb.ToString();
}