*freu*
habe es jetzt schon so zimlich fertig, bis auf die "import"-funktion, die wir aber noch nicht machen mussten!!!
danke NumberFive füe deine hilfe
MfG
baldi123
PS: der fertige Code:
Code:// Programm...: figuren.c // Ersteller...: Baldinger Patrick // Datum...: 14.02.05 // // Zweck...: Verwaltung der Figuren-DB // // #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> struct TFigur { char name[30]; // Name der Figur int xpos; // X-Position auf dem Feld (0...1000) int ypos; // Y-Position auf dem Feld (0...1000) int energie; // Lebensenergie 0...100 int typ; // A=Mensch Z=Zwerg E=Elb O=Ork M=Magier H=Hobbit }; //Globale Variable und Konstante const int ARRLEN = 10; // Länge des Figuren-Array int ACTLEN = 0; // nächste freie Stelle im Array int saveit = 0; // Merker: Wenn Änderugen, dann speichern vor Ende struct TFigur figuren[ARRLEN]; // Figuren-Array char datei[] = "figur1"; // Name der Datei in der die Datensätze gespeichert werden // Funktionsprototypen void Insert(void); int InsertRecord(struct TFigur); void Delete(void); void Save(void); void Import(void); void Load(void); void Display(void); // Hauptprogramm void main(void) { char iAuswahl; Load(); // Beim Programmstart eventuell vorhandene Datensätze aus Datei laden do { system("CLS"); // Bildschirm löschen printf(" Funktion auswaehlen\n"); printf(" ===================\n\n"); printf(" 1...Figur anlegen\n"); printf(" 2...Figur loeschen\n"); printf(" 3...Figuren anzeigen\n"); printf(" 4...Speichern\n"); printf(" 5...Import\n\n"); printf(" 0...beenden\n\n"); printf("Auswahl -> "); fflush(stdin); // Tastaturpuffer leeren scanf("%i",&iAuswahl); switch(iAuswahl) { case 1: Insert(); break; case 2: Delete(); break; case 3: Display(); break; case 4: Save(); break; case 5: Import(); break; case 0: if (saveit) { iAuswahl = 99; printf("\n\aBitte Daten zuerst speichern!\n"); system("pause"); } break; default: printf("\n\aUngueltige Auswahl!\n"); system("pause"); } } while (iAuswahl != 0); printf("\n\nPROGRAMM-ENDE!\n\n"); return; } void Insert(void) { // Liest die Daten einer Figur in die Struktur f1 ein. Zum eigentlichen Einfügen der Daten in das // Array wird die Funktion InsertRecord aufgerufen. Der Rückgabewert von InsertRecord wird // In der Funktion Insert() nicht behandelt. struct TFigur f1; int y; saveit = 1; // Datenbank wird verändert printf(" Name: "); scanf("%s",&f1.name); printf(" Typ: "); scanf("%s",&f1.typ); printf(" X-Pos: "); scanf("%i",&f1.xpos); printf(" Y-Pos: "); scanf("%i",&f1.ypos); printf("Energie: "); scanf("%i",&f1.energie); y = InsertRecord(f1); printf("\nDatensatz eingefuegt - %i Saetze sind vorhanden\n",ACTLEN); system("pause"); return; } int InsertRecord(struct TFigur f) { // Fügt einen neuen Datensatz am Ende des Arrays "figuren" ein // Rückgabewert InsertOK: 1...Falls der Satz eingefügt werden kann // 0...Wenn Puffer voll, nicht eingefügt // -1...Wenn Figur schon vorkommt, nicht eingefügt // Eingabeparameter f: Strukturvariable f, wird in Array "figuren" eingefügt // Die Funktion InsertRecord() darf keinerlei Ausgaben machen, da sie auch bei der // Importfunktion aufgerufen wird. int InsertOK = 1; // Standardvoraussetzung int ctr; // Kontrollhilfszeichen int p; if(ACTLEN<10) { for(p = 0; p < ACTLEN; p++) { if(strcmp(figuren[p].name,f.name) == 0) { return -1; } } figuren[ACTLEN] = f; ACTLEN++; } else { InsertOK = 0; } return InsertOK; } void Save(void) { // Diese Funktion schreibt den Inhalt des Arrays "figuren" in die Datei // Es wird angezeigt, wieviele Sätze in die Datei gespeichert wurden // Der Merker "saveit" wird auf 0 gesetzt FILE *out; int i; out = fopen(datei,"wb"); if (out == NULL) { printf("\nDie Datei kann nicht geoeffnet werden! - Keine Saetze geschrieben!"); } else { for (i = 0; i < ACTLEN; i++) { fwrite(&figuren[i],sizeof(figuren[i]),1,out); } fclose(out); printf("\nEs wurden %i Datensaetze eingeschrieben\n",i); saveit = 0; } system("pause"); return; } void Load(void) { // Diese Funktion wird beim Programmstart aufgerufen und liest bereits vorhandene // Datensätze in das Array "figuren" ein. // Am Ende wird die Anzahl der gelesenen Sätze angezeigt FILE *in; struct TFigur f; // Variable auf TFigur zum Einlesen int counter = 0; in = fopen(datei,"rb"); if (in == NULL) { printf("\nDie Datei kann nicht geoeffnet werden! - Keine Saetze geladen!"); } else { fread(&f,sizeof(f),1,in); while(!feof(in)) { counter++; figuren[ACTLEN++] = f; fread(&f,sizeof(f),1,in); } fclose(in); printf("Es wurden %i Datensaetze eingelesen\n",counter); } system("pause"); return; } void Display(void) { // Diese Funktion zeigt die Datensätze im Array "figuren" an // Am Ende wird die Anzahl der angezeigten Sätze angezeigt int i; printf("\nName der Figur Typ XPos YPos Energie\n"); for (i = 0; i < ACTLEN; i++) { printf("%-21s",figuren[i].name); printf(" %c ",figuren[i].typ); printf("%5i",figuren[i].xpos); printf("%5i",figuren[i].ypos); printf("%5i\n",figuren[i].energie); } printf("\nEs wurden %i Datensaetze angezeigt!\n",i); system("pause"); return; } void Delete(void) { // Es wird der Name der Figur eingelesen. Diese wird dann im Array gesucht. // Falls sie gefunden wird, wird sie aus dem Array entfernt. Alle Arrayelemente // rechts des gelöschten Elements werden um eine Position nach links verschoben // Im Falle des Löschens muss die Variable ACTLEN um eins vermindert werden und // ebenso muss die Variable "saveit" gesetzt werden return; } void Import(void) { // Liest den Namen einer Textdatei (CSV-Datei) ein, in der die einzelnen Werte durch ';' getrennt stehen // Die Reihenfolge der Werte entspricht der Reihenfolge der Daten in der Struktur // Die eingelesene Zeichenkette soll an die Funktion Analyse() übergeben werden. Analyse() liefert // als Rückgabewert die einzelnen Werte in einer Variable vom Typ TFigur // Zum Einfügen in das Array soll wiederum die Funktion InsertRecord() verwendet werden. Ist das Array // "figuren" voll (wird durch den Rückgabewert von InsertRecord() angezeigt), dann muss der Importvorgang // abgebrochen werden return; } struct TFigur Analyze(char t[]) { // Zerlegt den Eingabestring t in die Komponenten // ->Name // ->Typ // ->XPosition // ->YPosition // ->Energie // und gibt diese in der Strukturvariable RetVal zurück struct TFigur RetVal; return RetVal; }







Zitieren

Lesezeichen