Bir sınıftaki öğrencilerin numarası, adı, vize notu ve final notu bilgileri üzerinde çeşitli işlemler yapabilecek program

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Ogrenci{
int ogrenci_no;
char adi[20];
char soyadi[30];
int vize_notu;
int final_notu;
}; typedef struct Ogrenci Ogrenci;
void OgrenciBilgileriniGoster(Ogrenci o1)
{
printf("\n----------------------------------------");
printf("\nNumarasi : %d",o1.ogrenci_no);
printf("\nAdi : %s",o1.adi);
printf("\nSoyadi : %s",o1.soyadi);
printf("\nVize Notu : %d",o1.vize_notu);
printf("\nFinal Notu : %d",o1.final_notu);

}
int menu(){
int secim;
printf("\n**************************************************\n");
printf("-----------------MENU-----------------");
printf("\nYeni Kayit Ekleme (1)");
printf("\nKayit Listeleme (2)");
printf("\nKayit Guncelleme (3)");
printf("\nSinif Ortalamasi Hesaplama (4)");
printf("\nOrtalamaya Gore En Basarili Ogrenci Bilgisini Goster (5)");
printf("\n Cikis icin -1 Girin");
printf("\nSecimini Gir : ");
scanf("%d",&secim);
printf("\n**************************************************\n");
return secim;
}

void YeniKayitEkleme(struct Ogrenci *p1,int ogrenci_sayisi)
{

struct Ogrenci og1;
//Ogrenci Ekleme
p1=(Ogrenci *)realloc(p1,(ogrenci_sayisi+1)*sizeof(Ogrenci));
printf("\nAdi :");
scanf("%s",&og1.adi);
printf("\nSoyadi :");
scanf("%s",&og1.soyadi);
printf("\nOgrenci No : ");
scanf("%d",&og1.ogrenci_no);
printf("\nVize Notu : ");
scanf("%d",&og1.vize_notu);
printf("\nFinal Notu : ");
scanf("%d",&og1.final_notu);
*(p1+ogrenci_sayisi)=og1;
printf("\nYeni ogrenci eklendi");
}
void KayitListele(Ogrenci *p1,int ogrencisayisi)
{
int ogrenci_no;
int secim=-1;
int i=0;
Ogrenci o1;
int not_siralama;
int secim1,secim2;
printf("\n1- Tum Ogrencileri Listele");
printf("\n2-Ogrenci Numarasina Gore Goster");
printf("\n3-Vize-Final Notuna Göre Listele");
printf("\nSecimin : ");
scanf("%d",&secim);

switch(secim)
{
case 1:
//Tüm öðrencileri Listele

for(i=0;i<ogrencisayisi;i++)
{
o1=*(p1+i);
OgrenciBilgileriniGoster(o1);
}
break;
case 2:
//Öðrenci Numarasýna Göre Göstereceðiz
printf("\n Bilgilerini Gormek IStediginiz Ogrencinin Numarasi  : ");
scanf("%d",&ogrenci_no);
for(i=0;i<ogrencisayisi;i++)
{
o1=*(p1+i);
if(ogrenci_no==o1.ogrenci_no)
OgrenciBilgileriniGoster(o1);
}
break;
case 3:
//vize veya final notuna göre listele
printf("\nNot giriniz : ");
scanf("%d",&not_siralama);
printf("\nVize(1) - Final(2) : ");
scanf("%d",&secim1);
printf("\nAlt(1) - Ust(2) : ");
scanf("%d",&secim2);

if(secim1==1)
{//vize

if(secim2==1)
{//vizesi bu limitin üzerinde olan öðrencilerin bilgilerini göster
for(i=0;i<ogrencisayisi;i++)
{
o1=*(p1+i);
if(not_siralama<=o1.vize_notu)
OgrenciBilgileriniGoster(o1);
}
}
else
{//vizesi bu limitin altýnda olan öðrencilerin bilgilerini göster
for(i=0;i<ogrencisayisi;i++)
{
o1=*(p1+i);
if(not_siralama>=o1.vize_notu)
OgrenciBilgileriniGoster(o1);
}
}
}
else if(secim1==2)
{//final

if(secim2==1)
{//final notu bu limitin üzerinde olan öðrencilerin bilgilerini göster
for(i=0;i<ogrencisayisi;i++)
{
o1=*(p1+i);
if(not_siralama<=o1.final_notu)
OgrenciBilgileriniGoster(o1);
}
}
else
{//vize Notu bu limitin altýnda olan öðrencilerin bilgilerini göster
for(i=0;i<ogrencisayisi;i++)
{
o1=*(p1+i);
if(not_siralama>=o1.final_notu)
OgrenciBilgileriniGoster(o1);
}
}
}
break;

}//switch bitimi





}





void KayitGuncelle(struct Ogrenci *p1,int ogrenci_sayisi){
int ogrenci_no;
printf("Lutfen Guncellemek Istediginiz Ogrencinin Numarasini Girin : ");
scanf("%d" ,&ogrenci_no);
int i=0;
for(i=0;i<ogrenci_sayisi;i++)
{
if(p1->ogrenci_no==ogrenci_no)
{
printf("\nOgrencinin Eski Bilgileri : ");
OgrenciBilgileriniGoster(*p1);
break;
}p1++;
}
Ogrenci og1;
printf("\nOgrencini Yeni Bilgileri : ");
printf("\nAdi :");
scanf("%s",&og1.adi);
printf("\nSoyadi :");
scanf("%s",&og1.soyadi);
printf("\nVize Notu : ");
scanf("%d",&og1.vize_notu);
printf("\nFinal Notu : ");
scanf("%d",&og1.final_notu);
og1.ogrenci_no=ogrenci_no;
*(p1)=og1;
printf("\nOgrenci Bilgileri Guncellendi");
}


void OrtalamaHesapla(struct Ogrenci *p1,int ogrenci_sayisi){
int i=0;
float genel_ortalama=0;
float ortalama=0;
float toplam;
for(i=0;i<ogrenci_sayisi;i++)
{
ortalama=(p1->vize_notu*0.4)+(p1->final_notu*0.6);
toplam+=ortalama;
p1++;
}
printf("Toplam Not Ortalamasi : %f ",toplam/(float)ogrenci_sayisi);
}
int EnBasariliOgrenciBilgisiniGoster(struct Ogrenci *p1,int ogrenci_sayisi)
{
Ogrenci max_ogrenci;
int i=0;
float genel_ortalama=0;
float ortalama=0;
float max_ortalama=-1;
int max_ogrenci_numarasi=-1;
for(i=0;i<ogrenci_sayisi;i++)
{
ortalama=(p1->vize_notu*0.4)+(p1->final_notu*0.6);
if(ortalama>max_ortalama)
{
max_ortalama=ortalama;
max_ogrenci=*p1;
}

p1++;
}
printf("\nEn Basarili Ogrenciye Ait Bilgiler : ");
printf("\nNumarasi : %d",max_ogrenci.ogrenci_no);
printf("\nAdi : %s",max_ogrenci.adi);
printf("\nSoyadi : %s",max_ogrenci.soyadi);
printf("\nVize Notu : %d",max_ogrenci.vize_notu);
printf("\nFinal Notu : %d",max_ogrenci.final_notu);
}

int main()
{
int secim=0;
struct Ogrenci *p1;
int ogrenci_sayisi=0;
p1=(Ogrenci*)calloc(1,sizeof(Ogrenci));

while(secim!=-1)
{
secim=menu();
switch(secim)
{
case -1: break;
case 1:YeniKayitEkleme(p1,ogrenci_sayisi);
ogrenci_sayisi++;
break;
case 2:KayitListele(p1,ogrenci_sayisi); break;
case 3:KayitGuncelle(p1,ogrenci_sayisi); break;
case 4:OrtalamaHesapla(p1,ogrenci_sayisi); break;
case 5:EnBasariliOgrenciBilgisiniGoster(p1,ogrenci_sayisi);  break;
}


}


    return 0;
}

Yorumlar