ammazzate corretto tutto tranne la parte dei file di testo che non li ho mai usati. Se c'è qualche anima pia che ha qualche info su come utilizzarli mi fa un piacere.
ps: l'ultima funzione sui file non l'ho toccata
pps: qualcuno avrebbe fatto diversamente??
Codice:
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct sprod
{
char codice[10];
char descr[100];
float prezzo;
char marca[15];
};
void aggiungiprodotto();
int aumentacodice(char *cod);
int aumentatutti();
float prezzocodice(char *cod);
float calcolatotale();
int visualizzamarca(char *marca);
void visualizza_file ();
void main()
{
int scelta;
char codicer[10];
char marcar[15];
do
{
printf("0-Aggiungere nuovo prodotto\n");
printf("1-dato un codice articolo, aumentare il suo prezzo del 20%\n");
printf("2-Aumentare i prezzi di tutti gli articoli del 20%\n");
printf("3-Stampare tutti gli articoli della stessa marca data in input\n");
printf("4-stampare il totale da pagare\n");
printf("5-se vuoi stampare a video tutto il file\n");
printf("6-stampare il prezzo dato un codice\n");
printf("7-Uscita\n");
printf("Scegli: ");
scanf("%d",&scelta);
fflush(stdin);
switch(scelta)
{
case 0:
aggiungiprodotto();
break;
case 1:
printf("Inserire codice da modificare: ");
gets(codicer);
fflush(stdin);
if(aumentacodice(codicer)) {
printf("\nPrezzo modificato");
break;
}
else {
printf("\nCodice non trovato\n\n");
break;
}
case 2:
if(aumentatutti()) {
printf("\n\nPrezzi modificati\n\n");
break;
}
else {
printf("\n\nNessun prodotto trovato\n\n");
break;
}
case 3:
printf("Inserire marca da visualizzare: ");
gets(marcar);
if(visualizzamarca(marcar)==0) {
printf("\nNessun prodotto trovato\n\n");
break;
}
break;
case 4:
printf("\nIl totale da pagare e' : %f",calcolatotale());
break;
case 5:
visualizza_file ();
break;
case 6:
printf("\nInserisci il codice:");
gets(codicer);
fflush(stdin);
float prezzo;
prezzo = prezzocodice(codicer);
if (prezzo == -1){
printf ("\n\nCodice inesistente\n\n");
}
else{
printf ("\n\nIl prezzo e': \t%f\n\n", prezzo);
}
break;
case 7:
break;
default:
printf("Scelta errata");
}
}while(scelta!=7);
}
void aggiungiprodotto()
{
struct sprod prod;
FILE *fp;
if ((fp=fopen("super.dat","a"))==NULL){
printf ("Errore nell'apertura del file");
return;
}
printf("Inserire codice: ");
gets(prod.codice);
printf("Inserire descrizione: ");
gets(prod.descr);
printf("Inserire prezzo: ");
scanf("%f",&prod.prezzo);
fflush(stdin);
printf("Inserire marca: ");
gets(prod.marca);
fwrite(&prod,sizeof(sprod),1,fp);
fclose(fp);
}
void visualizza_file ()
{
sprod prod;
FILE *fp;
if ((fp=fopen("super.dat","r"))==NULL){
printf ("Errore nell'apertura del file");
return;
}
while (!feof (fp)){
fread (&prod, sizeof(prod),1,fp);
if (!feof(fp)){
printf ("\nmarca: %s", prod.marca);
printf ("\ncodice: %s", prod.codice);
printf ("\ndescrizione: %s", prod.descr);
printf ("\nprezzo: %f\n\n", prod.prezzo );
}
}
fclose (fp);
}
int aumentacodice(char *cod)
{
sprod prod;
FILE *fp;
int pos=-1;
if ((fp=fopen("super.dat","r+"))==NULL){
printf ("Errore nell'apertura del file");
return -1;
}
while (!feof (fp)){
fread (&prod, sizeof(prod),1,fp);
if (!feof(fp)){
pos ++;
if (strcmp(prod.codice, cod)==0){
prod.prezzo = prod.prezzo * 1.2;
printf ("prezzo:\t%f", prod.prezzo);
pos = pos * sizeof (prod);
fseek(fp,pos,0);
fwrite(&prod,sizeof(prod),1,fp);
fclose (fp);
return 1;
}
}
}
fclose (fp);
return 0;
}
int aumentatutti(void)
{
sprod prod;
FILE *fp, *fp_supp;
if ((fp=fopen("super.dat","r+"))==NULL){
printf ("\n\nErrore nell'apertura del file\n\n");
return 0;
}
if ((fp_supp=fopen("file_supporto.dat","a"))==NULL){
printf ("\n\nErrore nell'apertura del file di supporto.\n\n");
return 0;
}
while (!feof(fp)){
fread (&prod, sizeof(sprod),1,fp);
if (!feof(fp)){
prod.prezzo = prod.prezzo * 1.2;
fwrite(&prod,sizeof(prod),1,fp_supp);
}
}
fclose (fp);
fclose (fp_supp);
remove("super.dat");
rename("file_supporto.dat", "super.dat");
return 1;
}
int visualizzamarca(char *marca)
{
sprod prod;
FILE *fp;
int n,trovato=0;
if ((fp=fopen("super.dat","r"))==NULL){
printf ("\n\nErrore nell'apertura del file\n\n");
return 0;
}
while (!feof(fp)){
fread (&prod, sizeof(prod),1,fp);
if (!feof(fp)){
if(strcmp(prod.marca,marca)==0){
trovato++;
printf("\n%s %s %f %s\n\n",prod.codice,prod.descr,prod.prezzo,prod.marca);
}
}
}
fclose(fp);
return trovato;
}
float prezzocodice(char *cod)
{
sprod prod;
FILE *fp;
if ((fp=fopen("super.dat","r+"))==NULL){
printf ("\n\nErrore nell'apertura del file\n\n");
return 0;
}
while (!feof(fp)){
fread (&prod, sizeof(prod),1,fp);
if (!feof(fp)){
if(strcmp(prod.codice,cod)==0){
fclose(fp);
return prod.prezzo;
}
}
}
fclose(fp);
return -1;
}
float calcolatotale()
{
FILE *fp;
float totale=0;
char cod[10];
fp=fopen("acquisto.txt","r");
while(fscanf(fp,"%s",cod)!=-1)
totale=totale+prezzocodice(cod);
fclose(fp);
return totale;
}
~§~ Sempre E Solo Lei ~§~