C' de Struct ve Dosya Kullanımı ile ilgili

Bu konuyu okuyanlar

Seymanur1907

Öğrenci
Katılım
28 Mayıs 2019
Mesajlar
2
Reaksiyon puanı
0
Puanları
1
Yaş
25
Selam arkadaşlar
Basit bir pastane otomasyonu yapmaya çalışıyorum. Müşteri ve yetkilinin sipariş ekleme silme güncelleme gibi işlemleri yapabilmesi gerekiyor. Ekleyip dosyaya yazma işlemini yaptım ancak dosyadan okuyup arama yapamıyorum. En sondaki fonksiyonda arama ve yazdırma yapmam gerekiyor aynı şekilde yorum satırında olan müşteride de arama yapabilmem lazım. Bi el atarsanız çook sevinirim.
#include <stdio.h>
#include <stdlib.h>
typedef struct Siparis {
int SiparisId;
float SiparisTutar;
int UrunSayisi;
}siparis;


typedef struct Musteri {
int MusteriId;
int SiparisSayisi;
float HesapTutar;
siparis *siparisler;
}musteri;
//void MusteriAra(musteri *musteriler);
void GirisSecim();
void MenuListele();
float PastaSec();
//void MusteriSil();
siparis *SiparisEkle();
musteri *MusteriEkle();
siparis *SiparisGoruntule();
int MusteriSayisi=0;
int SiparisSayisi=0;

int main(int argc, char *argv[]) {

musteri *musteriler;
GirisSecim();
return 0;
}
void GirisSecim() {
int i,secim,yetkilisecim,musterisecim;
menusecim:
system("cls");
printf("\n* * * * * * MENU * * * * * *\n");
printf("1- Yetkili Girisi\n");
printf("2- Musteri Girisi\n");
//printf("3- Cikis\n");

printf("\nLutfen Seciminizi Giriniz:");
scanf("%d",&secim);
if(secim==1){
system("cls");
yetkilisecme:
printf("--- Yetkili ---\n");
printf("1- Musteri Ekle\n");
printf("2- Musteri Arama\n");
printf("3- Musteri Silme\n");
printf("4- Musteri Guncelle\n");
printf("5- Cikis\n");
scanf("%d",&yetkilisecim);
switch(yetkilisecim) {
case 1:
system("cls");
printf("---Musteri Ekleme Ekrani---\n");
MusteriEkle();
break;
case 2:
system("cls");
printf("---Musteri Arama Ekrani---\n");
//MusteriAra(musteri *musteriler);
break;
case 3:
system("cls");
printf("---Musteri Silme Ekrani---");
break;
case 4:
system("cls");
printf("---Musteri Guncelleme Ekrani---");
break;
default:
printf("Gecerli Bir Secim Girmediniz!");
}
}
if(secim==2) {
system("cls");
printf("--- Musteri ---\n");
printf("1- Siparis Ekle\n");
printf("2- Siparis Sil\n");
printf("3- Siparis Goruntule\n");
printf("4- Siparisi Onayla\n");
scanf("%d",&musterisecim);
switch(musterisecim) {
case 1:
system("cls");
printf("---Siparis Ekleme Ekrani---");
SiparisEkle();
break;
case 2:
system("cls");
printf("---Siparis Silme Ekrani---");
break;
case 3:
system("cls");
printf("---Siparis Goruntuleme Ekrani---");
SiparisGoruntule();
break;
case 4:
system("cls");
printf("---Siparis Onayla Ekrani---");
printf("\nSiparisiniz Onaylanmistir !");
printf("\nBasariyla Cikis Yaptiniz...");
printf("\n\tGiris Sayfasina Yonlendiriliyorsunuz...");
getch();
GirisSecim();
break;
default:
printf("Gecerli Bir Secim Girmediniz!");
}
}
}

void MenuListele() {
printf("\t-------MENU-------\n");
printf("\t1. Cikolatali Pasta \n\t2. Meyveli Pasta \n\t3. Alman Pastasi \n\t4. Orman Meyveli Pasta \n\t5. Muzlu Pasta \n\t6. Dilim Pasta \n\t7. Limonlu Pasta \n\t8. Frambuazli Pasta \n\t9. Cilekli Pasta \n\t10.Krokanli Pasta ");

}
musteri *MusteriEkle(){
musteri *musteriler = (musteri*)malloc(sizeof(musteri)*MusteriSayisi);
FILE *dosya;
dosya=fopen("musteriler.txt","a");
int SiparisSayisi=0,i;

printf("Musteri Id:");
scanf("%d", &(musteriler+MusteriSayisi)->MusteriId);

printf("Musteri Siparis Sayisi: ");
scanf("%d", &SiparisSayisi);

(musteriler+MusteriSayisi)->SiparisSayisi = SiparisSayisi;
(musteriler+MusteriSayisi)->siparisler = (siparis*)malloc(sizeof(siparis)*SiparisSayisi);


float tutar=0;
for(i=0;i<SiparisSayisi;i++) {
MenuListele();
tutar+=PastaSec();
}

(musteriler+MusteriSayisi)->HesapTutar=tutar;
fprintf(dosya,"Musteri Id:%d \tSiparis Sayisi:%d \tTutari:%.2f\n",(musteriler+MusteriSayisi)->MusteriId,SiparisSayisi,tutar);
printf("Toplam Tutar: %.2f",tutar);
MusteriSayisi++;

fclose(dosya);
getch();
system("cls");
printf("\n\tGiris Sayfasina Yonlendiriliyorsunuz...");
getch();
GirisSecim();
return musteriler;
}


float PastaSec(){
int secim;
float tutar;
printf("\nIstediginiz Pastanin Kodunu Giriniz:");
scanf("%d",&secim);
switch(secim) {
case 1:
tutar=22.95;
break;
case 2:
tutar=14.95;
break;
case 3:
tutar=10.95;
break;
case 4:
tutar=15.95;
break;
case 5:
tutar=18.95;
break;
case 6:
tutar=12.95;
break;
case 7:
tutar=17.95;
break;
case 8:
tutar=13.95;
break;
case 9:
tutar=12.95;
break;
case 10:
tutar=18.95;
break;
default:
printf("Gecerli Bir Secim Girmediniz!");
}
return tutar;
}
/*
void MusteriAra(musteri *musteriler) {
int aranan;
printf("Aranacak Musterinin Id'sini Giriniz':");
scanf("%d",&aranan);
int flag=0;
FILE *fp=fopen("musteriler.txt","r");
while(!feof(fp)){
fscanf(fp,"%d %d %f\n",&(musteriler+MusteriSayisi)->MusteriId,&(musteriler+MusteriSayisi)->SiparisSayisi,&(musteriler+MusteriSayisi)->HesapTutar);
if(aranan==(musteriler+MusteriSayisi)->MusteriId){
printf("Musteri Id:%d Siparis Sayisi:%d Hesap Tutari:%f",(musteriler+MusteriSayisi)->MusteriId,(musteriler+MusteriSayisi)->SiparisSayisi,(musteriler+MusteriSayisi)->HesapTutar);
}
}
if(flag==0)
printf("Aradiginiz Musteri Bulunmamaktadir..!");
fclose(fp);
}
*/
siparis *SiparisEkle() {
siparis *siparisler = (siparis*)malloc(sizeof(siparis)*SiparisSayisi);
int UrunSayisi,i,SiparisId;
FILE *dosya;
dosya=fopen("siparisler.txt","a");
printf("\nSiparis Id:");
scanf("%d", &SiparisId);

printf("\nAlmak Istediginiz Pasta Sayisini Giriniz:");
scanf("%d",&UrunSayisi);

(siparisler+SiparisSayisi)->UrunSayisi = UrunSayisi;
(siparisler+SiparisSayisi)->SiparisId;
siparisler = (siparis*)malloc(sizeof(siparis)*UrunSayisi*SiparisSayisi);


float tutar=0;
for(i=0;i<UrunSayisi;i++) {
MenuListele();
tutar+=PastaSec();
}

siparisler->SiparisTutar=tutar;
fprintf(dosya,"Siparis Id:%d \tSiparis Sayisi:%d \tTutari:%.2f\n",SiparisId,UrunSayisi,siparisler->SiparisTutar);
printf("Toplam Tutar: %.2f",tutar);
SiparisSayisi++;
fclose(dosya);
getch();
system("cls");
printf("\n\tGiris Sayfasina Yonlendiriliyorsunuz...");
getch();
GirisSecim();
return siparisler;

}


siparis *SiparisGoruntule() {
siparis *siparisler;
int aranan,i;
printf("\nAranacak Siparisin Id'sini Giriniz:");
scanf("%d", &aranan);
int flag=0;
FILE *fp=fopen("siparisler.txt","r");
while(!feof(fp)){
for(i=0;i<MusteriSayisi;i++) {
printf("%d",MusteriSayisi);
fscanf(fp,"%d %d %f",&(siparisler+i)->SiparisId,&(siparisler+i)->UrunSayisi,&(siparisler+i)->SiparisTutar);

if(aranan==(siparisler+i)->SiparisId){
printf("Siparis Id:%d Siparis Sayisi:%d Hesap Tutari:%f",(siparisler+i)->SiparisId,(siparisler+i)->UrunSayisi,(siparisler+i)->SiparisTutar);
flag=1;
}
}
}
if(flag==0)
printf("Aradiginiz Siparis Bulunmamaktadir..!");
fclose(fp);
return siparisler;
}
 

Amenofis

Öğrenci
Katılım
27 Aralık 2010
Mesajlar
36
Reaksiyon puanı
9
Puanları
8
Yardım etmek isterdim ama çok karışık olmuş. Bu gibi dosya işlemlerinde programın başında dosya okunur, belleğe alınır. Eklemeler çıkarmalar bellek üzerinde yapılır ve sonunda toplu olarak dosyaya yazılır. Veriler ise bir veri yapısında tutulur ki ekleme, çıkarma, arama işlemleri rahatlıkla yapılabilsin. Senin koduna baktığımda bir veri yapısı göremiyorum, direkt dosya üzerinde çalışıyorsun.

Tavsiyem "bağlı liste" diye arat. Bu konu üzerinde biraz çalış ve verilerini bağlı liste üzerinde tut. Dizi de olur ama manuel olarak dinamik dizi oluşturmak daha zor. En kolayı tek yönlü bağlı liste.
 

Seymanur1907

Öğrenci
Katılım
28 Mayıs 2019
Mesajlar
2
Reaksiyon puanı
0
Puanları
1
Yaş
25
Bağlı listeye atmaya çalıştım ancak beceremedim. Ödevde Struct üzerinde çalışıp dosyaya yazdırmam gerekiyor. Arama Silme Güncelleme gibi işlemlerde de dosyadan okuma yapılması gerek. Struct kullanarak yapabilirim diye düşündüm anca olmadı malesef.
Aşağıda ilgili kodu attım. Görüntüleme kısmında yardımcı olabilirseniz çook sevinirim.

typedef struct Siparis {
int SiparisId;
float SiparisTutar;
int UrunSayisi;
}siparis;

siparis *SiparisEkle() {
siparis *siparisler = (siparis*)malloc(sizeof(siparis)*ToplamSiparisSayisi);
int UrunSayisi,i,SiparisId;
FILE *dosya;
dosya=fopen("siparisler.txt","a");
printf("\nSiparis Id:");
scanf("%d", &SiparisId);

printf("\nAlmak Istediginiz Pasta Sayisini Giriniz:");
scanf("%d",&UrunSayisi);

(siparisler+ToplamSiparisSayisi)->UrunSayisi = UrunSayisi;
(siparisler+ToplamSiparisSayisi)->SiparisId;
siparisler = (siparis*)malloc(sizeof(siparis)*UrunSayisi*ToplamSiparisSayisi);


float tutar=0;
for(i=0;i<UrunSayisi;i++) {
MenuListele();
tutar+=PastaSec();
}

siparisler->SiparisTutar=tutar;
fprintf(dosya,"Siparis Id:%d \tSiparis Sayisi:%d \tTutari:%.2f\n",SiparisId,UrunSayisi,siparisler->SiparisTutar);
printf("Toplam Tutar: %.2f",tutar);
ToplamSiparisSayisi++;
fclose(dosya);
getch();
system("cls");
printf("\n\tGiris Sayfasina Yonlendiriliyorsunuz...");
getch();
GirisSecim();
return siparisler;

}

siparis *SiparisGoruntule() {
siparis *siparisler;
int aranan,i=0;
printf("\nAranacak Siparisin Id'sini Giriniz:");
scanf("%d",&aranan);
int flag=0;
FILE *fp;
fp=fopen("siparisler.txt","r");
while(!feof(fp)) {
fscanf(fp,"%d %d %f\n",&(siparisler+i)->SiparisId,&(siparisler+i)->UrunSayisi,&(siparisler+i)->SiparisTutar);

if(aranan==(siparisler+i)->SiparisId){
printf("Siparis Id:%d Siparis Sayisi:%d Hesap Tutari:%.2f\n",(siparisler+i)->SiparisId,(siparisler+i)->UrunSayisi,(siparisler+i)->SiparisTutar);
flag=1;
}
i++;
}
if(flag==0)
printf("Aradiginiz Siparis Bulunmamaktadir..!");
fclose(fp);
return siparisler;
}
 
Üst