diff --git a/admin_user.h b/admin_user.h index 1c81ccd..ac6e7fa 100644 --- a/admin_user.h +++ b/admin_user.h @@ -830,6 +830,8 @@ struct user add_user(struct user db){ struct user_row *temprow = realloc(db.row, sizeof(struct user_row)); temp = prompt_item("Please input the username\n>",temp); strcpy(temprow.username,temp); + temp = prompt_item("Please input the id\n>",temp); + temprow.id = atol(temp); temp = prompt_item("Please input the role\n>",temp); strcpy(temprow.role,temp); @@ -845,6 +847,52 @@ struct user add_user(struct user db){ return read_db_user(); } +struct user edit_user(struct user db,int index){ + char temp[100]; + printf("Please input the username(original:%s)\n>",db.row[index].username); + fflush(stdin); + scanf("%[^\n]", temp); + if(strcmp(temp,"") != 0){ + strcpy(db.row[index].username,temp); + } + printf("Please input the id(original:%d)\n>",db.row[index].id); + fflush(stdin); + scanf("%[^\n]", temp); + if(strcmp(temp,"") != 0){ + db.row[index].id = atol(temp); + } + printf("Please input the role(original:%s)\n>",db.row[index].role); + fflush(stdin); + scanf("%[^\n]", temp); + if(strcmp(temp,"") != 0){ + strcpy(db.row[index].role,temp); + } + if(!update_db_user(db)){ + printf("Failed to update user\n"); + exit(1);//exit program to prevent errors + }else{ + printf("User updated\n"); + } + printf("press any key to continue\n"); + fflush(stdin); + getchar(); + + return db; +} +struct user delete_user(struct user db,int index){ + db.row[index].isdeleted = true; + if(!update_db_user(db)){ + printf("Failed to delete user\n"); + exit(1);//exit program to prevent errors + }else{ + printf("User deleted\n"); + } + printf("press any key to continue\n"); + fflush(stdin); + getchar(); + + return read_db_user(); +} void print_user(struct user db, int cur, int end,struct Map* map); struct Map* sortUser(struct user db,int choice); struct user showUser(struct user db,int index); @@ -864,6 +912,8 @@ struct user list_user(struct user db){ printf("2 sort User ascending\n"); printf("3 sort Role decending\n"); printf("4 sort Role ascending\n"); + printf("5 sort ID decending\n"); + printf("6 sort ID ascending\n"); if(page+1==total_pages){ print_user(db,page*page_size,db.db.row_count,map); }else{ @@ -872,12 +922,12 @@ struct user list_user(struct user db){ //page control int current_page_size = page_size+8; if(page+1 == total_pages){ - current_page_size = row - page*page_size+8; + current_page_size = row - page*page_size+6; } 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); - if(choice <=8 && choice > 0){ + if(choice <=6 && choice > 0){ printf("sorting...\n"); map = sortUser(db,choice); }else if(choice == current_page_size+1 ){ @@ -899,11 +949,11 @@ struct user list_user(struct user db){ fflush(stdin); scanf("%d", &page_size); total_pages = ceil(row / page_size); - }else if(choice >= 9 && choice <= current_page_size){ + }else if(choice >= 7 && choice <= current_page_size){ if(map == NULL){ - db = showUser(db,choice - 9 + page_size*page); + db = showUser(db,choice - 7 + page_size*page); }else{ - db = showUser(db,map[choice - 9 + page_size*page].key); + db = showUser(db,map[choice - 7 + page_size*page].key); } }else if(choice != 0){ printf("Invalid choice\n"); @@ -912,15 +962,15 @@ struct user list_user(struct user db){ } void print_user(struct user db, int cur, int end,struct Map* map){ - printf("%-5s%-10s%-10s%-10s\n","No.","Username","Role","IsAdmin"); + printf("%-5s%-10s%-10s%-10s%-10s\n","No.","Username",,"ID""Role","IsAdmin"); for(int i = cur; i < end; i++){ if(map[i].value != NULL){ int index = (int)map[i].value; - bool isadmin = is_admin(db.row[index].role); - printf("%-5d%-10s%-10s%-10c\n",i+5,db.row[index].username,db.row[index].role,isadmin?'Y':'N'); + bool isadmin = is_admin(db.row[i].role); + printf("%-5d%-10s%-10ld%-10s%-10c\n",i+7,db.row[i].username,db.row[i].id,db.row[i].role,isadmin?'Y':'N'); }else{ bool isadmin = is_admin(db.row[(int)map[i].value].role); - printf("%-5s%-10s%-10s%-10c\n",i+5,db.row[(int)map[i].value].username,db.row[(int)map[i].value].role,isadmin?'Y':'N'); + printf("%-5s%-10s%-10ld%-10s%-10c\n",i+7,db.row[(int)map[i].value].username,db.row[(int)map[i].value].id,db.row[(int)map[i].value].role,isadmin?'Y':'N'); } } } @@ -957,4 +1007,38 @@ struct Map* sortUser(struct user db,int choice){ break; } return map; +} + +struct user showUser(struct user db,int index){ + int choice = -1; + do{ + system("cls"); + welcome_message(); + printf("User detail\n"); + printf("%-10s%-10s%-10s\n","Username","Role","ID"); + printf("%-10s%-10s%-10ld\n",db.row[index].username,db.row[index].role,db.row[index].id); + printf("0 exit\n"); + printf("1 edit user\n"); + printf("2 delete user\n"); + printf("Enter choice: "); + fflush(stdin); + scanf("%d", &choice); + switch (choice){ + case 0: + break; + case 1: + db = edit_user(db,index); + break; + case 2: + db = delete_user(db,index); + break; + default: + printf("Invalid choice\n"); + printf("press any key to continue\n"); + fflush(stdin); + getchar(); + break; + } + }while(choice != 0); + return db; } \ No newline at end of file