PDA

Visualizza la versione completa : magazzino in C++


gxgijjy
30-06-2002, 19:57
Questo programma che ho scritto dovrebbe simulare la gestione di un magazzino. La funzionalità di aggiornamento dei prodotti però non funziona considerando la stringa che inserisco sempre appartenente al database. Se tolgo questa funzionalità il programma funziona, ma non è certo l' obbiettivo che mi ero prefissato.

Ecco il codice:

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include "ordine.h"
#include <string.h>
#include <ctype.h>
FILE *fp;
ordine ord[100];
int corrente=0;
char modello[20];
int old;
int modEsistente;
void scrivi();
void apri();
int main() {
apri();
char scelta;
do {
label:
cout<<"Corrente="<<corrente<<endl;
modEsistente=0;
cout<<"Inserisci il nome del modello ";
cin>>modello;
for(old=0; old<corrente; old++) {
cout<<ord[old].mod<<"-"<<modello;
if(strcmp(ord[old].mod, modello)) {
modEsistente=1;
lb:
cout<<"L' articolo e' presente nel database, vuoi modificare il suo prezzo unitario? (y/n) ";
cin>>scelta;
if((scelta=='y')||(scelta=='Y')) {
cout<<"Inserisci prezzo unitario ";
cin>>ord[old].pru;
}
if((scelta=='n')||(scelta='N')) break;
if((scelta!='y')||(scelta!='Y')) {
cout<<"Puoi immettere solamente y/n\n";
goto lb;
}
}
if(modEsistente==1) break;
}
if(!modEsistente) {
corrente++;
cout<<"Inserisci il prezzo unitario ";
cin>>ord[corrente].pru;
cout<<"Inserisci il numero dei modelli da acquistare ";
cin>>ord[corrente].quant;
}
if(modEsistente) {
char quantita[5];
int temp;
cout<<"Inserisci il numero di modelli da aggiungere a quelli gia' presenti ";
cin>>quantita;
temp=(int)ord[old].quant+(int)quantita;
ord[old].quant[0]='m';
}
do {
cout<<"Le informazioni sono corrette? (y/n) ";
cin>>scelta;
(scelta=='Y')?scelta='y':0;
(scelta=='N')?scelta='n':0;
if(scelta=='n')
goto label;
else if(scelta!='y')
cout<<"Puoi immettere solamente y/n"<<endl;
} while(scelta!='y');
corrente++;
scrivi();
yn:
cout<<"Desideri effettuare un altro ordine? (y/n) ";
cin>>scelta;
(scelta=='Y')?scelta='y':0;
(scelta=='N')?scelta='n':0;
if(scelta=='n')
exit(0);
else if(scelta!='y') {
cout<<"Puoi immettere solamente y/n"<<endl;
goto yn;
}
} while(scelta=='y');
return 0;
}
void apri() {
char n;
fflush(stdin);
if((fp=fopen("C:\\magazzino.dat","ab+"))==NULL) {
cout<<"Errore nell' apertura del file\n";
exit(1);
}
while(!feof(fp)) {
fread(&ord[corrente].mod, sizeof(ord[corrente].mod), 1, fp);
fread(&ord[corrente].pru, sizeof(ord[corrente].pru), 1, fp);
fread(&ord[corrente].quant, sizeof(ord[corrente].quant), 1, fp);
fread(&n, sizeof(n), 1, fp);
corrente++;
}
corrente--;
}

void scrivi() {
char s;
if(!modEsistente) {
while(!feof(fp)) {
fread(&s, sizeof(s), 1, fp);
}
if(fwrite(&ord[corrente].mod, sizeof(ord[corrente].mod), 1, fp)!=1) {
cout<<"Impossibile scrivere su file!\n";
exit(1);
}
fwrite(&ord[corrente].pru, sizeof(ord[corrente].pru), 1, fp);
fwrite(&ord[corrente].quant, sizeof(ord[corrente].quant), 1, fp);
s='\n';
fwrite(&s, sizeof(s), 1, fp);
rewind(fp);
fflush(fp);
}
if(modEsistente) {
for(int i=0; i<corrente; i++) {
if(fwrite(&ord[i].mod, sizeof(ord[i].mod), 1, fp)!=1) {
cout<<"Impossibile scrivere su file!\n";
exit(1);
}
fwrite(&ord[i].pru, sizeof(ord[i].pru), 1, fp);
fwrite(&ord[i].quant, sizeof(ord[i].quant), 1, fp);
s='\n';
fwrite(&s, sizeof(s), 1, fp);
}
fflush(fp);
rewind(fp);
}
}



/Aiuto!!

gxgijjy
30-06-2002, 20:06
ordine.h:


#include <iostream.h>
#include <string.h>

class ordine {
public:
char mod[20];
char pru[5];
char quant[5];
};

Loading