Programmierung Schuldnerliste

T4k3ru

Grünschnabel
Guten Taag ich bins mal wieder und sitze an meiner Hausarbeit..-.-

die aufgabe

Schreiben Sie ein C-Programm, das
• eine Liste von Schuldnern (mit Name, Vorname, geliehenem Betrag und
vereinbartem Rückzahlungstermin) einlesen kann (die Länge der Liste kann
(bis zu einer Obergrenze von 100) vom Benutzer festgelegt werden),
• diese Liste wieder ausgeben kann,
• für einen vom Benutzer eingegebenen Zeitraum die Gesamtsumme der
Rückzahlungen ermitteln kann.
Dabei schreiben Sie jeweils eine eigene Funktion, d.h. eine Funktion zum Einlesen,
eine Funktion zum Ausgeben und eine Funktion zur Ermittlung der Rückzahlung in
einem bestimmten Zeitraum.
Rufen diese Funktionen in Hauptprogramm zum Test in folgender Reihenfolge auf:
• Liste einlesen
• Liste ausgeben
• Rückzahlungssumme für einen bestimmten Zeitraum ermitteln
Eine Menüsteuerung ist nicht erforderlich. Die Verwendung globaler Variablen ist
nicht zulässig.

Verwenden Sie folgende Datenstruktur
struct datum {
int tag;
int monat;
int jahr;
};
struct schuldner{
char name[50];
char vorname[50];
double summe;
struct datum faelligkeit;
};
struct schuldner liste[100]


Beispiel – Für die Eingabe:
Name: Rahn
Vorname: Helmut
Summe: 10
Rückzahlung Jahr: 2010
Rückzahlung Monat: 12
Rückzahlung Tag: 24

Name: Walter
Vorname: Fritz
Summe: 15
Rückzahlung Jahr: 2010
Rückzahlung Monat: 12
Rückzahlung Tag: 31

Name: Turek
Vorname: Toni
Summe: 8
Rückzahlung Jahr: 2011
Rückzahlung Monat: 01
Rückzahlung Tag: 01

Name: Morlock
Vorname: Max
Summe: 20
Rückzahlung Jahr: 2011
Rückzahlung Monat: 01
Rückzahlung Tag: 31

und den Zeitraum 25.12.2010 bis 06.01.2011 soll das Programm die
Rückzahlungssumme 23 berechnen.


und mein code

Code:
#include <stdlib.h>
#include <stdio.h>

struct schuldner {
    char name[60];
    char vorname[60];
    double summe;
    struct datum faelligtkeit

};

struct datum {

    int tag;
    int monat;
    int jahr;

}

struct listeneintrag {
    struct listeneintrag *next;
    struct schuldner inhalt;
    struct datum inhalt;
};

void schuldnerAusgeben (struct schuldner einschuldner) {
    printf("%s", einschuldner.name);
    printf("%s", einschuldner.vorname);
    printf("%d\n", einschuldner.summe);


}

struct schuldner schuldnerEingeben (void) {
    struct schuldner einschuldner;
   
    printf("Name:");fflush(stdin);fgets(einschuldner.name,60,stdin);
    printf("Vorname:");fflush(stdin);fgets(einschuldner.vorname,60,stdin);
    printf("Summe:");fflush(stdin);fgets(einschuldner.summe,100,stdin);
    printf("Nr:");fflush(stdin);scanf("%i",&eineAdresse.nr);
   

    return (einschuldner);
}

struct listeneintrag *adresseInListeEinfuegen (struct adresse neueAdresse, struct listeneintrag *liste) {
   
    struct listeneintrag *neuerListeneintrag;
   
    neuerListeneintrag = malloc(sizeof(struct listeneintrag));
    neuerListeneintrag->next = liste;
    neuerListeneintrag->inhalt = neueAdresse;

    return neuerListeneintrag;
}


void listeAusgeben (struct listeneintrag *listenanfang) {

    struct listeneintrag *aktuellerListeneintrag;

    aktuellerListeneintrag = listenanfang;

    while ( aktuellerListeneintrag != NULL )
    {
        adresseAusgeben(aktuellerListeneintrag->inhalt);
        aktuellerListeneintrag = aktuellerListeneintrag->next;
    }
}


int main (void){

    struct listeneintrag *listenanfang = NULL;
    int anzahlschuldner, indexschuldern;
    struct schuldner einschuldner;
    struct datum eindatum

    printf("Bitte Schuldner eingeben: ?"); scanf("%i",&anzahlschuldner);fflush(stdin);

    for (indexschuldner = 1; indexschuldner <= anzahlschuldner; indexschuldner ++) {
        einschuldner = schuldner eingeben();
        eindatum = datum eingeben ();
        listenanfang = schuldnerInListeEinfuegen(einschuldner, listenanfang);
        istenanfang = datumInListeEinfuegen(eindatum, listenanfang);
    }



    listeAusgeben(listenanfang);

 }
 
Und was genau funktioniert nicht?

Btw, fflush(stdin) sollte man nicht verwenden...

edit: Warum machst du aus den Schuldnern eine Liste, wenn in der Angabe schon ein Array steht?
 
das fehler auftreten und er den code nicht übersetzt..-.-

Code:
struct datum{
  int tag;
  int monat;
  int jahr;

};

struct schuldner {
 char name [50];
 char vorname [50];
 double summe;
 struct datum faelligkeit;

};
struct schuldner liste [100]

diese struktur haben wir vorgegeben bekommen
 
Ich weiß, dass die Struktur vorgegeben ist, aber auch vorgegeben ist
struct schuldner liste [100];

Also warum brauchst du eine struct listeneintrag für eine Liste etc?

Du machst es dir zu kompliziert.
 
Hatte grad nichts zu tun...Das mit der Rückzahlungssumme für einen bestimmten Zeitraum lass ich aber dich machen :D

C++:
#include<stdio.h>
#include<string.h>

#define MAXSCHULDNER 100
#define MAXNAMELEN 50

struct datum
{
	int tag;
	int monat;
	int jahr;
};

struct schuldner
{
	char name[MAXNAMELEN];
	char vorname[MAXNAMELEN];
	double summe;
	struct datum faelligkeit;
};

void stringeinlesen(char *a,int b)
{
	fgets(a,b,stdin);
	b=strlen(a)-1;
	if(b>=0&&a[b]=='\n')a[b]='\0';
	else
	{
		while(fgetc(stdin)!='\n');
	}
}

int einlesen(struct schuldner *liste,int anz)
{
	char str[32];
	while(1)
	{
		printf("(Noch) einen Schuldner eingeben? (j/n)\n");
		stringeinlesen(str,2);
		if(*str!='j')return anz;

		if(anz>=MAXSCHULDNER)
		{
			printf("Schon voll!\n");
			return anz;
		}

		printf("Nachname: ");stringeinlesen(liste[anz].name,MAXNAMELEN);
		printf("Vorname: ");stringeinlesen(liste[anz].vorname,MAXNAMELEN);

		do{
			printf("Summe: ");stringeinlesen(str,32);
		}while(1!=sscanf(str,"%lf",&liste[anz].summe));

		do{
			printf("Faelligkeitsdatum (TT.MM.JJJJ): ");stringeinlesen(str,32);
		}while(3!=sscanf(str,"%d.%d.%d",&liste[anz].faelligkeit.tag,&liste[anz].faelligkeit.monat,&liste[anz].faelligkeit.jahr));

		anz++;
	}
}

void ausgeben(struct schuldner *liste,int anz)
{
	for(int i=0;i<anz;i++)
	{
		puts(liste[i].vorname);
		puts(liste[i].name);
		printf("%f\n%.2d.%.2d.%.4d\n\n",liste[i].summe,liste[i].faelligkeit.tag,liste[i].faelligkeit.monat,liste[i].faelligkeit.jahr);
	}
}

void main()
{
	struct schuldner liste[MAXSCHULDNER];
	int anz=0;
	anz=einlesen(liste,anz);printf("\n\n");
	ausgeben(liste,anz);printf("\n\n");

}

Gruß
 
Wäre es denn nicht sinnvoller die Daten in einer Datei ab zu speichern? Denn so müsste man nicht immer wieder alles vom neuen eingeben. :)
 
Zurück