void remove_goods_IO(goods_t * l, int page) { printf("\n\tWhat ware would you like to remove? [1-20] _"); int index = read_int(); int ware = get_element(page, index); goods_t *ptr = &l[ware]; display_goods(l[ware]); printf("\n\tAre you sure you want to delete your ware? [Y]es/[N]o _"); int loop = 1; while(loop) { char c = read_char(); switch(c) { case 'Y': { remove_ware(ptr); return; } case 'N': return; default: printf("Invalid input _"); break; } } }
int main(void) { char input = 1; struct Goods all_wares[100]; int index = 0; struct action undo; while(input != 'Q' && input != 'q') { puts("\n\nWelcome to Warehouse number 42\n" "[A]dd a good\n" "[R]emove a good\n" "[E]dit a good\n" "[P]rint a good\n" "[U]ndo a bad decision\n" "[L]ist everything\n" "[Q]uit this amazing program\n"); input = ask_for_char("Your options: ", "AaRrEePpUuLlQq"); if (input == 'A' || input == 'a') { //ger oss en pekare till en bit av minne med storleken av struct goods struct Goods *temp = malloc(sizeof(struct Goods)); //checkar så att pekaren inte är null dvs pekaren är giltig assert(temp != NULL); add_good(temp, index, all_wares); bool done = false; char choice; while (!done) { print_good(temp); choice = ask_for_char("\nSave, Discard, Edit :", "SsDdEe"); if (choice == 'S' || choice == 's') { undo.type = 1; undo.mark = &all_wares[index]; all_wares[index] = *temp; index++; done = true; } else if (choice == 'D' || choice == 'd') { printf("Discarded\n"); //skarv done = true; } else if (choice == 'E' || choice == 'e') { edit_good(temp, index, all_wares); done = false; } else { printf("\nFaulty code"); } } assert(temp != NULL); free(temp); } else if (input == 'R' || input == 'r') { int choosenGood = choose_listedgood(all_wares, index); if (choosenGood >= 0) { undo.type = 2; undo.mark = &all_wares[choosenGood]; undo.saved = all_wares[choosenGood]; remove_ware(&all_wares[choosenGood]); } } else if (input == 'E' || input == 'e') { int choosenGood = choose_listedgood(all_wares, index); if (choosenGood >= 0) { undo.type = 3; undo.mark = &all_wares[choosenGood]; undo.saved = all_wares[choosenGood]; edit_good(&all_wares[choosenGood], index, all_wares); } } else if (input == 'P' || input == 'p') { int choosenGood = choose_listedgood(all_wares, index); if (choosenGood >= 0) { print_good(&all_wares[choosenGood]); } } else if (input == 'U' || input == 'u') { if (undo.type == 0) { printf("\nNothing to undo"); } // Add else if (undo.type == 1) { remove_ware(undo.mark); undo.type = 0; index--; } // Remove else if (undo.type == 2) { *undo.mark = undo.saved; undo.type = 0; } // Edit else if (undo.type == 3) { *undo.mark = undo.saved; undo.type = 0; } } else if (input == 'L' || input == 'l') { int page = 0; char choice = 1; while (choice != 'C' && choice != 'c') { list_goods(all_wares, index, page); //för att se om det finns mer varor på nästa page, annars är det "end page" if (index >((1+page)*20)) { choice = ask_for_char("\nNext page or Cancel ", "NnCc"); } else { choice = ask_for_char("\nEnd page, please Cancel", "Cc"); } if (choice == 'N' || choice == 'n') { page++; } } } else { printf("Du are Dolig\n"); } } return 0; }