Grundkenntnisse bereiten Probleme :(((



  • Hi @all 🙂
    Ich hab hier ein riesen Problem^^
    Wir sollen für die Schule eine kleine Datenbank schreiben.
    Ob Dos oder MFC bleibt freie wahl (für ne mfc gibts klar - bessre note...^^).
    Da ich ein wenig mit mfc schon gearbeitet hab (taschenrechner und sowas in der liga..^^) würde ich es gerne so machen. Mein Problem ist, das ich noch net ganz weiss wie ich das machen soll 😞
    Ich hab mir überlegt eine art textfeld zu nehmen und das als ausgabe zu benutzen (würde das dann halt sperren das es nicht editierbar ist für den nutzer, oder gibts was besseres). Das Datei öffnen und schließen hab ich alles schon gemacht. Im Grunde habe ich auch eine in Visual vollständig komplierbare Lösung - aber eben nur als Dos. Bevor ich meine (schrecklichen) Ansätze in MFC hier poste, zeig ich erstmal das Dos Prog das läuft (naja fast)...

    #include <iostream.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    #include <cstring>
    #include <string.h>
    #include <stdio.h>
    #include <iomanip.h>
    
    void einlesen();
    void ausgeben();
    void suchen();
    void exportieren();
    void sortieren();
    void loeschen();
    int getanzahl();
    
    struct datensatz
    {
    	int ID;
    	char Vorname[20];
    	char Nachname[20];
    	char Strasse[20];
    	char Ort[20];
    	int Alter;   
    }array[100], temp;
    
    int getanzahl()
    {
    	struct datensatz fake[100];
    	int ANZAHL=0;
    	FILE *datei;
    
    	datei=fopen("DATA.ICE","r+b");
    	while(fread(fake,sizeof(datensatz),1,datei))
    	{
    		ANZAHL++;
    	}
    	return ANZAHL;
    }
    
    int main()
    {
    	int select;
    	while(1)
    	{
    		system("cls");
    		cout<<"\n\n\n";
    		cout<<"\t\t -----------------------------";
    		cout<<"\n\t\t| 1 = Neuer Datensatz         |"<<endl;
    		cout<<"\t\t| 2 = Datensaetze ausgeben    |"<<endl;
    		cout<<"\t\t| 3 = Datensaetze sortieren   |"<<endl;
    		cout<<"\t\t| 4 = Datensatz suchen        |"<<endl;
    		cout<<"\t\t| 5 = Datensatz loeschen      |"<<endl;
    		cout<<"\t\t| 6 = Datensaetze exportieren |"<<endl;
    		cout<<"\t\t| 7 = EXIT                    |"<<endl;
    		cout<<"\t\t -----------------------------";
    		cout<<"\n\n\t\t ---> ";
    		cin>>select;
    
    		switch(select)
    		{
    		case 1:einlesen();
    			break;
    		case 2:ausgeben();
    			break;
    		case 3:sortieren();
    			break;
    		case 4:suchen();
    			break;
    		case 5:loeschen();
    			break;
    		case 6:exportieren();
    			break;
    		case 7:exit(1);
    		}
    	}
    	return 0;
    }
    
    void einlesen(void)
    {
    	system("cls");
    	FILE *datei;
    	datei = fopen("DATA.ICE","a+b");
    
    	cout<<"Vorname:  ";cin>>array[0].Vorname;
    	cout<<"Nachname: ";cin>>array[0].Nachname;
    	cout<<"Strasse:  ";cin>>array[0].Strasse;
    	cout<<"Ort:      ";cin>>array[0].Ort;
    	cout<<"Alter:    ";cin>>array[0].Alter;
    
    	fwrite(array,sizeof(struct datensatz), 1, datei);
    	fclose(datei);
    	system("Pause");
    }
    
    void ausgeben(void)
    {
    	int lee,i,j=getanzahl();
    	FILE *datei;
    	datei = fopen("DATA.ICE","rb");
    	fread(&array, sizeof(struct datensatz),100, datei);
    	fclose(datei);
    	system("cls");
    
    	for(i=0;i<j;i++)
    	{
    		cout << array[i].Vorname;
    		lee=strlen(array[i].Vorname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Nachname;
    		lee=strlen(array[i].Nachname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Strasse;
    		lee=strlen(array[i].Strasse);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Ort;
    		lee=strlen(array[i].Ort);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Alter<<endl;
    	}
    	fflush(stdin);
    	system("Pause");
    
    }
    
    void suchen(void)
    {
    	system("cls");
    	FILE *datei;
    	datei = fopen("DATA.ICE","rb");
    	fread(&array, sizeof(struct datensatz),100, datei);
    	fclose(datei);
    
    	int i=0,select,ergebnis,lee;
    	char vergleich[20];
    	cout<<"\t 1= Durch Vornamen suchen..."<<endl;
    	cout<<"\t 2= Durch Nachnamen suchen..."<<endl;
    	cout<<"\t 3= Durch Strasse suchen..."<<endl;
    	cout<<"\t 4= Durch Ort suchen..."<<endl;
    	cout<<endl<<"Eingabe: ";
    	cin>>select;
    
    	switch(select)
    	{
    	case 1:
    		cout<<"Vorname des Datensatz:";
    		cin>>vergleich;
    		do{
    			ergebnis = strcmp(vergleich,array[i++].Vorname);
    			if(i==20)
    				break;
    		}
    		while(ergebnis!=0);
    
    		if(ergebnis!=0)
    		{
    			cout<<"\nDatensatz nicht gefunden!\n\n";
    		}
    		else
    		{
    		cout << "\n\n";
    		cout << array[i-1].Vorname;
    		lee=strlen(array[i-1].Vorname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Nachname;
    		lee=strlen(array[i-1].Nachname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Strasse;
    		lee=strlen(array[i-1].Strasse);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Ort;
    		lee=strlen(array[i-1].Ort);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Alter<<endl;
    		cout << endl << endl;
    		system("PAUSE");
    		}break;
    
    	case 2:
    		cout<<"Bitte Nachnamen eingeben: ";
    		cin>>vergleich;
    		do
    		{
    			ergebnis = strcmp(vergleich,array[i++].Nachname);
    			if(i==20)
    				break;
    		}
    		while(ergebnis!=0);
    
    		if(ergebnis!=0)
    		{
    			cout<<"\nDatensatz nicht gefunden!\n\n";
    		}
    
    		else
    		{
    		cout << "\n\n";
    		cout << array[i-1].Vorname;
    		lee=strlen(array[i-1].Vorname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Nachname;
    		lee=strlen(array[i-1].Nachname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Strasse;
    		lee=strlen(array[i-1].Strasse);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Ort;
    		lee=strlen(array[i-1].Ort);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Alter<<endl;
    		cout << endl << endl;
    		system("PAUSE");
    		}break;
    
    	case 3:
    		cout<<"Bitte Strasse eingeben: ";
    		cin>>vergleich;
    		do
    		{
    			ergebnis = strcmp(vergleich,array[i++].Strasse);
    			if(i==20)
    				break;
    		}
    		while(ergebnis!=0);
    
    		if(ergebnis!=0)
    		{
    			cout<<"\nDatensatz nicht gefunden!\n\n";
    		}
    
    		else
    		{
    		cout << "\n\n";
    		cout << array[i-1].Vorname;
    		lee=strlen(array[i-1].Vorname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Nachname;
    		lee=strlen(array[i-1].Nachname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Strasse;
    		lee=strlen(array[i-1].Strasse);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Ort;
    		lee=strlen(array[i-1].Ort);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Alter<<endl;
    		cout << endl << endl;
    		system("PAUSE");
    		}break;
    
    	case 4:
    		cout<<"Bitte Ort eingeben: ";
    		cin>>vergleich;
    		do
    		{
    			ergebnis = strcmp(vergleich,array[i++].Ort);
    			if(i==20)
    				break;
    		}
    		while(ergebnis!=0);
    
    		if(ergebnis!=0)
    		{
    			cout<<"\nDatensatz nicht gefunden!\n\n";
    		}
    
    		else
    		{
    		cout << "\n\n";
    		cout << array[i-1].Vorname;
    		lee=strlen(array[i-1].Vorname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Nachname;
    		lee=strlen(array[i-1].Nachname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Strasse;
    		lee=strlen(array[i-1].Strasse);
    		while(lee++<10)cout << " ";
    
    		cout << array[i-1].Ort;
    		lee=strlen(array[i-1].Ort);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Alter<<endl;
    		cout << endl << endl;
    		system("PAUSE");
    		}break;
    
    	default:
    		cout << "Falsche auswahl...";
    		system("Pause");
    }}
    
    void sortieren(void)
    {
    /*	int i,I,anz;
    	anz=getanzahl();
    	struct datensatz tausch;
    	FILE *datei;
    	datei = fopen("DATA.ICE","rb");
    	fread(&array, sizeof(struct datensatz),anz, datei);
    	fclose(datei);
    
    	for(i=0;i<anz;i++)
    	{
    		for(I=i+1;I<anz;I++)
    		{
    			if(array[i].Alter<array[I].Alter)
    			{
    				tausch=array[i];
    				array[i]=array[I];
    				array[I]=tausch;
    			}
    		}
    	}
    
    	system("Pause");
    
    	FILE *daten;
    	daten = fopen("DATA.ICE","wb");
    	fwrite(array,sizeof(struct datensatz),anz, daten);
    	fclose(daten);*/
    }
    
    void loeschen(void)
    {
    	system("cls");
    	FILE *datei;
    	datei = fopen("DATA.ICE","rb");
    	fread(&array, sizeof(struct datensatz),100, datei);
    	fclose(datei);
    
    	int i;
    		cout<<"Welchen Datensatz wollen Sie loeschen?"<<endl;
    		cin >> i;
    		i--;
    	while(i<=100)
    	{
    		array[i]=array[i+1];
    		i++;
    	}
    
    	FILE *daten;
    	daten = fopen("DATA.ICE","wb");
    	fwrite(array,sizeof(struct datensatz), 100, daten);
    	fclose(daten);
    }
    
    void exportieren()
    {
    	int lee,i,j=getanzahl();
    	FILE *datei,*export;
    	datei = fopen("DATA.ICE","rb");
    	fread(&array, sizeof(struct datensatz),100, datei);
    	fclose(datei);
    	system("cls");
    	export = fopen("EXPORT.HTML","w+");
    	fprintf(export,"bla");
    
    	for(i=0;i<j;i++)
    	{
    		fprintf(export,"%s",array[i].Vorname);
    		lee=strlen(array[i].Vorname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Nachname;
    		lee=strlen(array[i].Nachname);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Strasse;
    		lee=strlen(array[i].Strasse);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Ort;
    		lee=strlen(array[i].Ort);
    		while(lee++<10)cout << " ";
    
    		cout << array[i].Alter<<endl;
    	}
    	fflush(stdin);
    	system("Pause");
    }
    

    Was ich jetz brauch ist ein besserer Ansatz wie man sowas umsetzen könnte.
    Wo was hin muss und so. Ich wär ja schon hellreich froh, wenn die beiden Funktionen einlesen und ausgeben funktionieren würden, der rest ergibt sich ja dannn...^^ 🙂

    thx & cya
    Schmank



  • und was hat das mit MFC zu tun ??????? 👎



  • Hallo,

    ich programmiere erst seit kurzen mit C++, aber was mir hier auffällt;
    warum inkludierst du string.h zweimal und wo hast du deinen
    namespace festgelegt?

    😕 😕 😕



  • gute frage.
    namespace? ich mache das mit visual 6 das will gar nich das ich den namespace festlege (hat zumindest noch nich gemeckert..).



  • und was hat das mit MFC zu tun ? 👎



  • Ich verstehe das Problem jetzt nicht ganz...

    Du willst dieses Kommandozeilen Prg in eine MFC Lösung überführen?

    Gru´ß Christoph



  • Mal so als groben Wurf:

    Einfach:
    Schau dir an, wie Dialoge funktionieren.
    Schau dir CStdiofile an.

    Schwerer:
    Schau dir CRecordset und CFormview bzw. CRecordsetView an.

    Viel Erfolg 🙂


Log in to reply