Salve!
E' il mio primo messaggio qui su HTML, mi chiamo Gaetano e sono uno studente. Di solito quando ho qualche problema trovo la soluzione qui su questo forum, ma questa volta non ho trovato quello che cercavo. Vado al punto.
Sto sviluppando un programma gestionale utilizzando C++.NET...o se volete CLI/CLR...
Ho studiato il C++, e ora il mio prof si presenta volendo un progetto con le Windows form..
ho creato il programma in c++ più o meno, e ora lo sto "convertendo" in c++.net
ma sto avendo delle difficolta.
il programma dovrebbe gestire degli studenti.quindi ce una form con diverse textbox da riempire, e clickando un bottone dovrebbe registrarmeli su file.
in un altra form, data la matricola, devo essere capace di modificare i dati dello studente(che saranno visualizzati di nuovo sulla form della registrazione, ma sara possibile cambiare i dati e sovrascriverli)
nel cpp della registrazione ho creato una classe con gli attributi dello studente.
e li sto gestendo con una STL list.
PRIMO PROBLEMA:in c++ riesco a fare la stessa cosa e a salvare gli oggetti della lista su file. in c++.net no!!!la gestione file deve essere diversa..ho provato con streamwriter textwriter etc ma non sono arrivato lontano
SECONDO PROBLEMA:usando streamwriter e come se non facessi per niente uso della list..quindi mi domando..quando dovro modificare uno studente..come faccio a mostrare i dati di QUELLO studente e a sovrascriverli se la list e tagliata fuori dalla gestione file???
inserisco un po di codice..
codice:
//.cpp della registrazione
class studente//superclasse
{
private:
string cognome;
string nome;
public:
studente(){
cognome="";
nome="";
};
~studente(){};
void set(string str1,string str2){ cognome=str1; nome=str2;
}
class primo_anno:public studente//classe derivata
{
private:
int voto_diploma;
public:
primo_anno(){
cognome="";
nome="";
voto_diploma='0';
};
~primo_anno(){};
void set(string str1,string str2, int mark){ voto_diploma=mark; };
void stampa(){//funzionava in c++..qui non ha senso..
f<<"\ncognome: "<<cognome<<"\n";
f<<"nome: "<<nome<<"\n";
f<<"voto: "<<voto_diploma<<"\n";
};
};
list<primo_anno> l1;//dichiaro la mia bella list
{//quando click sul pulsante registra esegue questo metodo
int mark;
primo_anno *s;
s=new primo_anno;
char* str1=(char*)(Marshal::StringToHGlobalAnsi(textBox1->Text)).ToPointer();
char* str2=(char*)(Marshal::StringToHGlobalAnsi(textBox2->Text)).ToPointer();
mark = Convert::ToInt16(textBox35->Text);
s->set(str1,str2,mark);
l1.push_back(*s);
list<primo_anno>::iterator it;
//al momento so scrivere su file solo in questo modo...ma non mi sembra la cosa giusta
TextWriter ^tw = gcnew StreamWriter("primoAnno.txt", true);//true append
tw->WriteLine(textBox1->Text);//textbox del cognome
tw->WriteLine(textBox2->Text);//textbox del nome
tw->Close();
in c++ riuscivo a fare questo..funzionante
codice:
class ciao
{
private:
string nome;
string cognome;
int eta;
public:
ciao(){
cognome="";
nome="";
eta=0;
};
~ciao(){};
void set(string c,string n, int e){
cognome=c;
nome=n;
eta=e;
};
void stampa(){
fout<<"cognome: "<<cognome<<"\n";
fout<<"nome: "<<nome<<"\n";
fout<<"eta: "<<eta<<"\n";
};
bool operator < (const ciao& secondo){ if(cognome < secondo.cognome){
return cognome < secondo.cognome; } if(cognome==secondo.cognome){
return nome< secondo.nome;
}
}
};
int main()
{
list<ciao> l;
int continua;
string n,c;
int e;
ciao *s;
do{
cout<<"nome:";
cin>>n;
cout<<"cognome:";
cin>>c;
cout<<"eta:";
cin>>e;
s=new ciao;
s->set(c,n,e);
l.push_back(*s);
cout<<"continuare? 1 si 0 no\n";
cin>>continua;
}while(continua==1);
l.sort();
list<ciao>::iterator it;
fout.open("database.txt",ios::app);
if(!fout){
cout<<"errore\n";
}
else {
for(it=l.begin();it!=l.end();++it){
it->stampa();
}
fout.close();
}
vi ringrazio anticipatamente
gaetano