/*Esonero del 29/04/2009 Fondamenti di Informatica II (A-M) - Politecnico di Bari prof. G. Pascoschi ESERCIZIO 1 (10 punti) Data una catena di 10 supermercati (IDmagazzino, denominazione, indirizzo, città, superficie), sono presenti in ciascun supermercato 1000 prodotti (IDprodotto, nome, reparto, prezzo, data_scadenza). Implementare in C++ le seguenti funzioni: 1) Salvataggio dei dati dei supermercati nel file binario Super.dat (con modalità accesso sequenziale) 2) Visualizzazione del prodotto piu costoso (nome e prezzo) del supermercato n.9 (senza ordinare la tabella) 3) Modifica di un record su file, noti l ID magazzino e l IDprodotto (con modalità ad accesso sequenziale) 4) Ordinamento in ordine crescente di prezzo di ciascun supermercato leggendo i dati dal file con modalità ad accesso sequenziale e scrivendo i dati sullo stesso file con modalità ad accesso diretto*/ #include <iostream> #include <string> #define MAX_PRODOTTI 1000 #define MAX_SUPERMERCATI 10 using namespace std; struct data{ int giorno; int mese; int anno; ; struct prodotto{ int id_prodotto; string nome; int reparto; double prezzo; struct data Data_scadenza; ; struct super{ int id_magazzino; string denominazione; string indirizzo; string citta; int superficie; struct prodotto Prodotti[MAX_PRODOTTI]; ; typedef struct super mercato; void menu(const char*); void salvataggio(const char*); void visualizza_costoso(const char*); void showelem(mercato); void insertelem(mercato&); void modifica(const char*); void salva_ordinato(const char*); void scambia(struct prodotto&,struct prodotto&); void show_prodotti(struct prodotto[]); void visualizza(const char*); int main(){ char url[]="c:\\super.dat"; menu(url); return 0; void menu(const char* u){ int scelta; do{ cout<<"\n\n\n\n------------------------menu PROVA------------------------------"<<endl; cout<<"scegliere l'opzione desiderata"<<endl; cout<<"premere 1 per salvare i dati dei supermercati"<<endl; cout<<"premere 2 visualizzazione prodotto piu' costoso"<<endl; cout<<"premere 3 per modificare record"<<endl; cout<<"premere 4 ordinamento supermercati"<<endl; cout<<"premere 5 visualizzazione magazzini"<<endl; 1
cout<<"premere 6 per uscire"<<endl; cin>>scelta; switch(scelta){ case 1: salvataggio(u); case 2: visualizza_costoso(u); case 3: modifica(u); case 4: salva_ordinato(u); case 5: visualizza(u); case 6: default: cout<<"si e' sbagliato a inserire un valore per la scelta"<<endl; while(scelta!=6); 2 void insertelem(mercato& m){ cout<<"inserire l'id del magazzino"<<endl; cin>>m.id_magazzino; cout<<"inserire denominazione"<<endl; cin>>m.denominazione; cout<<"inserire indirizzo"<<endl; cin>>m.indirizzo; cout<<"inserire superficie:"<<endl; cin>>m.superficie; cout<<"inserire citta:"<<endl; cin>>m.citta; cout<<"inserire l'id del prodotto"<<endl; cin>>m.prodotti[i].id_prodotto; cout<<"inserire nome"<<endl; cin>>m.prodotti[i].nome; cout<<"inserire reparto"<<endl; cin>>m.prodotti[i].reparto; cout<<"inserire prezzo:"<<endl; cin>>m.prodotti[i].prezzo; cout<<"inserire data(gg)"<<endl; cin>>m.prodotti[i].data_scadenza.giorno; cout<<"inserire data(mm)"<<endl; cin>>m.prodotti[i].data_scadenza.mese; cout<<"inserire data(aaaa)"<<endl; cin>>m.prodotti[i].data_scadenza.anno; void salvataggio(const char* u){ if((fp=fopen(u,"ab"))==null){ else{ for(int i=0;i<max_supermercati;i++){ insertelem(current);
void visualizza_costoso(const char* u){ int numero; bool flag=false; cout<<"inserire supermercato su cui effettuare ricerca"<<endl; cin>>numero; else{ if(current.id_magazzino==numero){ if(!flag){ cout<<"elemento non presente"<<endl; else{ struct prodotto Max; if(i==0){ Max=current.Prodotti[i]; else{ if(max.prezzo<current.prodotti[i].prezzo) Max=current.Prodotti[i]; cout<<"il nome prodotto piu' costoso e':\t"<<max.nome<<endl; cout<<"il prezzo del prodotto piu' costoso e':\t"<<max.prezzo<<endl; 3 void modifica(const char* u){ int index=-1; int nrec=0; int id_mag,id_pro; mercato current,temp; bool flag=false; cout<<"inserire l'id del magazzino da modificare"<<endl; cin>>id_mag; cout<<"inserire l'id del prodotto da modificare"<<endl; cin>>id_pro; else{ nrec++; if(current.id_magazzino==id_mag){ if(flag){ if(current.prodotti[i].id_prodotto==id_pro){ index=i; cout<<endl<<"prodotto DA MODIFICARE"<<endl<<endl; cout<<"id_prodotto:\t"<<current.prodotti[i].id_prodotto<<endl; cout<<"nome:\t"<<current.prodotti[i].nome<<endl; cout<<"prezzo:\t"<<current.prodotti[i].prezzo<<endl; cout<<"reparto:\t"<<current.prodotti[i].reparto<<endl;
if(index==-1){ cout<<"prodotto non presente nel magazzino"<<endl; else{ cout<<"inserire nuovo id del prodotto"<<endl; cin>>current.prodotti[index].id_prodotto; cout<<"inserire nuovo nome"<<endl; cin>>current.prodotti[index].nome; cout<<"inserire nuovo reparto"<<endl; cin>>current.prodotti[index].reparto; cout<<"inserire nuovo prezzo:"<<endl; cin>>current.prodotti[index].prezzo; cout<<"inserire nuova data(gg)"<<endl; cin>>current.prodotti[index].data_scadenza.giorno; cout<<"inserire nuova data(mm)"<<endl; cin>>current.prodotti[index].data_scadenza.mese; cout<<"inserire nuova data(aaaa)"<<endl; cin>>current.prodotti[index].data_scadenza.anno; if((fp=fopen(u,"r+b"))==null){ 4 for(int i=0;i<nrec-1;i++){ fread(&temp,sizeof(mercato),1,fp); fseek(fp, 0, SEEK_CUR); else{ cout<<"non presente magazzino"<<endl; void salva_ordinato(const char* u){ int nrec=0; long pos=0; if((fp=fopen(u,"r+b"))==null){ else{ nrec++; bool flag; do{ flag=false; for(int i=0;i<max_prodotti-1;i++){ if(current.prodotti[i].prezzo>current.prodotti[i+1].prezzo){ scambia(current.prodotti[i],current.prodotti[i+1]); while(flag); pos=(nrec-1)*sizeof(mercato); fseek(fp,pos,0); fseek(fp,ftell(fp),0); void scambia(struct prodotto& p1,struct prodotto& p2){ struct prodotto temp;
temp=p1; p1=p2; p2=temp; 5 void showelem(mercato m){ cout<<"id_magazzino:\t"<<m.id_magazzino<<endl; cout<<"denominazione:\t"<<m.denominazione<<endl; cout<<"indirizzo:\t"<<m.indirizzo<<endl; cout<<"superficie:\t"<<m.superficie<<endl; cout<<"citta:\t"<<m.citta<<endl; show_prodotti(m.prodotti); void show_prodotti(struct prodotto p[]){ cout<<endl<<"prodotto N. "<<i+1<<endl<<endl; cout<<"id_prodotto:\t"<<p[i].id_prodotto<<endl; cout<<"nome:\t"<<p[i].nome<<endl; cout<<"prezzo:\t"<<p[i].prezzo<<endl; cout<<"reparto:\t"<<p[i].reparto<<endl; void visualizza(const char* u){ else{ cout<<"------magazzino CORRENTE------------"<<endl<<endl; showelem(current);