YZM502 final soru-3
This commit is contained in:
189
YZM502/final-soru3.c
Normal file
189
YZM502/final-soru3.c
Normal file
@@ -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 <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#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);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user