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

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

C örnek kodlar

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

Program, bir menü ile çalışan bir veritabanı sistemini kullanma olanağı sağlar. Girilen verileri önce dizilere, 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 <cstdio>
#include <cstring>
#include <conio.h>
#include <cstdlib>
#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    */

void bg_fgets(char *cp, unsigned int sz);
unsigned int bg_strlen(const char *str);

char cgdizi1[BOYUT][20];       /* İsim      */
char cgdizi2[BOYUT][20];       /* Soyadı    */
char cgdizi3[BOYUT][20];       /* Memleketi */
char cgdizi4[BOYUT][20];       /* Tahsili   */

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);
}

/* 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;

  for (id=igd; id<BOYUT; id++) {
       printf("İsmi (Çıkış için Enter tuşuna basınız):");
       bg_fgets(cgdizi1[id], 20);
       if (!*cgdizi1[id]) break;
       printf("Soyadı: ");
       bg_fgets(cgdizi2[id], 20);
       printf("Memleketi: ");
       bg_fgets(cgdizi3[id], 20);
       printf("Tahsili: ");
       bg_fgets(cgdizi4[id], 20);
  }
  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, cgdizi1[id1])) {
           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, cgdizi2[id1])) {
          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, cgdizi3[id1])) {
           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\n", "ADI", "SOYADI", "MEMLEKETİ", "TAHSİLİ");
  }

  printf("%-20s%-20s%-20s%-20s", cgdizi1[id1], cgdizi2[id1], cgdizi3[id1], cgdizi4[id1]);
}

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

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

  do {
     printf("%-20s%-20s%-20s%-20s\n", cgdizi1[id], cgdizi2[id], cgdizi3[id], cgdizi4[id]);
     id++;
  } while (*cgdizi1[id]);
}

/* 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(cgdizi1, sizeof cgdizi1, 1, fp);
  fwrite(cgdizi2, sizeof cgdizi2, 1, fp);
  fwrite(cgdizi3, sizeof cgdizi3, 1, fp);
  fwrite(cgdizi4, sizeof cgdizi4, 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(cgdizi1, sizeof cgdizi1, 1, fp);
  fread(cgdizi2, sizeof cgdizi2, 1, fp);
  fread(cgdizi3, sizeof cgdizi3, 1, fp);
  fread(cgdizi4, sizeof cgdizi4, 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");
}

void bg_fgets(char *cp, unsigned int sz)
{
  unsigned int len;

  fgets(cp, 20, stdin);
  len = bg_strlen(cp); // cdizi dizisine aktarılan karakter sayısı

  // Eğer girilen karakter sayısı dizi boyutunun bir eksiğinden az ise
  // giriş yapılan karakterlerin sonuna eklenen '\n' (10) karakteri yerine '\0' karakteri konur.
  if (len<sz) *(cp+len) = '\0'; // Dizide yer alan '\n' karakterini devre dışı bırakmak için
}

unsigned int bg_strlen(const char *str)
{
  const char *s;
  for (s = str; *s && *s!='\n'; ++s);

  return(s - str);
}