Struct ile personel kayıt bilgileri

Merhaba arkadaslar

Problem : “personel.txt” isimli dosyada aşağıdaki biçimde ve uzunlukta bilgiler bulunmaktadır.

personel.txt yi indirmek icin burayı tıklayınız.

Personel Numarası(4) , Adı(12) , Soyadı(12), Maaşı(6)

Dizi tanımlı  calisanlar[N] struct yapısını aşağıdaki biçimde tanımlıyabilir ve maksimum calışan sayısını 100 olarak düşünebilirsiniz.

#define N  100
struct  personel{
int  perNumara;
char  adi[12];
char soyadi[12];
int  maas;
};
struct  personel  calisanlar[N];

Ana programdan çağıracağınız menü() fonksiyonunda aşağıdaki temel işlemler bulunacak ve her işlem ayrı bir fonksiyon içerisinde yürütülecektir.

1.    Dosyadan Okuma dizine aktarma, Sıralama/Listeleme işlemleri
•    “personel.txt” dosyasından bilgiler okunarak yukarıda tanımı verilmiş bulunan dizinli yapı değişkenine aktarılacak ve kabarcık(Bubble sort) mantığı kullanılarak personal numarası sırasında sıralanacaktır(küçükten büyüğe sırada).
•    Sıralanmış olan personel bilgileri(Personel numarası, Adı, Soyadı, maaşı), her sayfada 30 kişinin bilgisi bulunacak şekilde monitörden listelenecektir.

2.    İsme göre sıralam işlemi
Bir önceki adımda dosyadan okunup dizinli yapı değişkenine aktarılmış bulunan bilgileri kullanarak yalnızca isme(adı) göre sıralama işlemi yapınız(küçükten büyüğe sırada) ve bir önceki adımda anlatıldığı gibi listeleyiniz(Seçmeli sıralama(Selection sort) mantığını uygulayınız, isim karşılaştırmalarında sözce(string) fonksiyonlar kullanılacaktır(strcmp()).

3.    Yeni personel Ekleme
Ekrandan yeni bir personelin girişini yaparak(personel numarası, adı, soyadı, maaş bilgisi istenecek), ilk adımda yaratmış olduğunuz dizinli sıralı yapı değişkenine kişinin bilgisini doğru konuma ekleyiniz ve ilk şıkta olduğu gibi  listeleyiniz

4.    Arama işlemini
Personel Numarası girilen kişinin ikili arama(binary search) arama yöntemi kullanılarak aranıp bulunması ve kişinin bilgilerinin monitörden listelenmesi. Belirtilen numaralı kişi yoksa “Bulunamadı” mesajı verilmesi.

5.    Arayıp slime işlemi
Personel numarası girilen kişinin sıradan arama metodu(Sequential sort) kullanılarak aranıp bulunması  ve ekrandan onaylanarak silinmesi ve de tüm personel bilgilerinin birinci bölümde olduğu gibi listelenmesi(kişinin silinip silinmediğini anlıyabilmek için bu listeleme gereklidir)

#include<stdio.h>
#include<string.h>
#define N 100
int t,Sayi=0;
struct personel
{
long int perNumara;
char adi[12];
char soyadi[12];
long int maas;
};
struct personel calisanlar[N];

void dosya_okuma (){
FILE *kayitlar;
int i=0,wordnumber=1,wordnumarr[N]={0};
char secbirinciad[12];
kayitlar=fopen(“c:\\personel.txt”,”r”);
while(!feof(kayitlar)) {
fscanf(kayitlar,”%d “,&calisanlar[i].perNumara);
fscanf(kayitlar,”%s “,&calisanlar[i].adi);
fscanf(kayitlar,”%s “,&calisanlar[i].soyadi);
fscanf(kayitlar,”%d “,&calisanlar[i].maas);
Sayi++;
i++;
}
}
void baloncuk_siralama (struct personel Degis [], int dizi)
{
struct personel tmp;
for (int i=0; i<dizi-1; i++)
{
for (int j=0; j<dizi-1-i; j++)
if (Degis[j+1].perNumara < Degis[j].perNumara)
{
tmp = Degis[j];
Degis[j] = Degis[j+1];
Degis[j+1] = tmp;
}
}
}

void isim_siralama(struct personel Degis[], int dizi)
{
int i, j, min;
struct personel temp;
for (i = 0; i < dizi-1; i++)
{
min = i;
for (j = i+1; j < dizi; j++)
{
if (strcmp(Degis[min].adi, Degis[j].adi)>0)
min = j;
}
temp = Degis[i];
Degis[i] = Degis[min];
Degis[min] = temp;
}
}

void yeniEkle()
{
FILE *kayitlar;
long int perno,ucret;
char birinciad[12],ikinciad[12];
printf(“Personel Numarasi Giriniz :”);
scanf(“%d”,&perno);
printf(“Personel Isimi Giriniz :”);
scanf(“%s”,&birinciad);
printf(“Personel Soyismi Giriniz :”);
scanf(“%s”,&ikinciad);
printf(“Personel Ayligi Giriniz :”);
scanf(“%d”,&ucret);

calisanlar[Sayi].perNumara=perno;
strcpy(calisanlar[Sayi].adi,birinciad);
strcpy(calisanlar[Sayi].soyadi,ikinciad);
calisanlar[Sayi].maas=ucret;
Sayi++;
baloncuk_siralama(calisanlar,Sayi);
}

void ikili_siralama()
{
int Alcak = 0;
int Yuksek = Sayi – 1,orta,perno;
printf(“Personel Numarasini Giriniz :”);
scanf(“%d”,&perno);
while (Alcak <= Yuksek)
{
orta = (Alcak + Yuksek) / 2;
if (calisanlar[orta].perNumara == perno)
break;
if (calisanlar[orta].perNumara > perno)
Yuksek = orta – 1;
else
Alcak = orta + 1;
}
if (Alcak > Yuksek)
printf(“Personel Bulunamadi ! \n”);
else
printf(“%d %s %s %d\n”,calisanlar[orta].perNumara,calisanlar[orta].adi,calisanlar[orta].soyadi,calisanlar[orta].maas);
}

void ara_sil()
{
char birinciad[12],ikinciad[12];
printf(“Personel Adini Giriniz : “);
scanf(“%s”,&birinciad);
printf(“Personel Soyadini Giriniz : “);
scanf(“%s”,&ikinciad);
for(int t=0; t < Sayi; ++t) {
if(strcmp(birinciad,calisanlar[t].adi)==0 && strcmp(ikinciad,calisanlar[t].soyadi)==0)
printf(“%d %s %s %d\n”,calisanlar[t].perNumara,calisanlar[t].adi,calisanlar[t].soyadi,calisanlar[t].maas);
}
baloncuk_siralama(calisanlar,Sayi);
}

void ara_silperno()
{
int perno;
char arzu;
int silmek;
printf(“Personel Numarasini Giriniz :”);
scanf(“%d”,&perno);
for(int t=0; t < Sayi; t++)
if(perno==calisanlar[t].perNumara)
{
printf(“Emin misiniz ? evet/hayit (E/H) “);
scanf(“%s”,&arzu);
if(arzu==’E’ || arzu==’e’)
{
silmek=1;
}
else {
silmek=2;
}
if(silmek==1)
{
for(int i=t;i<Sayi;i++)
calisanlar[i]=calisanlar[i+1];
Sayi–;
break;
}
else
break;
}

if(t==Sayi)

printf(“Numara Bulunamadi ! \n”);

baloncuk_siralama(calisanlar,Sayi);

}

int main()
{
dosya_okuma();
int sislem;

do
{
printf(“1.Dosyadan Oku ve Listele\n”);
printf(“2.Isme Gore Sirala\n”);
printf(“3.Yeni Personel Ekle\n”);
printf(“4.Ikili Arama\n”);
printf(“5.Ara ve Sil\n”);
printf(“6.Cikis\n”);
scanf(“%d”,&sislem);
if(sislem==1)
{
baloncuk_siralama(calisanlar,Sayi);
for(int i=1;i<=Sayi;i++)
{
printf(“%d %s %s %d\n”,calisanlar[i].perNumara,calisanlar[i].adi,calisanlar[i].soyadi,calisanlar[i].maas);
if(i%30==0)
printf(“——————————-\n”);
}
}
else if(sislem==2)
{
isim_siralama(calisanlar,Sayi);
for(int i=0;i<Sayi;i++)
printf(“%d %s %s %d\n”,calisanlar[i].perNumara,calisanlar[i].adi,calisanlar[i].soyadi,calisanlar[i].maas);
}
else if(sislem==3)
{
yeniEkle();
baloncuk_siralama(calisanlar,Sayi);
for(int i=0;i<Sayi;i++)
printf(“%d %s %s %d\n”,calisanlar[i].perNumara,calisanlar[i].adi,calisanlar[i].soyadi,calisanlar[i].maas);
}
else if(sislem==4)
{
baloncuk_siralama(calisanlar,Sayi);
ikili_siralama();
}

else if(sislem==5)
{
baloncuk_siralama(calisanlar,Sayi);
ara_silperno();
}
}while(sislem!=6);
return 0;
}

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.