#include #include #include typedef struct litem_t { char *orderno; char *name; float price; int count; } litem; typedef struct llist_t { struct litem_t *item; struct llist_t *next; } llist; litem *newItem( char *orderno, char *name, float price,int count){ litem *item = (litem *) calloc(1,sizeof(litem)); item->orderno = strdup(orderno); item->name = strdup(name); item->price = price; item->count = count; return item; } void update_item(litem *item,char *orderno, char *name, float price,int count){ item->count+=count; } llist *addItem(llist * alist, char *orderno, char *name, float price, int count, float sum) { if (alist == NULL ) { alist = (llist *) calloc(1,sizeof(llist)); alist->next = NULL; alist->item = newItem(orderno,name,price,count); return alist; //start der Liste } llist *current=alist; //suchen ob item schon in der liste: while (current->next != NULL){ if (0==strcmp(current->item->orderno,orderno)){ update_item(current->item,orderno,name,price,count); return alist; } current=current->next; } if (0==strcmp(current->item->orderno,orderno)){ update_item(current->item,orderno,name,price,count); return alist; } //nicht gefunden, also neu anhaengen: current->next = (llist *) calloc(1,sizeof(llist)); current->next->next = NULL; current->next->item = newItem(orderno,name,price,count); return alist; } void dumpList(llist * alist) { printf("\n%18s %-30s %8s %3s %8s\n", "OrderNo.","Name","EP","#","GP"); while (alist != NULL) { printf("%18s %40s %8.2f %03i %8.2f\n", alist->item->orderno, alist->item->name, alist->item->price, alist->item->count, alist->item->count * alist->item->price); alist = alist->next; } printf("\n"); } void getSumAndCounter(llist * alist, float *sum, int *count) { while (alist != NULL) { *sum += (alist->item->count * alist->item->price); *count += alist->item->count; alist = alist->next; } } #define BUFSIZE 1024 char* getstrdelim(char delim, FILE *pFile){ char* buf = calloc(BUFSIZE,sizeof(char)); size_t pos=0; while (pos