View previous topic :: View next topic |
Author |
Message |
dub.wav Tux's lil' helper
Joined: 09 Apr 2003 Posts: 149 Location: Norway
|
Posted: Thu Mar 04, 2004 3:23 pm Post subject: valuta omregner |
|
|
I tilfelle noen av de norske her er interessert, her er en liten valuta omregner jeg har skrevet. Det er mitt første C program, så det er sikkert en del mulige forbedringer. (Noen forslag til et lite C prosjekt?)
"Screenshot": Quote: | 1) USD > NOK
2) EUR > NOK
3) GBP > NOK
4) SEK > NOK
5) DKK > NOK
w) Oppdater
q) Avslutt
> 3
Antall GBP: 5.21
5.21 GBP = 67.16 NOK
1) USD > NOK
2) EUR > NOK
3) GBP > NOK
4) SEK > NOK
5) DKK > NOK
w) Oppdater
q) Avslutt
> q
| Poenget med den er at den skal være rask å bruke, dvs at jeg ikke trenger å vade gjennom titalls valutakurser for å finne den jeg skal ha, den kan derfor heller ikke konverte fra NOK til noe annet. For å kompilere den, se kommentaren på linje 13. Håper noen får bruk for den.
Code: | #include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
#define KURSER_URL "http://www.kbank.no/markets/valuta/Kurser.txt"
#define KURSER_FILENAME "Kurser.txt"
#define VKURSER "valuta_kurser.txt"
#define TV "NOK"
/* gcc Valuta.c -o Valuta `curl-config --libs` */
void meny();
void clear();
void garbage();
int fileExists(char x[]);
void getKurs(char x[], double *y, double *z);
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream);
int lastNed();
void tno(char x[]);
int main(int argc, char *argv[]) {
if (strspn(argv[0], ".exe"))
clear();
if (!fileExists(KURSER_FILENAME))
lastNed();
while (1) {
meny();
printf("\n");
}
return 0;
}
void meny() {
static char valuta[255][255] = { "USD", "EUR", "GBP", "SEK", "DKK" };
static int read = 0;
int i, v, n;
for (n=0; strlen(valuta[n]) == 3; n++);
char valg[255];
if (!read) {
FILE *VKurser;
if (!fileExists(VKURSER)) {
VKurser = fopen(VKURSER, "w");
for (i=0; i < n; i++)
fprintf(VKurser, "%s\n", valuta[i]);
fclose(VKurser);
printf("Programmet har generert %s.\n", VKURSER);
printf("For å legge til valutakurser, rediger den filen.\n\n");
}
VKurser = fopen(VKURSER, "r");
for (n=0; !feof(VKurser) && fscanf(VKurser, "%s\n", valuta[n]); n++);
fclose(VKurser);
read = 1;
}
for (i=0; i < n; i++)
printf("%d) %s > %s\n",i+1, valuta[i], TV);
printf("w) Oppdater\n");
printf("q) Avslutt\n");
printf("> ");
scanf("%s", valg);
garbage();
switch(valg[0]) {
case 'q': printf("\n"); exit(0); break;
case 'w': lastNed(); return; break;
}
v = atoi(valg) - 1;
if (v < n && strlen(valuta[v]) == 3) {
tno(valuta[v]);
return;
}
}
void clear() {
printf("%c[1J",27);
printf("%c[H",27);
}
void garbage() {
char leftovers[255];
fgets(leftovers, 255, stdin);
}
int fileExists(char x[]) {
struct stat buf;
if (stat(x, &buf) == -1 && errno == ENOENT)
return 0;
else
return 1;
}
void tno(char x[]) {
double antall, kurs;
getKurs(x, &antall, &kurs);
double tall;
printf("\n");
printf("Antall %s: ", x);
scanf("%lf", &tall);
garbage();
double svar = (tall * kurs) / antall;
printf("%4.2lf %s = %4.2lf %s\n", tall, x, svar, TV);
}
void getKurs(char x[], double *y, double *z) {
FILE *Kurser;
char kurser[255];
char *valuta;
char *kurs;
char *antall;
int i;
Kurser = fopen(KURSER_FILENAME,"r");
while(!feof(Kurser) && fgets(kurser, 255, Kurser)) {
antall = strtok(kurser,"\t");
valuta = strtok(0,"\t");
if (!valuta)
continue;
if (!strcmp(valuta,x)) {
for (i=0; i < 4; i++)
kurs = strtok(0,"\t");
*y=atof(antall);
*z=atof(kurs);
break;
}
}
if (!antall || !kurs) {
printf("%s inneholder ikke nok ", KURSER_FILENAME);
printf("informasjon om valgt kurs(%s)!\n", x);
exit(1);
}
fclose(Kurser);
}
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) {
int written = fwrite(ptr, size, nmemb, (FILE *)stream);
return written;
}
int lastNed() {
if (fileExists(KURSER_FILENAME))
unlink(KURSER_FILENAME);
CURL *curl_handle;
FILE *Kurser;
curl_global_init(CURL_GLOBAL_ALL);
curl_handle = curl_easy_init();
curl_easy_setopt(curl_handle, CURLOPT_URL, KURSER_URL);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
Kurser = fopen(KURSER_FILENAME, "w");
if (Kurser == NULL) {
curl_easy_cleanup(curl_handle);
return -1;
}
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, Kurser);
curl_easy_perform(curl_handle);
fclose(Kurser);
curl_easy_cleanup(curl_handle);
return 0;
}
|
|
|
Back to top |
|
|
Spawn of Lovechild Apprentice
Joined: 03 Feb 2004 Posts: 253 Location: Århus, Denmark
|
Posted: Thu Mar 04, 2004 5:08 pm Post subject: |
|
|
Man kunne også bare bruge : www.xe.net/ucc _________________ Proud to be a 22 year old Infidel, GNOME lover and member of LIK. |
|
Back to top |
|
|
dub.wav Tux's lil' helper
Joined: 09 Apr 2003 Posts: 149 Location: Norway
|
Posted: Thu Mar 04, 2004 10:11 pm Post subject: |
|
|
La meg se...klikke på url, vade gjennom to lister over mulige valutaer (de fleste uinteressante), skrive inn beløp, klikke på knapp...Total tid 30 sekunder. Hele poenget med å skrive en liten valuta omregner var å slippe det. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|