feat: Initial commit
This commit is contained in:
180
Laboratorio 8/Esercizio 3/main.c
Normal file
180
Laboratorio 8/Esercizio 3/main.c
Normal file
@@ -0,0 +1,180 @@
|
||||
// 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;
|
||||
}
|
||||
Reference in New Issue
Block a user