BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C örnek kodlar > c_ornek00047

C örnek kodlar

Metin dosyasına otomatik kayıt yöntemiyle ve yapılarla oluşturulmuş 50 kapasiteli veri kayıt sistemi

Program, bir menü ile çalışan bir veritabanı sistemini kullanma olanağı sağlar. Girilen verileri önce bir yapıya, daha sonra veri.txt adlı bir dosyaya kaydeder. Ayrıca, veri girişi yapma, verileri belirli değerlere göre düzenleme, tekrar elde etme ve silme olanağı sağlar. Program çalışır çalışmaz, eğer mevcut ise, veritabanı dosyası otomatik olarak belleğe yüklenir. Kayıt giriş işlemi sona erdiği zaman bütün kayıtları yine otomatik olarak dosyaya kaydeder.


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

#define BOYUT 50

int fonk1(void);               /* Menü seçeneği belirleme       */
void fonk2(void);              /* Bilgi girişi                  */
void fonk3(void);              /* İsme göre arama               */
void fonk4(void);              /* Soyadına göre arama           */
void fonk5(void);              /* Memleketine göre arama        */
void fonk6(int id1, int id2);  /* Bilgileri ekranda gösterme    */
void fonk7(void);              /* Bütün kayıtların listelenmesi */
void fonk8(void);              /* Dosyaya kaydetme              */
void fonk9(void);              /* Dosyadan yükleme              */
void fonk10(void);             /* Bütün kayıtların silinmesi    */

char* bg_fgets(char *str, int count);

struct yap {
  char cdizi1[20];              /* İsim      */
  char cdizi2[20];              /* Soyadı    */
  char cdizi3[20];              /* Memleketi */
  char cdizi4[20];              /* Tahsili   */
  int id;                       /* Yaşı      */
} ydizi[BOYUT];

int igd = 0;                    /* Son kayıt */

int main(void)
{
  int id;

  fonk9(); /* Dosyadan yükleme */

  do {
     printf("\n");
     id = fonk1();

     switch (id) {
        case 1 : fonk2();  /* Kayıt girişi */
           break;
        case 2 : fonk3();  /* İsme göre arama */
           break;
        case 3 : fonk4();  /* Soyadına göre arama */
           break;
        case 4 : fonk5();  /* Memleketine göre arama */
           break;
        case 5 : fonk7();  /* Bütün kayıtların listelenmesi */
           break;
        case 6 : fonk10(); /* Dosyadaki bütün kayıtların silinmesi */
           break;
     }
  } while (id!=7);

  return 0;
}

/* Bir menü seçeneği seçmenizi sağlar. */
int fonk1(void)
{
  int id;

  printf("[1]. Kayıt girişi\n");
  printf("[2]. İsme göre arama\n");
  printf("[3]. Soyadına göre arama\n");
  printf("[4]. Memleketine göre arama\n");
  printf("[5]. Bütün kayıtların listelenmesi\n");
  printf("[6]. Bütün kayıtların silinmesi\n");
  printf("[7]. Çıkış\n");

  do {
     printf("\nSeçeneğinizi giriniz [1-7]: ");
     id = getche()-'0';
     printf("\n");
  } while (id<1 || id>7);

  return id;
}

/* Veritabanına bilgi girişi */
void fonk2(void)
{
  int id;
  char cdizi[20];

  for (id=igd; id<BOYUT; id++) {
       printf("İsmi (Çıkış için Enter tuşuna basınız):");
       bg_fgets(ydizi[id].cdizi1, 20);
       if (!*ydizi[id].cdizi1) break;
       printf("Soyadı: ");
       bg_fgets(ydizi[id].cdizi2, 20);
       printf("Memleketi: ");
       bg_fgets(ydizi[id].cdizi3, 20);
       printf("Tahsili: ");
       bg_fgets(ydizi[id].cdizi4, 20);
       printf("Yaş: ");
       bg_fgets(cdizi, 20);
       ydizi[id].id = (int) atoi(cdizi);
  }
  igd = id;
  fonk8();
}

/* İsme göre arama */
void fonk3(void)
{
  char cdizi[20];
  int id1, id2;

  printf("Aradığınız şahsın ismini giriniz: ");
  bg_fgets(cdizi, 20);
  id2 = 0;

  for (id1=0; id1<igd; id1++) {
       if (!strcmp (cdizi, ydizi[id1].cdizi1)) {
           fonk6(id1, id2);
           id2 = 1;
           printf("\n");
       }
  }
  if (!id2) printf("Bulunamadı!\n");
}

/* Soyadına göre arama */
void fonk4(void)
{
  char cdizi[20];
  int id1, id2;

  printf("Aradığınız şahsın soyadını giriniz: ");
  bg_fgets(cdizi, 20);
  id2 = 0;

  for (id1=0; id1<igd; id1++) {
      if (!strcmp (cdizi, ydizi[id1].cdizi2)) {
          fonk6(id1, id2);
          id2 = 1;
          printf("\n");
      }
  }
  if (!id2) printf("Bulunamadı!\n");
}

/* Memleketine göre arama */
void fonk5(void)
{
  char cdizi[20];
  int id1, id2;

  printf("Aradığınız şahsın memleketini giriniz: ");
  bg_fgets(cdizi, 20);
  id2 = 0;

  for (id1=0; id1<igd; id1++) {
       if (!strcmp (cdizi, ydizi[id1].cdizi3)) {
           fonk6(id1, id2);
           id2 = 1;
           printf("\n");
       }
  }
  if (!id2) printf("Bulunamadı!\n");
}

/* Bilgileri ekranda gösterme */
void fonk6(int id1, int id2)
{
  if (!id2) {
      printf("\n%-20s%-20s%-20s%-20s%-4s\n", "ADI", "SOYADI", "MEMLEKETİ", "TAHSİLİ", "YAŞI");
  }

  printf("%-20s%-20s%-20s%-20s%-3d", ydizi[id1].cdizi1, ydizi[id1].cdizi2,
          ydizi[id1].cdizi3, ydizi[id1].cdizi4, ydizi[id1].id);
}

/* Bütün kayıtların listelenmesi */
void fonk7(void)
{
  int id=0;

  printf("\n%-20s%-20s%-20s%-20s%-4s\n", "ADI", "SOYADI", "MEMLEKETİ", "TAHSİLİ", "YAŞI");

  do {
     printf("%-20s%-20s%-20s%-20s%-3d\n", ydizi[id].cdizi1, ydizi[id].cdizi2,
             ydizi[id].cdizi3, ydizi[id].cdizi4, ydizi[id].id);
     id++;
  } while (*ydizi[id].cdizi1);
}

/* Kayıtların dosyaya kaydedilmesi */
void fonk8(void)
{
  FILE *fp;

  if ((fp=fopen ("veri.txt", "w")) == NULL) {
      printf("Dosya açılamadı!\n");
      exit(1);
  }

  fwrite (&igd, sizeof igd, 1, fp);
  fwrite (ydizi, sizeof ydizi, 1, fp);

  fclose (fp);
}

/* Kayıtların dosyadan yüklenmesi */
void fonk9(void)
{
  FILE *fp;

  if ((fp=fopen ("veri.txt", "r")) == NULL) {
      printf("Veri dosyası mevcut değil!\n");
      return;
  }

  fread (&igd, sizeof igd, 1, fp);
  fread (ydizi, sizeof ydizi, 1, fp);

  fclose (fp);
}

/* Bütün kayıtların silinmesi */
void fonk10(void)
{
  printf("Bütün kayıtlar silinecek!\n");
  printf("İşlem devam etsin mi? (E/H) ");
  if (toupper (getch ()) == 'E') remove ("veri.txt");
  printf("\n");
}

char* bg_fgets(char *str, int count)
{
  const char *s;

  fgets(str, count, stdin);

  for (s=str; *s && *s!='\n'; ++s);

  if ((s-str) < (count-1)) *(str+(s-str)) = '\0';

  return str;
}