diff --git a/Workbook/a.out b/Workbook/a.out index 034e547..93f88f0 100755 Binary files a/Workbook/a.out and b/Workbook/a.out differ diff --git a/Workbook/test.c b/Workbook/test.c index 03ff66b..9be4067 100644 --- a/Workbook/test.c +++ b/Workbook/test.c @@ -1,13 +1,242 @@ +#include +#include #include +#include +#include -int main() { - int a = 5; - int b = 5; - int c = a++; - int d = ++b; - printf("A: %d\n", a); - printf("B: %d\n", b); - printf("C: %d\n", c); - printf("D: %d\n", d); +#define ERRORRETURN 10787253 +#define ARRSIZE 4096 +#define EXITVAL 15326 +#define ENOCUSTOMER 692137 +#define ENOPRODUCT 691337 + +struct Product { + int id; + char* name; + double price; + int amount; +}; + +struct Customer { + char* name; + int id; +}; + +int find_first_free_customer(struct Customer* array[]) { + for (int i = 0; i < ARRSIZE; i++) { + if (array[i] == NULL) { + return i; + } + } + return -1; +} + +int find_first_free_product(struct Product* array[]) { + for (int i = 0; i < ARRSIZE; i++) { + if (array[i] == NULL) { + return i; + } + } + return -1; +} + +int find_product_index(int id, struct Product* array[]) { + for (int i = 0; i < ARRSIZE; i++) { + if (array[i] != NULL && array[i]->id == id) { + return i; + } + } + errno = ENOPRODUCT; + printf("Mit der eingegeben Produktnummer konnte kein Produkt gefunden werden.\n"); + return ERRORRETURN; +} + +int find_customer_index(int id, struct Customer* array[]) { + for (int i = 0; i < ARRSIZE; i++) { + if (array[i] != NULL && array[i]->id == id) { + return i; + } + } + errno = ENOCUSTOMER; + printf("Mit der eingegeben Kundennummer konnte kein Kunde gefunden werden.\n"); + return ERRORRETURN; +} + +int add_product(struct Product* products[]) { + int id, amount; + char name[100]; + double price; + + printf("**********************\n"); + printf("* WWS Produkteingabe *\n"); + printf("**********************\n"); + printf("Bitte geben Sie eine Produktnummer ein: "); + scanf("%d", &id); + printf("Bitte geben Sie einen Produktnamen ein: "); + scanf("%99s", name); + printf("Bitte geben Sie einen Preis für das Produkt ein: "); + scanf("%lf", &price); + printf("Bitte geben Sie die aktuelle Anzahl im Inventar: "); + scanf("%d", &amount); + + struct Product* new_product = (struct Product*)malloc(sizeof(struct Product)); + if (!new_product) { + printf("Fehler beim Speicher zuweisen."); + errno = ENOMEM; + return ERRORRETURN; + } + + new_product->id = id; + new_product->name = strdup(name); // Duplicate string to avoid issues. + new_product->price = price; + new_product->amount = amount; + + int index = find_first_free_product(products); + if (index == -1) { + free(new_product); + printf("Kein freier Platz für Produkte."); + errno = ENOMEM; + return ERRORRETURN; + } + + products[index] = new_product; return 0; } + +int add_customer(struct Customer* customers[]) { + int id; + char name[100]; + + printf("*********************\n"); + printf("* WWS Kundeneingabe *\n"); + printf("*********************\n"); + printf("Bitte geben Sie eine Kundennummer ein: "); + scanf("%d", &id); + printf("Bitte geben Sie einen Kundennamen ein: "); + scanf("%99s", name); + + struct Customer* new_customer = (struct Customer*)malloc(sizeof(struct Customer)); + if (!new_customer) { + printf("Fehler beim Speicher zuweisen."); + errno = ENOMEM; + return ERRORRETURN; + } + + new_customer->id = id; + new_customer->name = strdup(name); // Duplicate string to avoid issues. + + int index = find_first_free_customer(customers); + if (index == -1) { + free(new_customer); + printf("Kein freier Platz für Kunden."); + errno = ENOMEM; + return ERRORRETURN; + } + + customers[index] = new_customer; + return 0; +} + +int print_product(struct Product* products[]) { + int id; + + printf("**********************\n"); + printf("* WWS Produktausgabe *\n"); + printf("**********************\n"); + printf("Bitte geben Sie die gesuchte Produktnummer ein: "); + scanf("%d", &id); + + int index = find_product_index(id, products); + if (index == ERRORRETURN) { + return ERRORRETURN; + } + + struct Product* product = products[index]; + printf("======================\n"); + printf("Produktnummer: %d\n", product->id); + printf("Name: %s\n", product->name); + printf("Einzelpreis: %.2lf\n", product->price); + printf("Anzahl: %d\n", product->amount); + printf("Gesamtpreis: %.2lf\n", product->price * product->amount); + + return 0; +} + +int print_customer(struct Customer* customers[]) { + int id; + + printf("*********************\n"); + printf("* WWS Kundenausgabe *\n"); + printf("*********************\n"); + printf("Bitte geben Sie die gesuchte Kundennummer ein: "); + scanf("%d", &id); + + int index = find_customer_index(id, customers); + if (index == ERRORRETURN) { + return ERRORRETURN; + } + + struct Customer* customer = customers[index]; + printf("=====================\n"); + printf("Kundennummer: %d\n", customer->id); + printf("Name: %s\n", customer->name); + + return 0; +} + +int menu(struct Customer* customers[], struct Product* products[]) { + int input; + + printf("**********************\n"); + printf("* TH Warenwirtschaft *\n"); + printf("**********************\n"); + printf("Optionen:\n"); + printf("1. Produkteingabe\n"); + printf("2. Kundeneingabe\n"); + printf("3. Produktausgabe\n"); + printf("4. Kundenausgabe\n"); + printf("5. Verlassen\n"); + printf("Eingabe: "); + scanf("%d", &input); + + errno = 0; + + switch (input) { + case 1: + add_product(products); + if (errno != 0) {return ERRORRETURN;} + break; + case 2: + add_customer(customers); + if (errno != 0) {return ERRORRETURN;} + break; + case 3: + print_product(products); + if (errno != 0) {return ERRORRETURN;} + break; + case 4: + print_customer(customers); + if (errno != 0) {return ERRORRETURN;} + break; + case 5: + return EXITVAL; + default: + printf("Ungültige Eingabe. Bitte erneut versuchen.\n"); + break; + } + + return 0; +} + +int main() { + errno = 0; + int menuval = 0; + struct Customer* customers[ARRSIZE] = {NULL}; + struct Product* products[ARRSIZE] = {NULL}; + + while (menuval == 0) { + menuval = menu(customers, products); + } + + return errno; +}