#include <stdio.h>
// stdio.h = Açılımı "standart input output" olan bu kütüphane
// adından da anlaşılabileceği gibi giriş çıkış fonksiyonlarını
// barınırır. Örneğin klavyeden girilen veriyi okumak için
// gerekli olan fonksiyon scanf() ve ekrana yazdırma fonksiyonu
// olan printf() birer giriş çıkış fonksiyonudur. stdlib.h kütüphanesi
// olmadan bu fonksiyonları kullanamayız.
#include <stdlib.h>
// matematiksel işlemler için kullanılmaktadır ancak kütüphanesi math.h dan farklıdır
#include <conio.h>
// conio.h = stdio h ile birlikte kullanılarak,
// birazcık daha ileri düzeyde io kontrolü sağlayan kütüphane dosyası.
#include <string.h>
// string.h = c'nin string ile ilgili fonksiyonlarını barındıran kütüphane.
// strlen, strstr, strcopy ve daha niceleri bu kütüphanemizde yer almaktadır.
// veri dosyası aynı rootta olmalı
typedef struct _veri{
char name[20];
char firma[20];
int adet;
int no;
int fiyat;
int flag;
}DATA;
DATA veri;//global struct
FILE *f;//dosya için gösrerici
int menu(void);//fonksiyon deklarasyonları
void ekle(void);
void listele(void);
void ara(void);
void sat();
void ilave(void);
void duzelt(void);
void siparis_listesi(void);//
void start(void);
void nodan_bul();
void yildiz(void)//kısa fonksiyon tanımları
{
for(int i=0;i<79;i++)
// putchar : standart bir C fonksiyonudur. Bütün sistemlerde bulunması zorunludur.
// Parametresi olan karakteri ekranda imlecin bulunduğu yere yazar
putchar('*');
putchar('n');
}
void miktar(DATA *)//kısa fonksiyon tanımı
{
int a;
a=veri.adet;
if(a>=200)
printf("%d yeterli",a);
else if(a>=100)
printf("%d siparis listesine alindi",a);
else if(a>=1)
printf("%d stok durumu kritik",a);
else if(a==0)
printf("stok tukenmis durumda");
putchar('n');
}
void ekle(void)//yeni ilac ekleme fonksiyonu
{
if((f=fopen("file","a+"))==NULL)
{
printf("DOSYA ACMADA HATA!!!!");
exit(1);
}
printf("ilac adini giriniz : ");
// fflush = giriş çıkış işlemlerinde akış yazmak için çıktı tamponunda
// yazılı olmayan herhangi bir veriyi dosyasa yazmada kullanılır.
fflush(stdin);
// fflush normalde herhangi bir dosya işlemi sırasında klavyeden alınarak
// tampona yüklenmiş girdileri kendisine parametre olarak verilen FILE*
// türünden işaretçi ile ilişkili olan dosyaya yazar ve klavyeden alınmış
// bilgileri tampondan siler. Biz bu fonksiyona parametre olarak stdin (standart input)
// değerini verirsek fonksiyon sadece tamponu boşaltır, yani tampondaki verileri
// hiç bir yere yazmaz. stdin varsayılan olarak klavyeyi gösteren bir FILE işaretçisidir.
scanf("%s",&veri.name);
printf("firma adini giriniz : ");
scanf("%s",&veri.firma);
printf("ilac nosunu girinn");
scanf("%d",&veri.no);
printf("ilac fiyatini girinn");
scanf("%d",&veri.fiyat);
printf("adeti giriniz : ");
scanf("%d",&veri.adet);
fwrite(&veri, sizeof(DATA), 1, f); // fwrite = yazma islemi
fclose(f);
}
void listele(void)//listeleme fonksiyonu
{
if((f=fopen("file","r"))==NULL) // dosyayi okuyamazsa hata verir
{
printf("DOSYA ACMADA HATA!!!!");
exit(1);
}
putchar('n');
fseek(f, 0L, SEEK_SET);
// fseek = Pozisyon göstergesi, kökeni tarafından belirlenen bir referans
// konumuna ofset ekleyerek tanımlanan yeni bir konuma akış ile ilgili ayarlar.
while (fread(&veri, sizeof(DATA), 1, f) > 0)
{
yildiz();
printf("urun kodu:%dn",veri.no);
printf("urun adi:%sn",veri.name);
printf("uretici firma:(%s)n",veri.firma);
printf("urun fiyati=%d YTLn",veri.fiyat);
printf("urun miktari=");
miktar(&veri);
}
putchar('nn');
yildiz();
fclose(f);
}
void ara(void) //dosya içinde ilac arama fonksiyonu
{
if((f=fopen("file","r"))==NULL) // dosyayi okuyamazsa hata verir
{
printf("DOSYA ACMADA HATA!!!!");
exit(1);
}
char name[30],kromozom;
printf("lutfen kayit ismini giriniz :");
fflush(stdin);
gets(name);
fseek(f, 0, SEEK_SET);
yildiz();
while (fread(&veri, sizeof(DATA), 1, f) > 0) // while ile bi dongu kurduk
{
if (!stricmp(veri.name, name)) // arama sonucunu listele
// stricmp = Bu fonksiyon iki yazıyı büyük harf küçük harf ayrımı yapmadan karşılaştırır
{
printf("urun kodu:%dn",veri.no);
printf("urun adi:%sn",veri.name);
printf("uretici firma:(%s)n",veri.firma);
printf("urun miktari=");
if(veri.adet==0)
printf("kalmamis uzgunumn");
else
printf("%dn",veri.adet);
fclose(f);
return;
}
}
fclose(f);
printf("nKayit bulunamadi...nn");
printf("nodan aramak isterseniz *'y'* ye basinn");
kromozom= getch();
if(kromozom=='y')
nodan_bul();
yildiz();
fclose(f);
}
void sat(void) // ilac satis alani
{
int total=0;
if((f=fopen("file","r+"))==NULL)
{
printf("DOSYA ACMADA HATA!!!!");
exit(1);
}
int k=0,miktar=0;
char name[30];
int ip=0;
k=1;
printf(" ilac ismini giriniz :");
fflush(stdin);
gets(name);
fseek(f, 0, SEEK_SET);
yildiz();
while (fread(&veri, sizeof(DATA), 1, f) > 0&& k)
{
if ((!stricmp(veri.name, name)))
{
printf("urun kodu:%dn",veri.no);
printf("ürün miktari=");
if(veri.adet==0)
{
printf("kalmamis uzgunumn");
return;
}
else
{
do
{
printf("miktar:");
scanf("%d",&miktar);
if(miktar>veri.adet)
{
printf("miktar yeterli degiln");
printf("kalan miktar=%dn",veri.adet);
}
}while(miktar>veri.adet);
veri.adet-=miktar;
fseek(f,sizeof(DATA)*(ip),SEEK_SET);
if(fwrite(&veri,sizeof(DATA),1,f)==1)
printf("satis tamamn");
total=veri.fiyat;
fclose(f);
printf("odenecek toplam tutar=%dn",total*miktar);
return;
}
}
ip=ip+1;
}
fclose(f);
yildiz();
}
void ilave(void)
{
if((f=fopen("file","r+"))==NULL)
{
printf("DOSYA ACMADA HATA!!!!");
exit(1);
}
char name[20];
int miktar;
int ip=0,total=0;
printf(" ilac ismini giriniz :");
fflush(stdin);
gets(name);
fseek(f, 0, SEEK_SET);
yildiz();
while (fread(&veri, sizeof(DATA), 1, f) > 0)
{
if ((!stricmp(veri.name, name)))
{
printf("urun kodu:%dn",veri.no);
printf("urun miktari=%d",veri.adet);
if(veri.adet==0)
{
printf("kalmamis uzgunumn");
return;
}
else
{
printf(" ilave miktari girin:");
scanf("%d",&miktar);
veri.adet=veri.adet+miktar;
fseek(f,sizeof(DATA)*(ip),SEEK_SET);
if(fwrite(&veri,sizeof(DATA),1,f)==1)
printf("ilave islemi tamamn");
fclose(f);
printf("odenecek toplam tutar=%dn",veri.fiyat*miktar);
return;
}
}
ip=ip+1;
}
fclose(f);
}
// duzeltmeler
void duzelt(void)
{
int ip=0;
if((f=fopen("file","r+"))==NULL)
{
printf("DOSYA ACMADA HATA!!!!");
exit(1);
}
char name[30];
printf("lutfen duzeltmek istenen kayit ismini giriniz :");
fflush(stdin);
gets(name);
fseek(f, 0, SEEK_SET);
yildiz();
while (fread(&veri, sizeof(DATA), 1, f) > 0) // veriyi ismine gore cagir
{
if (!stricmp(veri.name, name))
// stricmp = Bu fonksiyon iki yazıyı büyük harf küçük harf ayrımı yapmadan karşılaştırır
{
printf("urun kodu:%dn",veri.no);
printf("urun adi:%sn",veri.name);
printf("uretici firma:(%s)n",veri.firma);
printf("urun miktari=");
if(veri.adet==0)
printf("kalmamis uzgunumn");
else
printf("%dn",veri.adet);
fseek(f,sizeof(DATA)*(ip),SEEK_SET);
printf("ilac adini giriniz : ");
fflush(stdin);
scanf("%s",&veri.name);
printf("firma adini giriniz : ");
scanf("%s",&veri.firma);
printf("ilac nosunu girinn");
scanf("%d",&veri.no);
printf("ilac fiyatini girinn");
scanf("%d",&veri.fiyat);
printf("adeti giriniz : ");
scanf("%d",&veri.adet);
fwrite(&veri, sizeof(DATA), 1, f);
printf("kayit güncelleme tamamn");
fclose(f);
return;
}
ip++;
}
printf("nKayit bulunamadi...nn");
yildiz();
fclose(f);
}
// siparis listesini burada goruntuluyoruz
void siparis_listesi(void)
{
int max_stok;
printf("lutfen max stok degerini girinn");
scanf("%d",&max_stok);
if((f=fopen("file","r"))==NULL)
{
printf("DOSYA ACMADA HATA!!!!");
exit(1);
}
fseek(f, 0, SEEK_SET);
yildiz();
while (fread(&veri, sizeof(DATA), 1, f) > 0)
{
if (max_stok>veri.adet)
{
printf("urun kodu:%dn",veri.no);
printf("urun adi:%sn",veri.name);
printf("uretici firma:(%s)n",veri.firma);
printf("urun miktari=%d",veri.adet);
printf("alinmasi gereken ");
printf("****%d**** adet n",max_stok-veri.adet);
yildiz();
}
}
fclose(f);
}
void nodan_bul() // ilac no suna gore arama alani
{
if((f=fopen("file","r"))==NULL)
{
printf("DOSYA ACMADA HATA!!!!");
exit(1);
}
int s_no;
printf("lutfen kayit nosunu giriniz :");
fflush(stdin);
scanf("%d",&s_no);
fseek(f, 0, SEEK_SET);
yildiz();
while (fread(&veri, sizeof(DATA), 1, f) > 0)
{
if (veri.no==s_no)
{
printf("urun kodu:%dn",veri.no);
printf("urun adi:%sn",veri.name);
printf("uretici firma:(%s)n",veri.firma);
printf("urun miktari=");
if(veri.adet==0)
printf("kalmamis uzgunumn");
else
printf("%dn",veri.adet);
fclose(f);
return;
}
}
printf("nKayit bulunamadi...nn");
yildiz();
fclose(f);
}
// main alani basliyor
void main()
{
int option;
start();
for (;;) {
option = menu();
switch (option) {
case 1 : ekle(); break;
case 2 : listele(); break;
case 3 : ara(); break;
case 4 : sat(); break;
case 5 : ilave(); break;
case 6 : duzelt(); break;
case 7: siparis_listesi();break;
case 8:system("cls");break;
case 9: exit(1);
case 0 : printf("Gecersiz Secenek %c..n",3);
}
}
}
// menu alani (ustte main alanina bak)
int menu(void)
{
int sec;
printf("n1) Yeni Ilac Eklen");
printf("2) Ilaclari Listelen");
printf("3) Ilac Buln");
printf("4) Ilac satn");
printf("5) urun miktari ilavesin");
printf("6) Bilgi guncelle duzeltn");
printf("7) siparis listesi hazirlan");
printf("8) Ekrani temizlen");
printf("9) kapanisn");
printf("nSeciminiz :");
scanf("%d", &sec);
if (sec < 0 || sec > 10)
return 0;
return sec;
}
void start(void)
{
if ((f = fopen("file", "r+")) == NULL) // oku
if ((f = fopen("file", "w+")) == NULL) // yaz
{
printf("veritabani acilamadi!..n");
exit(EXIT_FAILURE);
}
fclose(f);
}
İlgili
restaurant menu programını nasıl dosyalayabiliriz