181 lines
4.1 KiB
C
181 lines
4.1 KiB
C
// Laboratorio 8 - Esercizio 3 - main.c
|
|
// Matteo Schiff - s295565
|
|
|
|
#include<ctype.h>
|
|
#include<string.h>
|
|
|
|
#include"AssetList.h"
|
|
#include"Asset.h"
|
|
#include"ExrateBST.h"
|
|
|
|
#define MAX_LEN 30
|
|
|
|
const int MAXL = 100;
|
|
|
|
typedef enum
|
|
{
|
|
r_read,
|
|
r_select_asset,
|
|
r_get_quot_date,
|
|
r_get_quot_min_max_date,
|
|
r_get_min_max,
|
|
r_balance,
|
|
r_fine
|
|
} t_comandi;
|
|
|
|
char *toLower(char *s)
|
|
{
|
|
for (char *p = s; *p; p++)
|
|
*p = tolower(*p);
|
|
return s;
|
|
}
|
|
|
|
t_comandi leggiComando()
|
|
{
|
|
t_comandi c;
|
|
char cmd[MAXL];
|
|
char tabella[7][30] = {
|
|
"leggi_file", "seleziona_asset", "quotazione_data", "quotazione_min_max_data", "quotazione_min_max","bilancia", "fine"};
|
|
printf("comando (leggi_file, seleziona_asset, quotazione_data, quotazione_min_max_data, quotazione_min_max, bilancia, fine): ");
|
|
scanf("%s", cmd);
|
|
toLower(cmd);
|
|
c = r_read;
|
|
while (c < 7 && strcmp(cmd, tabella[c]) != 0)
|
|
c++;
|
|
return (c);
|
|
}
|
|
|
|
void handleRead(AssetList assetList) {
|
|
FILE *fp;
|
|
char filename[MAX_LEN+1];
|
|
int N;
|
|
|
|
printf("Filename: ");
|
|
scanf("%s", filename);
|
|
|
|
if ((fp = fopen(filename, "r")) == NULL) {
|
|
printf("ERROR opening input file\n");
|
|
return;
|
|
}
|
|
|
|
fscanf(fp, "%d", &N);
|
|
for (int i = 0; i < N; i++) {
|
|
Asset newAsset = AssetRead(fp);
|
|
AssetListInsert(assetList, newAsset);
|
|
}
|
|
|
|
fclose(fp);
|
|
}
|
|
|
|
void handleAssetSelection(AssetList assetList, Asset **selectedAsset) {
|
|
char title[MAX_LEN+1];
|
|
|
|
if (AssetListLength(assetList) == 0)
|
|
printf("Nessun asset selezionato\n");
|
|
else {
|
|
AssetListPrint(assetList);
|
|
printf("Quale asset vuoi scegliere: ");
|
|
scanf("%s", title);
|
|
|
|
if ((*selectedAsset = AssetListSearch(assetList, title)) == NULL) {
|
|
printf("Nessun asset trovato\n");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void handleSingleExrateSearch(AssetList assetList, Asset *selectedAsset) {
|
|
Exrate dailyexrate;
|
|
|
|
if (selectedAsset == NULL)
|
|
printf("Nessun asset selezionato\n");
|
|
else {
|
|
DateTime dt;
|
|
printf("Data (yyyy/mm/dd): ");
|
|
DateRead(&dt, stdin);
|
|
dailyexrate = ExrateBSTSearch(AssetGetExrates(*selectedAsset), dt);
|
|
ExratePrint(dailyexrate);
|
|
}
|
|
}
|
|
|
|
void handleMultiExrateSearch(AssetList assetList, Asset *selectedAsset) {
|
|
if (selectedAsset == NULL)
|
|
printf("Nessun asset selezionato\n");
|
|
else {
|
|
ExrateBSTMinMax(AssetGetExrates(*selectedAsset));
|
|
}
|
|
|
|
}
|
|
|
|
void handleMultiExrateSearchInterval(AssetList assetList, Asset *selectedAsset) {
|
|
if (selectedAsset == NULL)
|
|
printf("Nessun asset selezionato\n");
|
|
else {
|
|
DateTime dt1;
|
|
DateTime dt2;
|
|
printf("Data inizio (yyyy/mm/dd): ");
|
|
DateRead(&dt1, stdin);
|
|
printf("Data fine (yyyy/mm/dd): ");
|
|
DateRead(&dt2, stdin);
|
|
|
|
ExrateBSTMinMaxInInterval(AssetGetExrates(*selectedAsset), dt1, dt2);
|
|
}
|
|
|
|
}
|
|
|
|
void handleBalance(Asset *asset) {
|
|
if (asset == NULL)
|
|
printf("Nessun asset selezionato\n");
|
|
else
|
|
ExrateBSTBalance(AssetGetExrates(*asset));
|
|
}
|
|
|
|
void menuParola(AssetList al)
|
|
{
|
|
Asset *selected = NULL;
|
|
t_comandi comando;
|
|
int i, continua = 1;
|
|
while (continua)
|
|
{
|
|
comando = leggiComando();
|
|
switch (comando)
|
|
{
|
|
case r_read:
|
|
handleRead(al);
|
|
break;
|
|
case r_select_asset:
|
|
handleAssetSelection(al, &selected);
|
|
break;
|
|
case r_get_quot_date:
|
|
handleSingleExrateSearch(al, selected);
|
|
break;
|
|
case r_get_quot_min_max_date:
|
|
handleMultiExrateSearchInterval(al, selected);
|
|
break;
|
|
case r_get_min_max:
|
|
handleMultiExrateSearch(al, selected);
|
|
break;
|
|
case r_balance:
|
|
handleBalance(selected);
|
|
break;
|
|
case r_fine:
|
|
continua = 0;
|
|
break;
|
|
default:
|
|
puts("Comando non valido\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
int main(int argc, char const *argv[])
|
|
{
|
|
char filename[MAX_LEN];
|
|
AssetList al = AssetListCreate();
|
|
|
|
menuParola(al);
|
|
|
|
AssetListFree(al);
|
|
|
|
return 0;
|
|
}
|