*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;
}
Lesezeichen