Windows'da çalışıyor. Diyerlerinde de conio.h'ı atıp çalıştırabilirsin.
[CODE lang="c" title="HIRDAVAT.C"]#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <conio.h>
typedef void (*FUNCTION) (void);
typedef struct _hirdavat
{
int kayit_no;
char *arac_ismi;
int miktar;
float fiyat;
}Hirdavat;
typedef struct _cmd
{
char *command;
FUNCTION f;
}Cmd;
#define IGNORE -1
#define MAX_KAYIT 100
#define MAX_COMMAND 6
#define NEWLINE "\n\r"
#define FILE_NAME "hirdavat.dat"
FILE *file;
Hirdavat **h;
int urun_cesiti = 0;
unsigned long get_line_of_file(FILE *file)
{
unsigned long number_of_lines = 1; /* first line = 1 */
long old_pos = ftell(file);
fseek(file, 0L, SEEK_SET);
while(!feof(file))
{
if(getc(file) == 0x0a)
{
number_of_lines++;
}
}
fseek(file, old_pos, SEEK_SET);
return number_of_lines;
}
Hirdavat **degerleri_al()
{
char buff[256], *temp;
unsigned i = 0;
Hirdavat **h;
urun_cesiti = (unsigned)get_line_of_file(file)-1;
if((h = calloc(sizeof(Hirdavat*), MAX_KAYIT)) == NULL)
{
fprintf(stderr, "Yetersiz bellek. Error: %d, %s", errno, strerror(errno));
exit(errno);
}
h[urun_cesiti] = NULL;
for(i = 0; i < urun_cesiti; i++)
{
if((h = calloc(sizeof(Hirdavat), 1)) == NULL)
{
fprintf(stderr, "Yetersiz bellek. Error: %d, %s", errno, strerror(errno));
exit(errno);
}
fgets(buff, 256, file);
h->kayit_no = atoi(strtok(buff, ":"));
temp = strtok(NULL, ":");
if((h->arac_ismi = calloc(sizeof(char), strlen(temp))) == NULL)
{
fprintf(stderr, "Yetersiz bellek. Error: %d, %s", errno, strerror(errno));
exit(errno);
}
strcpy(h->arac_ismi, temp);
h->miktar = atoi(strtok(NULL, ":"));
h->fiyat = atof(strtok(NULL, ":"));
}
return h;
}
/* komutlar: ekle, sil, listele, degistir, cikis, yardim */
void EKLE(void)
{
int i = 0, k;
Hirdavat *u = NULL;
if(urun_cesiti >= MAX_KAYIT-1)
{
printf("Max kayit seviyesine ulastiniz!");
return ;
}
for(i = 0; h != NULL; i++) /* Eski kayitlarin yerini almak icin */
{
if((int)h == IGNORE)
{
if((h = calloc(sizeof(Hirdavat), 1)) == NULL)
{
fprintf(stderr, "Yetersiz bellek! Error: %d, %s", errno, strerror(errno));
exit(1);
}
u = h;
}
}
if(u == NULL) /* yerini alacak kayit yoksa */
{
h[urun_cesiti+1] = NULL;
if((h[urun_cesiti] = calloc(sizeof(Hirdavat), 1)) == NULL)
{
fprintf(stderr, "Yetersiz bellek! Error: %d, %s", errno, strerror(errno));
exit(1);
}
u = h[urun_cesiti];
}
if((u->arac_ismi = calloc(sizeof(char), 64)) == NULL)
{
fprintf(stderr, "Yetersiz bellek! Error: %d, %s", errno, strerror(errno));
exit(1);
}
for(i = 1; i < MAX_KAYIT && u->kayit_no == 0; i++) /* kayit no'su bulmak icin */
{
int flag;
for(k = 0, flag = 0; h[k+1] != NULL; k++)
{
if((int)h[k] == IGNORE) continue;
if(i == h[k]->kayit_no){ flag = 1; break;}
}
if(!flag)
u->kayit_no = i;
}
if(u->kayit_no == 0) u->kayit_no++;
printf("Urun ismini giriniz: ");
fgets(u->arac_ismi, 64, stdin);
u->arac_ismi[strlen(u->arac_ismi)-1] = '\0';
printf("Miktarini giriniz: ");
scanf("%d", &u->miktar);
printf("Fiyatini giriniz: ");
scanf("%f", &u->fiyat);
urun_cesiti++;
printf("Urununuz basari ile eklenmistir."NEWLINE);
}
void SIL(void)
{
int i, no, flag = 0;
printf("Silinecek urunun kayi no'sunu giriniz: ");
scanf("%d", &no);
getchar();
for(i = 0; h != NULL; i++)
{
if((int)h == IGNORE) continue;
if(no == h->kayit_no)
{
flag = 1;
free(h);
(int)h = IGNORE;
urun_cesiti--;
}
}
if(flag == 0)
{
printf("Urun bulunamadi!"NEWLINE);
}
}
void LISTELE(void)
{
int i = 0;
for(i = 0; h != NULL; i++)
{
if((int)h == IGNORE) continue;
printf("Kayit No: %d\tArac ismi: %s\tMiktar: %d\tFiyat: %.2f"NEWLINE,
h->kayit_no, h->arac_ismi, h->miktar, h->fiyat);
if((i % 20 == 0) && (i != 0))
{
printf(NEWLINE"Devam Etmek icin ENTER'e tusa basin"NEWLINE);
getch();
}
}
}
void DEGISTIR(void)
{
int i, flag = 0;
Hirdavat u;
if((u.arac_ismi = calloc(sizeof(char), 64)) == NULL)
{
fprintf(stderr, "Yetersiz bellek! Error: %d, %s", errno, strerror(errno));
exit(1);
}
printf("Degistirilecek urunun kayit no'sunu giriniz: ");
scanf("%d", &u.kayit_no);
getchar();
for(i = 0; h != NULL; i++)
{
if((int)h == IGNORE) continue;
if(u.kayit_no == h->kayit_no)
{
printf("Urunun yeni ismi (eskisi: %s): ", h->arac_ismi);
fgets(u.arac_ismi, 64, stdin);
u.arac_ismi[strlen(u.arac_ismi)-1] = '\0';
printf("Urunun yeni miktari (eskisi: %d): ", h->miktar);
scanf("%d", &u.miktar);
printf("Urunun yeni fiyati (eskisi: %.2f): ", h->fiyat);
scanf("%f", &u.fiyat);
memcpy(h, &u, sizeof(Hirdavat));
printf("Urun basari ile degistirildi."NEWLINE);
flag = 1;
}
}
if(flag == 0)
{
printf("Urun bulunamadi!"NEWLINE);
}
}
void CIKIS(void)
{
int i = 0;
fclose(file);
if((file = fopen(FILE_NAME, "w+b")) == NULL)
{
fprintf(stderr, "Dosya acilamiyor! Error: %d %s", errno, strerror(errno));
exit(0);
}
for(i = 0; h != NULL; i++)
{
if((int)h == IGNORE) continue;
fprintf(file, "%d:%s:%d:%.2f:\n",
h->kayit_no, h->arac_ismi, h->miktar, h->fiyat);
}
fclose(file);
exit(0);
}
void YARDIM(void)
{
printf("Komutlar: ekle, sil, listele, degistir, cikis, yardim"NEWLINE);
}
void main()
{
int i, flag;
char input[256];
Cmd komut[MAX_COMMAND] =
{
{"ekle", EKLE},
{"sil", SIL},
{"listele", LISTELE},
{"degistir", DEGISTIR},
{"cikis", CIKIS},
{"yardim", YARDIM}
};
if(access(FILE_NAME, 0) != 0)
{
if((file = fopen(FILE_NAME, "w+b")) == NULL)
{
fprintf(stderr, "File can't create. Error: %d, %s"NEWLINE, errno, strerror(errno));
exit(errno);
}
}
if((file = fopen(FILE_NAME, "r+b")) == NULL)
{
fprintf(stderr, "File can't open. Error: %d, %s"NEWLINE, errno, strerror(errno));
exit(errno);
}
h = degerleri_al();
YARDIM();
do
{
printf("> ");
scanf("%s", input);
getchar();
for(i = 0, flag = 0; i < MAX_COMMAND; i++)
{
if(!strcmp(input, komut.command))
{
flag = 1;
komut.f();
}
}
if(!flag)
{
printf("Komut bulunamadi!"NEWLINE);
YARDIM();
}
}while(1);
}[/CODE]