Bu programda " i " değişkeni çok önemlidir. Çünkü dizileri o yönlendiriyor.
isim[i] dizisi olarak isimler dizi elemanlarında depolandı. Ahmet girildiğinde " i " ilk başta 0 olduğundan isim[0] da Ahmet ismi depolanmış oldu. Öğrenci kaydına girdiğimizde :
1- Öğrenci kaydı
Burada kaydı olacak kişinin bilgileri istendi. Sonrada bu bilgilerin hepsi i=0 da depolandı. Sonunda i=i+1; yaparak i yi 1 artırdım. Böylece bir daha ki kayıt da i=1 olacak ve kullanıcının girdiği isim isim[1] de depolanacaktır. Bu şekilde bir devamlılık sağladım.
2-Öğrenci bilgileri
Burada öncelikle bütün öğrenci listesini ekrana yazdırmak istedim.
int k=1,secim;
for(k=1; k<i+1; k++){
printf("%d - %s %s\n",k,isim[k-1],soyad[k-1]);
}
ifadesini açıklayayım. k= 1 den başlayarak i+1 e kadar artmasını istedim. Çünkü i değeri başta 0 olduğundan depolanan değerlerde 1 fazlası olarak sıralanır. Yani örneğin:
Kullanıcı 3 isim girdiğinde i=0 dan başladığı için i=2 olacaktır. Buna göre aşağıdaki sonuç çıkar
1- i=0 isim[0] = ahmet
2- i=1 isim[1] = mehmet
3- i=2 isim[2] = ayşe
Liste yaparken biz 1 den başlayacağımız için k i+1 e kadar gider . Yani bu öğrene göre 3 e kadar gider.
Burada demek ki k bizim kişi sayımız olmuş oluyor.
printf("%d - %s %s\n",k,isim[k-1],soyad[k-1]);
Bunuda yukardaki gibi yazarız ve isimler listelenmiş olur.Sonrasında kullanıcı bir isim seçer ve o kişinin bilgileri ekrana çıkar. Bunuda normal olarak printf ile sağlarız.
3-Kayıt silme
Bana göre en zor kısım buydu. Çünkü bir kayıt silindiğinde i değeri yerinden oynayacaktı. Bu yüzden bir sonraki diziyi bir önceki diziye kopyalayarak bu işlemi gerçekleştirdim.Bunu for döngüsü ile yaptım.
for(n=secim-1;n<k-1;n++){
strcpy(isim[n],isim[n+1]);
strcpy(soyad[n],soyad[n+1]);
strcpy(adres[n],adres[n+1]);
telno[n]=telno[n+1];
}
i=i-1;
En sonunda da i yi bir azalttım çünkü en son dizi bir gerideki elemana kopyalandığında onun yeri boşta kalmış olacaktı. Bu yüzden i yi 1 azalttım.
İşte programdan görüntüler :
İşte buda kodlar :
#include <stdio.h>
#include <dos.h>
#include <string.h>
char isim[30][30],soyad[30][30],adres[30][30];
long int telno[30],i=0;
int ogrenci_kaydi(int a){
system("cls");
printf("Ogrencinin ismi = ");
scanf("%s",&isim[i]);
printf("Ogrencinin soyadi = ");
scanf("%s",&soyad[i]);
printf("Ogrencinin memleketi = ");
scanf("%s",&adres[i]);
printf("Ogrencinin telefon numarasi = ");
scanf("%d",&telno[i]);
system("cls");
printf("Ogrenci kayit edilmistir...");
sleep(2,5);
system("cls");
return i=i+1;
}
int ogrenci_bilgisi(int a){
system("cls");
if(i>0){
int k=1,secim;
for(k=1; k<i+1; k++){
printf("%d - %s %s\n",k,isim[k-1],soyad[k-1]);
}
scanf("%d",&secim);
system("cls");
printf("Adi = %s\nSoyadi = %s\nMemleketi = %s\nTelefon Numarasi = %d\n\n",isim[secim-1],soyad[secim-1],adres[secim-1],telno[secim-1]);
printf("Geri donmek icin 1'i tuslayin...");
scanf("%d",&secim);
}
else if(i<=0){
printf("Henuz hic bir ogrenci kayit olmamistir.");
sleep(2,5);
}
return i;
}
int kayit_sil(int a){
system("cls");
if(i>0){
int k=1,secim,n;
for(k=1; k<i+1; k++){
printf("%d - %s %s\n",k,isim[k-1],soyad[k-1]);
}
printf("Silmek istediginiz orenci numarasini tuslayiniz...\n");
scanf("%d",&secim);
for(n=secim-1;n<k-1;n++){
strcpy(isim[n],isim[n+1]);
strcpy(soyad[n],soyad[n+1]);
strcpy(adres[n],adres[n+1]);
telno[n]=telno[n+1];
}
i=i-1;
}
else if(i<=0){
printf("Henuz hic bir ogrenci kayit olmamistir.");
sleep(2,5);
}
return i;
}
main(){
int menusecim,dongu=-1;
while(dongu==-1){
system("cls");
printf("\n1- Ogrenci Kaydi\n2- Ogrenci Bilgileri\n3- Ogrenci Silme\n");
scanf("%d",&menusecim);
switch (menusecim){
case 1:{
ogrenci_kaydi(i);
break;
}
case 2:{
ogrenci_bilgisi(i);
break;
}
case 3:{
kayit_sil(i);
break;
}
default:{
system("cls");
printf("Yanlis bir ifade girdiniz menuye yonlendiriliyorsunuz...");
sleep(2,5);
system("cls");
}
}
}
return 0;
}
Hiç yorum yok:
Yorum Gönder