Kütüphane Üye Sistemi uygulaması, kullanıcıların kütüphaneye üyue olmasını, kitap ödünç almasını, kitap puanlamasını ve kitapların yönetimini sağlayan bir Android uygulamasıdır. Bu projede, hem etkileşimli hem de veri yönetimi açısından pratik bir deneyim sunar.
Geliştirdiğimiz uygulama şu özelliklere sahip olacaktır:
Açılış Ekranı: Uygulama açılırken kullanıcıyı karşılayan karşılama ekranı.
Rol Tabanlı Giriş ve Kayıt: Normal kullanıcılar (Üye) ve Yöneticiler (Admin) için farklı yetkilerle giriş ve yeni üye olma sistemi.
Yetkiye Göre Yönlendirme: Yönetici girişine özel "Kitap İşlemleri Menüsü" ve normal üyeye özel "Kütüphane Paneli" ayrımı.
Barkod Okutma: Kamerayı kullanarak eklenecek yeni kitapların barkodlarını okuyabilme.
Kapak Fotoğrafı Yükleme: Kitapları sisteme kaydederken galeri veya kamera aracılığıyla kitaba özel kapak resmi ekleyebilme.(Glide ile görüntüleme)
Kitap Arşivi (CRUD): Yönetici paneli üzerinden yeni kitap ekleme, mevcut kitap bilgisini düzenleme ve sistemden kaldırma işlemleri.
Ödünç Alma ve Süre Takibi: Kitapların üyeler tarafından ödünç alınabilmesi ve otomatik olarak sistem üzerinden 15 günlük iade süresi tanımlanması.
Kitap İade ve Değerlendirme Sistemi: Okunan kitap iade edilirken uygulamanın kitaba puan verilmesini sağlaması ve toplam puanı hesaplaması.
Dinamik Listeleme: Verilen puanlar, kapak resimleri, yazar bilgisi ve kitabın rafta/ödünçte olma durumunun listeler üzerinde detaylıca gösterilmesi.
İstatistik Ekranı: Kütüphane içerisindeki verilerin ve puanların takip edilebilmesi.
Anlık Geri Bildirim: Yapılan her işlemde (Başarılı giriş, kitap eklendi, kitap kaydedilmedi vs.) kullanıcıya Toast Mesajı ile anlık bilgi verilmesi.
Bu proje ile aşağıdaki (temel ve ileri düzey) Android konularını öğrenmiş ve pekiştirmiş olacaksınız:
XML ile Gelişmiş Arayüz Tasarımı: ConstraintLayout ve Material Design öğelerinin (MaterialButton, CardView vs.) kullanımı.
Yerel Veritabanı ve SQLite: SQLiteOpenHelper sınıfı ile veritabanı alt yapısı kurma, tablo oluşturma ve versiyon yönetimi.
Veritabanı CRUD İşlemleri: Cursor kullanımı ile SQL üzerinden kayıt ekleme (Insert), silme (Delete), güncelleme (Update) ve listeleme (Select).
RecyclerView ve Custom Adapter Mimarisi: Büyük veri kümelerini (kitap listesini) ekrana aktarmayı sağlayan RecyclerView ve Adapter mantığı.
Nesne Yönelimli Programlama (OOP): Tablo verilerini işleyebilmek için Model (Getter/Setter sınıfı - Kitap.java) tasarlama.
Harici Kütüphane Entegrasi: Gradle dosyasına dış kütüphaneler ekleme(Görseller→Glide, barkod okuma→Google Play Services Code Scanner)
İzin (Permission) ve Manifest Yönetimi: Uygulamanın çalışması için gerekli olan Dosya Okuma/Yazma ve Kamera/İnternet gibi izinlerin yönetilmesi.
Intent ile Veri Transferi: Ekranlar (Activity) arası geçiş işlemleri ve putExtra / getIntent ile yeni açılan ekrana bilgi gönderme.
Kullanıcı Etkileşimleri: Çeşitli Button Click Listener olayları ve Listelere tıklanıldığında açılır (Pop-up/Mesaj) ekranlar gösterme.
Kontrol ve Döngü Yapıları: Kimlik doğrulama, tarihler arası işlem veya veri alma sırasında Array (Diziler) ve ArrayList, if-else, try-catch kullanımı.
Uygulama Akışı:
Açılış (Splash) animasyonu gösterilir.
Karşılama ve giriş ekranı (Login) belirir. Yeni kullanıcılar "Kayıt Ol" butonuna basarak kayıt ekranına geçebilir.
Sistem girişi sırasında kullanıcının rolü (Admin veya Üye) veritabanından çekilir ve doğrulanır.
Admin Giriş Yaparsa: Kitap İşlemleri menüsüne yönlendirilir. Buradan kütüphaneye yepyeni bir kitap (barkod okutarak ve kapak resmi seçerek) eklenebilir, olan kitaplar düzenlenebilir veya silinebilir.
Üye Giriş Yaparsa: Kütüphane Paneli Menüsüne yönlendirilir. Yönetici işlemlerini göremez, sadece kitaplar listesini açarak rafta olan bir kitabı 15 günlüğüne ödünç alabilir.
Eğer üyede bir kitap mevcutsa, bunu tekrar iade ettiğinde sisteme kitap için bir "Değerlendirme Puanı" verir.
Listelenen tüm kitapların kapak resimleri, yazar ve sayfa bilgileri, ödünçte ya da rafta olduğu anlık olarak listelerde güncellenir.
İstenildiği zaman "İstatistik" ekranından sistemdeki kitapların ve okumaların analizleri incelenebilir.
Bu projede temel mimariyi yöneten toplam 11 Activity (Ekran) ve 2 Yardımcı Sınıf yer almaktadır:
SplashActivity → Açılış animasyonunun gösterildiği ilk ekran.
MainActivity → Üye veya Admin olarak giriş yapılan ana ekran.
yeniUye → Sisteme yeni üyelerin kayıt olduğu ekran.
goster → Normal üyelerin yönlendirildiği Kullanıcı paneli.
kitapIslemleri → Yöneticilerin (Admin) yönlendirildiği Kütüphane Yönetim Paneli.
kitapekle → Kamerayla barkod okutulan ve galeri/kameradan kapak fotoğrafıyla birlikte kitabın eklendiği ekran.
kitapDuzenle → Sisteme kayıtlı kitabın bilgilerini değiştirme ekranı.
kitapKaldir → Veritabanından istenilen kitabı fiziksel olarak silme ekranı.
kitapListe → Kitapların (Görseli ve genel özellikleriyle) listelendiği, ayrıca kullanıcıların Ödünç Alma/İade Etme butonlarına ulaştığı liste ekranı.
istatistik → Kütüphanedeki içerik ve okunma istatistiklerinin gösterildiği ekran.
hakkinda → Geliştirici ve uygulama ile ilgili bilgilerin yer aldığı sayfa.
(Yardımcı Sınıflar)
kutuphanedb (Java) → Arka planda veritabanı işlemlerini yürüten SQL Yardımcı sınıfı.
KitapAdapter / Kitap (Java) → Listeleme tasarımını birbirine bağlayan RecyclerView yapısı.
VERİTABANI İŞLEMLERİ (Kayıt Ekleme)
Uygulamada veriler (kitaplar ve üyeler) cihaz hafızasında SQLite veritabanı ile tutulur. ContentValues yapısı sayesinde verileri ilgili sütunlara kolayca ekleyebiliriz.
java
// Yeni bir üye ekleme fonksiyonu (kutuphanedb.java)
public void uyeEkle(String ad, String sifre, String rol) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("ad", ad);
cv.put("sifre", sifre);
cv.put("rol", rol);
db.insert("uyeler", null, cv);
}
KULLANICI GİRİŞ KONTROLÜ (Doğrulama)
Kullanıcı adı ve şifresi girildiğinde Cursor yardımıyla veritabanında okuma (SELECT) yapılarak bilgilerin doğruluğu kontrol edilir.
java
// Kullanıcı doğrulama fonksiyonu
public boolean uyeKontrol(String ad, String sifre) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM uyeler WHERE ad=? AND sifre=?", new String[]{ad, sifre});
boolean sonuc = cursor.getCount() > 0; // Kayıt varsa true, yoksa false döner
cursor.close();
return sonuc;
}
INTENT İLE EKRAN GEÇİŞİ VE VERİ GÖNDERME / ALMA
Giriş yapan kullanıcının "Admin" mi "Üye" mi olduğu veritabanından çekilir ve Intent kullanılarak bir sonraki menüye aktarılır. Yeni ekrandan bu bilgi getIntent ile yakalanır.
java
// Veriyi gönderme (MainActivity)
Intent intent = new Intent(MainActivity.this, goster.class);
intent.putExtra("kullaniciAdi", girilenAd);
intent.putExtra("rolBilgisi", "Uye");
startActivity(intent);
// Diğer ekranda veriyi alma (goster.java)
String gelenAd = getIntent().getStringExtra("kullaniciAdi");
String gelenRol = getIntent().getStringExtra("rolBilgisi");
txtHosgeldin.setText("Hoş Geldiniz, " + gelenAd);
Üye bir kitabı ödünç aldığında durum "odunc_verildi" olarak güncellenir. Sistemin o anki tarihine tam 15 gün eklenerek iade tarihi otomatik olarak veritabanına işlenir.
java
// 15 Gün sonrası için tarih hesaplanması
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd/MM/yyyy", java.util.Locale.getDefault());
String hesaplananTarih = sdf.format(new java.util.Date(System.currentTimeMillis() + (15L * 24 * 60 * 60 * 1000)));
ContentValues cv = new ContentValues();
cv.put("durum", "odunc_verildi");
cv.put("iade_tarihi", hesaplananTarih); // 15 gün sonrası
cv.put("odunc_alan", oduncAlanUye);
db.update("kitaplar", cv, "kitapadi=?", new String[]{kitapAdi});
Sistemde bulunan tüm kitaplar veritabanından okunur ve listede (RecyclerView veya ListView) gösterilebilmesi için bir ArrayList içine aktarılır. Bu sayede görsel listeler dinamik oluşur.
java
// Kitapların listeye çekilmesi
ArrayList<Kitap> liste = new ArrayList<>();
Cursor cursor = db.rawQuery("SELECT * FROM kitaplar", null);
while(cursor.moveToNext()) {
int id = cursor.getInt(0);
String kAd = cursor.getString(1); // kitapadi
String kYazar = cursor.getString(2); // yazar
String kDurum = cursor.getString(5); // durum (rafta)
// Veritabanındaki satırları Kitap nesnesine dönüştürüyoruz
Kitap kitap = new Kitap(id, kAd, kYazar, kDurum);
liste.add(kitap);
}
cursor.close();
Bu XML dosyası, uygulamanın karşılama ve giriş ekranını oluşturur. Kullanıcı adı, şifre kutuları ve "Giriş Yap" butonu burada tanımlanmıştır. Aynı zamanda hesabı olmayanlar için "Yeni Üye Kayıt" bağlantısını içerir.
activity_main.xml
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="40dp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="Kütüphane Sistemi"
android:textSize="28sp"
android:textStyle="bold"
android:layout_marginBottom="40dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/txtGirisAd"
android:hint="Kullanıcı Adı"
android:layout_marginBottom="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/txtGirisSifre"
android:hint="Şifre"
android:inputType="textPassword"
android:layout_marginBottom="30dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btnGirisYap"
android:text="Giriş Yap"
android:layout_width="match_parent"
android:layout_height="50dp"/>
<TextView
android:id="@+id/txtYeniUye"
android:text="Hesabın yok mu? Yeni Üye Kayıt"
android:textColor="#3F51B5"
android:textStyle="bold"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
MainActivity, uygulamanın ilk açılan ekranıdır. Bu sınıfta, kullanıcı adı ve şifre alınarak veritabanından (SQLite) kontrol edilir. Giriş başarılıysa kullanıcının rolü (Admin veya Üye) alınarak, Intent ile ilgili panele yönlendirme sağlanır.
MainActivity.java
java
package com.example.kutuphane;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
EditText txtAd, txtSifre;
Button btnGirisYap;
TextView txtYeniUye;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtAd = findViewById(R.id.txtGirisAd);
txtSifre = findViewById(R.id.txtGirisSifre);
btnGirisYap = findViewById(R.id.btnGirisYap);
txtYeniUye = findViewById(R.id.txtYeniUye);
btnGirisYap.setOnClickListener(v -> {
String adStr = txtAd.getText().toString();
String sifreStr = txtSifre.getText().toString();
if (adStr.isEmpty() || sifreStr.isEmpty()) {
Toast.makeText(MainActivity.this, "Lütfen ad ve şifre girin", Toast.LENGTH_SHORT).show();
} else {
kutuphanedb db = new kutuphanedb(MainActivity.this);
if (db.uyeKontrol(adStr, sifreStr)) {
Toast.makeText(MainActivity.this, "Giriş Başarılı!", Toast.LENGTH_SHORT).show();
// Veritabanından rol bilgisini alıyoruz
String rol = db.uyeRolGetir(adStr);
Intent i = new Intent(MainActivity.this, SplashActivity.class);
i.putExtra("kullanici_adi", adStr);
i.putExtra("kullanici_rol", rol);
startActivity(i);
finish();
} else {
Toast.makeText(MainActivity.this, "Hatalı kullanıcı adı veya şifre", Toast.LENGTH_SHORT).show();
}
}
});
txtYeniUye.setOnClickListener(v -> {
Intent i = new Intent(MainActivity.this, yeniUye.class);
startActivity(i);
});
}
}
Bu kütüphane paneli ekranı, normal üyelerin yönlendirildiği ana ekrandır. Ekranda kullanıcıya özel bir hoş geldin mesajı, sistemdeki kitapları listelemek ve incelemek için özel butonlar yer almaktadır.
activiyt_goster.xml
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="24dp"
android:gravity="center">
<TextView
android:id="@+id/txtHosgeldin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hoş Geldiniz"
android:textSize="22sp"
android:textStyle="bold"
android:layout_marginBottom="30dp" />
<Button
android:id="@+id/btnKitaplariGoster"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="Kütüphanedeki Kitapları Göster"
android:layout_marginBottom="15dp" />
<Button
android:id="@+id/btnIstatistik"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="İstatistiklerim / Profil"
android:layout_marginBottom="15dp"/>
<Button
android:id="@+id/btnCikisYap"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="Çıkış Yap"
android:backgroundTint="@android:color/holo_red_dark"/>
</LinearLayout>
Bu tasarım yönetici olan kullanıcılar için hazırlanmış olan ana menüdür. Yeni kitap ekleme, silme ve düzenleme gibi gelişmiş veritabanı kısımlarına erişimi sağlar.
activity_kitapislemleri.xml
xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Admin Yönetim Paneli"
android:textSize="24sp"
android:textStyle="bold"
android:layout_marginBottom="24dp" />
<Button
android:id="@+id/btnAdminKitapEkle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Yeni Kitap Ekle" />
<Button
android:id="@+id/btnAdminKitapSilDuzenle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Kayıtlı Kitapları Düzenle / Sil" />
</LinearLayout>
Goster Java sınıfı, standart üyelerin arayüzdeki işlemlerini yakalar. MainActivity üzerinden gönderilen kullanıcı adını getIntent() ile alır ve ekrandaki TextView üzerine yazdırır. Böylece üye kendi paneline giriş yaptığını anlar.
goster.java
java
package com.example.kutuphane;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class goster extends AppCompatActivity {
TextView txtHosgeldin;
Button btnKitaplariGoster, btnCikisYap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_goster);
txtHosgeldin = findViewById(R.id.txtHosgeldin);
btnKitaplariGoster = findViewById(R.id.btnKitaplariGoster);
btnCikisYap = findViewById(R.id.btnCikisYap);
// MainActivity ekranından bilgileri alıyoruz
String kullaniciAdi = getIntent().getStringExtra("kullanici_adi");
// Ekrana yansıtıyoruz
txtHosgeldin.setText("Hoş Geldiniz, " + kullaniciAdi);
btnKitaplariGoster.setOnClickListener(v -> {
Intent intent = new Intent(goster.this, kitapListe.class);
intent.putExtra("kullanici_adi", kullaniciAdi);
startActivity(intent);
});
btnCikisYap.setOnClickListener(v -> {
Intent intent = new Intent(goster.this, MainActivity.class);
startActivity(intent);
finish();
});
}
}
Kutuphanedb sınıfı, uygulamanın beynidir. SQLiteOpenHelper sınıfından miras alınarak türetilmiştir. Uygulamadaki kitap ekleme, silme, üye kaydetme ve ödünç/iade sistemi işlemlerinin tümü bu sınıf üzerinden tek elden SQL kodlarıyla işlenir.
kutuphanedb.java
java
package com.example.kutuphane;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class kutuphanedb extends SQLiteOpenHelper {
public static final String DB_ADI = "kutuphane.db";
public static final int DB_VERSIYON = 8;
public kutuphanedb(Context context) {
super(context, DB_ADI, null, DB_VERSIYON);
}
@Override
public void onCreate(SQLiteDatabase db) {
// Kitaplar Tablosunun Oluşturulması
db.execSQL("CREATE TABLE kitaplar (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"kitapadi TEXT," +
"yazar TEXT," +
"sayfa TEXT," +
"kategori TEXT," +
"durum TEXT DEFAULT 'rafta'," +
"odunc_alan TEXT)");
// Üyeler Tablosunun Oluşturulması
db.execSQL("CREATE TABLE uyeler (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"ad TEXT," +
"sifre TEXT," +
"rol TEXT DEFAULT 'Uye')");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS kitaplar");
db.execSQL("DROP TABLE IF EXISTS uyeler");
onCreate(db);
}
// Sisteme Yeni Üye Kaydı (CRUD: Insert İşlemi)
public void uyeEkle(String ad, String sifre, String rol) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("ad", ad);
cv.put("sifre", sifre);
cv.put("rol", rol);
db.insert("uyeler", null, cv);
}
// Sisteme Kitap Kaydı (Resim İçerecek Şekilde)
public void kitapEkle(String kitapAdi, String yazar, String sayfa, String kategori, String resimYolu) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("kitapadi", kitapAdi);
cv.put("yazar", yazar);
cv.put("sayfa", sayfa);
cv.put("kategori", kategori);
cv.put("resim_yolu", resimYolu);
db.insert("kitaplar", null, cv);
}
}
Geliştirilen "Kütüphane Üye Sistemi" adlı Android uygulamasında, modern yazılım mühendisliği prensiplerine uygun olarak görsel arayüz (katman) ile iş mantığı (katmanı) birbirinden izole edilmiştir. Bu izolasyon, eXtensible Markup Language (XML) mimarisi kullanılarak sağlanmıştır. Bu sayede uygulamanın arka plandaki Java kodları (Back-end) karmaşıklıktan arındırılmış, kullanıcı etkileşimini sağlayan arayüzler ve görsel tasarımlar (Front-end) XML dosyaları üzerinden dinamik bir şekilde inşa edilmiştir.
Proje kapsamında kullanılan XML dosyaları işlevlerine göre şunlara ayrılmaktadır:
Uygulama içerisindeki sayfaların (Activity) iskeletini ve kullanıcı arabirimini belirleyen yapı taşıdır. Butonlar, veri giriş alanları (EditText), listeler (RecyclerView/ListView) ve metinlerin sayfadaki pozisyonları Layout dosyalarıyla belirlenir. Tasarımlar kodla manuel yapılabildiği gibi, sürükle-bırak motoruyla da XML formatına dönüştürülebilmektedir.
Projedeki İlgili Dosyalar: activity_main.xml, activity_kitapekle.xml, activity_kitap_liste.xml, item_kitap.xml vb.
Örnek Kod Yapısı (item_kitap.xml - Listelerdeki tek bir kitabın şablon tasarımı):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp">
<!-- Kitap Kapak Görseli -->
<ImageView
android:id="@+id/imgBookCover"
android:layout_width="60dp"
android:layout_height="80dp"
android:scaleType="centerCrop"
android:src="@android:drawable/ic_menu_gallery" />
<!-- Kitap Detay Alanı -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/txtKitapAdi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kitap Adı"
android:textStyle="bold"
android:textColor="#2C3E50"/>
</LinearLayout>
</LinearLayout>
Projenin estetik standartlarını belirleyen; butonlara özel arka planlar atamayı, köşeleri yuvarlatılmış (radius) giriş alanları tasarlamayı ve ekrandaki grafik boyutlarını yönetmeyi sağlayan bileşenlerdir. Gece modu gibi sistemlere entegre edilerek arayüzü zenginleştirir.
Projedeki İlgili Dosyalar: bg_custom_button.xml, bg_custom_input.xml, vb.
Örnek Kod Yapısı (bg_custom_button.xml - Tıklanabilir butonlar için köşesi yuvarlatılmış şekil formatı):
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- Köşe Ovalliği -->
<corners android:radius="12dp" />
<!-- Buton Zemin Rengi -->
<solid android:color="#3F51B5" />
</shape>
Proje içerisindeki görsel bütünlüğü sağlamak amacıyla merkezi veri tutma mantığıyla çalışır. Yazıların, birincil/ikincil renk kodlarının (HEX Kodları) ve uygulama temalarının her dosyaya manuel yazılmak yerine tek bir adresten çağrılmasını sağlar. Bu sayede projede yapılacak genel bir renk değişimi sadece bu dosya üzerinden saniyeler içinde halledilebilir.
Projedeki İlgili Dosyalar: colors.xml, strings.xml, themes.xml
Örnek Kod Yapısı (colors.xml - Merkezi renk paleti):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_500">#FF6200EE</color>
<color name="teal_200">#FF03DAC5</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="link_color">#3F51B5</color>
</resources>
Uygulamanın çalışması için Android işletim sistemiyle haberleşen temel dosyadır. Başlangıç sayfasının (MainActivity) neresi olacağını sistem buradan okur. Ayrıca uygulamanın çalışması için ihtiyaç duyduğu çekirdek sistem izinleri (İnterneti kullanma, Kamerayı kullanma, vb.) güvenlik amacıyla ilk olarak burada deklare edilmek zorundadır.
Projedeki İlgili Dosyalar: AndroidManifest.xml
Örnek Kod Yapısı (Kamera ve Depolama izinlerinin eklendiği kısım):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.kutuphane">
<!-- Kullanıcıdan Talep Edilen Cihaz İzinleri -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:label="Kutuphane"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<!-- Uygulamanın Açılış Sayfası Bildirimi -->
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
Android platformunda tasarladığımız ve RecyclerView, SQLite, Glide, Google Code Scanner gibi gelişmiş yapılarla kurduğumuz Kütüphane Üye Sistemi uygulaması, Veritabanı ve Nesne Yönelimli Programlama tekniklerini profesyonelce kavramak için mükemmel bir seviye projesidir. İleride yeni özellikler (Web Servisi bağlama vs.) eklenebilmesi açısından tamamen dinamik yazılmıştır.
Ali Samet Yıldız
atp 11 a
Toplam 5 Makale
Lütfen yorumlarınızda saygılı, yapıcı ve anlaşılır bir dil kullanın.
Küfür, hakaret ya da spam içerikler onaylanmaz.