1
0

feat: Initial commit

This commit is contained in:
2024-03-22 17:37:24 +01:00
parent 4288bd63a1
commit 6732a7a166
120 changed files with 9620 additions and 0 deletions

View 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;
}