nyp (oop) java proje raporu
TRANSCRIPT
G A Z İ Ü N İ V E R S İ T E S İ
B İ L İ Ş İ M E N S T İ T Ü S Ü
BİLİŞİM SİSTEMLERİ YÜKSEK LİSANS (UZAK) PROGRAMI
NESNE YÖNELİMLİ PROGRAMLAMA (NYP)
DÖNEM PROJESİ RAPORU
ÖĞRETİM ÜYESİ : Yrd.Doç.Dr.Hacer KARACAN
ÖĞRENCİ : Murat AZİMLİ
ŞUBE – NO : A2 – 108007755
2
İÇİNDEKİLER
1. GİRİŞ 3
2. AMAÇ 3
3. KAPSAM 3
4. KAVRAMSAL TASARIM
4.1 SİSTEMDEKİ AKTÖRLER 4
4.2 SİSTEMDEKİ BELGELER 5
4.3 USECASE DIAGRAM 6
5. MANTIKSAL TASARIM
5.1 ACTIVITY DIAGRAMS 7
5.2 CLASS DIAGRAM 9
5.3 DATA MODEL DIAGRAM 10
6. GELİŞTİRME
6.1 PROGRAMLAMA DİLİ SEÇİMİ 11
6.2 PROGRAMLAMA ARACI SEÇİMİ (IDE) 11
7. TEST 12
8. DAĞITIM
8.1 GEREKSİNİMLER 13
8.2 KURULUM 13
8.3 ÇALIŞTIRMA 15
9. PROGRAMIN KULLANILMASI 16
10. KAYNAKLAR
10.1 ELEKTRONİK KAYNAKLAR 20
10.2 BASILI KAYNAKLAR 20
11. PROGRAM KAYNAK KODU VE ACIKLAMALAR 21
3
1.GİRİŞ
Çalışanları arasında fonksiyonel ayrım yapılarak kurumsallaşmış veya kurumsallaşma aşamasında olan
orta ölçekli sistemler (işletmeler) için tasarlanmış olan ERP Yazılımı Satınalma Modülü işleyişi tasarım
aşamasında detaylı olarak açıklanmaya çalışılmıştır. Yazılım tasarımında Nesne Yönelimli Programlama
yöntemi kullanılmıştır. Öncelikle, sistemdeki roller, aktörler ve bunların fonksiyonları tespit edilmiştir.
Daha sonra bu fonksiyonlar arasındaki ilişki belirlenmiş ve akış diyagramları oluşturulmuştur. Son
olarak, statik veri yapıları ve veriler arası ilişkiler (dönüşümler) oluşturularak Mantıksal Tasarım süreci
tamamlanmıştır.
2.AMAÇ
Günümüzde orta ve büyük ölçekli işletmeler, işletme içi süreçlerin kurulması, yönetilmesi, verilerin
kayıt altına alınarak raporlanmasının önemini kavramış durumdadır. Bunun için bir çok işletme bir ERP
(Entireprise Resource Planning- Kurumsal Kaynak Planlama) sistemi kurmuştur. Bu sayede işletmeler,
süreçlerini yönetebilir, bilgiye ve objektif sayısal verilere dayanan kararlar alabilirler. Bu kriterlere
dayanarak alınan kararların doğru olma olasılığı çok yüksektir. Bu doğru kararlar ile yapılan faaliyetler
sonucunda da başarı ve büyüme kaçınılmaz olarak gelecektir.
3.KAPSAM
Bu dökümanda, işletmedeki süreçlerden SATINALMA süreci detaylı olarak ve ilişkide olduğu diğer
süreçler ise kaba olarak ele alınmıştır. Satınalma sürecinin öneminin anlaşılması için, ilişkide olduğu
diğer süreçlerin de bilinmesi gerekmektedir.
İşletmeler, mal veya hizmet üretebilmek için öncelikle satınalma yapmak zorundadırlar. Bir motor
parçası üreten işletmeyi düşündüğümüzde; Motor parçasını üretmek için gerekli olan hammadde ve
yardımcı maddeler satın alınmalı, sonra bu hammaddeler çeşitli işlemlere tabi tutularak motor parçası
üretilmelidir. Aynı şekilde bir pizza işletmesini düşündüğümüzde; Pizza üretmek için önce çeşitli
sebzeler, et ürünleri ve un satın alınmalı, undan hamur yapılmalı ve diğer malzemelerde hamurun
üzerine yerleştirilip fırında pişirilmelidir. Hatta üretilmiş olan pizzanın dağıtımını yapabilmek için, daha
önceden bir motorlu araç ve pişirebilmek için bir fırın satın alınmış olmalıdır.
Örneklerden de anlaşılacağı üzere satınalma faaliyeti her türlü işletme içinde önemli bir yere sahiptir.
Satış faaliyeti nasıl işletmeye para girmesini sağlıyor ise satınalma faaliyeti de işletmeden para çıkışını
sağlamaktadır. Bundan dolayı işletme sahipleri, genelde satınalma yapmak istemezler. Üretimin devam
etmesi için zorunlu olan hammadde, yardımcı madde ve enerji dışında satınalmayı istemezler. Ayrıca,
işletme çalışanlarının da aslında işletmeye hizmet sattığını düşünebiliriz. Çünkü, işletme çalışanları
önceden belirlenmiş bir ücret karşılığında bilgi ve becerilerini o işletme için kullanmaktadır. İnsan
üretimin bir unsuru olduğuna göre, çalışanlar da üretimin asli bir unsurudur. Ancak bu temel nokta,
çoğu işletme sahibi tarafından göz ardı edilmekte, çalışanlara gereksiz bir masraf gözüyle
bakılmaktadır.
Çalışanlardan hizmet alımı normal satınalma süreçleri dışında işlemektedir. İşletmelerde bu sürece
genelde Insan Kaynakları (Personel) departmanları bakmaktadır. ERP sistemlerinde ayrı bir modüldür.
Bu modülde sadece, diğer işletmelerden yapılan mal ve hizmet satınalma süreçleri yer almaktadır.
4
4.KAVRAMSAL TASARIM
Bir işletmede kurulmak istenen satınalma sisteminde minumum düzeyde bulunması gereken aktörler,
kullanım durumları ve fonksiyonlar aşağıda açıklandığı gibi olmalıdır. Bu ögelerden bazıları direkt
olarak satınalma sisteminin bir ögesi olmayıp, yan sistemlerin ögesidir. Diğer süreçleri içine alan bir
ERP sistemi mevcut ise bu ögeler diğer sistemler içerisinde yer alabilir. Ancak, sadece tek başına bir
satınalma sistemi kurulmak istenirse, bu ögeler de sistem içerisinde yer almalıdır.
4.1 SİSTEMDEKİ AKTÖRLER
a. Sistem Yöneticisi:
Sistemde yer alan diğer kullanıcıları oluşturur. Sistemde oluşan bilgileri belirli aralıklarla yedekler.
Sistemin güvenliğinden ve kesintisiz olarak çalışmasından sorumludur.
b. Kullanıcı:
Sistemde yer alan tüm kullanıcılardır. Satınalma departmanlarında olabileceği gibi, diğer
departmanlardan da sistemi kullanacak olan kişilerdir. (üretim, planlama, lojistik, satış, muhasebe,
finans vs) Sistemde atanmış olan yetkiler dahilinde işlem yaparlar.
c. Yönetici:
Yönetici sistemde yer alan bir kullanıcıdır. Ancak, kendi departmanındaki diğer bir kullanıcının istemiş
olduğu satınalma taleplerini onaylama veya ret etme yetkisine sahiptir. Bu durum, işletmede her
çalışanın kafasına göre gereksiz satınalma yapmasını önlemektedir. Sistemde kilit bir öneme sahiptir.
İşletmenin verimliliği ve karlılığı açısından çok önemlidir.
d. Satınalma Departmanı:
Kullanıcılar tarafından açılmış ve ilgili yöneticiler tarafından onaylanmış satınalma taleplerini inceler.
Bu talepleri değerlendirir ve en uygun bulunan tedarikçilere satınalma siparişini iletir. İlgili tedarikçi
sistemde tanımlı değilse tanımlar. Belirli dönem aralıklarında, tedarikçilerin performanslarını hesaplar.
e. Depo:
Tedarikçilerden gelen malları teslim alır. Nitelik ve nicelik olarak doğruluklarını kontrol eder. İlgili
satınalma siparişi ile eşleştirme yaptıktan sonra sisteme irsaliye girişini yapar.
f. Muhasebe:
İşletmeye gönderilen faturaların ERP sistemine girişlerini yapar. Bu giriş sırasında, fatura içeriğindeki
mal ve hizmetlerin firmaya gelip gelmediğini kontrol eder. Mal faturası ise, sistemdeki irsaliye ile
faturayı eşleştirir.
g. Finans:
Muhasebe tarafından girişi yapılan faturaları kontrol eder. Faturaların ödeme günlerini tespit eder ve
günü geldiğinde ödemeyi gerçekleştirir.
5
4.2 SİSTEMDEKİ BELGELER
a. Satınalma Talebi:
İşletmedeki her türlü kullanıcı tarafından açılabilir. Kullanıcılar, iş görebilmek ve/veya işletmede
kullanabilmek için gerekli olan her türlü ürün ve hizmet satınalması için bir satınalma talebi açmak
zorundadır. Talep Id, Belge Tarihi, Talep Tarihi, Kullanıcı Id gibi bilgilerden oluşan bir başlık tablosu ile,
satınalınması istenen mal veya hizmetlerin id leri ve miktarlarının bulunduğu bir detay tablosundan
oluşmaktadır. Kullanıcılar farklı tarihlerde istedikleri her türlü satınalma talebi için ayrı bir talep belgesi
açmalıdırlar. Eğer karışık açılırsa, sistemde talep takibi zorlaşır, ilgili tedarikçilerin ve satınalma
departmanın performansı ölçülemez. Tedarikçiden gelen bir malın, hangi talebe istinaden geldiği
bulunamaz. Bu durumda, belgeler arasındaki akış kopacaktır.
b. Satınalma Siparişi:
Sadece satınalma departmanı tarafından açılabilir. Talep belgesindeki gibi başlık tablosu ve ürün
bilgileri olan bir detay tablodan oluşur. 2 şekilde oluşturulabilir. Kullanıcıların oluşturmuş olduğu
satınalma talep belgelerinden direkt olarak oluşturabilir. Yada, herhangi bir talep olmadan, direkt
olarak manuel şekilde oluşturulabilir. Bu durumda, satınalma sipariş belgesi her hangi bir talep
belgesini işaret etmez. Sipariş belgesindeki TalepId değeri 0 (sıfır) olacaktır.
c. İrsaliye:
Tedarikçiler tarafından işletmeye gönderilen ürünler ile gelen bir belgedir. Ticari mal sevkiyatlarında
bulunması zorunludur. Taşınan malların isimleri ve miktarları yazılmaktadır. İşletmeye gelen mallar
depo sorumlusu tarafından kontrol edilir. İrsaliye üzerinde yazan bilgilerin doğruluğu teyid edildikten
sonra sisteme girişi yapılır. İşletmeye gelen mallar, sisteme irsaliyenin girilmesiyle sistemsel olarak da
stoklaşır. Gelen irsaliyenin sipariş belgesi bulunarak eşleştirilir. Böylece, ilgili satınalma siparişi de
kapatılmış olur. (miktar tam ise) Bundan dolayı, irsaliyelerin üzerine ilgili satınalma sipariş numarasının
yazılması operatörlere hız kazandırmakta, boş yere ve hatalı veri girişini engellemektedir. Satınalma
siparişi olmadan işletmeye gelen malların kabulü depocu tarafından yapılmaz. Mutlaka bir üst
yöneticinin onayı alınarak mal kabülü yapılmalıdır. Bu durumda da, mutlaka satınalma siparişi
açılmalıdır. Başlık ve detay tablosu olmak üzere 2 tablodan oluşur.
d. Fatura:
İşletmelerde ticari işlemler fatura ile yapılmaktadır. Bir işletme diğer işletmeden mal ve hizmet
karşılığı para talep ediyorsa, önceden mutlaka fatura kesilmiş olması gerekmektedir. Her türlü ticari
borç ve alacak faturaya dayanmak zorundadır. Fatura üzerinde, kesilen firma ünvanı, adresi, vergi
dairesi, vergi numarası, ilgili mal ve hizmetlerin açıklamaları, brüt tutarları, iskonto tutarları, vergi
tutarları ve ödeme tarihi (vade) gibi bilgileri bulunmaktadır. Fatura içeriğindeki ürünlerin, firmaya
gerçekten gelip gelmediği sorgulanmalıdır. (irsaliye kontrolü) Aynı malların birden fazla kez
faturalanmaması için, fatura üzerlerinde irsaliye numarası mutlaka yazmalıdır. Son yıllarda irsaliyeli
fatura uygulamaları yaygınlaşmıştır. Bu gibi kontrollere gerek kalmamıştır.
e.Odeme:
Muhasebe departmanı tarafından sisteme sorunsuz olarak girilmiş ve ödeme onayı verilmiş olan
faturaların tutarları finans departmanı tarafından tedarikçiye (alacaklı firmaya) çeşitli yöntemler ile
ödenir. (nakit, çek, havale, eft vs)
6
4.3 USECASE DIAGRAMI
7
5.MANTIKSAL TASARIM
5.1 ACTIVITY DIAGRAMS
8
9
5.2 CLASS DIAGRAM
10
5.3 DATA MODEL DIAGRAM
11
6. GELİŞTİRME
6.1 PROGRAMLAMA DİLİ SEÇİMİ
Tasarlanan sistemin geliştirilmesi için nesne yönelimli programlama dilleri araştırılmıştır. Bu
araştırmalar sonucunda Java programlama dilinde geliştirme yapılmasına karar verilmiştir. Bu kararda,
geçmişte yaşanmış olan programlama deneyimleri ve ders kapsamında öğrenilen yeni bilgiler etkili
olmuştur. Bu etken faktörlerden bazıları şunlardır:
a. Ders kapsamında anlatılan Nesne Yönelimli Programlama kavram ve tekniklerinin Java ile
örneklenmesi.
b. Java nesne yönelimli bir programlama dili olduğundan, her şeyin bir nesneden ibaret olması. Daha
tasarım aşamasında nesne tabanlı düşünmeye zorlaması.
c. Java ile geliştirilmiş yazılımların farklı platformlarda (windows, unix, linux vs) ve farklı cihazlarda
(pocked pc, pda, vs) çalışabilmesi.
d. Son yıllarda gelişen bilişim teknolojileri ve yaygınlaşan internet (network) ortamları sayesinde,
yazılımların çok katmanlı ve sunucu taraflı tasarlanması. Java nın istemci tarafında olduğu kadar
sunucu tarafında da çok güçlü yönlerinin bulunması.
e. Sunucu tarafında çalışan yazılımlarda en önemli hususlardan biri de kaynak yönetimi ve
kararlılıktır.(kesintisiz çalışma) İstemcilerden aynı anda gelen istekler çok iyi yönetilmeli ve ortaya
çıkabilecek hatalar kontrol altına alınmalıdır. Java nın bu ihtiyaca çok iyi cevap vermesi.
f. Javanın bir programlama dili olması yanında, bir geliştirme ve teknoloji platformu haline gelerek
bir endüstri standardına dönüşmesi.
g. Geçmişte yaşanan programlama deneyimlerimde Java platformunun bulunmaması. Java
teknojilerinde deneyim kazanılmak istenmesi.
6.2 PROGRAMLAMA ARACI SEÇİMİ (IDE)
Tüm programlama dillerinde, yazım kuralları (syntax) sıkı bir disipline bağlıdır. Yazılım geliştiriler bu
kurallara uymak zorundadırlar. Ayrıca programlama dillerinde binlerce komut bulunmaktadır. Bütün
bu komutların yazılışlarını ve kullanımlarını ezberlemek mümkün değildir. Bu zorluklardan dolayı genel
olarak “tümleşik geliştirme ortamı” adı verilen yazılımlar yapılmıştır. (IDE-Integrated Development
Environment) Son yıllarda bir çok programlama dili için güçlü IDE yazılımları ortaya çıkmıştır. IDE
araçlarında bulunan genel özellikler ve yazılım geliştiricilere sağladığı faydalardan bazıları şunlardır:
a. Kullanıcı arayüzlerinin ve bazı soyut nesne tasarımlarının (veritabanı bağlantıları vs) görsel olarak
kolaylıkla yapılabilmesi. (sürükle-bırak)
b. Görsel olarak yapılan tasarım kodlarının otomatik olarak oluşturulması.
c. Sık kullanılan ve kuralları belli olan kodların otomatik oluşturulması. (re-factor)
d. Sözdizim ve bazı basit mantık hatalarının IDE tarafından yakalanabilmesi.
e. Programa durma noktaları eklenerek olayların ve değişkenlerin izlenebilmesi. (watch-debug)
f. Birden fazla programın yer aldığı büyük yazılım projelerinde, programların bir arada tutulabilmesi,
sürüm denetimlerinin yapılabilmesi.
g. Programların kolaylıkla derlenmesi ve dağıtım dosyalarının hazırlanması. (run time files)
Java programlama dili için çok sayıda tümleşik geliştirme ortamı bulunmaktadır. (NetBeans, Eclipse,
JBuilder, JDeveloper vs) Her IDE nin diğerlerine göre zayıf veya güçlü olduğu yönler bulunmaktadır. Bu
durumun Java için avantajları ve dezavantajları bulunmaktadır. Java ile yazılım geliştiren bir çok firma
farklı IDE ler kullandığı için, bu IDE ortamlarının da çok iyi öğrenilmesi gerekmektedir. Yapılan
incelemeler sonucunda, bu projede NetBeans 6.9 IDE sinin kullanılmasına karar verilmiştir.
12
7. TEST
Geliştirilen program çeşitli Windows işletim sistemlerinde ve OpenSuse Linux işletim sisteminde
çalıştırılmış, tüm görevlerini yerine getirdiği ve hata yakalama fonksiyonlarının sorunsuz çalıştığı
görülmüştür. Bu işletim sistemi sürümleri aşağıdaki gibidir:
Windows:
- Windows XP
- Windows Vista
- Windows 7
- Windows Server 2003
- Windows Server 2008
Linux:
- OpenSuse Linux 11
13
8. DAĞITIM
8.1 GEREKSİNİMLER
Program Java dilinde geliştirilmiştir. Java ile geliştirilen programlar, derlendikten sonra hemen makina
diline çevrilmezler. Bundan dolayı Java platform bağımsız olmaktadır. Çünkü, derleme anında
programın hangi işletim sisteminde çalıştırılacağı bilinmemektedir ve böyle bir ön koşul yoktur.
Derleme (compile) işleminde, program kodu “byte code” adı verilen ara bir koda çevrilmektedir. Byte
code a dönüşmüş olan program, çalışma anında makina diline çevrilir. Bu çevrimi yapacak olan başka
bir programa daha ihtiyac duyulmaktadır. Bu programlara JRE (Java Runtime Environment) adı
verilmektedir. Bundan dolayı programın çalıştığı tüm işletim sistemlerinde JRE 1.6 kurulmuş olmalıdır.
Ayrıca, program bir veritabanı uygulaması olduğundan çalıştığı işletim sisteminde Microsoft Access
Database Driver kurulmuş olmalıdır. (ODBC kaynağı tanımlayabilmek için)
Java Runtime sürümü;
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Microsoft Database Driver;
http://www.microsoft.com/downloads/en/resultsForCategory.aspx?displaylang=en&categoryId=3&st
ype=n_dc
Linklerinden download edilebilir.
JRE 1.6 nın kurulumu ve işletim sistemlerine göre gerekli minumum bilgisayar konfigurasyonları kendi
teknik dökümanlarında bulunmaktadır.
8.2 KURULUM
8.2.1 Program dosyaları:
Program, MyApp4.jar, MyApp4Src.rar ve MYDB.MDB olmak üzere 3 dosyadan oluşmaktadır:
MyApp4.jar dosyası programın ana runtime dosyasıdır. Programda bulunan derlenmiş sınıflar bu
dosya içerisinde bulunmaktadır. (*.class)
MyApp4Src.rar dosyasında, programın kaynak kodları bulunmaktadır. Oluşturulan tüm sınıflar için
kaynak kod dosyası bulunmaktadır. (*.java) Programın çalışması için gerekli değildir. Kaynak kodların
online olarak incelenebilmesi amacıyla eklenmiştir.
MYDB.MDB dosyası, programın kullandığı MS ACCESS formatında veritabanı dosyasıdır.
8.2.2 Programın Kurulması ve Ayarların yapılması:
1. Programın kurulması için herhangi bir setup programı yoktur. Programdaki 3 dosya aynı klasöre
kopyalanmalıdır.
2. MYDB.MDB veritabanı dosyasının ODBC ayarları yapılarak işletim sistemi üzerinde bir “veri kaynağı”
oluşturulmalıdır. Oluşturulan veri kaynağının adı “MYDB” olmalıdır. (tamamı büyük harf) Program
çalışması sırasında, ODBC üzerinde MYDB isimli veri kaynağına bağlanmaya çalışacaktır. ODBC
ayarlarının yapılması aşağıdaki ekran görüntülerinde bulunmaktadır.
14
Denetim Masası -> Yönetimsel Araçlar -> Veri Kaynakları (ODBC)
Sistem DSN sekmesinde Ekle -> Veri Kaynağı Adı: MYDB
Veritabanı Seç -> MYDB.MDB dosyasını kopyaladığınız klasör.
15
8.3 ÇALIŞTIRMA
İşletim sisteminizde jar uzantılı dosyalar java.exe dosyası ile ilişkilendirilmiş ise, MyApp4.jar dosyasına
çift tıklanarak program çalıştırılabilir. İlişkili değilse, işletim sisteminde komut satırı moduna geçerek
aşağıdaki ekranda göründüğü şekilde çalıştırılabilir.
Ayrıca, JRE dosyalarından java.exe dosyasının işletim sistemi ortam değişkenlerinde yolunun
tanımlanmış olması gerekir. (path) Tanımlı değilse, java.exe dosyasının bulunamadığını belirten bir
uyarı mesajı alınır.
Bu durumda, java.exe dosyasının yolu işletim sisteminde tanımlanmalı veya java.exe dosyasının
bulunduğu klasöre geçilerek çalıştırma komutu verilmelidir. Komut satırındaki MyApp4.jar dosyasının
tam yolu da yazılmalıdır.
JRE 1.6 sürümü (minumum) kurulmuş, ODBC ayarı yapılarak MYDB.MDB veritabanını gösteren bir veri
kaynağı tanımlanmış ise program çalışacak ve aşağıdaki ekran görüntüsü gelecektir.
16
9.PROGRAMIN KULLANILMASI
Program 2 bölüm olarak tasarlanmıştır. Bir bölümde program çalışırken kullanılacak olan sabit tanımlar
yapılmaktadır. Örnek; Ürün Tanımları, Tedarikçi Tanımları, Departman Tanımları, Kullanıcı Tanımları.
Diğer bölümde ise, sürekli olarak yapılacak işlemler almaktadır. Bu bölümden girilen bilgiler, hareket
verisi olmaktadır. Örnek; Talep Bilgileri, Sipariş Bilgileri, İrsaliye Bilgileri, Fatura Bilgileri vs.
Programda ilk önce gerekli sabit tanımların yapılması gerekmektedir. Bu tanımlar gerçekte birer veri
nesnesi dir. İşlemler menüsündeki bilgilerde, bu nesneler arasında (zaman boyutunda) ilişki
kurulmasını sağlayan veri nesneleridir.
Kullanıcı grafik arayüzleri (GUI) basit, sade ve kullanışlı şekilde yapılmaya çalışılmıştır. Kullanıcının veri
girişi yapmasını sağlayan bir veri giriş formu ve girilen verilerin listelenmesini, bulunmasını ve
silinmesini sağlayan liste (browse) formu yapılmıştır. Yapılan işlem sonuçlarında, kullanıcıya mutlaka
mesaj verilmiştir. Örneğin; Kayıt Yapıldı, Hata Oluştu vs vs.....
Ayrıca, hata denetimi maximum seviyede yapılmaya çalışılmış, meydana gelen hatalar kontrol altına
alınarak programın kararlılıkla çalışmasını sürdürmesi sağlanmıştır. Örnek ekran görüntüleri aşağıdadır:
17
Kayıt başarılı gerçekleştiğinde bilgi mesajı gösterilmiştir.
Eksik bilgi ile kayıt yapıldığında veya çakışma meydana geldiğinde uyarı mesajları gösterilmiştir.
18
Yenile butonuna tıklandığında veriler tablodan grid e geliyor.
Bul butonuna tıklandığında, aranan ID no soruluyor.
19
Sil butonuna tıklandığında, silincek ID no soruluyor.
20
10.KAYNAKLAR
10.1 ELEKTRONIK KAYNAKLAR
1. Gazi Üniversitesi Bilişim Enstitüsü Online NYP Ders İçerikleri
2. Gazi Üniversitesi Bilişim Enstitüsü Örgün Öğrenim NYP Ders Slaytları
3. http://www.uml.org/
4. http://www.agilemodeling.com/
5. http://www.agiledata.org/
6. http://atlas.kennesaw.edu/~dbraun/csis4650/A&D/index.htm
7. http://www-01.ibm.com/software/rational/uml/
8. http://msdn.microsoft.com/en-us/library/ff604964%28office.14%29.aspx
9. http://www.oracle.com/technetwork/java/index.html
10. http://netbeans.org/
10.2 BASILI KAYNAKLAR
1. Nesne Odaklı Analiz ve Modelleme, Yrd.Doç.Dr. İbrahim EDİN, 2009
2. Sistem Analizi ve Tasarımı, Prof.Dr. Oya KALIPSIZ, Ayşe BUHARALI, Göksel BİRİCİK, 2008 (2.Basım)
3. UML ile Nesne Tabanlı Çözümleme ve Tasarım, Bora GÜNGÖREN, 2009
4. JAVA Programlama Dili Yazılım Tasarımı, Altuğ B. ALTINTAŞ, 2010
5. Java ile Programlama ve Veri Yapıları, Bülent ÇOBANOĞLU, 2010 (2.Basım)
6. Java Uygulamaları, Murat İnan, 2007
7. Teach Yourself JAVA in 21 Days, Laura LEMAY, Charles L. PERKINS, 1996
21
11.PROGRAM KAYNAK KODU VE ACIKLAMALAR
Frameler üzerindeki nesnelerin tasarım kodları çok uzun ve basit olduklarından dolayı aşağıda yer
almamaktadır. Okunabilirliği artırmak için sadece metotlar alınmıştır. Tasarım nesnelerini oluşturan
initComponents() metodu kurucu metotlardan çağrılmaktadır. Ayrıca, veri giriş sınıflarından sadece
KullaniciJFrame sınıfının kodları yer almaktadır. Çünkü diğer sınıflar ile aynı metotlara sahiptir sadece
veri yapısı değişmektedir. Yazılımın tüm kodları, çalıştırılabilir jar dosyası ile birlikte bulunmaktadır.
Program başlangıcında Main sınıfı, myMenuJFrame sınıfını oluşturmakta ve menü formunu görünür
yapmaktadır. myMenuJFrame sınıfı içerisinde de bir menu ve içlerinde menü seçenekleri
bulunmaktadır. (menuItem) Kullanıcının tıkladığı seçenek olayı yakalanarak ilgili form çağrılmakta ve
görünür hale getirilmektedir. (KullaniciJFrame, UrunJFrame, DepartmanJFrame, TedarikciJFrame)
Fiziki veritabanını temsil eden Veritabani isimli bir sınıf oluşturulmuştur. Tüm veritabanı işlemleri bu
sınıf aracılığı ile yürütülmektedir. Baglan(), baglantiKapat(), calistirSorgu(), olusturKayitSet() isimli
metotları bulunmaktadır. Sınıfın, ResultSet tipindeki kayitSet özelliği public olarak tanımlandı. Çünkü,
sorgu sonucunda oluşan kayıt setine dışarıdan erişilebilmesi gerekmektedir. Diğer özellikleri private
olarak tanımlanmıştır. Bu sınıf, veritabanı operasyonlarını merkezi bir hale getirmektedir. Veritabanı
tipi, sürücüsü veya adresi değiştiğinde sadece bu sınıftaki baglan() metodunun değiştirilmesi yeterli
olmaktadır. Ayrıca, kullanıcı arayüz sınıfları ve veri sınıfları içerisinde herhangi bir sql komutu
olmadığından java.sql paketinin import edilmesine gerek kalmamıştır.
Veritabanı üzerindeki tabloları temsil eden veri sınıfları oluşturulmuştur. Kullanici, Urun, Departman ve
Tedarikci. Her bir sınıfın yapısı temsil ettiği tablo yapısı ile aynıdır. Sınıfın tüm özellikleri saklanmıştır.
Ancak public erişimde olan set ve get metotları ile erişilebilir. Her veri sınıfında, kaydet() ve sil()
metotları bulunmaktadır. Ayrıca, veri sınıfının kurucu metodunda veritabanı bağlantısı açılmış, final
metodunda veritabanı bağlantısı kapatılmıştır. Arayüzde yapılan işlem ise, form nesnelerindeki
değerlerin elde edilerek, veri sınıfı nesnesine aktarılması sonra ilgili metodun çağrılmasından ibaretttir.
Main.java
/********** @author mazimli **********/
/* ** Ana menüyü oluşturur ve gösterir ***/
package myapp4;
public class Main {
private static MenuJFrame myMenuJFrame;
public static void main(String[] args) {
myMenuJFrame = new MenuJFrame();
myMenuJFrame.setVisible(true);
myMenuJFrame.setBounds(50, 50, 640, 480);
}
}
MenuJFrame.java
/*************** @author mazimli *****************/
/*** Menüden seçilen seçeneklere ait formları gösterir ***/
package myapp4;
public class MenuJFrame extends javax.swing.JFrame {
22
private static TedarikciJFrame myTedarikciJFrame;
private static UrunJFrame myUrunJFrame;
private static DepartmanJFrame myDepartmanJFrame;
private static KullaniciJFrame myKullaniciJFrame;
private static HakkindaJFrame myHakkindaJFrame;
public MenuJFrame() {
initComponents();
}
@SuppressWarnings("unchecked")
//--KULLANICI TANIMLARI----------------------------------------------------
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
myKullaniciJFrame = new KullaniciJFrame();
myKullaniciJFrame.setVisible(true);
myKullaniciJFrame.setBounds(100, 100, 750, 500);
}
//--KAPAT-------------------------------------------------------------------
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
//--HAKKINDA-------------------------------------------------------------
private void jMenuItem11ActionPerformed(java.awt.event.ActionEvent evt) {
myHakkindaJFrame = new HakkindaJFrame();
myHakkindaJFrame.setVisible(true);
myHakkindaJFrame.setBounds(150, 150, 450, 150);
}
//--DEPARTMAN TANIMLARI-----------------------------------------------------
private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {
myDepartmanJFrame = new DepartmanJFrame();
myDepartmanJFrame.setVisible(true);
myDepartmanJFrame.setBounds(100, 100, 640, 480);
}
//--URUN TANIMLARI----------------------------------------------------------
private void jMenuItem10ActionPerformed(java.awt.event.ActionEvent evt) {
myUrunJFrame = new UrunJFrame();
myUrunJFrame.setVisible(true);
myUrunJFrame.setBounds(100, 100, 750, 500);
}
//--TEDARIKCI TANIMLARI-----------------------------------------------------
private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {
myTedarikciJFrame = new TedarikciJFrame();
myTedarikciJFrame.setVisible(true);
myTedarikciJFrame.setBounds(100, 100, 750, 550);
}
23
//--MAIN METOT---------------------------------------------------------------
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MenuJFrame().setVisible(true);
}
});
}
}
Veritabani.java
/****************** @author mazimli *******************/
/*** Veritabanı sınıfıdır. Veritabanı işlemlerini gerçekleştirir. ****/
package myapp4;
import java.sql.*;
import javax.swing.JOptionPane;
public class Veritabani {
private Connection baglanti;
private Statement sorgu;
public ResultSet kayitSet;
public boolean baglan(){
boolean sonuc = false;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
baglanti = DriverManager.getConnection("jdbc:odbc:MYDB");
sonuc = true;
} catch (Exception e) {
JOptionPane.showMessageDialog(null,e.getMessage(),"!!! HATA OLUSTU !!!",0);
sonuc = false;
}
return sonuc;
}
public boolean olusturKayitSet(String sqlText){
boolean sonuc = false;
try{
sorgu = baglanti.createStatement();
kayitSet = sorgu.executeQuery(sqlText);
sonuc = true;
} catch (Exception e) {
JOptionPane.showMessageDialog(null,e.getMessage(),"!!! HATA OLUSTU !!!",0);
sonuc = false;
}
return(sonuc);
24
}
public boolean calistirSorgu(String sqlText){
boolean sonuc = false;
try{
sorgu = baglanti.createStatement();
sorgu.executeUpdate(sqlText);
sonuc = true;
} catch (Exception e) {
JOptionPane.showMessageDialog(null,e.getMessage(),"!!! HATA OLUSTU !!!",0);
sonuc = false;
}
return(sonuc);
}
public void baglantiKapat(){
try{
baglanti.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null,e.getMessage(),"!!! HATA OLUSTU !!!",0);
}
}
}
Kullanici.java
/******************* @author mazimli *******************/
/*** Kullanici veri yapı sınıfı. KULLANICI tablosuna karşılık gelir.***/
package myapp4;
import javax.swing.JOptionPane;
public class Kullanici {
private int id;
private String ad;
private String soyad;
private String departmanId;
private int yonetici;
private int admin;
private int aktif;
private String sifre;
private Veritabani myDb;
private boolean baglantiVar;
private boolean sonuc;
public int getId() {
return id;
}
25
public void setId(int id) {
this.id = id;
}
public String getAd() {
return ad;
}
public void setAd(String ad) {
this.ad = ad;
}
public String getSoyad() {
return soyad;
}
public void setSoyad(String soyad) {
this.soyad = soyad;
}
public String getDepartmanId() {
return departmanId;
}
public void setDepartmanId(String departmanId) {
this.departmanId = departmanId;
}
public int getYonetici() {
return yonetici;
}
public void setYonetici(int yonetici) {
this.yonetici = yonetici;
}
public int getAdmin() {
return admin;
}
public void setAdmin(int admin) {
this.admin = admin;
}
public int getAktif() {
return aktif;
}
public void setAktif(int aktif) {
this.aktif = aktif;
26
}
public String getSifre() {
return sifre;
}
public void setSifre(String sifre) {
this.sifre = sifre;
}
//--KURUCU METOT: VERITABANI SURUCUSUNU YUKLER VE BAGLANTIYI KURAR...
public Kullanici(){
myDb = new Veritabani();
baglantiVar = myDb.baglan();
}
//--YOK EDICI METOT: BAGLANTIYI KESER, VERITABANI NESNESINI YOK EDER...
@Override
public void finalize() throws Throwable{
myDb.baglantiKapat();
super.finalize();
}
public void kaydet(){
if (baglantiVar == true) {
sonuc = myDb.calistirSorgu("INSERT INTO KULLANICI
(ID,AD,SOYAD,DEPARTMANID,YONETICI,ADMIN,AKTIF,SIFRE) VALUES (" + id + ",'" + ad + "','" + soyad
+ "'," + departmanId + "," + yonetici + "," + admin + "," + aktif + ",'" + sifre + "')");
if (sonuc == true) {
JOptionPane.showMessageDialog(null,"Kayit Yapildi...\n\nId: " + id,"B i l g i",1);
}
}
}
public void sil(){
if (baglantiVar == true) {
sonuc = myDb.calistirSorgu("DELETE FROM KULLANICI WHERE ID=" + id);
if (sonuc == true) {
JOptionPane.showMessageDialog(null,"Kayit Silindi...\n\nId: " + id,"B i l g i",1);
}
}
}
}
KullaniciJFrame.java
/************************** @author mazimli *********************/
/*** ************* Kullanıcı tanımları form sınıfı ********************/
package myapp4;
27
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
public class KullaniciJFrame extends javax.swing.JFrame {
private Veritabani myDb;
private boolean sonuc;
/** Creates new form KullaniciJFrame */
public KullaniciJFrame() {
initComponents();
}
@SuppressWarnings("unchecked")
//--KAPAT-----------------------------------------------------------------
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { this.dispose();
}//GEN-LAST:event_jButton3ActionPerformed
//--TEMIZLE---------------------------------------------------------------
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
jTextField4.setText("");
jPasswordField1.setText("");
}
//--KAYDET----------------------------------------------------------------
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Kullanici myKullanici = new Kullanici();
try {
myKullanici.setId(Integer.parseInt(jTextField1.getText()));
myKullanici.setAd(jTextField2.getText());
myKullanici.setSoyad(jTextField3.getText());
myKullanici.setDepartmanId(jTextField4.getText());
myKullanici.setYonetici(jComboBox1.getSelectedIndex());
myKullanici.setAdmin(jComboBox2.getSelectedIndex());
myKullanici.setAktif(jComboBox3.getSelectedIndex());
myKullanici.setSifre(jPasswordField1.getText());
myKullanici.kaydet();
} catch (Exception e) {
JOptionPane.showMessageDialog(null,e.getMessage(),"!!! HATA OLUSTU !!!",0);
} finally {
28
myKullanici = null;
}
}
//--GRID TABLO ICI YENILENIYOR----------------------------
private void yenile(String prmId) throws SQLException{
int i = 0;
int j = 0;
int kayitSayi = 0;
DefaultTableModel myModel;
myModel = (DefaultTableModel) jTable1.getModel();
j = myModel.getRowCount();
for (i = 0; i < j; i++ ){ //-----grid tablo ici temizleniyor...
myModel.removeRow(0);
}
i = 0;
myDb = new Veritabani();
sonuc = myDb.baglan();
if (sonuc == true) {
sonuc = myDb.olusturKayitSet("SELECT COUNT(*) AS ROWCOUNT FROM KULLANICI " + prmId);
myDb.kayitSet.next();
kayitSayi = myDb.kayitSet.getInt("ROWCOUNT")-1;
jProgressBar1.setMaximum(kayitSayi);
sonuc = myDb.olusturKayitSet("SELECT * FROM KULLANICI " + prmId + " ORDER BY ID");
}
try {
while (myDb.kayitSet.next()) {
myModel.addRow(new
Object[]{myDb.kayitSet.getString("ID"),myDb.kayitSet.getString("AD"),myDb.kayitSet.getString("SOYA
D"),myDb.kayitSet.getString("DEPARTMANID"),myDb.kayitSet.getString("YONETICI"),myDb.kayitSet.ge
tString("ADMIN"),myDb.kayitSet.getString("AKTIF")});
jProgressBar1.setValue(i);
i++;
}
} catch (SQLException ex) {
Logger.getLogger(KullaniciJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
myDb.baglantiKapat();
myDb = null;
}
//--YENILE----------------------------------------------------------------
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
29
try {
yenile("");
} catch (SQLException ex) {
Logger.getLogger(KullaniciJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
//--BUL-------------------------------------------------------------------
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
String id;
id = JOptionPane.showInputDialog(null,"[Kullanici Bul]\n\nID Giriniz:",null);
if (id != null) {
try {
yenile("WHERE ID=" + id);
} catch (SQLException ex) {
Logger.getLogger(KullaniciJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
//--SIL-------------------------------------------------------------------
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-
FIRST:event_jButton6ActionPerformed
String id;
id = JOptionPane.showInputDialog(null,"[Kullanici Sil]\n\nID Giriniz:",null);
if (id != null) {
Kullanici myKullanici = new Kullanici();
try {
myKullanici.setId(Integer.parseInt(id));
myKullanici.sil();
yenile("");
} catch (Exception ex) {
Logger.getLogger(KullaniciJFrame.class.getName()).log(Level.SEVERE, null, ex);
} finally {
myKullanici = null;
}
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new KullaniciJFrame().setVisible(true);
}
});
}
30
}