08 OCAK 2018
SALI
10.30
C++ ile OOP - Öğrenci Verilerini İşleyen Program Oluşturma

Bu örneğimiz için soruyu detaylıca aşağıya hazırladım. Sorudaki adımları tek tek örnekten takip edebilirsiniz. Soru ve çözümde aklınıza takılan kısımlar olursa yorum alanından veya sosyal platformlardan sormanız halinde açıklama yapabilirim :)

ÖRNEK

1. Class = dogumTarihi

Değişkenler:

gun (private)
ay (private)
yil (private)

Metotlar:

1. constructor = Eğer herhangi bir veri girilmez ise tarihi 01.01.1997 olarak belirleyin.
2. constructor = Yalnızca ay ve yıl bilgileri girilirse tarihi 01.AY.YIL olarak belirleyin.
3. constructor = Her 3 parametre de girilmiş ise doğrudan değişkenlere eşitleyin.

Get & Set:

gun, ay ve yil değişkenlerine fonksiyon dışından da ulaşabilmek için bu verilere get & set metotlarını yazın.


2. Class = isim

Değişkenler

ad
soyad (private)

Metotlar:

1. constructor = Eğer herhangi bir veri girilmez ise boş değer döndürün.
2. constructor = Yalnızca ad girilmesi halinde soyad için boş değer döndürün.
3. constructor = Her iki parametre de girilmiş ise doğrudan değişkenlere eşitleyin.
Adı ve soyadı birlikte döndüren bir metot yazın.
Yalnızca adın döndürüldüğü ve soyad yerine soyadın karakter sayısı kadar * olan bir metot yazın. (Mert ***** = Mert Topuz gibi..)

Get & Set:

soyad değişkeni private olduğu için get & set metotlarını yazın.


3. Class = ders

Değişkenler

dersKodu (private)
dersAdi

Metotlar:

1. constructor = Eğer herhangi bir veri gelmez ise dersKodu için 0, dersAdi için boş değer döndürün.
2. constructor = Yalnızca dersAdi gelmesi halinde dersKodu'nu 0 olarak geri döndürün.
3. constructor = Her iki parametre de girilmiş ise doğrudan değişkenlere eşitleyin.
dersKodu ve dersAdi'ni tek bir satırda gösteren metot yazın. (104 : OOP gibi)

Get & Set:

dersKodu değişkeni private olduğu için get & set metotlarını yazın.


4. Class = ogrenci

Değişkenler

isim sınıfına bağlı bir ad
dogumTarihi sınıfına bağlı bir dogum
ders sınıfına bağlı bir ogrenciDers
okulNumarasi
ortalama

Metotlar:

1. constructor = Eğer herhangi bir veri gelmez ise okulNumarasi ve ortalama değişkenlerini 0, diğerlerini boş değer döndürün.
2. constructor = Tüm değerlerin gelmesi halinde gerekli eşleşmeleri yapın.
Öğrenciye ait tüm verileri bir tablo ile gösteren metodu yazın.
Öğrencinin yaşını hesaplayan bir metot yazın (direkt 2018'den çıkartın).


Diğer Metotlar

Girilen öğrencileri isme göre sıralayan bir metot yazın.
Girilen öğrencilerde isme göre aramaya yapan bir metot yazın.
Girilen öğrenciler arasında ortalaması en yüksek 5 öğrenciyi yazdıran bir metot yazın.


ÇÖZÜM

#include <iostream>
#include <string> // length()
using namespace std;

class DogumTarihi{
	private: // yazmamıza gerek yok, çünkü class'lar varsayılan olarak private
		int gun;
		int ay;
		int yil;
		
	public:
		DogumTarihi(){
			gun = 1;
			ay = 1;
			yil = 1997;
		}
		DogumTarihi(int ay2, int yil2){
			gun = 1;
			ay = ay2;
			yil = yil2;
		}
		DogumTarihi(int gun2, int ay2, int yil2) {
			gun = gun2;
			ay = ay2;
			yil = yil2;
		}
		
		int getGun(){return gun;}
		void setGun(int gun2){gun = gun2;}
		int getAy(){return ay;}
		void setAy(int ay2){ay = ay2;}
		int getYil(){return yil;}
		void setYil(int yil2){yil = yil2;}
		
};

class Isim{
	string soyad;
	public:
		string ad;
		
		Isim(){
			ad = "";
			soyad = "";
		}
		Isim(string ad2) {
			ad = ad2;
			soyad = "";
		}
		Isim(string ad2, string soyad2) {
			ad = ad2;
			soyad = soyad2;
		}
		
		string isim_adSoyad(){
			return ad+" "+soyad;
		}
		
		string isim_ad(){
			int karakterSayisi = soyad.length();
			string yildiz = "";
			for(int i=0; i<karakterSayisi; i++) {
				yildiz += "*";
			}
			return ad+" "+yildiz;
		}
		
		string getSoyad(){return soyad;}
		void setSoyad(string soyad2){soyad = soyad2;}
};

class Ders{
	double dersKodu;
	public:
		string dersAdi;
		
		Ders(){
			dersKodu = 0;
			dersAdi = "";
		}
		Ders(string dersAdi2) {
			dersKodu = 0;
			dersAdi = dersAdi2;
		}
		Ders(double dersKodu2, string dersAdi2) {
			dersKodu = dersKodu2;
			dersAdi = dersAdi2;
		}
		
		string dersBilgi(){
			char dersKod[32];
			snprintf(dersKod, sizeof(dersKod), "%g", dersKodu);
			dersAdi = " : " + dersAdi;
			return dersKod + dersAdi;
		}
		
		double getDersKodu(){return dersKodu;}
		void setDersKodu(double dersKodu2) {dersKodu = dersKodu2;}
};

class Ogrenci{
	public:
		Isim ad;
		DogumTarihi dogum;
		Ders ogrenciDers;
		int okulNumarasi;
		double ortalama;
		
		Ogrenci(){
			okulNumarasi = 0;
			ortalama = 0;
			// Diğer değişkenler zaten varsayılan constructorlara göre çalışacak.
		}
		Ogrenci(Isim ad2, DogumTarihi dogum2, Ders ogrenciDers2, int okulNumarasi2, double ortalama2) {
			ad = ad2;
			dogum = dogum2;
			ogrenciDers = ogrenciDers2;
			okulNumarasi = okulNumarasi2;
			ortalama = ortalama2;
		}
		
		void ogrenciBilgi(){
			cout << "\n----------------------------------------\n";
			cout << "OGRENCI = " << ad.isim_ad();
			cout << "\n----------------------------------------\n";
			cout << "Okul Numarasi\t: " << okulNumarasi << endl;
			cout << "Adi\t\t: " << ad.isim_adSoyad() << endl;
			cout << "Dogum Tarihi\t: " << dogum.getGun() << "/" << dogum.getAy() << "/" << dogum.getYil() << endl;
			cout << "Ders\t\t: " << ogrenciDers.dersBilgi() << endl;
			cout << "Ortalama\t: " << ortalama << endl;
			cout << "----------------------------------------\n";
		}
		
		int yas(){
			return 2018-dogum.getYil();
		}
		
};

void sirala_ismeGore(Ogrenci B[], int ogrenciSayisi){
	for(int i = 1; i<ogrenciSayisi; i++) {
		for(int j = 0; j<ogrenciSayisi-i; j++) {
			if(B[j].ad.isim_adSoyad().compare(B[j+1].ad.isim_adSoyad()) > 0) {
				Ogrenci araci = B[j];
				B[j] = B[j+1];
				B[j+1] = araci;
			}
		}
	}
	
	for(int i=0; i<ogrenciSayisi; i++) {
		B[i].ogrenciBilgi();
	}
}
void ara_ismeGore(string arananIsim, Ogrenci B[], int ogrenciSayisi){
	for(int i = 1; i<ogrenciSayisi; i++) {
		if(B[i].ad.isim_adSoyad().compare(arananIsim) == 0) {
			B[i].ogrenciBilgi();
			break;
		}
	}
}

void ortalamaIlk5(Ogrenci B[], int ogrenciSayisi){
	double ortalamalar[5] = {0,0,0,0,0};
	for(int i=0; i<ogrenciSayisi; i++) {
		for(int j=0; j<ogrenciSayisi; j++) {
			if(B[i].ortalama > ortalamalar[j]) {
				double araci = ortalamalar[j];
				ortalamalar[j] = B[i].ortalama;
				ortalamalar[j+1] = araci;
				break;
			}
		}
	}
	
	for(int i=0; i<5; i++) {
		cout << ortalamalar[i] << endl;
	}
}


int main(){
	
	Ogrenci A[7];
	
	A[0] = Ogrenci(Isim("Mert", "Topuz"), DogumTarihi(8,5,1997), Ders(104, "OOP"), 485, 3.7);
	A[1] = Ogrenci(Isim("Ahmet"), DogumTarihi(2,2,1996), Ders(103, "Data Structure"), 450, 3.2);
	A[2] = Ogrenci(Isim("Veli", "Can"), DogumTarihi(3,5,1992), Ders(104, "OOP"), 420, 3.9);
	A[3] = Ogrenci(Isim("Omer", "Bilir"), DogumTarihi(1,9,1994), Ders(102, "Computer Architecture"), 175, 2.2);
	A[4] = Ogrenci(Isim("Kaan", "Okur"), DogumTarihi(1,1,1997), Ders(104, "OOP"), 525, 2.9);
	A[5] = Ogrenci(Isim("Mehmet", "Kara"), DogumTarihi(16,10,1995), Ders(103, "Data Structure"), 300, 4);
	A[6] = Ogrenci(Isim("Mustafa", "Kugu"), DogumTarihi(3,7,1994), Ders(104, "OOP"), 750, 2.5);
	
	cout << "ISME GORE SIRALAMA";
	sirala_ismeGore(A, 7);
	
	cout << "ISME GORE ARAMA";
	ara_ismeGore("Mert Topuz", A, 7);
	
	cout << "ILK 5" << endl;
	ortalamaIlk5(A, 7);
	
}

ÇIKTI

YORUMLAR 0
Bu konuya henüz kimse yorum yapmadı.
İlk yorumu sen yapmak ister misin?
YORUM BIRAK
Şuanda bu yoruma cevap yazıyorsunuz:
İptal Et