C++ Hastane Otomasyonu

Arkadaşlar bunu da örnek olsun diye paylaşmak istedim.

C++’ta yazmış olduğum proje ödevimdi.

Sanırım dosyalama C’nin ve C++’ın en kolay konusu. Diğer konulara göre çok daha rahat anlaşılıyor.

Hadi gelin birlikte kodu inceleyelim.⇓

#include <iostream> // cout,cin vs. için 
#include <conio.h> //getch(); fonksiyonu için
#include <fstream> // dosyalama işlemleri için 
#include <string> // string türü için 
#include <windows.h> //komut ekranına renk vermek için 
#include <clocale> // Türkçe karakter için
#include <iomanip> //setw() için eklenen kütüphane
#include <stdio.h>


using namespace std;
int main()
 {
 system("color 80"); //komut ekranını renklendiriyoruz
 setlocale(LC_ALL, "turkish"); //Türkçe karakter ekliyoruz
 
 int secim;
 string HastaAdi; //Değişkenleri tanımladık
 string HastaSoyadi; 
 int TcNo; 
 int Telefon;
 int KayitNo;
 int HastaYas; 
 string HastaCinsiyet; 
 char islem;
 int TC;
 
 
 string Tarih; 
 string DoktorAdi; 
 string Teshis; 
 string Ilac;
 string Saat;
 string Tahliller;
 double Ucret;
 
 char cevap; 
 
 do{
 cout<<"1- Hasta kayıt ekleme"<<endl; //Menümüz
 cout<<"2- Hasta kaydı düzeltme"<<endl; 
 cout<<"3- Hasta silme"<<endl;
 cout<<"4- Randevu alma"<<endl; 
 cout<<"5- Randevu silme"<<endl; 
 cout<<"6- Randevu güncelleme"<<endl; 
 cout<<"7- Hasta sorgulama"<<endl; 
 cout<<"8- Hasta listesi alma"<<endl; 
 cout<<"9- Hasta muayene kaydı"<<endl; 
 cout<<"Yapmak istediginiz islemi seciniz:"<<endl;
 cin>>secim;
 
 switch(secim) //Seçim yapıyoruz
 {
 case 1:
 {
 
 cout<<"1- Hasta kayıt ekleme"<<endl; //Menüden numara seçerken önce kayıt ekleme yapıyoruz
 
 ofstream DosyaYaz; 
 DosyaYaz.open("Hasta.txt",ios::app); 
 do 
 { 
 cout<<"\n Hasta TC :"; cin>>TC; 
 cout<<"\n Hasta Adi :"; cin>>HastaAdi; 
 cout<<"\n Hasta Soyadi :"; cin>>HastaSoyadi; 
 cout<<"\n Hasta Yasi :"; cin>>HastaYas; 
 cout<<"\n Telefonu :"; cin>>Telefon; 
 cout<<"\n Cinsiyeti :"; cin>>HastaCinsiyet; 
 
 DosyaYaz<<TC<<" "<<HastaAdi<<' '<<HastaSoyadi<<' ' <<HastaYas<<' '<<Telefon<<' ' <<HastaCinsiyet<<endl; 
 cout<<"\n Baska kayit yapacak misiniz?(e/E) (h/H) ";cin>>cevap; 
 
 }while(cevap=='e' || cevap=='E'); 
 
 DosyaYaz.close(); 
 cout<< "Dosyaya yazim tamamlandi."<<endl; 
 
 break;
 }
 case 2:
 { 
 cout<<"2- Hasta kaydı düzeltme"<<endl;
 ifstream DosyaOku;
 DosyaOku.open("Hasta.txt",ios::app);
 cout<< "\n Hasta Bilgileri \n"; 
 cout<<"TC no :";
 cin>>TcNo;
 if(TC==TcNo) 
 { 
 DosyaOku.close(); 
 ofstream DosyaYaz; 
 DosyaYaz.open("Hasta.txt",ios::app); 
 cout<<"\n Hasta Adi :"; cin>>HastaAdi; 
 cout<<"\n Hasta Soyadi :"; cin>>HastaSoyadi; 
 cout<<"\n Hasta Yasi :"; cin>>HastaYas; 
 cout<<"\n Telefonu :"; cin>>Telefon; 
 cout<<"\n Cinsiyeti :"; cin>>HastaCinsiyet; 
 
 DosyaYaz.close(); 
 }
 else 
 cout<<"Kimlik Numarası bulunamadı"<<endl;
 break;
 } 
 case 3:
 /*{
 cout<<"3- Hasta silme"<<endl;
 ifstream DosyaOku;
 DosyaOku.open("Hasta.txt");
 cout<<"TC no:";
 cin>>TcNo;
 if(TC==TcNo)
 {
 remove("Hasta.txt");
 } 
 break;
 }*/
 case 4:
 
 {
 cout<<"4- Randevu alma"<<endl;
 
 cout<<" Hasta TC :";cin>>TC; 
 
 ifstream DosyaOku("Hasta.txt"); 
 while(!DosyaOku.eof()) 
 { 
 DosyaOku>>TcNo>>HastaAdi>>HastaSoyadi>>HastaYas>>Telefon>>HastaCinsiyet; 
 cout<<endl;
 if(TC==TcNo) 
 { 
 cout<< "\n Hasta Bilgileri \n"; 
 cout<<"TC no :"<<TcNo<<endl; 
 cout<<"Adı :"<<HastaAdi<<endl; 
 cout<<"Soyadı :"<<HastaSoyadi<<endl; 
 cout<<"Yası :"<<HastaYas<<endl; 
 cout<<"Telefonu :"<<Telefon<<endl; 
 cout<<"Cinsiyeti:"<<HastaCinsiyet<<endl; 
 cout<<"Randevu istiyor mu? (e/h)"<<endl; 
 cin>>cevap; 
 
 if (cevap=='e'|| cevap=='E') 
 { 
 DosyaOku.close(); 
 ofstream DosyaYaz; 
 DosyaYaz.open("RandevuAl.txt",ios::app); 
 
 cout<<"\n Randevu Bilgileri \n"; 
 cout<<"\n Tarih :"; cin>>Tarih; 
 cout<<"\n Doktor Adi :"; cin>>DoktorAdi; 
 cout<<"\n Teshis :"; cin>>Teshis; 
 cout<<"\n Muayene Ucreti :"; cin>>Ucret; 
 
 DosyaYaz <<TcNo<<" "<<Tarih<<' '<<DoktorAdi<<' ' <<Teshis<<' '<<Ucret<<"\n";
 DosyaYaz.close(); 
 }
 }
 }
 break;
 }
 
 case 5:
 /*{
 cout<<"5- Randevu silme"<<endl;
 break;
 }*/
 case 6:
 {
 cout<<"6- Randevu güncelleme"<<endl;
 
 
 ifstream DosyaOku("Hasta.txt",ios::in); 
 cout<<"TC no:";
 cin>>TcNo;
 if(TC==TcNo)
 { 
 cout<< "\n Hasta Bilgileri \n"; 
 cout<<"TC no :"<<TcNo<<endl; 
 cout<<"Adı :"<<HastaAdi<<endl; 
 cout<<"Soyadı :"<<HastaSoyadi<<endl; 
 cout<<"Yaşı :"<<HastaYas<<endl; 
 cout<<"Telefonu :"<<Telefon<<endl; 
 cout<<"Cinsiyeti:"<<HastaCinsiyet<<endl; 
 
 ofstream DosyaYaz;
 DosyaYaz.open("Muayene.txt",ios::app);
 { 
 cout<<"\n Randevu Bilgileri \n"; 
 cout<<"\n Tarih :"; cin>>Tarih; 
 cout<<"\n Doktor Adi :"; cin>>DoktorAdi; 
 cout<<"\n Teshis :"; cin>>Teshis; 
 cout<<"\n Muayene Ucreti :"; cin>>Ucret; 
 
 DosyaYaz.close();
 ofstream DosyaYaz;
 }
 DosyaOku.close(); 
 ifstream DosyaOku; 
 
 }
 else
 cout<<"Böyle bir kişi bulunmamaktadır.";
 
 break;
 }
 case 7: 
 { 
 cout<<"7- Hasta sorgulama"<<endl;
 
 cout<<" Hasta TC :";cin>>TC; 
 ifstream DosyaOku("Hasta.txt"); 
 while(!DosyaOku.eof()) 
 { 
 DosyaOku>>TcNo>>HastaAdi>>HastaSoyadi>>HastaYas>>Telefon>>HastaCinsiyet; 
 if(TC==TcNo) 
 { 
 cout<< "\n Hasta Bilgileri \n"; 
 cout<<"TC no :"<<TcNo<<endl; 
 cout<<"Adı :"<<HastaAdi<<endl; 
 cout<<"Soyadı :"<<HastaSoyadi<<endl; 
 cout<<"Yaşı :"<<HastaYas<<endl; 
 cout<<"Telefonu :"<<Telefon<<endl; 
 cout<<"Cinsiyeti:"<<HastaCinsiyet<<endl; 
 TC=TcNo; 
 
 DosyaOku.close(); 
 ofstream DosyaYaz; 
 DosyaOku.open("Muayene.txt",ios::in); 
 cout<<" randevu bilgileri \n"<<endl; cout<<setw(11)<<" TC "<<setw(10)<<" Tarih "<<setw(12)<<" Doktor Adi "<<setw(10)<<" Teshis "<<setw(6)<<" Ucret"<<endl; 
 while(!DosyaOku.eof()) 
 { 
 
 DosyaOku>>TcNo>>Tarih>>DoktorAdi>>Teshis>>Ucret; 
 
 if(TC==TcNo) 
 { 
 cout<<setw(11)<< TcNo<<setw(10)<<Tarih<<setw(12)<< DoktorAdi<<setw(10)<< Teshis<<setw(6)<< Ucret<<endl; 
 } 
 } 
 DosyaYaz.close();
 

 } 
 } 
 

 break;
 }
 case 8:
 {
 cout<<"8- Hasta listesi alma"<<endl;
 ifstream DosyaOku;
 DosyaOku.open("Hasta.txt",ios::in);
 
 while(!DosyaOku.eof()) 
 { 
 DosyaOku>>TcNo>>HastaAdi>>HastaSoyadi>>HastaYas>>Telefon>>HastaCinsiyet; 
 cout<<"\n Hasta Bilgileri \n"; 
 cout<<"TC no :"<<TcNo<<endl; 
 cout<<"Adı :"<<HastaAdi<<endl; 
 cout<<"Soyadı :"<<HastaSoyadi<<endl; 
 cout<<"Yaşı :"<<HastaYas<<endl; 
 cout<<"Telefonu :"<<Telefon<<endl; 
 cout<<"Cinsiyeti:"<<HastaCinsiyet<<endl; 
 
 DosyaOku.close();
 }
 break;
 }
 
 case 9: 
 {
 cout<<"9- Hasta muayene kaydı"<<endl;
 ifstream DosyaOku;
 DosyaOku.open("Hasta.txt",ios::in);
 
 
 { 
 
 do{
 if(DosyaOku.eof()) break;
 else
 DosyaOku>>TcNo>>DoktorAdi>>Teshis>>Tahliller>>Ilac; 
 cout<<"\n Hasta Bilgileri \n"; 
 cout<<"\n Doktor Adı :"<<DoktorAdi; 
 cout<<"\n Teşhis:"<<Teshis;
 cout<<"\n Tahlil Bilgileri :"<<Tahliller; 
 cout<<"\n İlaç :"<<Ilac; 
 }while(true);
 
 
 do{
 if(DosyaOku.eof()) break; 
 
 else
 
 DosyaOku>>TcNo>>HastaAdi>>HastaSoyadi>>HastaYas>>Telefon>>HastaCinsiyet; 
 cout<<"\n Hasta Bilgileri \n"; 
 cout<<"TC no :"<<TcNo<<endl; 
 cout<<"Adı :"<<HastaAdi<<endl; 
 cout<<"Soyadı :"<<HastaSoyadi<<endl; 
 cout<<"Yaşı :"<<HastaYas<<endl; 
 cout<<"Telefonu :"<<Telefon<<endl; 
 cout<<"Cinsiyeti:"<<HastaCinsiyet<<endl; 
 
 }while(true);
 
 
 ofstream DosyaYaz;
 DosyaYaz.open("Randevu.txt",ios::app);
 DosyaYaz.close();
 }
 DosyaOku.close();
 
 break;
 }
 }
 
 
 cout<<"İslem yapmaya devam etmek istiyor musunuz? (e/E) (h/H)";
 cin>>islem;
 }while(islem=='e' || islem=='E'); //İşlemi yaptıktan sonra karşımıza tekrar menü
 cout<<endl; //çıkmasını sağlıyor
 getch(); 
 
 }

C’de 10 Tabanından 2’lik Tabana Çevirme

Karşınızda fonksiyon, mod, while ve for döngüsü kullanarak C dilinde 10’luk tabandan 2’lik tabana geçiş programı.  Güle güle çevirin.

#include<stdio.h>
#include<conio.h>

int ikilik(int x)
 {
 int i,k[20];
 i=0;
 while(x>=1)
 {
 i++;
 k[i]=x%2;
 x=x/2;
 }

printf("\nIkilik tabandaki sayi karsiligi:");
 for(i=i;i>0;i--)
 printf("%d",k[i]);
 }

int main()
 {
 int a;
 printf("Bir sayi giriniz:");
 scanf("%d",&a);
 ikilik(a);

getch();
 return (0);
 }

C’de Dosyalama

Arkadaşlar C’de dosyalamanın C++’tan oldukça farklı olduğundan bahsetmiştim şimdi gelin nasıl olduğuna bir bakalım. Ayrıca dosya fonksiyonlarını da sizinle paylaşmak isterim ve tabii ki mod ile açılacak dosyaların ne amaçla açıldığını.

          r    (read only) yalnızca okuma için açar. 
          w    (write only) yalnızca yazma için açar.
          a    (append) ekleme yapmak için açar.
          r+   Okuma/yazma için açar.
          w+   Okuma/yazma için açar.
          a+   Okuma/yazma için açar.

Dosya Fonksiyonları

  Fonksiyon      Görevi
  fopen()       Dosya oluşturur, açar
  fclose()      Dosyayı kapatır
  putc()        Dosyaya karakter yazar
  getc()        Dosyadan karakter okur
  feof()        Dosya sonuna gelindiğini sorgular
  fprintf()     Dosyaya formatlı veri yazar
  fscanf()      Dosyadan formatlı veri okur
  fputs()       Dosyaya katar yazar
  fgets()       Dosyadan katar okur
  fwrite()      Dosyaya dizi yazar
  fread()       Dosyadan dizi okur
#include <stdio.h>
#include<stdlib.h>

int main()
{
 char str[50];
 FILE *f;
 
 f=fopen("hello.txt","w"); //dosyayı açıp içine yazıyor
 if(f==NULL)
 printf("File did not open");
 
 else
 printf("Everything was alright\n\n");
 fputs("HELLO\n",f);
 fprintf(f,"It is my first experience!");
 fclose(f);
 
 
 f=fopen("hello.txt","r"); //kelime kelime yazdırıyor
 while(!feof(f))
 {
 printf("%s \n",str);
 fscanf(f,"%s",str);
 }
 fclose(f);
 
 // while(fgets(str,sizeof str,f)!=NULL) Dosya bitinceye kadar bu işlemi yapıyor
 
 f=fopen("hello.txt","w");
 fseek(f,9,SEEK_SET); //fseek 9 byte imleci hareket ettirmek bişiler eklemek için
 fputs("New",f); //fputs("....",f);
 
 fclose(f);
 system("PAUSE");
}

C++ Dosyalama

  • fstream (Okuma ve Yazma)
  • ifstream (Okuma)
  • ofstream (Yazma)
    (C++ da dosyalama işlemleri C den oldukça farklıdır.) C++’ta dosyalama işlemleri için kullandığımız yukarıdaki komutlar aslında sınıf diye geçer. Kullanım şeklimiz bu şekilde: (“Dosyaİsmi”, Mod)

    • ios::in (Veri okuma modu)
    • ios::out (Veri yazma modu)
    • ios::app (Veri ekleme modu)    bunlar da modlarımız arkadaşlar.
      Şimdi aşağıdaki örneği inceleyelim.
#include <fstream>
#include <string>
#include <windows.h>
#include <iomanip>   //setw için
using namespace std;
int main()
{
 fstream dosya;
 
 dosya.open("melis.txt",ios::out|ios::in|ios::app);
 dosya<<"Benim Dosyam."; //dosyaya veri yazdırıyoruz
 
 dosya.setf(ios::left); //sola yaslamak için
 dosya<<setw(20)<<"aaa"<<setw(20)<<"bbbb"<<setw(20)<<"36786"<<endl; 
 // 20+20+20 karakterlik yer alsın setw(20)
 
 dosya.close();
}

C++ Dilinde Pointer (İşaretçiler)

İşaretçiler, diyince aklımıza ilk olarak adresler gelmeli arkadaşlar. Çünkü işaretçiler, değişkenin hafızadaki adresini gösterir. İşaretçileri tanımlarken başlarına ‘*’ operatörü koyarız. Adres operatörü olarakta ‘&’ kullanırız.

#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
 int a=20;
 int *b;
 b=&a;       //a'nın adresini b işaretçisine atayıp yazdırdı.
 cout<<&b;
 
 getch();
 return 0;
}

// reference: &
// deference: *

C++ Dilinde Kalıtım ve Kurucu Fonksiyonlar

C++’ta yazılan kodun yeniden kullanılabilmesini sağlayan mekanizmaya kalıtım diyoruz. Yani katılım, bir sınıfın alınıp, başka bir sınıfın içerisinde bilgilerinin kullanabilmesidir. Bu özellik yazılım yaparken işimizi oldukça kolaylaştırıyor. Burada kurucu fonksiyonlardan da bahsetmek istiyorum. Öncelikle, kurucu fonksiyonlar (Constructors) üyesi oldukları sınıf ile aynı ismi taşırlar ve üyesi oldukları sınıftan bir nesne yaratılırken kendiliğinden canlanırlar. Ayrıca kurucular parametre alırlar ama geri dönüş değerleri yoktur.

#include <iostream>
#include <conio.h>
using namespace std;

class sekil
{
 public:
 int alan;
 string birim;
 string sekilturu; 
 void alanyazdir()
 {
 cout<<sekilturu<<" "<<alan<<" "<<birim<<" "<<endl;
 } 
 sekil()
 {
 birim="cm2";
 }
};

class ucgen:public sekil
{
 public:
 int yukseklik,taban;
 ucgen()
 {
 sekilturu="ucgen";
 }
 
};

class dikdortgen:public sekil
{
 public:
 int en,boy;
 dikdortgen()
 {
 sekilturu="dikdortgen";
 }
};

class kare:public sekil
{
 public:
 int kenar;
 kare()
 {
 sekilturu="kare";
 }
};

class daire:public sekil
{
 public:
 int yaricap;
 daire()
 {
 sekilturu="daire";
 }
};

int main()
{
 kare k1;
 k1.kenar=10;
 k1.alan=k1.kenar*k1.kenar;
 k1.alanyazdir();
 
 daire d1;
 d1.yaricap=10;
 d1.alan=3.14*d1.yaricap*d1.yaricap;
 d1.alanyazdir();
 
}

C++ Dilinde Class Yapısı

Sınıf yapısı ile birlikte OOP (object oriented programming) yani nesneye dayalı programlamaya başladık arkadaşlar.

Bu yapı struct (yapı) ile oldukça benzerdir ve kullanımı aynıdır. struct ile class arasındaki fark:

“Sınıfların referans türünde, yapıların ise değer türünden olmasıdır. Bundan dolayı yapılar stack (yığın) alanı üzerinde, sınıflar ise heap (öbek) alanı üzerinde tutulurlar. Sınıflara referans aracılığıyla ulaşılırken yığınlara ise doğrudan ulaşabiliriz. Bu nedenle yapı kullanımı sınıf kullanımına göre daha az maliyetlidir ve erişim hızı yüksektir.”

Şimdi gelelim aşağıdaki örneğimize. Burada bir daire sınıfı tanımladık ve elemanlarını public yaptık (yani dışarıdan erişilebilir). Sınıfın dışında bir hesap fonksiyonu oluşturduk ve main() fonksiyonunun içine çevre ve alanı yazdırdık. Bunu daire tipinde bir nesne oluşturarak ve hesap() fonksiyonu ile gerçekleştirdik.

#include <iostream>
#include <conio.h>
using namespace std;
class daire
{ 
 public:
 float cevre,alan;
 int hesap();
};

int daire::hesap()
{
 int yaricap;
 cout<<"Yaricapi giriniz:"<<endl;
 cin>>yaricap;
 cevre=2*3.14*yaricap;
 alan=3*yaricap^2;
 cout<<"Cevre:"<<cevre<<endl<<"Alan:"<<alan<<endl;
 return 0;
}
int main()
{
 daire nesne;
 cout<<nesne.hesap();
 getch();
}