Projekt: Artikelverwaltung Seite 1 von 5 Entwickeln Sie ein C/C++-Programm für die Verwaltung einer Artikeldatei gemäß folgender Vorgaben! Legen Sie global einen benutzerdefinierten Datentyp artikel an: struct artikel int nr; char name[30]; int anzahl; uble preis; ; //Artikelnummer //Artikelbezeichnung //Artikelanzahl //Artikelpreis Im Hauptprogramm (main()-funktion) werden folgende Datentypen vereinbart:... artikel teil[100]; //Bis zu 100 Datensätze int anzahl; //Anzahl der tatsächlich eingegebenen bzw. gelesenen Datensätze... Die Bedienung des Programms erfolgt menügesteuert. Nach Start des Programms soll folgendes Auswahlmenü erscheinen: '1'=Daten eingeben '2'=Daten ausgeben '3'=Daten speichern '4'=Daten laden '5'=Daten aendern '6'=Daten loeschen '7'=Daten sortieren '8'=Daten suchen 'ESC'=Beenden Bitte waehlen... Die Funktionalität des Programms erfolgt ausschließlich durch Aufrufen von Funktionen in Abhängigkeit von dem gewählten Menüpunkt. Für die einzelnen Menüpunkte werden folgende Funktionen deklariert: int eingeben(artikel*, int); Rückgabewert: Anzahl der eingegebenen Datensätze. Die Funktion kann zur Laufzeit des Programms öfter aufgerufen werden. Die Anzahl der Datensätze (Variable anzahl des Hauptprogramms) wird bei jedem Aufruf um die Anzahl der eingegebenen Datensätze erhöht. Die Artikelnummer muss eindeutig sein, sonst erfolgt eine Fehlermeldung. void ausgeben(artikel*, int);. Die Funktion gibt alle Datensätze formatiert auf den Bildschirm aus. Artikelverwaltung.cx - 1 -
Projekt: Artikelverwaltung Seite 2 von 5 void speichern(artikel*, int);. Die Funktion speichert die Datei unter einem frei wählbaren Namen. int laden(artikel*); Übergabeparameter: Zeiger auf den Beginn des Datenfeldes Rückgabewert: Anzahl der gelesenen Datensätze. Die Funktion liest die Datei (sofern vorhanden) in das Datenfeld teil[100] ein und legt die Anzahl der gelesenen Datensätze in der Variablen anzahl ab! void aendern(artikel*, int); Die Funktion erwartet als Eingabe die Artikelnummer des Datensatzes. Dieser Datensatz wird dann angezeigt und kann neu eingegeben werden. Liegt der Index außerhalb des gültigen Bereiches oder ist die neue Artikelnummer bereits vorhanden soll eine Fehlermeldung erfolgen. int loeschen(artikel*, int); Rückgabewert: Anzahl der Datensätze, um 1 niedriger als die Anzahl der übergebenen Datensätze, wenn der Datensatz gelöscht wurde. Die Funktion erwartet die Eingabe der Artikelnummer. Dieser Datensatz wird aus dem Datenfeld entfernt und von den folgenden Datensätzen überschrieben, so dass sich die Anzahl der Datensätze um 1 verringert. void sortieren(artikel*, int); Die Funktion sortiert wahlweise nach Artikelnummer oder Artikelname. Das Datenfeld wird nur in sich sortiert. Die Ausgabe der sortierten Datei erfolgt mit dem Menüpunkt 'ausgeben'. void suchen(artikel*, int); Die Funktion erwartet wahlweise zur Eingabe eine Artikelnummer oder einen Artikelnamen. Danach werden alle Datensätze angezeigt, die dieser Eingabe (genau) entsprechen. (Ergänzung: Es sollen alle Artikel ausgegeben werden, welche auch nur Teile des eingegebenen Artikelnamens enthalten) Zu allen Funktionen ist ein Struktogramm zu entwickeln! Artikelverwaltung.cx - 2 -
Projekt: Artikelverwaltung Seite 3 von 5 Die folgende Vorgabe des Hauptprogramms und die Vereinbarungen der Funktionen sind verbindlich und dürfen nicht geändert werden! int main() - Artikelverwaltung Deklaration artikel teil[100] int i=0 (Artikelanzahl) char w ahl system("cls") Menü zeigen: '1'=Daten eingeben *2*=Daten ausgeben '3'=Daten speichern '4'=Daten laden '5'=Daten aendern '6'=Daten loeschen '7'=Daten sortieren '8'=Daten suchen 'ESC'=Beenden Eingabe w ahl w ahl? '1' '2' '3'... 0x1b Sonstige i=eingeben(...) ausgeben(...) speichern(...)... Fehlermeldung w iederhole, solange w ahl!= 0x1b return(0) Artikelverwaltung.cx - 3 -
Projekt: Artikelverwaltung Seite 4 von 5 #include <iostream> #include<iomanip> #include<conio.h> using namespace std; struct artikel //Der neue Typ ist artikel' // artikel ist global in allen folgenden Funktionen gültig int nr; //'nr' ist vom Typ integer char name[24]; //'name' ist ein string mit maximal 24 Stellen int anzahl; //'anzahl' ist vom Typ integer uble preis; //'preis' ist vom Typ uble ; //Achtung: struct-anweisung unbedingt mit ;' abschließen /***********Prüfen ob 'zahl' ein Int-Wert ist **************/ /************** n = max.stellenzahl *****************/ int IntTest(char* zahl, int n) int i = 0, m = 0; if (strlen(zahl) > n) return 0; else while (zahl[i]!= 0x00) if (zahl[i] < 0x30 zahl[i]>0x39) return 0; return 1; /***********Prüfen ob 'zahl' ein Double-Wert ist **************/ /************** n = max.stellenzahl *****************/ int DoubleTest(char* zahl, int n) int i = 0, m = 0; if (strlen(zahl) > n) return 0; else while(zahl[i]!=0x00) if (zahl[i] == 0x2e) m++; if (m > 1) return 0; else if (zahl[i] < 0x30 zahl[i]>0x39) return 0; return 1; Artikelverwaltung.cx - 4 -
Projekt: Artikelverwaltung Seite 5 von 5 int main() artikel teil[100], dummy; int i = 0, anzahl = 0; char zahl[24]; /************** Eingabe der Datensätze *********************/ cout << endl; cout << i + 1 << ". Datensatz eingeben \n"; cout << "\nnummer: "; if (!IntTest(zahl, 4)) cout << "\nfehler!\n"; dummy.nr = atoi(zahl); //String in int wandeln cout << "\nname: "; cin.ignore(); //Ignoriert das erste Zeichen im Eingabepuffer (=CR von voriger Eingabe) cin.getline(dummy.name, sizeof(dummy.name)); cout << "\nanzahl: "; if (!IntTest(zahl, 4)) cout << "\nfehler!\n"; dummy.anzahl = atoi(zahl); cout << "\npreis: "; if (!DoubleTest(zahl, 8)) cout << "\nfehler!\n"; dummy.preis = atof(zahl); //String in uble wandeln teil[i] = dummy; anzahl++; cout << "\n\n'esc' = Ende... " << endl; while (_getch()!= 0x1b); /**************** Formatierte Ausgabe ***********************/ cout << setw(3) << "Nr" << setw(24) << "Name" << setw(15) << "Anzahl" << setw(12) << "Preis" << endl; for (i = 0; i < anzahl; i++) cout << setw(4) << teil[i].nr; cout << setw(30) << teil[i].name; cout << setw(7) << teil[i].anzahl; cout << setw(13) << setiosflags(ios::fixed) << setprecision(2) << teil[i].preis << endl; _getch(); return(0); Artikelverwaltung.cx - 5 -