İçeriğe geç

Görev Takip Programı

Parçaları öğrendin. Şimdi onları bir araya getir. Bu rehber, adım adım küçük bir görev takip programı yazmanı sağlar. Sonunda görevleri saklayan, tamamlandı olarak işaretleyen ve özet çıkaran çalışan bir programın olacak.

Program şunları yapmana izin verecek:

  • Başlık ve öncelikle (Düşük, Orta, Yüksek) görev ekleme
  • Bir görevi tamamlandı olarak işaretleme
  • Tüm görevleri durumlarıyla birlikte listeleme

Bir oturum şöyle görünür:

--- Görevler ---
[ ] Market alışverişi (Orta)
[x] Faturaları öde (Yüksek)
[ ] Annemi ara (Düşük)
Tamamlanan: 1 / 3

İki şeye ihtiyacımız var: bir görevi temsil edecek yapı ve birden fazla görevi saklayacak yer.

enum Oncelik { Dusuk, Orta, Yuksek }
struct Gorev {
string baslik;
Oncelik oncelik;
bool tamamlandi;
}

enum Oncelik bize üç isimlendirilmiş seviye verir. struct Gorev bir başlığı, önceliği ve tamamlanma durumunu tek bir birimde toplar. gorevler.sqt adında bir dosya oluştur ve bunu en üste koy.

Görevleri bir dizide tutacağız. Kaç görev olacağını bilmediğimiz için boş bir diziyle başlayıp sonuna ekleyeceğiz:

Gorev[] gorevler;

Görev oluşturup ekleyen bir fonksiyon yaz:

void gorevEkle(string baslik, Oncelik oncelik) {
Gorev g;
g.baslik = baslik;
g.oncelik = oncelik;
g.tamamlandi = false;
gorevler.append(g);
}

gorevler.append(g), g’yi dizinin sonuna koyar ve diziyi bir büyütür.

Bir görevi konumuna göre bulup işaretlemenin yolunu yazalım:

void tamamlandiIsaretle(int indeks) {
if (indeks >= 0 && indeks < gorevler.length) {
gorevler[indeks].tamamlandi = true;
}
}

if kontrolü sınırların dışına çıkmayı engeller.

Şimdi her görevin üzerinde dönüp yazdıralım:

string oncelikEtiketi(Oncelik o) {
switch (o) {
case Oncelik.Dusuk: return "Düşük";
case Oncelik.Orta: return "Orta";
case Oncelik.Yuksek: return "Yüksek";
}
return "";
}
void gorevleriYazdir() {
print("--- Görevler ---");
int tamamSayisi = 0;
for (int i = 0; i < gorevler.length; i = i + 1) {
string kutu = "[ ]";
if (gorevler[i].tamamlandi) {
kutu = "[x]";
tamamSayisi = tamamSayisi + 1;
}
print(kutu + " " + gorevler[i].baslik +
" (" + oncelikEtiketi(gorevler[i].oncelik) + ")");
}
print("Tamamlanan: " + (tamamSayisi as string) + " / " +
(gorevler.length as string));
}

Şimdi main her şeyi birbirine bağlar:

int main() {
gorevEkle("Market alışverişi", Oncelik.Orta);
gorevEkle("Faturaları öde", Oncelik.Yuksek);
gorevEkle("Annemi ara", Oncelik.Dusuk);
tamamlandiIsaretle(1); // ikinci görev (indeks 1)
gorevleriYazdir();
return 0;
}

İşte dosyanın tam hali:

enum Oncelik { Dusuk, Orta, Yuksek }
struct Gorev {
string baslik;
Oncelik oncelik;
bool tamamlandi;
}
Gorev[] gorevler;
void gorevEkle(string baslik, Oncelik oncelik) {
Gorev g;
g.baslik = baslik;
g.oncelik = oncelik;
g.tamamlandi = false;
gorevler.append(g);
}
void tamamlandiIsaretle(int indeks) {
if (indeks >= 0 && indeks < gorevler.length) {
gorevler[indeks].tamamlandi = true;
}
}
string oncelikEtiketi(Oncelik o) {
switch (o) {
case Oncelik.Dusuk: return "Düşük";
case Oncelik.Orta: return "Orta";
case Oncelik.Yuksek: return "Yüksek";
}
return "";
}
void gorevleriYazdir() {
print("--- Görevler ---");
int tamamSayisi = 0;
for (int i = 0; i < gorevler.length; i = i + 1) {
string kutu = "[ ]";
if (gorevler[i].tamamlandi) {
kutu = "[x]";
tamamSayisi = tamamSayisi + 1;
}
print(kutu + " " + gorevler[i].baslik +
" (" + oncelikEtiketi(gorevler[i].oncelik) + ")");
}
print("Tamamlanan: " + (tamamSayisi as string) + " / " +
(gorevler.length as string));
}
int main() {
gorevEkle("Market alışverişi", Oncelik.Orta);
gorevEkle("Faturaları öde", Oncelik.Yuksek);
gorevEkle("Annemi ara", Oncelik.Dusuk);
tamamlandiIsaretle(1);
gorevleriYazdir();
return 0;
}

Çalıştır:

Terminal window
saqut run gorevler.sqt

Çıktı:

--- Görevler ---
[ ] Market alışverişi (Orta)
[x] Faturaları öde (Yüksek)
[ ] Annemi ara (Düşük)
Tamamlanan: 1 / 3
Kavram Nerede
enum Öncelik seviyeleri
struct Görev verisi
Dizi Görev listesi
Fonksiyon gorevEkle, tamamlandiIsaretle, oncelikEtiketi, gorevleriYazdir
for döngüsü Görevler üzerinde dönme
if / else Onay kutusu ve sınır kontrolü
switch Öncelik etiketi
as (dönüşüm) int’i string’e çıktı için
String birleştirme print() içinde +
.length Dizi boyutu
.append() Diziye ekleme
  • İndekse göre görev silen bir gorevSil fonksiyonu ekle
  • Görevleri yüksek öncelikliler önce gelecek şekilde sırala
  • Görev başlıklarını kullanıcıdan oku (şimdilik bir yer tutucuyla)
  • Gorev struct’ına bir son tarih alanı ekle

Bu program önceki sayfalardaki özellikleri tek bir yerde birleştirir: struct ve enum ile veri modelleme, bir dizide saklama, for döngüsüyle yineleme, koşullar, bir switch ve biçimlendirilmiş çıktı. Yukarıdaki alıştırmalar onu aynı tarzda genişletir.