nyp (oop) java proje raporu

30
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

Upload: murat-azimli

Post on 12-Jul-2015

1.515 views

Category:

Technology


14 download

TRANSCRIPT

Page 1: NYP (OOP) Java Proje Raporu

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

Page 2: NYP (OOP) Java Proje Raporu

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

Page 3: NYP (OOP) Java Proje Raporu

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.

Page 4: NYP (OOP) Java Proje Raporu

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.

Page 5: NYP (OOP) Java Proje Raporu

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)

Page 6: NYP (OOP) Java Proje Raporu

6

4.3 USECASE DIAGRAMI

Page 7: NYP (OOP) Java Proje Raporu

7

5.MANTIKSAL TASARIM

5.1 ACTIVITY DIAGRAMS

Page 8: NYP (OOP) Java Proje Raporu

8

Page 9: NYP (OOP) Java Proje Raporu

9

5.2 CLASS DIAGRAM

Page 10: NYP (OOP) Java Proje Raporu

10

5.3 DATA MODEL DIAGRAM

Page 11: NYP (OOP) Java Proje Raporu

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.

Page 12: NYP (OOP) Java Proje Raporu

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

Page 13: NYP (OOP) Java Proje Raporu

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.

Page 14: NYP (OOP) Java Proje Raporu

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.

Page 15: NYP (OOP) Java Proje Raporu

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.

Page 16: NYP (OOP) Java Proje Raporu

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:

Page 17: NYP (OOP) Java Proje Raporu

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.

Page 18: NYP (OOP) Java Proje Raporu

18

Yenile butonuna tıklandığında veriler tablodan grid e geliyor.

Bul butonuna tıklandığında, aranan ID no soruluyor.

Page 19: NYP (OOP) Java Proje Raporu

19

Sil butonuna tıklandığında, silincek ID no soruluyor.

Page 20: NYP (OOP) Java Proje Raporu

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

Page 21: NYP (OOP) Java Proje Raporu

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 {

Page 22: NYP (OOP) Java Proje Raporu

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);

}

Page 23: NYP (OOP) Java Proje Raporu

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);

Page 24: NYP (OOP) Java Proje Raporu

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;

}

Page 25: NYP (OOP) Java Proje Raporu

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;

Page 26: NYP (OOP) Java Proje Raporu

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;

Page 27: NYP (OOP) Java Proje Raporu

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 {

Page 28: NYP (OOP) Java Proje Raporu

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) {

Page 29: NYP (OOP) Java Proje Raporu

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);

}

});

}

Page 30: NYP (OOP) Java Proje Raporu

30

}