Programm zur Verwaltung von Matrikelnummern



  • Hallo ihr Lieben,

    ich bin noch ganz neu hier und gerade etwas verzweifelt...
    Ich bin im ersten Semester meines Studiums und kurz nach beginn leider chronisch erkrankt, daher hänge ich momentan noch etwas hinterher, was den Stoff angeht, da ich mehr Zeit in Wartezimmern und Kliniken verbringe, als mir lieb ist.

    Bis jetzt kam ich ganz gut klar, allerdings hatten wir jetzt zur Aufgabe ein Programm zu schreiben, welches Matrikelnummern verwalten, d.h. in welches man Matrikelnummern einfügen, suchen, anzeigen und auch wieder löschen kann. Ich habe jetzt 3 Tage versucht den Fehler im Code zu finden, allerdings finde ich ihn, trotz eigener Mitschriften, lesen der Vorlesungsfolien und schrittweises debuggen nicht und hoffe jetzt auf fähigere Augen.

    Es wäre sehr lieb, wenn mir jemand einen Hinweis oder einen kleinen Tipp geben würde, was ich ändern kann. Das Programm lässt sich compilieren, allerdings zeigt es mir hinzugefügte Matrikelnummern nicht an, was es mir schwer macht, das gesamte Programm auf funktionalität zu testen.
    Mein Gehirn raucht und ich weiß einfach nicht, was ich an der Funktion "hinzufuegen" noch ändern könnte 😞

    Ich danke euch einfach schonmal und hoffe, dass es überhaupt okay ist, hier einfach so nach Hilfe zu betteln und der Code nicht zu lang ist...Falls doch, bitte nicht böse sein!

    Liebe Grüße 🙂

    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX 10
    
    int anzeigen(int nummern[], int i, int zaehler) {
    	for (i = 0; i < zaehler; i++) {
    		printf_s("%d\n", nummern[i]);
    	}
    	return nummern[i];
    }
    
    int suchen(int nummer[], int i, int zaehler) {
    	int suche = 0, nee=0;
    	printf_s("Bitte geben Sie die zu suchende Matrikelnummer ein\n");
    	scanf_s("%d", &suche);
    	for (i = 0; i < zaehler; i++) {
    		if (suche == nummer[i]) {
    			printf_s("Die Nummer befindet sich an Stelle %d\n", i);
    			nee = 1;
    		}
    
    	}
    		if (nee != 1) {
    			printf_s("Die Matrikelnummer konnte nicht gefunden werden.\n");
    
    		}
    	return 0;
    
    }
    
    int hinzufuegen(int nummer[], int i, int zaehler) {
    	int engb=0;
    
    	if (zaehler >= MAX) {
    		printf_s("Die maximale Anzahl an Eingaben ist erreicht. Die neu eingegebene Nummer wurde nicht gespeichert\n");
    		return zaehler;
    	}
    	printf_s("Bitte geben Sie eine Matrikelnummer ein, die dem Verzeichnis hinzugefuegt werden soll\n");
    	scanf_s("%d", &engb);
    
    	for (i = 0; i < zaehler; i++) {
    
    		if (nummer[i] == engb) {
    
    			printf_s("Matrikelnummer ist bereits im Verzeichnis\n");
    			return zaehler;
    		}
    
    	}
    	nummer[zaehler] == engb;
    	zaehler++;
    
    	return zaehler;
    
    	}
    
    int loeschen(int nummer[], int i, int zaehler) {
    	int loesch = 0;
    
    	printf_s("Geben Sie den zu loeschenden Index ein\n");
    	scanf_s("%d", &loesch);
    
    	for (i = loesch; i < zaehler; i++){
    		nummer[i] = nummer[i + 1];
    
    	}
    	if (nummer[loesch] != 0) {
    		nummer[loesch] = 0;
    		zaehler--;
    	}
    	return zaehler;
    
    }
    int main() {
    
    	int matrikel[MAX + 1] = { 0 };
    	int az = 0;
    	int eingabe;
    	int zaehler=0;
    
    	printf_s("Was möchten Sie tun?\n");
    	printf_s("1 fuer Matrikelnummern anzeigen\n");
    	printf_s("2 fuer Matrikelnummern suchen\n");
    	printf_s("3 fuer Matrikelnummern hinzufuegen\n");
    	printf_s("4 fuer Matrikelnummer loeschen\n");
    	printf_s("5 fuer Abbruch\n");
    
    	do {
    		printf_s("Auswahl ");
    
    		scanf_s("%d", &eingabe);
    
    		switch (eingabe)
    		{
    		case 1:
    			anzeigen(matrikel, az, zaehler);
    			break;
    		case 2:
    			suchen(matrikel, az, zaehler);
    			break;
    		case 3:
    			hinzufuegen(matrikel, az, zaehler);
    
    			break;
    		case 4:
    			loeschen(matrikel, az, zaehler);
    			break;
    
    		default:
    			break;
    		}
    	}
    
    	while (eingabe != 5);
    	system("PAUSE");
    }
    


  • - verwende printf/scanf statt des printf_s/scanf_s Mülls
    - system PAUSE ist Müll
    - Zeile 52 ist fehlerhaft
    - int i ist bei allen Funktionen unnütz, solche Hilfsvariablen gehören so weit wie möglich lokal definiert (also bloß in die Schleife, wo sie gebraucht werden)
    - hinzufuegen+loeschen ändern zaehler aber das bekommt dein zaehler in main() nicht mit, da du den Returnwert der beiden Funktionen mit dem geänderten zaehler beim Funktionsaufruf in main() nicht auswertest


Log in to reply