/Eczane-Otomasyon

Eczane Otomasyonu Veri Tabanı ve Yönetim Sistemi Ödevi

Primary LanguageC#

ECZANE OTOMASYONU

Direkt olarak indirip çalıştırmak için tıklayın

Access DB kullanabilmek için bu paketi indirebilirsiniz

Erciyes Üniversitesi
Mühendislik Fakültesi
Bilgisayar Mühendisliği Bölümü
VTYS Vize Ödevi

Numara:1030516689
Ad Soyad:Emrah Batıgün

Numara:1030516477
Ad Soyad:Kadir Ek

Numara:1030516495
Ad Soyad:Abdulhamit Akaslan

Döküman Markdown ile stackedit.io sitesinde hazırlandı. Daha iyi bir deneyim için .html uzantılı dosyadan çalıştırınız.

Bu otomasyon ile eczanenin çalışma sistemi daha kolay anlatılabilir. Bu vesileyle böyle bir görselleştirme yoluna gittik. C# Windows Form kullanılarak hazırlanmıştır. UI Framework olarak MaterialSkin ve Bunifu kullanılmıştır.

Otomasyonda hem doktor hem de eczane girişi bulunmaktadır.

Hasta doktora gider. Doktorun sisteminde bütün hastalar mevcuttur.

Doktor hastayı TC veya isim soyisim ile bulabilir.

Doktor hastayı seçtikten sonra ilaç yazma ekranı gelir

Yazacağı ilacın yaş sınırı bulunmaktadır. Bu yüzden yazacağı ilacın hastanın yaşına uygun olması gerekir.

Doktor arama yaparak ta ilaçları bulabilir.

Doktorun yazdığı ilaç sayısı sağ alttaki buttonda gösterilir ve o button'a bastığında yazılan ilaçlar sayfasına gider.

Yazılan ilaçlar bu sayfada gösterilir.

Doktor reçeteyi yazdıra bastığı zaman reçete sisteme yüklenir ve reçete bir numaraya sahip olur. Bu numarayla hasta eczaneye gidip ilaçlarını alabilir.

Doktor E-Reçete sorgulaması yapabilir.

Sıra hastanın eczaneye gitmesine geliyor.

Hasta eczaneye gittiği zaman eczane personeli reçete numara veya hasta kimlik numarasını alarak E-Reçete sorgu yapıyor.

Hastanın sigorta türüne göre indirim yapılıyor. Eğer sigorta yoksa indirim yapılmıyor. Satış yapıldıktan sonra satılan ilaçlar, satın alan hasta, ne zaman satın alındığı ve hangi personelin satışı yaptığı veritabanına ekleniyor.

Reçete satışı yapıldıysa bu reçete üzerinden tekrar ilaç satışı yapılamıyor.

Eczane sisteminde hasta sorgulama, ilaçlar ve diğer ürünler sekmeleride mevcut.

Diğer ürünler kısmında ürünlere çift tıklama yapılarak sepete atılabilir.

Eklenen ürünler sepete gelir ve ardından satış yapılır.

Satış yapıldıktan sonra satılan ürünler, ne zaman satıldığı ve hangi personelin sattığı veritabanına kayıt edilmektedir.

NORMALİZASYON

Normalizasyon yapılırken uyulması gereken kurulların her birine normal form adı verilir. 5 tip normalleştirme kuralından bahsedilebilir.
  • Birinci Normal Form (1NF)
  • İkinci Normal Form (2NF)
  • Üçüncü Normal Form (3NF)
  • Dördünü Normal Form (4NF)
  • Beşinci Normal Form (5NF)

Bu Normal formlardan ilk üçü çok kullanılırken son ikisinin kullanımı daha azdır. İlk üç normal form kayıt güncelleme, kayıt silme ve kayıt bulmada kolaylık sağlar.

Normalizasyon öncesi Hasta Tablosu

1. Normalizasyon

Veri tekrarı olduğu için 1. normalizasyonu uyguluyoruz.

Hasta Tablosu

2. Normalizasyon

Bir tablo içinde tanımlı ancak anahtar olmaya uygun sütunlar anahtar olarak tanımlanmalı ve tanımlı birincil anahtar sütunlara bağlanmalıdır. Bu yüzden ilaçlar ayrı bir tablo olması gerekiyor.

Hasta Tablosu

İlaç Tablosu

3. Normalizasyon

2NF'de karşılaşılan sorunları çözmek için geçişli bağımlılıkları da ortadan kaldırmak gerekmektedir. Ayrıca Hasta İlaçları adında yeni bir tablo yapıp gereksiz sütunları ortadan kaldırıyoruz. Bu tabloda Hasta TC ve Ilaç Kodu olması yeterli.

HastaTablosu

İlaç Tablosu

Hasta İlaçları Tablosu

İl Tablosu

İlçe Tablosu

Sigorta Tablosu

Bu şekilde normalizasyonu yapıyoruz. Veri tekrarı ve karmaşıklığı ortadan kaldırmış oluyoruz.

VERİTABANI ER DİYAGRAMI

ERD Tam Boyut

SORGULAR

1- Hayat Eczanesi stoğuna ilaç temin eden tedarikçiler

SELECT Eczane.Ad, StogaGelenIlaclar.TedarikciId, Tedarikci.FirmaAdi
FROM Tedarikci INNER JOIN (Eczane INNER JOIN StogaGelenIlaclar 
ON Eczane.Id = StogaGelenIlaclar.EczaneId) 
ON Tedarikci.Id = StogaGelenIlaclar.TedarikciId
WHERE (((Eczane.Ad)="Hayat Eczanesi"));

2- Bursa'da çalışan ve personel sayısı 2 den fazla olan eczanelerdeki personellerin cep telefonu numaraları

SELECT Sehirler.[Plaka Kodu], Eczane.PersonelSayisi, 
EczanePersonelleri.CepNo, Sehirler.İl
FROM (Ilceler 
INNER JOIN (Eczane INNER JOIN EczanePersonelleri 
ON Eczane.Id = EczanePersonelleri.EczaneId) 
ON Ilceler.IlceId = Eczane.İlceId) 
INNER JOIN Sehirler ON Ilceler.İl = Sehirler.[Plaka Kodu]
WHERE (((Sehirler.[Plaka Kodu])=16) AND ((Eczane.PersonelSayisi)>2));

3- Çiçek Eczanesi'nde adı Ahmet olan personelin sattığı ilaçların listesi ve sattığı tarihler

SELECT EczanePersonelleri.Ad, EczanePersonelleri.Soyad, 
Eczane.Ad, Ilaclar.UrunAdi, SatilanIlaclar.SatisTarihi
FROM Ilaclar 
INNER JOIN ((Eczane 
INNER JOIN EczanePersonelleri 
ON Eczane.Id = EczanePersonelleri.EczaneId) 
INNER JOIN SatilanIlaclar 
ON EczanePersonelleri.Id = SatilanIlaclar.SatanPersonelId) 
ON Ilaclar.Id = SatilanIlaclar.IlacId
WHERE (((EczanePersonelleri.Ad)="Ahmet") AND ((Eczane.Ad)="Çiçek Eczanesi"));

4- Stoğunda 50' den fazla maske bulunan eczaneler ve o eczanenin müdürü

SELECT Eczane.Ad, StogaGelenYanUrunler.UrunAdi, 
StogaGelenYanUrunler.Adet, EczanePersonelleri.Ad, 
EczanePersonelleri.Soyad, EczanePersonelleri.Unvan
FROM (Eczane 
INNER JOIN EczanePersonelleri 
ON Eczane.Id = EczanePersonelleri.EczaneId) 
INNER JOIN StogaGelenYanUrunler 
ON (EczanePersonelleri.EczaneId = StogaGelenYanUrunler.EczaneId) 
AND (Eczane.Id = StogaGelenYanUrunler.EczaneId)
WHERE (((StogaGelenYanUrunler.UrunAdi)="Maske") 
AND ((StogaGelenYanUrunler.Adet)>50) 
AND ((EczanePersonelleri.Unvan)="Müdür"));

5- İade edilen yan ürünleri satan personelin adı,soyadı, işe giriş tarihi, sattığı ürünün adı ve hangi eczanede çalıştığı

SELECT EczanePersonelleri.Ad, 
EczanePersonelleri.Soyad, 
EczanePersonelleri.IseGirisTarihi, 
YanUrunler.UrunAdi, IadeEdilenYanUrunler.IadeTarihi, Eczane.Ad
FROM (Eczane INNER JOIN (EczanePersonelleri 
INNER JOIN IadeEdilenYanUrunler 
ON (EczanePersonelleri.Id = IadeEdilenYanUrunler.IadeAlanPersonelId) 
AND (EczanePersonelleri.Id = IadeEdilenYanUrunler.SatanPersonelId))
ON (Eczane.Id = EczanePersonelleri.EczaneId))
INNER JOIN YanUrunler ON IadeEdilenYanUrunler.Id = YanUrunler.Id;

6- 6 numaralı reçetedeki ilaçlar, yazan doktor, verilen hasta, veren eczane ve satan personel

SELECT Recete.ReceteId, Ilaclar.UrunAdi, 
Doktor.Ad, Doktor.Soyad, Sehirler.İl, 
Ilceler.Ilce, EczanePersonelleri.Ad, EczanePersonelleri.Soyad,
 Hasta.Ad, Hasta.Soyad, Ilaclar.Fiyat
FROM Hasta INNER JOIN ((Ilceler 
INNER JOIN ((Ilaclar INNER JOIN ((Eczane 
INNER JOIN EczanePersonelleri 
ON Eczane.Id = EczanePersonelleri.EczaneId) 
INNER JOIN SatilanIlaclar 
ON EczanePersonelleri.Id = SatilanIlaclar.SatanPersonelId) 
ON Ilaclar.Id = SatilanIlaclar.IlacId) 
INNER JOIN ((Hastane INNER JOIN Doktor 
ON Hastane.Id = Doktor.HastaneId) 
INNER JOIN Recete ON Doktor.Id = Recete.YazanDoktorId) 
ON SatilanIlaclar.ReceteId = Recete.ReceteId) 
ON Ilceler.IlceId = Hastane.IlceId) 
INNER JOIN Sehirler ON Ilceler.İl = Sehirler.[Plaka Kodu])
 ON Hasta.HastaTc = Recete.HastaTcKimlikNo
WHERE (((Recete.ReceteId)=6));

7 - 1 numaralı receteyi yazan doktorun adı, soyadı, çalıştığı hastane, meslekteki deneyimi çalıştığı il

SELECT Recete.ReceteId, Doktor.Ad, Doktor.Soyad,
 Doktor.Tecrube, Sehirler.İl
FROM (Ilceler INNER JOIN ((Hastane 
INNER JOIN Doktor ON Hastane.Id = Doktor.HastaneId) 
INNER JOIN Recete ON Doktor.Id = Recete.YazanDoktorId)
 ON Ilceler.IlceId = Hastane.IlceId) 
 INNER JOIN Sehirler ON Ilceler.İl = Sehirler.[Plaka Kodu]
WHERE (((Recete.ReceteId)=1));

8- Tarık Saklı adlı hastanın aldığı ilaçların toplam fiyatı

SELECT Sum(Ilaclar.Fiyat) AS ToplaFiyat
FROM Ilaclar 
INNER JOIN ((Hasta 
INNER JOIN Recete ON Hasta.HastaTc = Recete.HastaTcKimlikNo) 
INNER JOIN IlacRecete ON Recete.ReceteId = IlacRecete.ReceteId)
 ON Ilaclar.Id = IlacRecete.IlacId
HAVING (((Hasta.Ad)="Tarık") AND ((Hasta.Soyad)="SAKLI"));

9- 18.05.2020 tarihinde satılan ilaçların adı, ruhsat sahibi, ruhsat numarası, kimin sattığı ve satılan eczanenin adı

SELECT SatilanIlaclar.SatisTarihi, Ilaclar.UrunAdi, 
Ilaclar.RuhsatSahibi, Ilaclar.RuhsatNumarasi, 
EczanePersonelleri.Ad, EczanePersonelleri.Soyad, Eczane.Ad
FROM Ilaclar INNER JOIN ((Eczane 
INNER JOIN EczanePersonelleri ON Eczane.Id = EczanePersonelleri.EczaneId) 
INNER JOIN SatilanIlaclar 
ON EczanePersonelleri.Id = SatilanIlaclar.SatanPersonelId) 
ON Ilaclar.Id = SatilanIlaclar.IlacId
WHERE (((SatilanIlaclar.SatisTarihi)=#5/18/2020#));

10 - Murat HAS adlı çalışanın sattığı ilaçların adı, sattığı tarihler, satış şekli ve hangi hastalara sattığı

SELECT EczanePersonelleri.Ad, EczanePersonelleri.Soyad,
 Ilaclar.UrunAdi, SatilanIlaclar.SatisTarihi, 
 SatilanIlaclar.SatisSekli, Hasta.Ad, Hasta.Soyad
FROM (Hasta INNER JOIN Recete 
ON Hasta.HastaTc = Recete.HastaTcKimlikNo) 
INNER JOIN (Ilaclar INNER JOIN (EczanePersonelleri 
INNER JOIN SatilanIlaclar 
ON EczanePersonelleri.Id = SatilanIlaclar.SatanPersonelId) 
ON Ilaclar.Id = SatilanIlaclar.IlacId) 
ON Recete.ReceteId = SatilanIlaclar.ReceteId
WHERE (((EczanePersonelleri.Ad)="Murat") 
AND ((EczanePersonelleri.Soyad)="HAS"));

11- Mart 2020'den sonra satılan yan ürünlerin adı, satış tarihi, kaç adet satıldığı, satış şekli, hangi personelin sattığı, satan personelin aylık maaşı ve satan personelin hangi eczanede çalıştığı

SELECT SatilanYanUrunler.SatisTarihi, SatilanYanUrunler.UrunAdi, 
SatilanYanUrunler.Adet, SatilanYanUrunler.SatisSekli,
 EczanePersonelleri.Ad, EczanePersonelleri.Soyad, 
 EczanePersonelleri.Maaş, Eczane.Ad
FROM YanUrunler INNER JOIN ((Eczane 
INNER JOIN EczanePersonelleri ON Eczane.Id = EczanePersonelleri.EczaneId) 
INNER JOIN SatilanYanUrunler 
ON EczanePersonelleri.Id = SatilanYanUrunler.SatanPersonelId) 
ON YanUrunler.Id = SatilanYanUrunler.Id
WHERE (((SatilanYanUrunler.SatisTarihi)>#3/31/2020#));

12- SGK'lı olan hastaların adı soyadı, hangi şehirde yaşadığı, hangi ilaçları aldığı, ilaçların hangi etkin maddeyi içerdiği, hastanın doktorunun adı soyadı ve uzmanlık alanı

SELECT Hasta.SigortaTuru, Hasta.Ad, Hasta.Soyad, Sehirler.İl,
Ilaclar.UrunAdi, Ilaclar.EtkinMadde, Doktor.Ad, Doktor.Soyad, 
Doktor.UzmanlıkAlani
FROM Doktor INNER JOIN (((Ilceler 
INNER JOIN (Hasta INNER JOIN Recete 
ON Hasta.HastaTc = Recete.HastaTcKimlikNo) ON Ilceler.IlceId = Hasta.IlceId) 
INNER JOIN Sehirler 
ON Ilceler.İl = Sehirler.[Plaka Kodu]) 
INNER JOIN (Ilaclar INNER JOIN SatilanIlaclar 
ON Ilaclar.Id = SatilanIlaclar.IlacId) 
ON Recete.ReceteId = SatilanIlaclar.ReceteId) 
ON Doktor.Id = Recete.YazanDoktorId
WHERE (((Hasta.SigortaTuru)="SGK"));

13- 2010'dan itibaren işe giren personellerin işe giriş tarihi adı soyadı,ünvanı, aylık maaşı, sattığı ilaçların adı, sattığı ilaçların satış tarihi, çalıştığı eczanenin adı ve eczanenin hangi şehirde bulunduğu

SELECT EczanePersonelleri.IseGirisTarihi, EczanePersonelleri.Ad, 
EczanePersonelleri.Soyad, EczanePersonelleri.Unvan, 
EczanePersonelleri.Maaş, Ilaclar.UrunAdi,
 SatilanIlaclar.SatisTarihi, Eczane.Ad, Sehirler.İl
FROM (Ilaclar INNER JOIN ((Ilceler 
INNER JOIN (Eczane 
INNER JOIN EczanePersonelleri 
ON Eczane.Id = EczanePersonelleri.EczaneId) 
ON Ilceler.IlceId = Eczane.İlceId) 
INNER JOIN SatilanIlaclar
 ON EczanePersonelleri.Id = SatilanIlaclar.SatanPersonelId) 
ON Ilaclar.Id = SatilanIlaclar.IlacId)
 INNER JOIN Sehirler ON Ilceler.İl = Sehirler.[Plaka Kodu]
WHERE (((EczanePersonelleri.IseGirisTarihi)>#12/31/2009#));

14- İl, ilçe ve ünvanlara göre çalışanların maaşları, hangi eczanede çalıştıkları ve çalıştıkları eczanenin personel sayısı

SELECT Sehirler.İl, Ilceler.Ilce, EczanePersonelleri.Unvan, 
EczanePersonelleri.Maaş, Eczane.PersonelSayisi, Eczane.Ad
FROM (Ilceler INNER JOIN (Eczane 
INNER JOIN EczanePersonelleri 
ON Eczane.Id = EczanePersonelleri.EczaneId) 
ON Ilceler.IlceId = Eczane.İlceId) INNER JOIN Sehirler 
ON Ilceler.İl = Sehirler.[Plaka Kodu];

15- Özel hastanede çalışan doktorların ad soyad ve uzmanlık alanları, yazdıkları ilaçlar, yazılan hastanın ad,soyad ve doğum tarihleri, yazılan ilacı satan eczane personelinin adı,soyadı, yazılan ilacı hastaya veren eczane

SELECT Hastane.Tur, Doktor.Ad, Doktor.Soyad, Doktor.UzmanlıkAlani,
Ilaclar.UrunAdi, Hasta.Ad, Hasta.Soyad, Hasta.DogumTarihi
FROM Hasta INNER JOIN ((((Hastane 
INNER JOIN Doktor ON Hastane.Id = Doktor.HastaneId) 
INNER JOIN Recete ON Doktor.Id = Recete.YazanDoktorId) 
INNER JOIN (Ilaclar INNER JOIN IlacRecete 
ON Ilaclar.Id = IlacRecete.IlacId) 
ON Recete.ReceteId = IlacRecete.ReceteId) 
INNER JOIN SatilanIlaclar 
ON (Recete.ReceteId = SatilanIlaclar.ReceteId) 
AND (IlacRecete.ReceteId = SatilanIlaclar.ReceteId)
 AND (Ilaclar.Id = SatilanIlaclar.IlacId))
  ON Hasta.HastaTc = Recete.HastaTcKimlikNo
WHERE (((Hastane.Tur)="Özel"));