// Laboratorio 8 - Esercizio 3 - main.c // Matteo Schiff - s295565 #include #include #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; }