Bağlı Liste - Öğrenci otomasyonu (6. Hafta LAB)
1) Bir sınıftaki öğrencilerin numarası, adı, vize notu ve final notu bilgilerini tek bağlı doğrusal listede tutan ve üzerinde çeşitli işlemler yapabilecek bir program yazınız. Programın özellikleri aşağıda verilmiştir:
a) Program bir ana menü ile açılacak. Menüde olacak seçenekler şu şekildedir:
1- Yeni Kayıt Ekleme
2- Kayıt Listeleme
3- Kayıt Güncelleme
4- Kayıt Silme
5- Sınıf Ortalaması Hesapla
6- Ortalamaya Göre En Başarılı Öğrenci Bilgisini Göster
b) Kayıt listeleme menüsü seçildiğinde açılacak alt menüdeki seçenekler şu şekilde olacak:
1- Numaraya göre ara
*Aranacak öğrenci no girilecek ve uyan kayıt varsa tüm bilgisi listelenecek.
2- İsme göre ara
*Aranacak isim girilecek ve uyan kayıtların hepsi listelenecek.
3- Başarı notu 60 ve üzeri olanları listele
c) Kayıt güncelleme ve silmede öğrenci no sorulacak ve kayıt bulunursa ad, vize ve final bilgisi güncellenebilecek.
2) Yukarıda yazdığınız program için bir fonksiyonu yazınız. Fonksiyon listede yer alan ilk kayıt ile son kaydı yer değiştirecektir. Fonksiyonu ana menüye ekleme yaparak çağırınız.
3) Yukarıda yazdığınız program için bir fonksiyonu yazınız. Fonksiyon listede başarı notu 60’ın altında olan öğrencileri listeden silecektir. Fonksiyonu ana menüye ekleme yaparak çağırınız.
4) Yukarıda yazdığınız program için bir fonksiyonu yazınız. Fonksiyon ismi “Ahmet” olan tüm kayıtları “AHMET” olarak güncellesin. Fonksiyonu ana menüye ekleme yaparak çağırınız.
Çözüm:
#include <stdio.h>
#include <stdlib.h>
struct student_info
{
int number;
char name[40];
int midterm;
int final;
struct student *next;
};
typedef struct student_info student;
student *addStudent(student *);
student *deleteStudent(student *);
void listStudents(student *);
void showStudentInfo(student *);
void updateStudent(student *);
void calculateClassAverage(student *);
void showBestStudent(student *);
void main()
{
int s;
student *head = NULL;
while(1)
{
printf("1 - Add New Student\n"
"2 - List Students\n"
"3 - Update Student\n"
"4 - Delete Student\n"
"5 - Calculate Class Average\n"
"6 - Show Best Student\n");
printf("Choose [1-6]:");
scanf("%d", &s);
system("cls");
if(s == 1) head = addStudent(head);
else if(s == 2) listStudents(head);
else if(s == 3) updateStudent(head);
else if(s == 4) head = deleteStudent(head);
else if(s == 5) calculateClassAverage(head);
else if(s == 6) showBestStudent(head);
}
}
student *addStudent(student *h)
{
student *p;
p = h;
if(p == NULL)
{
h = (student *) malloc(sizeof(student));
p = h;
}
else
{
while(p->next != NULL)
p = p->next;
p->next = (student *) malloc(sizeof(student));
p = p->next;
}
printf("Enter number:");
scanf("%d", &p->number);
printf("Enter name:");
scanf("%s", &p->name);
printf("Enter midterm:");
scanf("%d", &p->midterm);
printf("Enter final:");
scanf("%d", &p->final);
p->next = NULL;
return h;
}
void listStudents(student *h)
{
int s, recordNo;
char name[40];
student *p;
p = h;
printf("0-All students\n"
"1-Filter by number\n"
"2-Filter by name\n"
"3-Filter by passing grade\n");
printf("Select s:");
scanf("%d", &s);
if(s == 0)
{
while(p != NULL)
{
printf("***********************\n");
printf("number: %d \t\t Name:%s\n", p->number, p->name);
printf("Midterm: %d \t\t Final: %d\n", p->midterm, p->final);
p = p->next;
}
}
if(s == 1)
{
printf("Enter number:");
scanf("%d", &recordNo);
while(p != NULL)
{
if(p->number == recordNo)
{
showStudentInfo(p);
break;
}
p = p->next;
}
if(p == NULL)
printf("number student to list\n");
}
else if(s == 2)
{
printf("Enter name:");
scanf("%s", name);
while(p != NULL)
{
if(strcmp(name, p->name) == 0)
{
showStudentInfo(p);
}
p = p->next;
}
}
else if(s == 3)
{
int passingGrade;
while(p != NULL)
{
passingGrade = (0.4 * p->midterm) + (0.6 * p->final);
if(passingGrade >= 60)
{
showStudentInfo(p);
}
p = p->next;
}
}
}
void showStudentInfo(student *std)
{
printf("***********************\n");
printf("number: %d \t\t Name:%s\n", std->number, std->name);
printf("Midterm: %d \t\t Final: %d\n", std->midterm, std->final);
}
student * deleteStudent(student *h)
{
int recordNo;
student *p, *q;
p = h;
printf("Enter student number to delete:");
scanf("%d", &recordNo);
if(p->number == recordNo)
{
h = p->next;
free(p);
}
else
{
while(p->number != recordNo && p->next != NULL)
{
q = p;
p = p->next;
}
if(p->number == recordNo)
{
q->next = p->next;
free(p);
}
else if(p->next == NULL)
{
printf(" No student found to delete...");
}
}
return h;
}
void updateStudent(student *h)
{
int recordNo;
student *p;
p = h;
printf("Enter student number to update:");
scanf("%d", &recordNo);
while(p != NULL)
{
if(p->number == recordNo)
{
printf("Enter name:");
scanf("%s", &p->name);
printf("Enter midterm:");
scanf("%d", &p->midterm);
printf("Enter final:");
scanf("%d", &p->final);
break;
}
p = p->next;
}
if(p == NULL) printf("No student found to update\n");
}
void calculateClassAverage(student *h)
{
int midTotal = 0, finTotal = 0, counter = 0;
double generalAverageTotal = 0, midAvg, finalAvg, generalAvg;
student *p;
p = h;
while(p != NULL)
{
midTotal += p->midterm;
finTotal += p->final;
generalAverageTotal += (0.4 * p->midterm) + (0.6 * p->final);
counter++;
p = p->next;
}
midAvg = (double) midTotal / counter;
finalAvg = (double) finTotal / counter;
generalAvg = (double) generalAverageTotal / counter;
printf("Midterm Average : %.2f\n", midAvg);
printf("Final Average : %.2f\n", finalAvg);
printf("Overall Average : %.2f\n", generalAvg);
}
void showBestStudent(student *h)
{
double maxAverage, average;
student *p, *q;
p = h;
q = p;
maxAverage = (0.4 * p->midterm) + (0.6 * p->final);
p = p->next;
while(p != NULL)
{
average = (0.4*p->midterm)+(0.6*p->final);
if(average > maxAverage)
{
maxAverage = average;
q = p;
}
p = p->next;
}
printf("Best student information:\n");
}
Yorumlar
Yorum Gönder