diff --git a/admin_user.h b/admin_user.h index 073f126..9d7016d 100644 --- a/admin_user.h +++ b/admin_user.h @@ -406,7 +406,7 @@ void tran_control(){ getchar(); break; } - }while(choice != 5); + }while(choice != 3); } @@ -433,17 +433,20 @@ void list_tran(struct transaction db){ printf("5 sort quantity decending\n"); printf("6 sort quantity ascending\n"); printf("7 sort total decending\n"); - printf("8 sort total ascending\n"); - printf("No. Date Time Price Quantity Total\n"); + printf("8 sort total ascending\n"); if(page+1 == total_pages){ print_tran(db,page*page_size,row,map); }else{ print_tran(db,page*page_size,(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); + int current_page_size = page_size+8; + if(page+1 == total_pages){ + current_page_size = row - page*page_size+8; + } + printf("%d next page\n", current_page_size+1); + printf("%d previous page\n", current_page_size+2); + printf("%d set page size\n", current_page_size+3); printf("%d/%d/%d(page size/page number/total)\n",page_size, page+1,total_pages); bool valid = true; @@ -455,16 +458,26 @@ void list_tran(struct transaction db){ if(choice <=8 && choice > 0){ printf("sorting...\n"); map = sortTrans(db,choice); - }else if(choice == page_size+3 && page + 1 < total_pages){ - page++; - }else if(choice == page_size+4 && page > 0){ - page--; - }else if(choice == page_size+5){ + }else if(choice == current_page_size+1 ){ + if(page + 1 < total_pages){ + page++; + }else{ + printf("Already at last page\n"); + valid = false; + } + }else if(choice == current_page_size+2){ + if(page > 0){ + page--; + }else{ + printf("Already at first page\n"); + valid = false; + } + }else if(choice == current_page_size+3){ printf("Enter page size: "); fflush(stdin); scanf("%d", &page_size); total_pages = ceil(row / page_size); - }else if(choice >= 9 && choice < row+9){ + }else if(choice >= 9 && choice <= current_page_size){ if(map == NULL){ db = showTran(db,choice - 9 + page_size*page); }else{ @@ -482,14 +495,25 @@ void list_tran(struct transaction db){ void print_tran(struct transaction db, int cur, int end,struct Map* map){ + printf("%-5s%-15s%-10s%-10s%-10s%-10s%-10s\n","No.","Date","Time","Barcode","Price","Quantity","Total"); for (int i = cur; i < end; i++) { if(map != NULL){ double total = db.row[map[i].key].price * db.row[map[i].key].quantity; - printf("%-4d%-12s%-12s$%-12.1lf%-12d$%-12.1lf\n",i+1,db.row[map[i].key].date,db.row[map[i].key].time,db.row[map[i].key].price,db.row[map[i].key].quantity,total); + //reconstuct date and time and print all transaction info out + char date[11]; + char time[9]; + sprintf(date,"%04d-%02d-%02d",db.row[map[i].key].date.day,db.row[map[i].key].date.month,db.row[map[i].key].date.year); + sprintf(time,"%02d:%02d:%02d",db.row[map[i].key].time.hour,db.row[map[i].key].time.minute,db.row[map[i].key].time.second); + printf("%-5d%-15s%-10s%-10ld%-10.2lf%-10d%-10.2lf\n",i+9-cur,date,time,db.row[map[i].key].barcode,db.row[map[i].key].price,db.row[map[i].key].quantity,total); }else{ double total = db.row[i].price * db.row[i].quantity; - printf("%-4d%-12s%-12s$%-12.1lf%-12d$%-12.1lf\n",i+1,db.row[i].date,db.row[i].time,db.row[i].price,db.row[i].quantity,total); + //reconstuct date and time and print all transaction info out + char date[11]; + char time[9]; + sprintf(date,"%04d-%02d-%02d",db.row[i].date.day,db.row[i].date.month,db.row[i].date.year); + sprintf(time,"%02d:%02d:%02d",db.row[i].time.hour,db.row[i].time.minute,db.row[i].time.second); + printf("%-5d%-15s%-10s%-10ld%-10.2lf%-10d%-10.2lf\n",i+9-cur,date,time,db.row[i].barcode,db.row[i].price,db.row[i].quantity,total); } } } diff --git a/data_file_transaction.txt b/data_file_transaction.txt index 0a0535a..ed97022 100644 --- a/data_file_transaction.txt +++ b/data_file_transaction.txt @@ -64,9 +64,10 @@ 20001 22.9 1 +5155 2022-09-03 22:14:48 32001 15.000000 10 -1122 +5155 \ No newline at end of file diff --git a/normal_user.h b/normal_user.h index 94b8d8b..589a09f 100644 --- a/normal_user.h +++ b/normal_user.h @@ -115,9 +115,13 @@ void list_page(struct inventory db,struct Map* map,int row,struct inventory (*sh } //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); + int current_page_size = 8 + page_size; + if(page + 1 >= total_pages){ + current_page_size = row - page * page_size+8; + } + printf("%d next page\n", current_page_size+1); + printf("%d previous page\n", current_page_size+2); + printf("%d set page size\n", current_page_size+3); printf("%d/%d/%d(page size/page number/total)\n",page_size, page+1,total_pages); //prompt user to select an item @@ -130,16 +134,26 @@ void list_page(struct inventory db,struct Map* map,int row,struct inventory (*sh if(choice <=8 && choice > 0){ printf("sorting...\n"); map = sortItems(db,choice); - }else if(choice == page_size+3 && page + 1 < total_pages){ - page++; - }else if(choice == page_size+4 && page > 0){ - page--; - }else if(choice == page_size+5){ + }else if(choice == current_page_size+1 ){ + if(page + 1 < total_pages){ + page++; + }else{ + printf("Already at last page\n"); + valid = false; + } + }else if(choice == current_page_size+2){ + if(page > 0){ + page--; + }else{ + printf("Already at first page\n"); + valid = false; + } + }else if(choice == current_page_size+3){ printf("Enter page size: "); fflush(stdin); scanf("%d", &page_size); total_pages = ceil(row / page_size); - }else if(choice >= 9 && choice < row+9){ + }else if(choice >= 9 && choice <= current_page_size){ if(map == NULL){ db = (*showitem)(db,choice - 9 + page_size*page); }else{ @@ -328,7 +342,7 @@ struct Map* searchItems(struct inventory db, char* searchstr){ } } int* k_star = malloc(sizeof(int)); - *k_star = --k; + *k_star = --k;//decrement and assign to k star;don't use k-- as it will decrement after the assignment map[0].value = (void*)k_star; map[0].key = -1; return map;