Telefonbuch programmieren, brauche dringend Hilfe!
-
Yakup
wenn du das laufen hast, prüfe
das mit Postleitzahlen größer 33000
und Telefonnummern größer 70000Ob da Fehler auftreten ist abhängig davon wie euer Compiler
int umsetzt
-
Hmm, das ist eigentlich nicht unser Problem^^... Es geht darum, wenn wir ein paar Daten eingegeben haben, diese wieder zu löschen. Einzeln und alles zusammen!
-
Hab C nie in der Schule gehabt
Das mit dem Löschen hört sich nach Speicherreservierung,
Stichwort malloc ... an.MfG f.-th.
-
Du hast Recht...
Naja mal überlegen, wo man nun Malloc einsetzt
C haben wir seid 3 Monaten als nebenfach mit 2SWS ist nicht gerade viel...
-
Um alles zu löschen müssen wir das ganze Array löschen, habe dazu folgende Grundfunktion gefunden:
void loeschen (int a[], int *anzahl, int index) { int anz = (*anzahl); int i; if (index < anz) { for (i = index + 1; i < anz; i++) a[i-1] = a[i]; (*anzahl)--; } }
-
Das habe ich auch gefunden...
Soweit ich das verstanden habe, ging es da darum, dass du z.B. 20 Arrays hast und du bei A[14] was löschst und die anderen Arrays ab A[14] wieder runterrutschen.
Also das wäre um einzelne Arrays zu löschen, denke ich...
-
Yakup schrieb:
Also das wäre um einzelne Arrays zu löschen, denke ich...
Die Bestandteile eines Arrays nennen sich Elemente. Das Array ist die Sammlung dieser Elemente.
-
Danke für die Info. Aber zu unserem richtigen Problem kannst du nichts sagen oder?
-
So hier meine Version nehmt euch was ihr braucht. Ich hoffe ich hab nix vergessen und keine groben Fehler drin.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define TBSIZE 100 // Max Anzahl an Einträgen typedef struct { char Name[50]; // Name char Vorname[50]; // Vorname int PLZ; // Postleitzahl int Telnummer; // Telefonnummer int Vorwahl; // Vorwahl int Tag; // GeburtsTag int Monat; // GeburtsMonat int Jahr; // GeburtsJahr } TEL; void EintragHinzufuegen(TEL NeuerEintrag, TEL Telefonbuch[], int Anzahl) { strcpy(Telefonbuch[Anzahl].Name, NeuerEintrag.Name); strcpy(Telefonbuch[Anzahl].Vorname, NeuerEintrag.Vorname); Telefonbuch[Anzahl].PLZ = NeuerEintrag.PLZ; Telefonbuch[Anzahl].Telnummer = NeuerEintrag.Telnummer; Telefonbuch[Anzahl].Vorwahl = NeuerEintrag.Vorwahl; Telefonbuch[Anzahl].Tag = NeuerEintrag.Tag; Telefonbuch[Anzahl].Monat = NeuerEintrag.Monat; Telefonbuch[Anzahl].Jahr = NeuerEintrag.Jahr; } void EintragEingeben(TEL Telefonbuch[], int Anzahl) { TEL a; system("cls"); printf("+===================================+\n"); printf("| Eintrag hinzufuegen |\n"); printf("+===================================+\n"); printf("Name : "); scanf("%s", &a.Name); printf("Vorname : "); scanf("%s", &a.Vorname); printf("PLZ : "); scanf("%d", &a.PLZ); printf("Telnummer : "); scanf("%d", &a.Telnummer); printf("Vorwahl : "); scanf("%d", &a.Vorwahl); printf("Tag : "); scanf("%d", &a.Tag); printf("Monat : "); scanf("%d", &a.Monat); printf("Jahr : "); scanf("%d", &a.Jahr); EintragHinzufuegen(a, Telefonbuch, Anzahl); } void ZeigeEintrag(TEL Eintrag) { printf("Name : %s\n", Eintrag.Name); printf("Vorname : %s\n", Eintrag.Vorname); printf("PLZ : %d\n", Eintrag.PLZ); printf("Telnummer : %d\n", Eintrag.Telnummer); printf("Vorwahl : %d\n", Eintrag.Vorwahl); printf("Tag : %d\n", Eintrag.Tag); printf("Monat : %d\n", Eintrag.Monat); printf("Jahr : %d\n", Eintrag.Jahr); } void ZeigeTelefonbuch(TEL Telefonbuch[], int Anzahl) { int i; system("cls"); printf("+===================================+\n"); printf("| Eintraege anzeigen |\n"); printf("+===================================+\n"); if(Anzahl == 0) { printf("\nKeine Eintraege vorhanden!\n"); } else { for(i = 0; i < Anzahl; i++) { printf("\nEintrag-Nummer: %d\n", i + 1); ZeigeEintrag(Telefonbuch[i]); } } getch(); } void VertauscheEintraege(TEL *a, TEL *b) { TEL temp; memcpy(&temp, a, sizeof(TEL)); memcpy(a, b, sizeof(TEL)); memcpy(b, &temp, sizeof(TEL)); } void SortiereTelefonbuch(TEL Telefonbuch[], int Anzahl) { int i, j; for(i = 0; i < Anzahl; i++) { for(j = 0; j < Anzahl - i - 1; j++) { if(strcmp(Telefonbuch[j].Name, Telefonbuch[j+1].Name) > 0) { VertauscheEintraege(&Telefonbuch[j], &Telefonbuch[j+1]); } } } } void EintragLoeschen(TEL Telefonbuch[], int Anzahl) { char Name[50]; int i, j; system("cls"); printf("+===================================+\n"); printf("| Eintrag loeschen |\n"); printf("+===================================+\n"); printf("Name: "); scanf("%s", &Name); for(i = 0; i < Anzahl; i++) { if(strcmp(Telefonbuch[i].Name, Name) == 0) { printf("\nEintrag gefunden:\n\n"); ZeigeEintrag(Telefonbuch[i]); for(j = i; j < Anzahl; j++) { VertauscheEintraege(&Telefonbuch[j], &Telefonbuch[j+1]); } printf("\nEintrag geloescht!"); getch(); return; } } printf("\nEintrag nicht gefunden!"); getch(); } int main() { TEL Telefonbuch[100]; int Anzahl = 0; int Aktion = 0; int Laeuft = 1; // Fügt Max Mustermann dem Telefonbuch hinzu TEL a = {"Mustermann", "Max", 12345, 0, 0, 19, 02, 1987}; EintragHinzufuegen(a, Telefonbuch, Anzahl); Anzahl++; while(Laeuft) { system("cls"); printf("+===================================+\n"); printf("| Telefonbuch |\n"); printf("+===================================+\n"); printf("| [1] Eintrag hinzufuegen |\n"); printf("| [2] Telefonbuch anzeigen |\n"); printf("| [3] Eintraege sortieren |\n"); printf("| [4] Eintrag loeschen |\n"); printf("| [5] Alle Eintraege loeschen |\n"); printf("| [6] Programm beenden |\n"); printf("+-----------------------------------+\n\n"); Aktion = 0; while(Aktion < 1 || Aktion > 6) { printf("Bitte waehlen Sie eine Aktion (1-6): "); scanf("%d", &Aktion); } switch(Aktion) { case 1: // EDIT: TODO testen ob ANzahl < MAXEINTRAEGE - 1 ist EintragEingeben(Telefonbuch, Anzahl); Anzahl++; break; case 2: ZeigeTelefonbuch(Telefonbuch, Anzahl); break; case 3: SortiereTelefonbuch(Telefonbuch, Anzahl); break; case 4: // EDIT: TODO testen ob ANzahl > 0 ist // TODO EintragLoeschen muß wert zurück geben ob ein // Eintrag geloescht wurde! und erst dann anzahl-- EintragLoeschen(Telefonbuch, Anzahl); anzahl--; break; case 5: // EDIT: TODO testen ob ANzahl > 0 ist Anzahl = 0; break; case 6: Laeuft = 0; break; } } return 0; }
-
Wow, das sieht sogar sehr schön aus
Vielen Dank! Ich habs gerade getestet... es ist Fehlerfrei!
-
Nein ... Ich hab ein paar edits reingehauen ... ihr müßt jeweils über Anzahl testen, ob die Operationen erlaubt sind.
EDIT: die bessere Version http://pastie.org/389991
-
vielen Dank.. das läuft einwandfrei
-
Seid ihr alle 3 Leute die gleiche Person?! Ihr solltet das Programm vllt jeder ein wenig anders machen, da das sonst schon arg auffällt.
Nur noch zur Info. Nur die verbesserte Version auf pastie löst die Aufgabe so wie sie gestellt wurde. Es wurde verlangt, daß die Anzahl der Einträge in den einzelnen Funktionen geändert wird und nicht in der main. Die erste Version macht das nicht. Nur die verbesserte Version testet und erfüllt die Aufgabe so wie sie gestellt wurde.
-
Das spielt keine Rolle. Hauptsache das Programm laeuft und wir können erklären, wie was funktioniert.