diff --git a/YZM502/final-soru3.c b/YZM502/final-soru3.c new file mode 100644 index 0000000..815b383 --- /dev/null +++ b/YZM502/final-soru3.c @@ -0,0 +1,189 @@ +/* Bu basit uygulama bir kullanıcıının forex işlemlerinin + * kaydının tutulmasını ve sorgulanmasını simüle etmektedir + */ + +#include +#include +#include +#include + +#define DOSYA_ADI "data" + +struct fv { + struct tm tarih; + char dvz[4]; + char islemTur; + float miktar; + float kur; +} typedef fiyatveri; + +void flushStdInBuffer() { + scanf("%*[^\n]"); + scanf("%*c"); +} + +int tarihAl(struct tm *date) { + char buffer[20]; + + memset(date, 0, sizeof(*date)); + // memset(buffer, 0, sizeof(buffer)); + printf("\nİşlem Tarihini Giriniz (gg/aa/yy): "); + if (fgets(buffer, sizeof(buffer), stdin) == NULL) { + perror("Hata: "); + return -1; + } + if (sscanf(buffer, "%d/%d/%d", &date->tm_mday, &date->tm_mon, &date->tm_year) == 3) { + if (date->tm_mday > 31 || date->tm_mday < 1 || date->tm_mon > 12 || date->tm_mon < 1) { + fprintf(stderr, "Hatalı tarih değeri\n"); + return -1; + } + } + return 0; +} + +int dvzAl(char *dvz) { + memset(dvz, 0, 4); + printf("Döviz Türü (usd/eur/gbp): "); + if (fgets(dvz, 4, stdin) == NULL) { + perror("Hata: "); + return -1; + } + return 0; +} + +int dvzKontrolEt(char *dvz) { + char *baz[] = {"usd", "gbp", "eur", "btc"}; + int len = sizeof(baz) / sizeof(baz[0]); + int i; + for (i = 0; i < len; i++) { + if (strcmp(baz[i], dvz) == 0) { + return 1; + } + } + return 0; +} + +int yaz(fiyatveri v) { + FILE *pDosya; + pDosya = fopen(DOSYA_ADI, "a+"); + if (pDosya == NULL) { + pDosya = fopen(DOSYA_ADI, "w"); + if (pDosya == NULL) { + perror("Hata: "); + return -1; + } + } + + fwrite(&v, sizeof(v), 1, pDosya); + fclose(pDosya); + return 0; +} + +int islemGir() { + int rc; + fiyatveri v; + + // tarihi alalım + rc = tarihAl(&v.tarih); + if (rc != 0) { + return rc; + } + + + // döviz cinsi + do { + rc = dvzAl(v.dvz); + if (rc != 0) { + return rc; + } + flushStdInBuffer(); + } while (dvzKontrolEt(v.dvz) == 0); + + do { + printf("İşlem Türü ( [a]lış / [s]atış ): "); + scanf("%c%*c", &v.islemTur); + } while (v.islemTur != 97 && v.islemTur != 115); + + do { + printf("İşlem Kuru: "); + scanf("%f%*c", &v.kur); + } while (v.kur <= 0); + + do { + printf("İşlem Miktaı: "); + scanf("%f%*c", &v.miktar); + } while (v.miktar <= 0); + + rc = yaz(v); + if (rc != 0) { + return rc; + } + + return 0; +} + +void islemListele() { + FILE *pDosya; + fiyatveri v; + + pDosya = fopen(DOSYA_ADI, "a+"); + if (pDosya == NULL) { + printf("Veri dosyası okunamadı. Hiç veri girilmemiş olabilir"); + return; + } + + printf("Tarih\t\tDvz\t\tİşlem\tKur\t\t\tİşlem Miktarı\n"); + + while (fread(&v, sizeof(v), 1, pDosya) == 1) { + printf("%d/%d/%d", v.tarih.tm_mday, v.tarih.tm_mon, v.tarih.tm_year); + printf("\t%s", v.dvz); + printf("\t\t %c", v.islemTur); + printf("\t\t%.4f", v.kur); + printf("\t\t%.2f", v.miktar); + printf("\n"); + } +} + +int menu() { + int secim = -1; + + printf("\n\n-------------------------------------------------\n"); + printf("(1) İşlem girişi \n"); + printf("(2) İşlemleri Listele \n"); + printf("ÇIKIŞ İÇİN : 0 \n"); + printf("-------------------------------------------------\n\n"); + + printf("Seçiminizi Giriniz: "); + + do { + scanf("%d%*c", &secim); + if (secim < 0 || secim > 3) { + printf("\nYanlış değer girdiniz tekrar giriş yapınız: "); + } + + } while (secim < 0 || secim > 3); + return secim; +} + +int main() { + int secim = 0; + int rc; + + do { + rc = 0; + secim = menu(); + switch (secim) { + case 1: + islemGir(); + break; + case 2: + islemListele(); + break; + case 3: + //kokluFormul(); + break; + case 0: + return 0; + } + } while (1 < 2); +} \ No newline at end of file