//include std lib if they havent been included #ifndef STD_LIB_H #define STD_LIB_H #include #include #include #include #include #endif #ifndef MENU_H #define MENU_H #include "menu.h" #endif //MENU_H #ifndef SORT_H #define SORT_H #include "sorting.h" #endif // !SORT_H #define PAGE_SIZE 20 //for sort list void list_items(); int normal_menu_user_choices(); bool normal_menu(){ system("cls"); welcome_message(); //the selection menu int choice = normal_menu_user_choices(); switch (choice) { case 1://List items list_items(); break; case 2://Search item // search_item(); break; case 3://scan barcode // scan_barcode(); break; case 4://Exit return false; break; default://invalid input printf("Invalid choice\n"); return false; break; } return true; } int normal_menu_user_choices(){ int choice; printf("You can buy items inside the 2 option below\n"); printf("1. List items\n"); printf("2. Search item\n"); printf("3. Scan Barcodes\n"); printf("4. Exit\n"); printf("Enter your choice: "); scanf("%d", &choice); return choice; } //list items void show_item(struct inventory db,int index); void print_page(struct inventory db, int cur, int end,struct Map* map); struct Map* sortItems(struct inventory db, int sort); void list_items(){ system("cls"); welcome_message(); //get the list of items from the database //print the list of items //prompt user to select an item //if user selects an item, display the item's details int choice = -1; int page = 0; int page_size = PAGE_SIZE; struct inventory db = read_db_invt(); int total_pages = ceil(db.db.row_count / page_size); struct Map* map = NULL; do{ //ooptions system("cls"); printf("0 exit\n"); printf("1 sort name decending\n"); printf("2 sort name ascending\n"); printf("3 sort price decending\n"); printf("4 sort price ascending\n"); printf("5 sort band decending\n"); printf("6 sort band ascending\n"); printf("7 sort category decending\n"); printf("8 sort category ascending\n"); printf("List of items:\n"); //print items if(map == NULL){ print_page(db, page * page_size, (page + 1== total_pages)?db.db.row_count:(page+1) * page_size,(struct Map*)NULL); }else{//sorted) print_page(db, page * page_size, (page + 1== total_pages)?db.db.row_count:(page+1) * page_size,map); } //page control printf("%d next page\n", page_size+3); printf("%d previous page\n", page_size+4); printf("%d set page size\n", page_size+5); printf("%D/%d/%d(page size/page number/total)\n",page_size, page+1,total_pages); //prompt user to select an item bool valid = true; do{ printf("Enter your choice: "); scanf("%d", &choice); if(choice <=8 && choice > 0){ printf("sorting...\n"); map = sortItems(db,choice); }else if(choice == page_size+3){ page++; }else if(choice == page_size+4 && page > 0){ page--; }else if(choice == page_size+5){ printf("Enter page size: "); scanf("%d", &page_size); total_pages = ceil(db.db.row_count / page_size); }else if(choice >= 0 && choice < db.db.row_count){ show_item(db,choice-9 + page_size*page); }else{ printf("Invalid choice\n"); valid = false; } }while(!valid); }while(choice != 0); } struct Map* sortItems(struct inventory db, int sort){ struct Map *map = malloc(sizeof(struct Map) * db.db.row_count); for (int i = 0; i < db.db.row_count; i++){ map[i].key = i; switch(sort){ case 1: case 2: map[i].value = (int)db.row[i].product; break; case 3: case 4: map[i].value = (int)db.row[i].price*100;//presume there is no price contain 0.001 break; case 5: case 6: map[i].value = (int)db.row[i].band; break; case 7: case 8: map[i].value = (int)db.row[i].category; break; } } switch (sort){ case 1: case 3: case 5: case 7: qsort(map, db.db.row_count, sizeof(struct Map), compare_decending); break; case 2: case 4: case 6: case 8: qsort(map, db.db.row_count, sizeof(struct Map), compare_ascending); break; } return map; } void print_page(struct inventory db, int cur, int end,struct Map* map){ for (int i = cur; i < end; i++) { if(map != NULL){ printf("%d. %s\n", i + 1, db.row[map[i].key].product); } else{ printf("item%d. %s\n", i + 3, db.row[i].product); } } } void show_item(struct inventory db,int index){ system("cls"); printf("Product: %s\n", db.row[index].product); printf("Catergory: %s\n", db.row[index].category); printf("Band: %d\n", db.row[index].band); printf("Price: $%lf\n", db.row[index].price); printf("Stock: %d\n", db.row[index].stock); printf("Barcode: %ld\n",db.row[index].barcode); return; } //