Strutture in C (III) - Antica Pasticceria "Il dolcetto"

La pasticceria il dolcetto ha bisogno di un programma per catalogare tutti i dolci che produce e vende. Ha pensato a te!

Un programmatore abilissimo ha già realizzato qualcosa ma ha lasciato il programma a metà... :(

#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

struct Ingrediente {
	char nome[50]; // Il nome dell'ingrediente
	int quantita; // Quantità in grammi dell'ingrediente
};

struct Torta {
	char nome[50];
	Ingrediente ingredienti[10]; // Massimo 10 ingredienti
	int numeroIngredienti; // Tiene traccia di quanti ingredienti ci sono, 0 all'inizio
	Torta () {
		numeroIngredienti = 0;
	}
};

// Aggiunge una torta in coda
void inserisciTortaInCoda(Torta torte[], int &numeroTorte) { 
	fflush(stdin); // Completalo facendo inserire tutto all'utente
	cin.get(torte[numeroTorte].nome, 49);
	//  inserisci anche gli altri dati chidendo tutto all'utente
	torte[numeroTorte].numeroIngredienti = 2;
	strcpy(torte[numeroTorte].ingredienti[0].nome, "Zucchero");
	torte[numeroTorte].ingredienti[0].quantita = 300;
	strcpy(torte[numeroTorte].ingredienti[1].nome, "Farina");
	torte[numeroTorte].ingredienti[1].quantita = 400;
	numeroTorte++;
}; // Inserisce in coda

// Salva su disco tutte le torte
void salvaTorte(Torta torte[], int numeroTorte) {
	ofstream file("torte.txt");
	for (int i=0; i<numeroTorte; i++) {
		file.write((char*)&torte[i], sizeof(Torta));
	}
	file.close();
};

// Carica da disco tutte le torte precedentemente salvate
int caricaTorte(Torta torte[]) {
	int numeroTorte = 0;
	ifstream file("torte.txt");
	char data[sizeof(Torta)];
	while (file.read(data, sizeof(Torta))) {
		torte[numeroTorte++] = *((Torta*)data);
	}
	file.close();
	return numeroTorte;
};

void stampaTorta(Torta p); // Stampa solo la pizza passata
void stampaTorte(Torta torte[], int numeroTorte); // Stampa l'elenco di tutte le torte
void ordinaTorte(Torta torte[], int numeroTorte); // Mette in ordine le torte
void inserisciTortaInOrdine(Torta torte[], int &numeroTorte); // Inserisce in ordine
Torta cercaTortaPerNome(Torta torte, char nome[]); // Restituisce la torta con il nome passato
Torta cercaTortaPerPosizione(Torta torte, char nome[]); // Restituisce la torta con il nome passato

int main() { // Aggiungi un menu
	Torta torte[50]; // Dichiaro un vettore di 50 torte
	int numeroTorte=0; // tengo traccia di quante torte ci sono, 0 all'inizio
	inserisciTortaInCoda(torte, numeroTorte);
	inserisciTortaInCoda(torte, numeroTorte);
	salvaTorte(torte, numeroTorte);
	numeroTorte = caricaTorte(torte);
	cout << torte[0].nome << " " << torte[0].numeroIngredienti << endl;
	cout << torte[0].ingredienti[1].nome << " " << torte[0].ingredienti[1].quantita;
}

Dopo avere analizzato il codice precedente completa il programma con le seguenti funzionalità:

Attività

  1. Crea il menu mancante con le funzionalità già presenti (inserisci, salva e carica)
  2. Completa la funzionalità "Inserisci in coda" in modo che l'utente possa inserire tutti i dati della singola torta
  3. Completa la funzionalità "Stampa una torta"
  4. Aggiungi una voce di menu per stampare tutte le torte
  5. Aggiungi una voce di menu ordinare le Torte per nome
  6. Aggiungi una voce di menu per fare l'inserimento ordinato. Per fare questo serve avere una lista ordinata. Poi se ad esempio ho tre torte: tiramisu, torta al limone e torta margherita e voglio aggiungere torta alle mandorle devo cercare nell'elenco la prima che è maggiore in ordine alfabetico e fare lì l'inserimento. L'elenco quindi diventa: tiramisu, torta al limone, torta alle mandorle e torta margherita.
  7. Aggiungi una voce di menu per stampare la torta ricercata per nome (inserito dall'utente)
  8. Aggiungi una voce di menu per stampare la torta ricercata per posizione (inserita dall'utente)
  9. Aggiungi due funzioni per due voci di menu a tua scelta che pensi potrebbero essere utili a chi ha una pasticceria per gestire le torte.

Quindi carica su moodle il programma realizzato.

Maggiori informazioni su cplusplus

Buon lavoro!