some fix and function fpr admin_user

This commit is contained in:
stmctommyau 2022-10-08 10:05:26 +08:00
parent aa6c952185
commit 58b918c9bb

View File

@ -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;
}