3 Haziran 2010 Perşembe

(Dosyalama + Struct) Bilgi Sistemi

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>


#define YapiBoyutu sizeof(struct kayitYapisi)

struct kayitYapisi{
        char isim[30];
        char soyisim[40];
        char numara[15];
        char doluMu;
    };

char anaMenu(void);
void kayitEkle(FILE*);
void kayitSil(FILE*);
void kayitListele(FILE*);


int main()
{
    FILE *dosya;
    int i;
    struct kayitYapisi insan={"","","",'H'};
    char karar;

    if((dosya=fopen("dosyam.txt","r+"))==NULL)
    {
        dosya=fopen("dosyam.txt","w+");
        fclose(dosya);
        dosya=fopen("dosyam.txt","r+");
        printf("DOSYA OLUSTURULDU"); getch();
        for(i=0;i<30;i++)
        {
            fseek(dosya,i*YapiBoyutu,SEEK_SET);
            fwrite(&insan,YapiBoyutu,1,dosya);
        }
    }


    while(1==1)
    {
        karar=anaMenu();

        switch (karar)
        {
            case '1': kayitEkle(dosya); break;
            case '2': kayitListele(dosya); break;
            case '3': kayitSil(dosya); break;
            case '4': fclose(dosya); return;
        }
    }
}

void kayitEkle(FILE *dosya)
{
    int i;
    struct kayitYapisi insan;



    for(i=0;i<30;i++)
    {
        fseek(dosya,i*YapiBoyutu,SEEK_SET);
        fread(&insan,YapiBoyutu,1,dosya);

        if(insan.doluMu=='H')
        {
            printf("\n\tIsim Giriniz: ");
                scanf("%s",&insan.isim);

            printf("\n\tSoyisim Giriniz: ");
                scanf("%s",&insan.soyisim);

            printf("\n\tNumara Giriniz: ");
                scanf("%s",&insan.numara);

            insan.doluMu='E';

            fseek(dosya,i*YapiBoyutu,SEEK_SET);
            fwrite(&insan,YapiBoyutu,1,dosya);
            printf("\n\n\tKayit Eklendi...");

            getch();
            return;
        }
    }
}

void kayitSil(FILE *dosya)
{
    char tus,eminMi;
    int i;
    char isim[20];
    char numara[15];
    int silinecek=-1;
    struct kayitYapisi insan={"","","",'H'};

    printf("\n\t(1) Isme gore sil");
    printf("\n\t(2) Numaraya gore sil");

    do{
    tus=getch();
    }while(tus!='1'&&tus!='2');

    switch (tus)
    {
        case '1':   printf("\n\tSilmek istediginiz kisinin ismini giriniz :");
                    scanf("%s",&isim);
                    break;
        case '2':   printf("\n\tSilmek istediginiz kisinin numarasini giriniz :");
                    scanf("%s",&numara);
                    break;
    }

    for(i=0;i<30;i++)
    {
        silinecek=-1;

        fseek(dosya,i*YapiBoyutu,SEEK_SET);
        fread(&insan,YapiBoyutu,1,dosya);

        if(insan.doluMu=='E')
        {
            if(tus=='1'&&strcmp(isim,insan.isim)==0) //isme göre aranıyor ise
                silinecek=i;

            else if(tus=='2'&&strcmp(numara,insan.numara)==0)
                silinecek=i;
        }

        if(silinecek!=-1)
        {
            printf("\n\tIsim:    %s\n\tSoyisim: %s\n\tNumara:  %s",insan.isim,insan.soyisim,insan.numara);
            printf("\n\n\t\tBu kayidi silmek istediginize emin misiniz ? (E / H)");
            do{
                eminMi=getch();
                eminMi=toupper(eminMi);
            }while(eminMi!='E'&&eminMi!='H');

            if (eminMi=='E')
            {
                insan.doluMu='H';
                fseek(dosya,i*YapiBoyutu,SEEK_SET);
                fwrite(&insan,YapiBoyutu,1,dosya);
                printf("\n\tKayit Silindi..");
            }

            else if(eminMi='H')
                printf("\n\tSilme isleminden vazgecildi");

            getch();
            return;
        }
    }

    printf("\n\t\tKayit Bulunamadi..");
    getch();
    return;
}

void kayitListele(FILE *dosya)
{
    struct kayitYapisi insan={"","","",'H'};
    int i;
    system("cls");
    printf("%10s%20s%20s","Isim","Soyisim","Numara");

    for(i=0;i<30;i++)
    {
        fseek(dosya,i*YapiBoyutu,SEEK_SET);
        fread(&insan,YapiBoyutu,1,dosya);

        if(insan.doluMu=='E')
        {
            printf("\n%10s%20s%20s",insan.isim,insan.soyisim,insan.numara);
        }
    }
    getch();
}

char anaMenu()
{
    char tus;

    system("cls");

    puts("\t   Ana Menu");
    puts("\n\n\t(1) Kayit Ekle");
    puts("\n\t(2) Kayitlari Listele");
    puts("\n\t(3) Kayit Sil");
    puts("\n\t(4) Cikis");

    do{
        tus=getch();
    }while(tus<'1'||tus>'4');

    return tus;
}

2 yorum:

  1. Eline saglık ama bu aşırı profesyonel kardeşim :D

    YanıtlaSil
  2. C de ikilik tabandan onaltilik tabana çevirmeyı nasıl yapabilirim.yardımcı olurmusunuz

    YanıtlaSil